diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Bachelor/Prog1/Prakt4/prg1p4_1/main.cpp | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Bachelor/Prog1/Prakt4/prg1p4_1/main.cpp')
| -rw-r--r-- | Bachelor/Prog1/Prakt4/prg1p4_1/main.cpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/Bachelor/Prog1/Prakt4/prg1p4_1/main.cpp b/Bachelor/Prog1/Prakt4/prg1p4_1/main.cpp new file mode 100644 index 0000000..f9e3e90 --- /dev/null +++ b/Bachelor/Prog1/Prakt4/prg1p4_1/main.cpp @@ -0,0 +1,148 @@ +// Programmieren 1, Praktikum 4, Aufgabe 1
+// Sven Eisenhauer
+// 08.12.2004
+//
+// file: main.cpp
+//
+// purpose: Play craps and analyse results
+//
+//
+//
+//
+
+#include <iostream>
+
+using std::cout;
+using std::endl;
+
+#include <iomanip>
+
+using std::setprecision;
+using std::setw;
+
+// contains function prototypes for functions srand and rand
+#include <cstdlib>
+
+#include <ctime> // contains prototype for function time
+
+int rollDice( void ); // function prototype
+
+int main()
+{
+ // enumeration constants represent game status
+ enum Status { CONTINUE, WON, LOST };
+
+ int sum;
+ int myPoint;
+
+ const int maxGames=1000000;
+ const int maxRounds=22;
+
+ int round=1,
+ sumWon=0,
+ sumLost=0,
+ wRounds=0;
+
+ int nrLost[maxRounds]={0},
+ nrWon[maxRounds]={0};
+
+ Status gameStatus; // can contain CONTINUE, WON or LOST
+
+ // randomize random number generator using current time
+ srand( time( 0 ) );
+
+ for (int i=1;i<=maxGames;i++)
+ {
+ round=1;
+ sum = rollDice(); // first roll of the dice
+
+ // determine game status and point based on sum of dice
+ switch ( sum ) {
+
+ // win on first roll
+ case 7:
+ case 11:
+ gameStatus = WON;
+ break;
+
+ // lose on first roll
+ case 2:
+ case 3:
+ case 12:
+ gameStatus = LOST;
+ break;
+
+ // remember point
+ default:
+ gameStatus = CONTINUE;
+ myPoint = sum;
+ // cout << "Point is " << myPoint << endl;
+ break; // optional
+
+ } // end switch
+
+ // while game not complete ...
+ while ( gameStatus == CONTINUE ) {
+ sum = rollDice(); // roll dice again
+ round++;
+
+ // determine game status
+ if ( sum == myPoint ) // win by making point
+ gameStatus = WON;
+ else
+ if ( sum == 7 ) // lose by rolling 7
+ gameStatus = LOST;
+
+ } // end while
+
+ // display won or lost message
+ if ( gameStatus == WON )
+ //cout << "Player wins" << endl;
+ if (round<maxRounds)
+ nrWon[round]++;
+ else
+ nrWon[maxRounds-1]++;
+ else
+ //cout << "Player loses" << endl;
+ if (round<maxRounds)
+ nrLost[round]++;
+ else
+ nrLost[maxRounds-1]++;
+
+ }
+
+ cout << setw(7)<<"Round"<< setw(7)<< "won" << setw(7)<<"lost"<<endl;
+
+ for (i=1;i<maxRounds;i++)
+ {
+ cout << setw(7) << i << setw(7) << nrWon[i] << setw(7) << nrLost[i] << endl;
+ sumWon+=nrWon[i];
+ sumLost+=nrLost[i];
+ wRounds+=((nrWon[i]*i)+(nrLost[i]*i));
+ }
+ cout << endl <<"Total won: " << sumWon << " Total lost: " << sumLost << " Chance to win: "
+ << setprecision(4) << (static_cast <double> (sumWon)/maxGames)*100 << "%" << endl;
+ cout << "Average Game length: "<< setprecision(2) << static_cast <double> (wRounds)/maxGames << " Rounds" << endl;
+
+ return 0; // indicates successful termination
+
+} // end main
+
+// roll dice, calculate sum and display results
+int rollDice( void )
+{
+ int die1;
+ int die2;
+ int workSum;
+
+ die1 = 1 + rand() % 6; // pick random die1 value
+ die2 = 1 + rand() % 6; // pick random die2 value
+ workSum = die1 + die2; // sum die1 and die2
+
+ // display results of this roll
+ // cout << "Player rolled " << die1 << " + " << die2
+ // << " = " << workSum << endl;
+
+ return workSum; // return sum of dice
+
+} // end function rollDice
|
