0 Daumen
249 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

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community