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

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

}

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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