C++ while verständnis

johnny.de

Cadet 4th Year
Registriert
Aug. 2006
Beiträge
127
//Fakultät

#include <iostream>

using namespace std;

void main()
{
int fakul=1, zahl, hilf;

cout<<"Geben Sie eine Zahl ein, "<<endl;
cout<<"von der die Fakultaet berechnet werden soll."<<endl;
cin>>zahl;
cout<<endl;

hilf=zahl;

while(hilf > 0)
{
fakul = fakul * hilf--;
cout<<hilf;
}

cout<<zahl<<"!= "<<fakul<<endl;
}

bei der Ausführung werden 4 3 2 1 0 und 5!=120 ausgegeben.

das kann ich ja nachvollziehen und 5! sind ja auch 120, nur wenn ich 4*3*2*1*0 rechne kommt da ja 0 raus und nicht 120.

wieso ist fakul dann 120 ????
 
Der Hund ist nicht im while begraben...

fakul = fakul * hilf--;

Versuch mal --hilf statt hilf--, vielleicht verstehst du dann, was da passiert.
 
das kann ich ja nachvollziehen und 5! sind ja auch 120, nur wenn ich 4*3*2*1*0 rechne kommt da ja 0 raus und nicht 120.
Daraus schließt man dann wohl, dass du nicht 4*3*2*1*0 rechnest, nur warum?
Ganz einfach, wie WingX schon gesagt hat liegt das am "hilf--", denn das Postfix "--" wird erst nach der Multiplikation berechnet, also rechnest du 5*4*3*2*1.
Die Ausgabe wird aber in der nächsten Zeile getätigt, was zur Folge hat, dass die erste Ausgabe 4 ist, denn die Dekremantation wurde schon durchgeführt.

Eine mögliche Lösung wäre, dass du "hilf" erst nach der Ausgabe dekrementierst, somit wäre die erste Zahl der Ausgabe immernoch 5 und erst danach wird dekrementiert.

Gruß
BlackMark
 
BlackMark schrieb:
Eine mögliche Lösung wäre, dass du "hilf" erst nach der Ausgabe dekrementierst, somit wäre die erste Zahl der Ausgabe immernoch 5 und erst danach wird dekrementiert.

Nicht nur möglich, ist so.
Die Ausgabe einfach vor dem dekrementieren machen.
 
sorry das ich mich erst jetzt melde, hatte heute ne Klausur vom Studium...

hab's jetzt verstanden mit dem Postfix

bei hilf-- (Postfix) wird 5*4*3*2*1 gerechnet, da hilf erst nach der Multiplikation verringert wird

bei --hilf (Präfix) wird 4*3*2*1*0 gerechnet, hier wird hilf sofort verringert, 5! wären dann 0

Danke WingX und BlackMark
 
Zurück
Oben