ein tolles Würfelspiel



  • hallo liebe c++ Community,
    ich habe hier mal ein kleines verständnis Problem.

    Aufgabe:

    Schreiben Sie ein Programm, das simuliert, zwei Würfel 6000mal zu werfen.
    Ergänzen Sie die Simulation um eine Häufigkeitstabelle, die angibt, wie oft die möglichen Augenzahlen eines Wurfes (2 bis 12) gefallen sind.
    

    Quellcode:

    #include <iostream>
    #include <conio.h>
    #include <stdlib.h>
    #include <windows.h>
    using namespace std;
    
    void wuerfelwurf()
    {
    	int wuerfel[2],zahlen[12],ergebnis[12];
    	for(int k = 0; k<=12; ++k)
    	{
    		for(int i = 0; i<=6000; ++i)
    		{
    			wuerfel[0]=(rand()%6+1);
    			wuerfel[1]=(rand()%6+1);
    			ergebnis[k] = wuerfel[1]+wuerfel[0];
    
    			for(int u = 0; u<=12; ++u)
    			{
    				system("CLS");
    				if(ergebnis[k]==u){zahlen[u]++;}
    				cout << u<< ". =" << ergebnis[k] << endl;
    			}
    		}
    	}
    }
    int main()
    {
    	wuerfelwurf();
    	getch();
    	return 0;
    }
    

    Problem:
    Da wir Programmierer die meisten relativ Faul sind, möchte ich mein Code so schlank wie möglich halten. Zu erst entwickelte ich eine extrem umständliche c Version, da ich ja aber c++ programmieren will, entwickelte ich das ganze was oben zu sehen ist, leider, wird in der DOS-Box das falsche angezeigt.
    bzw auch nur eine Zeile, statt 12. zum schluss soll nur noch eine ausgabe stehen. und die werte die mir nun ausgespuckt werden scheinen relativ falsch zu liegen.

    hier noch einmal die c variante (ist nicht die sinnvollste)

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    int main()
    {
    	int wu1 = 0;
    	int wu2 = 0;
    	int erg = 0;
    	int i = 0;
    	int eins = 0;
    	int zwei = 0;
    	int drei = 0;
    	int vier = 0;
    	int fuenf = 0;
    	int sechs = 0;
    	int sieben = 0;
    	int acht = 0;
    	int neun = 0;
    	int zehn = 0;
    	int elf = 0;
    	int zwoelf = 0;
    
    	for (i=0; i<6000; i++ )
    	{
    		wu1 = rand() % 6 + 1;
    		wu2 = rand() % 6 + 1;
    		erg = wu1+wu2;
    
    			if(erg == 1)
    		{
    			eins++;
    		}
    
    			if(erg == 2)
    		{
    			zwei++;
    		}
    
    			if(erg == 3)
    		{
    			drei++;
    		}
    
    			if(erg == 4)
    		{
    			vier++;
    		}
    
    			if(erg == 5)
    		{
    			fuenf++;
    		}
    
    			if(erg == 6)
    		{
    			sechs++;
    		}
    
    			if(erg == 7)
    		{
    			sieben++;
    		}
    
    			if(erg == 8)
    		{
    			acht++;
    		}
    
    			if(erg == 9)
    		{
    			neun++;
    		}
    
    			if(erg == 10)
    		{
    			zehn++;
    		}
    
    			if(erg == 11)
    		{
    			elf++;
    		}
    
    			if(erg == 12)
    		{
    			zwoelf++;
    		}
    
    	}	
    
    	printf("%d\n",eins);
    	printf("%d\n",zwei);
    	printf("%d\n",drei);
    	printf("%d\n",vier);
    	printf("%d\n",fuenf);
    	printf("%d\n",sechs);
    	printf("%d\n",sieben);
    	printf("%d\n",acht);
    	printf("%d\n",neun);
    	printf("%d\n",zehn);
    	printf("%d\n",elf);
    	printf("%d\n",zwoelf);
    	getch();
    
    }
    

    Hoffe jemand versteht das Problem.

    Lieben Gruß DFZ



  • Ich glaube, da werden tausende von Zeilen geschrieben ...
    aber Du machst ja vor jeder Ausgabe den Schirm leer!



  • ja drum, damit ich nur 12 mal stehen habe
    1.=bla
    .
    .
    .
    .
    .
    12=blub

    und der bildschirm soll gelert werden damit da eben nicht tausend zeilen stehen.
    aber er macht ja nur einmal eine ausgabe. verstehst du?

    edit:

    habe grade gemerkt das wenn ich ein kleines Sleep einbaue, dass sich die zahl verändert vorne aber die ausgabe gleich bleibt, das meint egal ob einser pasch ist zb immer 4 mal vorhanden.
    aber auch 5er pasch ist 4 mal vorhanden 😕



  • erst wollte ich einige Anmerkungen in dein Beispiel schreiben, aber des hätte net alles reingepasst, drum hab ich bissl was abgeändert und versucht, deinen Ansatz beizubehalten

    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    void wuerfelwurf()
    {
        int wuerfel[2];
        int ergebnis[11] = {0,0,0,0,0,0,0,0,0,0,0};
    
    	for(int i = 0; i<6000; ++i)
    	{
    		wuerfel[0]=(rand()%6);
            wuerfel[1]=(rand()%6);
    
            ergebnis[wuerfel[1]+wuerfel[0]]++;
        }
    
        for(int i = 0; i<11; ++i)
    	{
    		cout << (i+2) << ". =" << ergebnis[i] << endl;
    	}
    }
    int main()
    {
        srand(time(NULL));
    
        wuerfelwurf();
        cin.get();
    
        return 0;
    }
    


  • Top Antwort.

    Ich danke dir vielmals...

    😉



  • Bin ich noch nicht richtig wach?
    Wo initialisiert ihr eure Zufallsroutine?
    So solltet fast immer die gleiche Reihenfolge beim Fallen der Würfel bekommen.

    Keine Ahnung ob das Einfluss auf die Zufallsverteilung hat.

    MfG f.-th.



  • *LOL* ... du hast recht 😃 des ist mir net mal aufgefallen.

    Ich ergänze es oben im Code ... erzähl das blos net weiter 😉


Log in to reply