While Schleife in C

jack_1

Mitglied
Hi, ich komme momentan nicht recht weiter. Mein Programm sollte mittes einer do while Schleife sich so lange wiederholen bis am Ende der Schleife die Zahl erreicht wurde die am Beginn eingegeben wurde. Das Programm wird leider nur einmal ausgeführt. Ich komm nicht drauf, habe ich die do-while Schleife falsch gesetzt?

[CODE lang="c" title="Code"]#include<stdio.h>
int main()
{
long int s = 1200;
int i, n, random;
printf("Wie viele Zahlen möchten Sie generieren : ");
scanf("%d", &n);

printf("Zufallszahlen sind : ");

do
{
s = s * s;
s = s / 100;
s = s % 10000;
random = s;
printf("%d ", random);
} while(random == n);

printf("\n");
return 0;
}
[/CODE]
 

mihe7

Top Contributor
Ich komm nicht drauf, habe ich die do-while Schleife falsch gesetzt?
Die Schleife selbst passt schon, nur die Bedingung erscheint unsinnig: wiederhole den Code X, so lange random == n gilt. Du wirst also höchstens eine Wiederholung bekommen, nämlich wenn Du 4400 eingibst, ansonsten wird X nur einmal ausgeführt. Und: mit Zufallszahlen hat das alles natürlich nichts zu tun.
 

jack_1

Mitglied
Mh, ok. Ich möchte dass die Ausgabe random überprüft wird ob diese Zahl mit der eingegebenen Zahl übereinstimmt.

Also wenn ich die Zahl 1200 eingebe erhalte ich nach einem durchlauf 4400. Diese Zahl stimmt aber nicht mit der eingegeben Zahl überein deshalb soll die Schleife nochmals erneut beginnen. Dies soll so lange wiederholt werden bis ich am Ende praktisch die Zahl 1200 wieder erhalte.
Wie muss ich da meinen Ausdruck nach while schreiben. Ich bin nun verwirrt 😞

Auch wenn ich das so mache
C:
while(random != s)
wird der Code nur einmal ausgeführt. Also hier wird die Zahl random ja überprüft ob diese ungleich ist als die Eingegebene Zahl. Falls dies der Fall ist ist der Ausdruck wahr und die Schleife wird wiederholt.
 
K

kneitzel

Gast
Also du weist der Variablen random ja erst s zu. Daher ist eine Überprüfung random != s Unsinn.

Mein Ratschlag an Dich wäre der, den ich jedem Anfänger gebe: Formuliere das, was Du machen willst, erst einmal in Umgangssprache.
Und das nicht oberflächig sondern so, dass jemand diesen Anweisungen folgen kann ohne die Aufgabenstellung zu kennen.
 

Thallius

Top Contributor
Du wirst niemals die Zahl 1200 erhalten. Wie soll das gehen? Geh es doch mal von Hand durch

1200*1200/100 % 10000 = 4400 soweit ok
4400*4400/100 % 10000 = 3600
3600*3600/100 % 10000 = 9600
9600*9600/100 % 10000 = 1600
1600*1600/100 % 10000 = 5600
5600*5600/100 % 10000 = 3600

womit wir in einer endlos schleife hängen würden....
 
K

kneitzel

Gast
Die Aufgabenstellung ist auch noch zu wirr ... Er will mit eigenem Algorithmus Zufallszahlen generieren so ich ihn richtig verstanden habe. Und er fragt ab, wie viele Zufallszahlen er generieren soll ("Wie viele Zahlen möchten Sie generieren").
Da ist also ganz offensichtlich die Aufgabenstellung nicht gut durchdacht und daher auch kein sinnvoller Lösungsweg vorhanden ... Da zu Code zu kommen, der das macht, was man will: Das wäre ein wirklicher Zufall.

Aber er wäre wohl der erste, der sich hin setzt und versucht, alles im Detail zu überlegen... So langsam mag ich das auch nicht mehr schreiben, denn die Leute meinen ja, dass sie sowas alles nicht brauchen ...
 

jack_1

Mitglied
Sorry wenn ich mein Problem etwas schlecht formuliert habe. Ist natürlich meine Schuld.
@mihe7: Haha danke für den Hinweiß. Da sitze ich echt lange an meinem Problem und dann haperts an so was. Habe meinen Code nun zum laufen gebracht.

Mein Code funtioniert nur wenn die Startzahl sich wiederholt (in dem Zufallsgenerator). Ansonsten gibt es eine Endlosschleife.
Dem Algorithmus liegt die Mid Square Method zugrunde.


C:
#include<stdio.h>

int myfunction (long int s){
    int i=1, n=s, random;
    do
    {
        s = s * s;
        s = s / 100;
        s = s % 10000;
        random = s;
        i=i+1;
    } while(random != n);
    return ("d",i);
}


int main()
{ int i= 1;
    long int s = 100;
    printf("%d",i, myfunction (s));
}
 

mihe7

Top Contributor
Da sitze ich echt lange an meinem Problem und dann haperts an so was. Habe meinen Code nun zum laufen gebracht.
Man entwickelt relativ schnell eine gewisse Form von "Betriebsblindheit" und da Du das Prinzip völlig richtig beschrieben hattest, war klar, dass das nur ein Leichtsinnsfehler war :) Man sieht solche Dinge irgendwann einfach nicht mehr, wenn man zu lange draufschaut. Man kann so etwas ein wenig vermeiden, wenn man sinnvolle Bezeichner verwendet: s, n sagt halt einfach gar nichts aus.
 

Ähnliche Java Themen

Neue Themen


Oben