C frage zu for bedingung

rene40

Newbie
Registriert
Mai 2014
Beiträge
5
Hallo, als Anfänger in C habe ich ein kleines verständnis Problem.
Folgendes Programm soll alle Zahlen innerhalb einer eingegebenen Zahl addieren und das als Ergebnis ausgeben.
Ich verstehe alles bis auf die Bedingung Grenze+1 in der for Schleife. Grenze ist ja die eingegebene Zahl die bearbeitet werden soll. Warum bekommt die da noch ein +1, bzw. was macht das +1.
Ich habe schon selber viele Wege probiert, das rauszufinden, aber ich komm nicht drauf.
Es wäre schön, wenn mir da jemand helfen könnte.


#include <stdio.h>
int main()
{
int Zahl, Grenze, Summe;
printf("Gib eine positive Zahl ein: ");
scanf("%d", &Grenze);

for (Summe = 0, Zahl = 0; Zahl < Grenze+1; Zahl++)

Summe += Zahl;
printf("Die Summe von 0 bis %d ist %d", Grenze, Summe);
return 0;
}
 
wegen <
wenn du bis Grenze gehen möchtest, musst du <= nehmen
 
Ablaufdiagramm:

Eingabe: 5

0. Ausführung
Summe 0 + Zahl 0 = Summe 0;
Zahl+1;

1. Ausführung
Summe 0 + Zahl 1 = Summe 1;
Zahl+1;

2. Ausführung
Summe 1 + Zahl 2 = Summe 3;
Zahl+1;

3. Ausführung
Summe 3 + Zahl 3 = Summe 6;
Zahl+1;


4. Ausführung
Summe 6 + Zahl 4 = Summe 10;
Zahl+1;

ohne Grenze+1 würde es hier enden weil Grenze 5 nicht kleiner als 5 ist


5. Ausführung
Summe 10 + Zahl 5 = Summe 15;

mit Grenze+1 endet es hier und du hast das erwartete Ergebnis


Um es mal wie Doc in Crank auszudrücken: Macht das irgend einen Sinn (für dich)?

Edit: oder du machst wie erwähnt <= :D
 
Zuletzt bearbeitet:
Ja, vielen dank für die ausführliche Erklärung! JiJiB :)
Ergänzung ()

calluna schrieb:
Es gibt Foren, da werden solche Threads mit solchen Fragen sofort dicht gemacht, finde ich auch gut so.

Arbeite das hier erst einmal durch: http://openbook.galileocomputing.de/c_von_a_bis_z/

Zum Glück gibt es hilfsbereite Menschen und nicht nur solche wie Dich, die in ihrer Überheblichkeit das Bedürfnis verspühren, nach unten treten zu müssen. Foren sind zum Austausch da und nicht, um sich mit leerem Gewäsch zu profilieren. Nebenbei arbeite ich ein anderes Buch durch doch es tun sich immer Fragen auf. Und ich bin froh, das es hier Leute gibt, die einem helfen. Schönen Tag noch!

Nebenbei noch mal eine Rezension zu deinem tollen Buch:
http://www.amazon.de/review/R2ZZQZM...annel=detail-glance&nodeID=299956&store=books
 
Zuletzt bearbeitet:
Oder anders ausgedrückt: <Grenze ---> exclusive Grenze; <Grenze+1 ---> inclusive Grenze.

Bei manchen Antworten ist die Grenze aber schon fast überschritten.
 
@rene40

Deine Frage wird in den Grundlagen zu C beantwortet... das ist also eine Sache deiner Eigeninitiative! Das hat rein gar nichts mit Überheblichkeit oder dem Bedürfnis zu tun, nach unten zu treten. Und böse gemeint ist es auch nicht.

Das kostenlose Buch, welches ich verlinkt habe, ist ein Beispiel. Das Internet ist voll von Tutorials. Vielleicht wirst du es eines Tages mal verstehen. Ich habe mich schon vor über 14 Jahren in einer Community engagiert, bei TheWall, zum Thema Modding von Half Life (Programmierung und Leveldesign), und jedem geduldig geholfen, der eine Frage hatte, die nicht bereits in den Grundlagen-Tutorials beantwortet wurde.

http://www.tutorials.at/c/08-schleifen.html
http://www.tutorials.at/c/04-kommentare-operatoren.html

http://www.mathematik-wissen.de/groesser_und_kleiner.htm
 
Zuletzt bearbeitet:
Ja was soll ich dazu sagen, als das ich mich schon 2 Stunden selber darum bemüht habe, das Thema zu klären. Ich finde das ist keine Art, einen Thread zu schliessen, wo jemand um hilfe bittet. Wenn Dir das aus welchem Grund auch immer zu blöd ist, dann bleib doch einfach weg und kümmere Dich nicht darum. Deine Energie ist dann woanders besser aufgehoben. Und es gibt ja auch Leute die gerne helfen wollen.
Ehrlich gesagt ist mir das jetzt schon selber viel zu viel, mich mit sowas rumzuplagen, das muss einfach nicht sein. Also bitte verschone in Zukunft andere Leute mit deinen Verhinderungsmaßnahmen. Gut ist, wenn man anderen hilft und nicht wenn man sie blockiert.

Zu deiner Buchempfehlung habe ich ja schon eine Rezension verlinkt die einiges aussagt.

Ich hab mir dann selber das Kapitel über die for Schleife angesehen und bin erstaunt das der Rezensent Max recht zu haben scheint. Ich bin zwar Anfgänger, aber folgende Aussgae zu folgendem Code stimmt nicht.

int main(void)
{
int sek;
for(sek = 5; sek > 0; sek--)
printf("%d Sekunden!\n", sek);

return 0;
}

Zu diesem Übungsbeispiel im Buch wird gesagt, das die Schleife solange runterzählt, bis sek den wert 0 hat.
Das kann gar nicht passieren, da die Bedingung sek > 0 aussagt.

Wenn man sek >= 0 schreiben würde, ginge das klar.

Soviel zu Deiner Buchempfehlung.
 
Vielleicht ein anderes ähnliches Beispiel:
http://www.peace-software.de/ckurs9.html

Zur genaueren Erklärung bei for-Schleifen: Bei Eintritt in die Schleife wird die Bedingung auf wahr überpüft. Im negativen Fall wird die Schleife unverzüglich verlassen.
Achtung: Anders bei while
 
siehe zähl-, kopf- und fußgesteuerte schleifen.
 
Aber da calluna hier schon viel zu viel Energie für nix bekommen hat, nochmal ein besonderes Danke an JiJiB! für die ausführliche Erklärung. Genauso würde ich es auch jemanden erklären.
 
rene40 schrieb:
Zu diesem Übungsbeispiel im Buch wird gesagt, das die Schleife solange runterzählt, bis sek den wert 0 hat.
Das kann gar nicht passieren, da die Bedingung sek > 0 aussagt.

was aber eigentlich korrekt ist, denn sobald sek = 0 ist, wird die for-schleife unterbrochen und dann wird auch nicht mehr gezählt.
ist sek = 1, wird die for-schleife jedoch noch einmal durchlaufen.
 
@rene40

Das Beispiel ist richtig. Und auch wenn das Buch anscheinend nicht perfekt ist (wie gesagt, es ist ein Beispiel gewesen), so beantwortet es deine Fragen dennoch ausführlich bzw. versorgt dich mit dem nötigen wissen, die Probleme lösen zu können. ;) Ich blockiere dich nicht, ich helfe dir, nur eben auf andere Weise.
 
@calluna Du darfst mich in Zukunft ignorieren, diese Art hilfe möche ich nicht.
 
Zurück
Oben