Hey, ich soll im Rahmen meines Studiums ein Programm schreiben, das einige natürliche ganze Zahlen bis zu einer Obergrenße (max) hinurch läuft und dann im Tabellenformat ausgibt. Allerdings bin ich in C noch recht schlecht und ich habe grad ein Problem bei der 3x + 1 Geschichte. So sieht das ganze derzeit aus: void collartz(int x) { if(x % 2 == 0) { while(x != 1) { x = x / 2; printf("%d ", x); } } else { while(x != 1) { x = 3 * x + 1; printf("%d ", x); } } } Wenn ich jetzt (ich habe mal in der Wikipedia geschaut) 19 eingebe, dann kriege ich nicht, wie es eigentlich sein soll die Ausgabe 19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, … sondern was komplettt anderes. Den Abschnitt mit der x = 3x +1 scheint falsch zu sein aber so ist das doch richtig oder? Also 3 * x + 1 und das x zuweisen?
Ach du scheiße .. (hust) Ich habe den Fehler gefunden, das soll die ganze Zeit so überprüft werden, oh mann, peinlich. :D Danke, hat sich erledigt.
dein while ist an der falschen stelle probier mal das hier (ungetestet) void collartz(int x) { while(x != 1) { if(x % 2 == 0) { x = x / 2; printf("%d ", x); } else { x = 3 * x + 1; printf("%d ", x); } } }
Schon die erste Zeile deines Codes ist fehlerhaft: Der gute Mann hieß Collatz, nicht Collartz ;-)
Hmm, steht so in unserer Aufgabenstellung aber das ganze hat sich ja eh erledigt. ;)
hmm .. ich habe doch noch ein Problem und zwar mit der Tabelle. Wir sollen das ganze ja in der cmd ausgeben aber das sieht irgendwie nicht so gut aus. Das steht in der Aufgabe: In einer Tabelle die Zahl x, das Ergebnis der Berechnung für x und die Anzahl der benötigten Schleifendurchläufe ausgeben. Ich habe mal das Bild angehangen und wie das ganze derzeit aussieht. Wie kann man das noch ordentlicher hinkriegen?
Cler schrieb: > Wie kann man das noch ordentlicher hinkriegen? printf-Doku: specifier, flags, width.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.