Noob Fragen (3)
-
Euer Noob hat mal wieder eine Frage. Nun habe ich mich mit der while-Schleife und der for-Schleife "auseinandergesetzt" . Ich habe sowohl mit dem while-loop als auch mit dem for-loop das selbe Problem gelöst.
Für den for-loop:
#include <iostream> using namespace std; int main () { int sum = 0; for (int val = 50;val <=100; ++val) sum +=val; cout << " The sum of 50 to 100 inclusive is " << sum << endl; return 0; }
Für den while-loop:
#include <iostream> using namespace std; int main () { int sum =0; int val =50; while (val <=100) { sum += val; ++val; } cout << "The sum of 50 to 100 inclusive is " << sum << endl; return 0; }
Nun wenn man mit beiden loops dasselbe Problem lösen kann warum gibt es dann 2 verschiedene?
-
Bitte demnächst aussagekräftigere Titel verwenden wie
"Noob Fragen (3): wann for, wann while?"In bevorzuge for, wenn ich vorher schon weiß, wie lange die Schleife geht.
also for bei val<=100
und while bei sum<=1000
-
Nun wenn man mit beiden loops dasselbe Problem lösen kann warum gibt es dann 2 verschiedene?
Merkst du keinen Unterschied zwischen den Code-Schnipseln in deinem Post?
Der mit der
for
-Schleife ist kürzer und (laut allgemeiner Meinung) lesbarer. Das wars auch schon - Lesbarkeit. Es geht darum drei Dinge, die sehr oft in der gleichen Form vorkommen (Initialisierung, Abbruchbedingung, Inkrement) zusammenzufassen, damit der Code nicht durch solche für das Leserauge unnötigen Zeilen vollgemüllt wird.
-
Zählschleifen werden gewöhnlich für Iterationen über Daten genutzt, denn dort weisst du ja von vornerein, dass du den Schleifenrumpf n-mal ausführen willst.
Bei While-Schleifen wartest du quasi dadrauf, dass deine Bedingung irgendwann mal erfüllt wird.
Und wenn wir uns mal die Theoretiker Brille anziehen, dann ist es so, dass die For-Schleife immer terminiert (zu einem Ende kommt), was bei einer While-Schleife nicht der Fall sein muss (Stichwort: Berechenbarkeit mit LOOP- und WHILE-Programmen).
-
Spiele beispielsweise verwenden meist
// Pseudocode game = true; while(game) { /* updateWorld(), ... */ if(userHitsEscape()) game = false; }
um ein Spiel unabhängig vom Userinput laufen zu lassen. Mit For-Schleife würde das ziemlich eigenartig aussehen
-
Das war jetzt ein Beispiel für eine do-while-Schleife.
-
DirkB schrieb:
Das war jetzt ein Beispiel für eine do-while-Schleife.
Und die künstliche Variable game könnte weg.
-
Skym0sh0 schrieb:
Und wenn wir uns mal die Theoretiker Brille anziehen, dann ist es so, dass die For-Schleife immer terminiert (zu einem Ende kommt)
och, es gibt durchaus Möglichkeiten, eine for-Schleife unendlich lange laufen zu lassen
-
Upps, stimmt. Ist noch früh :>...
-
daddy_felix schrieb:
Skym0sh0 schrieb:
Und wenn wir uns mal die Theoretiker Brille anziehen, dann ist es so, dass die For-Schleife immer terminiert (zu einem Ende kommt)
och, es gibt durchaus Möglichkeiten, eine for-Schleife unendlich lange laufen zu lassen
Ja? Gibt es die ?
Dann zeig mir mal ein LOOP-Berechenbares Programm, welches nicht terminiert...
Wenn dus schaffst kriegsten Turing-Award, und das nicht von mir.
-
Skym0sh0 schrieb:
daddy_felix schrieb:
Skym0sh0 schrieb:
Und wenn wir uns mal die Theoretiker Brille anziehen, dann ist es so, dass die For-Schleife immer terminiert (zu einem Ende kommt)
och, es gibt durchaus Möglichkeiten, eine for-Schleife unendlich lange laufen zu lassen
Ja? Gibt es die ?
Dann zeig mir mal ein For-Berechenbares Programm, welches nicht terminiert...for(;;) { cout << "Loop"; }
-
Ok, du weist nicht wovon ich spreche.
Ich muss mich selbst verbessern, ich hab LOOP-Programme als For-Programme bezeichnet. -.-
-
Skym0sh0 schrieb:
Ich muss mich selbst verbessern, ich hab LOOP-Programme als For-Programme bezeichnet. -.-
genau genommen hast du die Dinger als for-Schleifen bezeichnet... Bei der Bezeichnung "For-berechenbares Programm" dachte ich mir schon, dass wir da aneinander vorbeireden
-
Ja -.-
Shit, mein Fehler. Sorry, Kollege...