teufelxego Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Suche eine Übung in der 1 Spieler 10 Durchgänge beim Bowling macht und mir das angezeigt wird. habe null Ahnung, wie das geht. :eek: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Original geschrieben von teufelxego habe null Ahnung, wie das geht. Bowling, oder die Umsetzung in C? Im Ernst, versuch doch erst mal, den Vorgang als Algorithmus zu formulieren oder als PAP/Struktogramm darzustellen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
teufelxego Geschrieben 21. März 2002 Autor Teilen Geschrieben 21. März 2002 genau, ich meine die Umsetzung in C Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ChrisP Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Meinst Du die grafische Umsetzung oder willst Du nur ne Konsolenanwendung??? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
teufelxego Geschrieben 21. März 2002 Autor Teilen Geschrieben 21. März 2002 Konsolenanwendung Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Was ist jetzt Dein Problem? So ist es sehr schwer, Dir zu helfen. Wenn Du schon Vorarbeit geleistet hast und weißt wie die Struktur des Programms aussieht dann kannst Du ja anfangen zu programmieren und dann spezifische Fragen stellen. Jan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
backdraft Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Das ist ja nicht sooo kompliziert: Mach ne (For-)Schleife die 10 mal abgearbeitet wird (pro Schleifendurchlauf 1 Runde gespielt). Dann wird in der Schleife eine Zufallszahl zwischen 0 und 10 ermittelt (so viele Pins können ja Umfallen) und das Ergebnis wird in ein Array geschrieben. Das Array kannst du dann nach der Schleife auswerten. So weit so gut. Oder sollt ihr es mit den richtigen Bowlingregeln machen (Spare, Strike, etc.?) Das wäre dann komplizierter! MfG backdraft Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ChrisP Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Dann wird in der Schleife eine Zufallszahl zwischen Gibt es in C eine vorgefertigte Funktion für einen Zufallsgenerator? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 int rand (void) in <stdlib.h> liefert eine (pseudo) Zufallszahl. Man kann auch mit void srand ( unsigned int ) einen neuen Ausgangswert für eine Zufallsreihe festlegen. Am besten gibt man in srand eine Zahl an, die man aus einer Zeitfunktion erhält. So wird ein wenig mehr Zufall ins Spiel gebracht. HTH Jan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Hier und hier haben wir den rand() mal ausgiebig ausdiskutiert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Meinst Du es so? #include <iostream.h> #include <stdlib.h> #include <time.h> void main() { time_t rndtime; time(&rndtime); srand((int)rndtime); int wuerfe[10],i; for (i=0;i<10;++i) wuerfe[i]=rand()%10; for (i=0;i<10;++i) cout << "Spiel " << i+1 << "= " << wuerfe[i] << "\n"; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Ich fühle mich einfach mal von Crush angesprochen und würde es in C++ so schreiben: #include <iostream> #include <cstdlib> #include <ctime> int main() { std::time_t rndtime; std::time ( &rndtime ); std::srand ( (unsigned int)(rndtime) ); for ( int i = 0;i < 10; i++ ) std::cout << "Spiel " << ( i + 1 ) << "= " << ( ( rand() % 10 ) + 1 ) << '\n'; } Wahrscheinlich nerve ich jetzt das ganze Board aber void main (), wie Crush es geschrieben hat, ist falsch! Es ist weder Ansi C noch ISO C++. void main () gibt es nicht! Sonst sieht der Quelltext relativ gleich aus. Allerdings habe ich es vermieden, die Header mit .h einzubinden. Die Funktionen blieben also alle im std Namensraum. Wenn man die Programme sehr schnell hintereinander startet, dann kann es vorkommen, daß man immer noch gleiche Würfelergebnisse bekommt. Man kann beliebig viel Aufwand betreiben um diesen Mißstand zu beheben oder sich vom Pfad der Kompatibilität und Portierbarkeit abwenden und systemspezifische Funktionen/Eigenheiten nutzen. Da der Computer deterministisch ist, muß man sich ein wenig anstrengen zufälliges Verhalten zu erzeugen. HTH Jan (Nach vielen Anstrengunge habe ich jetzt auch eine vernünftige Einrückung.) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maxim_42 Geschrieben 22. März 2002 Teilen Geschrieben 22. März 2002 Es wird in dem Zusammenhang ja auch von Psoidozufallszahlen gesprochen. Wahrhaftig zufälliges Verhalten lässt sich mit einer deterministischen Maschine wohl gar nicht erreichen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 22. März 2002 Teilen Geschrieben 22. März 2002 @Orffi wegen void main().. Ist mir gar nicht aufgefallen, ich habe das DOS-Gerüst von irgendjemand, der hier mal gepostet hat genommen um das zu schreiben ... und der Compiler hatte sich nicht beschwert. Normal mach´ ich eh nix mehr mit DOS. Es hält sich auch nicht jeder immer am Standard fest. Außerdem wird ein void-Returnwert so definiert, daß ein unbestimmter Rückgabewert hochgereicht wird und nicht gar keiner ... deshalb beklagt sich wohl der Compiler auch nicht. Aber darum ging´s ja auch nicht, sondern um den Inhalt der {}. Daher hast Du auch das Thema verfehlt, weil die Ergebnisse erst nach dem 10. Wurf ausgegeben werden sollten (jedenfalls verstehe ich das so nach der Fragestellung und einem vorangegangenen Pseudo-Code): "Suche eine Übung in der 1 Spieler 10 Durchgänge beim Bowling macht und mir das angezeigt wird. " Aber das mit dem Verständnis ist immer so eine Sache bei nicht ganz klar ausformulierten Fragen, weil ich das sonst natürlich auch lieber alles auf einmal machen würde. Außerdem hatte einer das kurz vorher auch nochmal direkt so als Beispiel aufgezogen und daran wollte ich mich dann auch noch halten: "Mach ne (For-)Schleife die 10 mal abgearbeitet wird (pro Schleifendurchlauf 1 Runde gespielt). Dann wird in der Schleife eine Zufallszahl zwischen 0 und 10 ermittelt (so viele Pins können ja Umfallen) und das Ergebnis wird in ein Array geschrieben. Das Array kannst du dann nach der Schleife auswerten. " Warum hätte ich das auch dann anders machen sollen? In DOS programmiert man heute eh nur in der Schule zur Demonstration - oder muß das jemand auf der Arbeit tatsächlich noch machen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 22. März 2002 Teilen Geschrieben 22. März 2002 Ok, mein posting war ein wenig überflüssig, da es prinzipiell gleich ist. Das Thema habe ich aber nicht verfehlt, da es die Frage gab, ob es einen Zufallszahlgenerator gibt. Das habe ich demonstriert. Zur main-Funktion mache ich einen neuen Thread auf, da es hier endgültig zu weit vom Thema wegführen würde. Jan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
teufelxego Geschrieben 26. März 2002 Autor Teilen Geschrieben 26. März 2002 Dank an alle, die versucht haben mir zu helfen. das Ergebnis sieht so aus: #include <iostream.h> #include <time.h> #include <stdlib.h> int main() { srand((unsigned)time(NULL)); int W[21]; //unsigned char möglich int D[10]; //unsigned int möglich int z; int gs=0; for (z = 0; z<10; z++) { W[2*z]=rand()%11; W[2*z+1]=rand()%(11-W[2*z]); } if (W[18]==10 && W[19]!=10) W[20] = rand()%(11-W[19]); if ((W[18]==10 && W[19]==10) || (W[18]+W[19]==10)) W[20] = rand()%11; // (W[18]+W[19]==10 else W[20]=0; for ( z=0; z<8; z++) { if (W[2*z]==10 && W[2*z+2]==10 && W[2*z+4]==10) { D[z]=30 ; } else if (W[2*z]==10 && W[2*z+2]==10) { D[z]=20 + W[2*z+4]+W[2*z+5]; } else if (W[2*z]==10) { D[z]=10 + W[2*z+2]+W[2*z+3]; } else if ((W[2*z] + W[2*z+1]) == 10 && (W[2*z]!=10)) { D[z] = 10 + W[2*z+2]; } else D[z] = (W[2*z] + W[2*z+1]); } if (W[16]==10 && W[18]==10 && W[19]==10) { D[8]=30 ; } else if (W[16]==10 && W[18]==10) { D[8]=20 + W[19]; } else if (W[16]==10) { D[8]=10 + W[18]+W[19]; } else if ((W[16] + W[17]) == 10 && (W[16]!=10)) { D[8] = 10 + W[18]; } else D[8] = W[16] + W[17]; D[9] = W[18] + W[19] + W[20]; for (z=0; z<10; z++) { gs+=D[z]; } cout << "\t\t" << "Bowling" << "\n\n" ; for (z=1; z<11; z++) cout << z << "\t" ; cout << "\n" ; for (z=0; z<9; z++) cout << W[2*z] <<" " << W[2*z+1] << "\t" ; cout << W[18]<< " "<<W[19]<<" "<<W[20] << "\n"; for (z=0; z<10; z++) cout << D[z] <<"\t"; cout <<"\n"; cout << "Die Gesamtsumme betraegt: " << gs << "\n\n" ; return 0; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 26. März 2002 Teilen Geschrieben 26. März 2002 Sieht etwas unübersichtlich aus ... könntest Du das mal ausdokumentieren? Da ist ja schon etwas mehr los als bei meinem Beispiel. =8-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.