0 Daumen
212 Aufrufe

Frage:

Ich habe eine kleine Funktion geschrieben, die mir mittels einer do while Schleife dann abbrechen soll sobald am Ende wieder die selbe Zahl rauskommt als am Anfang eingegeben wurde.

Ich würde gerne die Anzahl der Durchläufe berechnen. Allerdings klappt das mit der Schleife glaube ich nicht ganz. Habe ich die do while Schleife falsch gesetzt? Am Ende möchte ich nur die Anzahl der Durchgänge ausgeben.


Code:

int myfunction ( int seed)

int count = 0;
do {

for(int i = 0; i < n; i++)
  {
      seed = seed * seed;
      seed = seed / 100;     
      seed = seed % 10000;   
      random = seed;
      count = count +1
      } while (seed == i);

  return count;
}
Avatar von

Du solltest vielleicht das ganze Programm mit in deine Antwort einfügen, sonst kann man dir dafür nicht richtig helfen. Auf jeden Fall ist dein schon vorhandener Code falsch, es fehlen Klammern und die Variableninitialisierung für n und i hast du vergessen außerhalb der for-Schleife zu definieren. Desweiteren ist random = seed kein gültiger Ausdruck, weil die Variable random nicht definiert und initialisiert ist.

Mir scheint es so, als ob du das Ganze nicht einmal wirklich kompiliert und die Fehlermeldungen gelesen hast. Sonst wären diese groben Fehler nicht enthalten.

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Analyse des Codes und Problemidentifizierung

Bevor wir uns ansehen, wie die do while-Schleife korrigiert werden sollte, lassen Sie uns den vorhandenen Code analysieren und herausfinden, wo das Problem liegt. Ihr Code beabsichtigt, eine Funktion zu haben, die bei einer Eingabezahl startet und dann wiederholt eine Berechnung durchführt, bis die resultierende Zahl erneut der Ausgangszahl entspricht. Dabei soll die Anzahl der Durchläufe berechnet und zurückgegeben werden.

Der präsentierte Code hat jedoch mehrere Probleme:

1. Die Verwendung der do while-Schleife ist syntaktisch inkorrekt eingefügt.
2. Die for-Schleife im Code scheint einen nicht definierten Variablen n zu verwenden, was darauf hinweist, dass der Code unvollständig oder fehlerhaft ist.
3. Die Variable random wird ohne vorherige Deklaration verwendet.
4. Es gibt keinen Abbruchbedingung, die auf die anfängliche Eingabezahl seed prüft.
5. Die do while-Schleifenbedingung while (seed == i); am Ende des Blocks macht im Kontext keinen Sinn, da sie sich auf die Laufvariable i der for-Schleife bezieht.

Korrektur und Lösungsansatz

Um das beabsichtigte Verhalten zu erzielen, empfehle ich folgenden Ansatz:

- Entfernen Sie die for-Schleife, da deren Zweck im Kontext unklar ist.
- Überarbeiten Sie die do while-Schleife, sodass die Schleife durchgeführt wird, bis die durch die Berechnung resultierende seed-Zahl wieder der ursprünglichen Eingabe entspricht. Dies erfordert, die ursprüngliche seed-Eingabe zu speichern.
- Stellen Sie sicher, dass alle Variablen richtig deklariert sind.

Korrigierter Code

c
int myfunction (int seed) {
    int count = 0;
    int originalSeed = seed; // Speichern der ursprünglichen seed-Zahl
    int random; // Deklaration der Variable random, falls benötigt

    do {
        seed = seed * seed;
        seed = seed / 100;    
        seed = seed % 10000;
        // random = seed; // Diese Zeile scheint überflüssig, da random nicht verwendet wird.
        count++; // Zählen jedes Durchlaufs

    } while (seed != originalSeed); // Wiederholung, bis die ursprüngliche seed-Zahl erreicht ist

    return count;
}


Dieser Code führt nun die Schleife durch, bis die seed-Zahl nach Durchlaufen der Berechnungen wieder der ursprünglichen Eingabezahl entspricht, und gibt die Anzahl der Durchläufe zurück. Wichtig ist hier, dass originalSeed genutzt wird, um den Vergleichswert für den Abbruch der Schleife zu speichern und nicht die sich ändernde seed-Zahl selbst, die für die Berechnungen innerhalb der Schleife genutzt wird.
Avatar von 2,9 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community