Zufallszahlen mit Beispiel Würfel-->komme nicht zum Ergebnis
-
Hi @ all
haben in der Schule ne Aufgabe bekommen, in C++ ein Programm zu erstellen, das den Würfel widerspiegelt....
das heißt es sollen zufällige Zahlen von 1 bis 6 generiert werden
man soll N mal würfeln können
und hinter eine Überpüfung machen, wie oft eine Zahl gewürfelt wurde....
so, nun ich leider kein C++ Experte bin, habe ich nach 3 Stunden hin und her basteln keine Lösungswege mehr, ich weiß es einfach nicht woran es liegt!
kann mir jemand weiter helfen?
hier ist mein quelltext:
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>void main()
{
int iWurf;
int iZaehler;
int iZahl=0;
int iSumme=0;for (iZaehler=1; iZaehler<20; iZaehler++)
{
iWurf = 1+(rand()%6);
cout<<"\nDer " << iZaehler << ". Wurf : "<< iWurf << endl;
iSumme= iSumme+iWurf;
cout<<endl;
}cout<<"fuer Ueberpruefung der Haufigkeit der Zahlen waehlen Sie: 1, 2, 3, 4, 5 oder 6: \n" ;
cin>>iZahl;
cout<<endl;switch (iZahl)
{
case 1 : iSumme= iWurf++;
cout<<"die Haufigkeit des Wuerfels 1 betraegt: " <<iSumme;
break;
case 2 : iZahl= iWurf+iWurf;
cout<<"die Haufigkeit des Wuerfels 2 betraegt: " <<iSumme;
break;case 3 : iZahl= iWurf+iZahl;
cout<<"die Haufigkeit des Wuerfels 3 betraegt: " <<iSumme;
break;case 4 : iZahl= iWurf++;
cout<<"die Haufigkeit des Wuerfels 4 betraegt: " <<iSumme;
break;case 5 : iZahl= iWurf+iZahl;
cout<<"die Haufigkeit des Wuerfels 5 betraegt: " <<iSumme;
break;case 6 : iZahl= iWurf*iZahl;
cout<<"die Haufigkeit des Wuerfels 6 betraegt: " <<iSumme;
break;default : cout<<"falscher Wurf ";
break;
cout<<endl;
}getch();
}
-
Bitte nimm das nächste mal die Funktion
[/cpp ] Also erstmal heißt es nicht #include <iostream.h> sonder #include <iostream> dann brauchst du noch using namespace std; Ach und es heißt int main() und net void main(). Einen anderen Fehler kann ich im Moment nicht finden! [cpp] #include <iostream> #include <stdlib.h> #include <conio.h> #include <time.h> int main() { int iWurf; int iZaehler; int iZahl=0; int iSumme=0; for (iZaehler=1; iZaehler<20; iZaehler++) { iWurf = 1+(rand()%6); cout<<"\nDer " << iZaehler << ". Wurf : "<< iWurf << endl; iSumme= iSumme+iWurf; cout<<endl; } cout<<"fuer Ueberpruefung der Haufigkeit der Zahlen waehlen Sie: 1, 2, 3, 4, 5 oder 6: \n" ; cin>>iZahl; cout<<endl; switch (iZahl) { case 1 : iSumme= iWurf++; cout<<"die Haufigkeit des Wuerfels 1 betraegt: " <<iSumme; break; case 2 : iZahl= iWurf+iWurf; cout<<"die Haufigkeit des Wuerfels 2 betraegt: " <<iSumme; break; case 3 : iZahl= iWurf+iZahl; cout<<"die Haufigkeit des Wuerfels 3 betraegt: " <<iSumme; break; case 4 : iZahl= iWurf++; cout<<"die Haufigkeit des Wuerfels 4 betraegt: " <<iSumme; break; case 5 : iZahl= iWurf+iZahl; cout<<"die Haufigkeit des Wuerfels 5 betraegt: " <<iSumme; break; case 6 : iZahl= iWurf*iZahl; cout<<"die Haufigkeit des Wuerfels 6 betraegt: " <<iSumme; break; default : cout<<"falscher Wurf "; break; cout<<endl; } getch(); }
-
Hallo,
erstmal was allgemeines (ich glaub ich muss es mal kopieren dass ich es immer nur noch einfügen muss)
a) Für Code die CPP-Tags verwenden ([cpp ] und [/cpp ])
b) Es heißt int main() -> void main() ist laut Standard schlicht und einfach nicht erlaubt.
c) Der Header iostream.h ist seit 1998 (glaub ich) VERALTET! Verwende den Header ohne das .h! Wenn du nicht weißt was es beudeutet dass nun die Klasse im namespace std sind macht das erstmal nichts. Schreibe einfach in die Zeile darunter using namespace std;Gruß
-
so in der art könntest du es lösen (arrays)
code nicht vollständig, und bestimmt mit syntax-fehlern übersäht (habs nur hier reingeschrieben; nicht compiliert etc)soll auch nur als "inspiration" dienen
int iGewuerfelt[6] = {0, 0, 0, 0, 0, 0}; int iAnzahlWuerfe = 20; for (int iZaehler=1; iZaehler<iAnzahlWuerfe; iZaehler++) { iWurf = 1+(rand()%6); cout<<"\nDer " << iZaehler << ". Wurf : "<< iWurf << endl; iGewuerfelt[6][iWurf-1]++; cout<<endl; } for (iZaehler=0; iZaehler<6; iZaehler++) { cout<<"die Haufigkeit des Wuerfels " << iZaehler+1 << " betraegt: " << iGewuerfelt[iZaehler]; }
-
Die Zeile
iGewuerfelt[6][iWurf-1]++;sollte z.b so lauten:
iGewuerfelt[iWurf-1]++;
-
#include <iostream> #include <cassert> using namespace std; int main() { int wuerfelaugenanzahl, n_wuerfe_durchgaenge; int anzahleinser=0, anzahlzweier=0,anzahldreier=0, anzahlvierer=0, anzahlfuenfer=0, anzahlsechser =0; cout<<"Bitte geben Sie ein wie oft gewuerfelt werden soll: "; cin >> n_wuerfe_durchgaenge; assert(n_wuerfe_durchgaenge >0 && n_wuerfe_durchgaenge <9999999); cout << "Wuerfel.... " << endl; cout << "\n><><><><><><><><><><><><><><><><><><><><><" << endl; for (n_wuerfe_durchgaenge; n_wuerfe_durchgaenge>0; --n_wuerfe_durchgaenge) { wuerfelaugenanzahl = 1+(rand()%6); cout << "Ich habe eine " << wuerfelaugenanzahl << " gewuerfelt" << endl; if (wuerfelaugenanzahl == 1) { anzahleinser = anzahleinser +1; } else if(wuerfelaugenanzahl == 2) { anzahlzweier=anzahlzweier+1; } else if(wuerfelaugenanzahl == 3) { anzahldreier = anzahldreier+1; } else if (wuerfelaugenanzahl == 4) { anzahlvierer =anzahlvierer+1; } else if(wuerfelaugenanzahl == 5) { anzahlfuenfer = anzahlfuenfer+1; } else if(wuerfelaugenanzahl == 6) { anzahlsechser = anzahlsechser +1; } else cout << " da lief was falsch" << endl; } cout << "><><><><><><><><><><><><><><><><><><><><><" << endl; cout << "Es gab: "<< anzahleinser << " -> einser" << endl; cout << "Es gab: "<< anzahlzweier << " -> zweier" << endl; cout << "Es gab: "<< anzahldreier << " -> dreier" << endl; cout << "Es gab: "<< anzahlvierer << " -> vierer" << endl; cout << "Es gab: "<< anzahlfuenfer << "-> fuenfer" << endl; cout << "Es gab: "<< anzahlsechser << "-> sechser\n" << endl; return 0; }also mit dem code bekommst du jetzt bei jedem angezeigt wieviel du von jeder Zahl gewürfelt hast .. wenn du allerdings von nur einer Zahl das ergebnis brauchst ist meine nicht gerade Speicherfreundlich da man da dann zuviele variablen braucht ..
Deine Lösung ist vom Ansatz net schlecht aber kuck dir nochmal die switch anweisung an .. da ist nämlich ein fehler drin was addierst du den da zu was .. du addierst .. die würfelaugen zusammen und das ist ja net was du machen willst ..
zumindest hab ich das jetzt mal so verstanden ...Gruss
-
sorry für das einfache einfügen, wusste nicht, dass man das über cpp??? macht, andere frage, was meint ihr damit?
werde gleich noch änderungen machen und noch mal posten, ob es geklappt hat
danke erst mal....
-
Hier, das ist viel schöner und kürzer

#include <iostream> #include <conio> using namespace std; int main(int argc, char* argv[]) { int random; int array[6] = {0}; int eingabe; for (int i = 1; i < 21; i++) { random = (rand()%6)+1; cout << "Die " << i << ". Zahl ist: " << random << endl; array[random-1] += random; } cout << endl << "Geben Sie eine Zahl ein: "; cin >> eingabe; while (eingabe < 1 || eingabe > 6) { cout << "Ungültige Zahl. Zahl muss zwischen 1 und 6 liegen." << endl; cin >> eingabe; } cout << "Es wurde " << array[eingabe-1] / eingabe << "." << " Mal die " << eingabe << " gewuerfelt" << endl; getch(); return 0; }
-
milo51 schrieb:
Hier, das ist viel schöner und kürzer

Da gebe ich dir recht, dein Code ist wirklich schöner .. die Frage ist nur ob ein Anfänger gleich mit zeigern auf arrays arbeiten sollte .. immer eins nach dem andern .. finde ich zumindestens ..
Gruss
-
hi, ja das sieht um einiges schöner aus, aber ich bin leider noch nicht so weit, ich weiß nicht, irgendwie liegt mir C++ nicht, aber gehört zur ausbildung....
und dienstag klausur über die funktionen(bestimmte projekte auslagern, werte übergeben)
schleifen
und struktogrammemit dem letzen habe ich mich mehr oder weniger angefreundet, aber die ersten beiden, kein plan, ich kopiere das einfach nicht, wisst ihr eventuell wo das gut und verständlich erklärt ist?
gruß
-
Guck mal oben rechts in die Bücher- und Tutorialecke. Da findet man immer gute Sachen. Die Forensuche sollte dir auch weiterhelfen etwas zu finden, um C++ zu lernen. Dazu gibt es mehr als genug Threads.
-
so, nun habe ich die veränderung bei iostream gemacht, wenn ich das .h weg lasse, dann erkennt er die befehle nicht! also was cout heißt und so, wenn ich das .h wieder dahin schreibe dann macht er wieder alles...
so, das mit if else gefällt mir auch, aber ich bin nicht drauf gekommen, dass man elseif machen kann, ich wusste nicht was man bei else rein schreiben soll...
was ist denn in meinem queltext falsch?
ich weiß nicht genau was ich da addieren muss, bzw. wie ich die häufigkeit der gewürfelten zahlen ermitteln kann?
der muss ja irgendwie nachsehen, wie oft die eine zahl vorgekommen ist....
und das mit den kurzen und sauberen queltexten, das sah schon um einiges besser aus....aber
bin ein NOOB, und so was ist zwar schön, ich werde es aber nie im leben so hi bekommen, ich will lernen C++ mit einfachsten mitteln zu coden und zwar bis dienstag muss ich es mehr oder weniger drauf haben!
-
hier noch mal überarbeitet, aber läuft immer noch nicht vernünftig!
zählt nicht richtig....
warum?
fehlt da was?
#include <iostream.h> #include <stdlib.h> #include <conio.h> #include <time.h> using namespace std; int main() { int iWurf; int iZaehler; int iZahl=0; int iSumme=0; int iAnzahleinser=0, iAnzahlzweier=0, iAnzahldreier=0, iAnzahlvierer=0, iAnzahlfuenfer=0, iAnzahlsechser=0; for (iZaehler=1; iZaehler<5; iZaehler++) { iWurf = 1+(rand()%6); cout<<"\nDer " << iZaehler << ". Wurf : "<< iWurf << endl; iSumme= iSumme+iWurf; cout<<endl; } cout<<"Die Summe lautet: "<<iSumme; cout<<endl; cout<<endl; cout<<"fuer Ueberpruefung der Haufigkeit der Zahlen waehlen Sie: 1, 2, 3, 4, 5 oder 6: \n" ; cin>>iZahl; cout<<endl; switch (iZahl) { case 1 : iAnzahleinser = iAnzahleinser+1; cout<<"die Haufigkeit des Wuerfels 1 betraegt: " <<iAnzahleinser; break; case 2 : iAnzahlzweier = iAnzahlzweier+1; cout<<"die Haufigkeit des Wuerfels 2 betraegt: " <<iAnzahlzweier; break; case 3 : iAnzahldreier = iAnzahldreier+1; cout<<"die Haufigkeit des Wuerfels 3 betraegt: " <<iAnzahldreier; break; case 4 : iAnzahlvierer = iAnzahlvierer+1; cout<<"die Haufigkeit des Wuerfels 4 betraegt: " <<iAnzahlvierer; break; case 5 : iAnzahlfuenfer = iAnzahlfuenfer+1; cout<<"die Haufigkeit des Wuerfels 5 betraegt: " <<iAnzahlfuenfer; break; case 6 : iAnzahlsechser = iAnzahlsechser+1; cout<<"die Haufigkeit des Wuerfels 6 betraegt: " <<iAnzahlsechser; break; default : cout<<"falscher Wurf "; break; cout<<endl; } getch(); }
-
die anzahleinser, anzahlzweier,... bekommen ja von dem durchlauf in der schleife nichts mit .. so kannst du diese auch nicht hochzählen..
was du machst ist einfach jeder variablen eine 1 zuzuweisen ..in dem du 0+1 machst.gruss
-
Du machst es viel zu kompliziert! Warum switch
Mit Arrays geht so was doch deutlich einfacher, da man die Anzahlen direkt über den Index hochzählen kann.#include <iostream> #include <ctime> using namespace std; int main() { int alleAnzahlen[6] = {0}; int n = 100, i; srand(time(0)); for (i=0; i<n; ++i) ++alleAnzahlen[(rand()%6)]; for (i=0; i<6; ++i) cout << "Es wurde " << alleAnzahlen[i] << " mal " << (i+1) << " gew\x81rfelt." << endl; cin.get(); }
-
weil ich mich mit arrays noch nicht auskenne!
ich weiß ist kompleziert, aber was leichteres fällt mich nicht ein!
und wie mache ich das, dass die zahlen gezählt bzw. aufaddiert werden?
wie weise ich ihm das zu?weil
bei switch sollte er ja gucken, welche zahl betroffen ist, wenn 1 dann das und das usw.
aber wie genau mache ich diese aufzählung?
gruß
-
mit switch ist das ein wenig schwer .. soweit ich das jetzt überblicke müsstest du dir eine Funktion schreiben, die du dann bei jedem case nach der addition wieder erneut aurufst ..
case 1 : iAnzahleinser = iAnzahleinser+1; cout<<"die Haufigkeit des Wuerfels 1 betraegt: " <<iAnzahleinser; counter();korrigiert mich wenn ich daneben liege ..

-
waldemator schrieb:
bei switch sollte er ja gucken, welche zahl betroffen ist, wenn 1 dann das und das usw.
aber wie genau mache ich diese aufzählung?
Wenn du keine arrays benutzt, musst du für das Inkrementieren (Hochzählen) AUCH switch benutzen, wenn 1, dann inkrementiere iAnzahleinser usw. Wenn du Arrays benutzt, kannst du sowohl das Auslesen als auch das Inkrementieren direkt machen, weil du alle Anzahlen mit einer einzigen Variablen ansprechen kannst. Eine einzelne Anzahl kann man so direkt über den Abstand vom Anfang, auch Array-Index genannt, ansprechen.
-
ich kenne die array funktion nicht, außerdem wie meint ihr dann jedes mal eine funktion schreiben?
ich habe es immer noch nicht am laufen, er läuft zwar durch, aber zählt nicht das richtige zusammen!
es kommt immer als häufigkeit nur eine 1 raus...
-
Du mußt in der Schleife, wo du die Zufallszahlen ermittelst, auch die Zählvariablen entsprechend erhöhen:
for (iZaehler=1; iZaehler<5; iZaehler++) { iWurf = 1+(rand()%6); cout<<"\nDer " << iZaehler << ". Wurf : "<< iWurf << endl; iSumme= iSumme+iWurf; cout<<endl; switch(iWurf) { case 1: iAnzahleinser++;break; case 2: iAnzahlzweier++;break; //... 'case 3' bis 'case 6' analog } } cout<<"Welche Anzahl wollen Sie wissen?\n"; cin>>iZahl; switch(iZahl) { case 1: cout<<"Es wurden "<<iAnzahleinser<<" Einser gewürfelt."<<endl;break; //... 'case 2' bis 'case 6' analog default:cout<<"Es gibt keinen Wert "<<iZahl<<" auf dem Würfel."<<endl; }PS: Ein "Array" ist keine Funktion, sondern ein Datentyp, der mehrere gleichartige Werte (z.B. Zahlen) Speichern kann - wie dein Programm mit Arrays aussehen kann, hat z.B. schorch demonstriert.