Forum: PC-Programmierung Hasse Collartz Problem in C


von Cler (Gast)


Lesenswert?

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?

von Cler (Gast)


Lesenswert?

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.

von pko p. (pkopprasch)


Lesenswert?

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);
   }
  }
}

von Yalu X. (yalu) (Moderator)


Lesenswert?

Schon die erste Zeile deines Codes ist fehlerhaft: Der gute Mann hieß
Collatz, nicht Collartz ;-)

von Cler (Gast)


Lesenswert?

Hmm, steht so in unserer Aufgabenstellung aber das ganze hat sich ja eh 
erledigt. ;)

von Cler (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Tom (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.