Leiterspiel programmieren
-
Hi Leute
Ich hab da so ein problem mit ner aufgabe
Wie kann ich ein Ergebnis mehrmals speichern, um es am ende in einer Durchschnittsrechnung verarbeiten, obwohl ich die Variable mit der das Ergebnis verknüpft ist immer wieder in einer Schleife benutze?#include <stdlib.h> #include <iostream> #include <stdio.h> #include <time.h> using namespace std; //Funktionsdeklarationen int wuerfel(); int main() { bool on = true; int augen = 0; int neueposition = 0; const int ZIEL = 99; int anzahl = 0; int runden = 0; int anzahlwuerfe = 0; int durchschnitt = 0; int anzahlWuerfeProSpiel = 0; cout << "Geben sie die Anzahl der zu simulierenden Spiele ein: "; cin >> anzahl; srand((unsigned)time(0)); for (int i = 0; i < anzahl; ++i) { while (on == true) { anzahlwuerfe++; augen = wuerfel(); neueposition = neueposition + augen; if (neueposition > ZIEL) { int ueberschuss = 0; ueberschuss = neueposition - ZIEL; neueposition = neueposition - ueberschuss - 1 ; } switch(neueposition) { case 3: { runden = runden + 1; } break; case 5: { neueposition = 26; } break; case 9: { neueposition = 18; } break; case 18: { neueposition = 9; } break; case 23: { neueposition = 45; } break; case 26: { neueposition = 5; } break; case 31: { neueposition = 36; } break; case 36: { neueposition = 31; } break; case 39: { neueposition = 66; } break; case 45: { neueposition = 23; } break; case 46: { neueposition = 58; } break; case 49: { neueposition = 54; } break; case 53: { neueposition = 81; } break; case 54: { neueposition = 49; } break; case 58: { neueposition = 46; } break; case 61: { neueposition = 74; } break; case 66: { neueposition = 39; } break; case 68: { neueposition = 98; } break; case 74: { neueposition = 61; } break; case 77: { neueposition = 90; } break; case 79: { neueposition = 87; } break; case 81: { neueposition = 53; } break; case 87: { neueposition = 79; } break; case 90: { neueposition = 77; } break; case 98: { neueposition = 68; } break; case 99: { on = false; } } } anzahlWuerfeProSpiel = anzahlwuerfe; //<-- hier ist das Problem } durchschnitt = 1; cout << "Durchschnitt: " << anzahlWuerfeProSpiel; return 0; } //Funktionsdefinitionen int wuerfel() { int augen = 0; augen = (rand() % 6) + 1; return augen; }
-
double summe = 0; //wichtig die summe beginnt mit 0 for(int i = 0; i < anzahl; i++) { double ergebnis = 0; //ergebnis sei dein Würfelwurf // ToDo: ermittle hier den Wert von 'ergebnis' summe += ergebnis; // hier werden die ergebnisse aufsummiert } summe /= anzahl // und am ende durch die anzahl der ermittelten ergebnisse teilen. std::cout << "Durchschnitt: " << summe;Hoffe das hilft

-
Ich bin mir nicht sicher ob ich verstanden habe, wie genau der Spielablauf ist.
Momentan werden bei mehr als einem Spiel (anzahl>1) die Werte nicht zurückgesetzt, was natürlich zur Folge hat, das das zweite Spiel augenblicklich beendet ist, da neueposition den Wert 99 hat (ich würde case 99 ersetzen durch case ZIEL). Du solltest also vor jedem neuen Spiel die Werte zurücksetzen.Wenn ich dich richtig verstanden habe möchtest du ausgeben, wieviele Würfe durchschnittlich für das Beenden der Spiele notwendig waren.
Eine Möglichkeit wäre die Anzahl der Gesamtwürfe (Würfe aller Spiele) durch die Anzahl der Spiele zu teilen, dann bräuchtest du anzahlWuerfeProSpiel garnicht.Du könntest auch die Anzahl der Würfe pro Spiel speichern, diese später aufaddieren und dann durch die Anzahl der Spiele teilen. Dafür könntest du z.b. einen Vector nutzen.
#include <vector> #include <numeric> ... vector<int> anzahlWuerfeProSpiel; ... for (int i = 0; i < anzahl; ++i) { ... anzahlWuerfeProSpiel.push_back(anzahlwuerfe); } cout << "Durchschnitt: " << accumulate(anzahlWuerfeProSpiel.begin(), anzahlWuerfeProSpiel.end(), 0.0) / anzahlWuerfeProSpiel.size();P.S.: erste Möglichkeit wird durch Guckstu hier gezeigt