Zum Inhalt springen

Empfohlene Beiträge

Geschrieben
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.

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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"; 

}

Geschrieben

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.)

Geschrieben

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.

Geschrieben

@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?

Geschrieben

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

Geschrieben

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;

}

Geschrieben

Sieht etwas unübersichtlich aus ... könntest Du das mal ausdokumentieren? Da ist ja schon etwas mehr los als bei meinem Beispiel. =8-)

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...