Keine Ausgabe!
-
Hi Leute!
Ich muß für die Uni ein kleines Prog schreiben, bei den man eine Zahl eingibt und die durch einen bestimmten Algorhytmus geschliffen wird, so lange bis das Ergebhnis "1" rauskommt.
Wenn das bei mir der Fall ist, wird die eingegebene Zahl um 1 erhöht und alles beginnt von vorn.
Jetzt wollen wir wissen (der Prof und die Studenten), bei welcher Zahl zum ersten mal das Zwischenergebniss "1000" rauskommt.
Und genau bei diesem Punkt will mir mein Prog keine Ausgabe machen.
Der Quelltext:
void __fastcall TForm1::Button1Click(TObject *Sender)
{int Zahl;
Zahl=StrToInt (Edit1->Text);for (Zahl>1;;){
if (Zahl%2==0){Zahl=Zahl/2;
Memo1->Lines->Add(IntToStr(Zahl));
Form1->Edit1->Text=IntToStr(Zahl);
}else {Zahl=Zahl*3+1;
Memo1->Lines->Add(IntToStr(Zahl));
Form1->Edit1->Text=IntToStr(Zahl);
}if (Zahl==1){
Zahl=StrToInt (Edit2->Text);
Zahl++;
Form1->Edit1->Text=IntToStr (Zahl);
Form1->Edit2->Text=IntToStr (Zahl);
}if (Zahl==1000){
Label1->Caption=StrToInt (Edit2->Text);}
}
}Wenn ich keine for Schleife verwende, und jedes mal den Button1 drücke, dann funktionieren alle Ausgaben.
Ja.. also, wer hat eine Ahung, wo der Fehler liegt?
DANKE!
Ce|ine
-
Hallo
zuerstmal benutz beim Posten von Code hier im Forum die CPP-Tags. Außerdem würde korrektes Einrücken der Zeilen auch die Lesbarkeit erhören.
Zum Thema :
for (Zahl>1;;)Schau dir doch nochmal die Definition der Syntax für For-Schleifen an, und an welcher Stelle die Abbruchbedingung stehen soll.
Warum nimmst du keine while-Schleife?bis bald
akari
-
Erstens solltest du deinen Quelltext sinnvoll einrücken und in CPP-Tags einschließen, damit man auch etwas erkennen kann.
Zweitens sehen die Bedingungen der for()-Schleife irgendwie falsch aus (bzw. die Abfrage "Zahl>1" ist als Initialisierungsanweisung für die Schleife nutzlos).
Drittens: Wovon hängt es eigentlich ab, ob du ein "Form1->" zum Zugriff deiner Steuerelemente verwendest oder nicht?
Vierten: Was wird denn nicht ausgegeben? Nur der Teil im "if(Zahl==100)"-Zweig? oder gar keine Werte? (im letzteren Fall kann es sein, daß dein Programm zu beschäftigt ist mit Rechnen, um die neuen Werte darzustellen)
-
Sorry, ich nutze das Forum nur ganz selten, da bin ich nicht immer mit allen Geflogenheiten vertraut

Es scheint, daß das Prog zu beschäftigt ist.
Die Fragen:
1. es werden alle Zahlen ausgegeben, aber eben jene, die ich eigentlich ermitteln will, nicht angezeigt (also:
Edit2->Text=IntToStr (Zahl);und dadurch auch:
Label1->Caption=StrToInt (Edit2->Text);2. Form1-> usw. ist nicht notwendig,aber stört auch nicht
Gibt es eine Möglichkeit, das irgendwie zu drosseln?
(CPU: AMD Athlon 64 X2: 2x 2.22 GHz, der Taskmanager von XP zeigt es als "Keine Rückmeldung" während der Ausführung an)
MfG
Ce|ine
-
Hallo
Ja dein Programm ist in einer Endlosschleife, weil die Abbruchbedingung deiner For-Schleife an der falschen Stelle steht
das sollte also so aussehen :for (;Zahl>1;)
-
Das hier
Label1->Caption=StrToInt (Edit2->Text);ist auch irgendwie Unsinn. Es reicht
Label1->Caption = Edit2->Text;
-
Und was die Ausgabe betrifft: Während die Schleife läuft werden, wie von CStoll schon angedeutet, keine visuellen Updates der Form und der darauf befindlichen Komponenten vorgenommen. Um das zu erzwingen packst du ein Application->ProcessMessages(); an strategischer Stelle in die Schleife.
-
bin zwar noch ein c++ noob, aber ich glaube, dass man hier das "Form1->" weglassen kann.
Form1->Edit1->Text=IntToStr (Zahl);