While - Sauber oder Unsauber
-
Ich hatte unsauber programmiert, die Klammern nach while vergessen, aber das Programm funktionierte
so war es unsauber:
#include <iostream> using namespace std; // Das Programm entwickelt die Zahlen nach der Collatz-Metode, also entweder durch 2 teilbar oder mit 3 multiplizieren, bis man auf 1 kommt. int mulz; //Multiplikationszähler int divz; //Divisionszähler int zahl; int main () { int ix; cout<< "Geben Sie eine Zahl ein: "; cin>>ix; zahl = ix; while (ix>1) if (ix%2==0) { ix=ix/2; divz = divz + 1; cout<<"ix = "<<ix<<" ist Ergeb. der " <<divz<< ". Div. \n"; } else { ix=ix*3+1; mulz = mulz + 1; cout<<"ix = "<<ix<<" Multipl: " <<mulz<< " \n"; } return ix; }so habe ich verschlechtbessert: Nur die While klammern und den Schlussteil.
#include <iostream> using namespace std; // Das Programm entwickelt die Zahlen nach der Collatz-Metode, also entweder durch 2 teilbar oder mit 3 multiplizieren, bis man auf 1 kommt. int mulz; //Multiplikationszähler int divz; //Divisionszähler int zahl; int main () { int ix; cout<< "Geben Sie eine Zahl ein: "; cin>>ix; zahl = ix; while (ix>1) { if (ix%2==0) { ix=ix/2; divz = divz + 1; cout<<"ix = "<<ix<<" ist Ergeb. der " <<divz<< ". Div. \n"; } else { ix=ix*3+1; mulz = mulz + 1; cout<<"ix = "<<ix<<" Multipl: " <<mulz<< " \n"; } return ix; } cout<< "um die Zahl "<<zahl<< "auf 1 zurückzuführen, sind nach der Collatz-Methode " <<divz+mulz<< "OPERATIONEN nötig"; cin.get(); }Was habe ich falsch gemacht? Nach While sind die Klammern doch zwingend? Und den Schlussatz wollte ich auch rein haben.
Danke für die Tips
-
Der Unterschied ist, dass
return ixbeim ersten Ausschnitt am Ende ausgegeben wird aber im zweiten bereits nach dem ersten Schleifedurchlauf.erster Ausschnitt mit Klammern (ohne Änderung des Ablaufes):
while (ix>1) { if (ix%2==0) { ix=ix/2; divz = divz + 1; cout<<"ix = "<<ix<<" ist Ergeb. der " <<divz<< ". Div. \n"; } else { ix=ix*3+1; mulz = mulz + 1; cout<<"ix = "<<ix<<" Multipl: " <<mulz<< " \n"; } } return ix;Wie du siehst ist hier das return nicht in der Schleife drin, wie bei deinem zweitem Ausschnitt.
-
Auf jeden Fall erst mal danke...
Und wie bekomme ich jetzt noch den Schlussatz hin?
-
Du gibst ihn vor dem return aus..
-
bei while, for, if, usw...
sind die geschweiften klammern nicht pflichtwenn du eine schleife schreisbt dann wird solange der erste befehl nach der schleife wiederholt, wenn man mehrere sachen machen will braucht man die klammern
for(int i = 0; i < 10; ++i) cout << i << " und " << i*i << endl; // wird 10mal ausführt cout << "schleifen ende" << endl; // nur einmal ausgeführt for(int i = 0; i < 10; ++i) { cout << i << " und " << i*i << endl; // wird 10mal ausführt cout << "schleifen ende" << endl; // das auch } while (true) if ( !false ) { cout << "lol" << endl; cout << "lol2" << endl; } else { cout << "Else" << endl; }das while führt trotzdem das ganze if und else zeugs aus weils als ein zusammenhängender befehl gilt