0 Daumen
587 Aufrufe

Aufgabe:

Schreiben Sie ein Programm in C das folgenden Ablauf hat:

num → num/2 wenn n gerade is
num → 3num + 1 wenn n ungerade ist
Stopp wenn num = 1

Es sollte mir also ausgeben wie wieviele durchläufe das Programm braucht um auf die Zahl eins zu kommen.


Problem/Ansatz:

Ich habe folgenden Code geschrieben und einige Kommentare dazugeschrieben. Ich verstehe nicht so recht wieso dass ich als Ausgabe nur eine Null erhalte-egal welche Zahl ich eingebe. Wäre nett wenn mir jemand sagen könnte wo im Code der Fehler liegt.

Ich weiß nicht genau wie ich hier einen Code einfügen kann deshalb poste ich Ihn mal so:

#include <stdio.h>

int main()
{
int num;
int x;
printf("Geben Sie eine Zahl ein\n");
scanf("%d", &num); // Zahl einscannen

  while(num==1){         // While Schleife wird so lange ausgeführt bis num eins ist
      if((num%2) == 0){  // Wenn Zahl gerade durch zwei dividieren
      num=num/2;
      x +=1; }       // Anzahl durchläufe aufzählen
      else{
      num=3*num+1;   // Wenn Zahl ungerade Zahl mal Drei multiplizieren und plus eins
      x +=1;         // Anzahl durchläufe aufzählen
  }
}

printf("%d",x);
}
Avatar von
Ich weiß nicht genau wie ich hier einen Code einfügen kann

Mit der Schaltfläche {} oder mit <code> und </code> in der HTML-Ansicht.

oder mit STRG + K

2 Antworten

0 Daumen
 
Beste Antwort

Du hast einen kleine Denkfehler: Es sollte while(num != 1){ ... } heißen. Sonst stoppst du ja nicht, wenn num = 1 ist. In deinem Fall stoppst du immer, wenn num nicht 1 ist. Das ist immer der Fall, wenn der User eine andere Zahl als 1 eingibt. Daher stoppt das Programm sofort und x bleibt 0. Deswegen ist dein Output immer 0 gewesen.

Code kannst du hier einfügen, indem du auf den Button {} im Texteditor drückst. Alternativ kannst du auch die Tastenkombination STRG + K drücken oder HTML im HTML-Editor verwenden:

<code> hier ist code </code>
Avatar von

Achso mist daran habe ich nicht gedacht. Vielen dank jetzt ist es für mich klar :)

0 Daumen


das diese folge bei anderem input als 2 terminiert ist wohl ehr nicht zu erwarten?

while(num==1){                      // While Schleife wird so lange ausgeführt bis num eins ist

falsch

solange num==1 wird schleife ausgeführt, also bestenfalls einmal wenn die eingabe 1 ist.

num=num/2;

Eine Division durch 2 ergibt nicht unbedingt int. Wie geht der Compiler bei einer Zuweisung damit um?

Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community