C :: Aufgabe #68

2 Lösungen Lösungen öffentlich

Verteilung beim Würfeln mit zwei Würfeln

Anfänger - C von Alucard1766 - 11.02.2015 um 13:59 Uhr
Angenommen du wirfst sehr viel mal mit zwei Würfeln. Wie sieht die Verteilung der Summe der geworfenen Würfelzahlen aus?

Vorgaben:
Simuliere möglichst zufällig sehr viele Würfe mit zwei Standardwürfel(=1-6).
Mindestens 100'000 Würfe, je mehr desto besser. -> Performanter Code
Gib aus, wie die Verteilung der Summe der beiden Würfeln prozentual/im Verhältnis aussehen
Du musst in der Lösung auf dieser Seite eine gut sicht- und interpretierbare Darstellung der Verteilung haben, damit wir die Ergebnisse vergleichen können


Beispiel:

Konsolenausgabe:

1. Wurf: 1 und 5 - Summe 6
2. Wurf: 4 und 2 - Summe 6
...
100000. Wurf: 3 und 1 - Summe 4

Ergebnis:
1 - 5%
2 - 7%
12 - 6%

Lösungen:

vote_ok
von DBqFetti (2480 Punkte) - 12.02.2015 um 20:24 Uhr
Quellcode ausblenden C-Code
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

void main(){
	const int WUERFEGESAMT = 100000;
	char wuerfel[WUERFEGESAMT][3];

	time_t zeit;
	time(&zeit);
	srand((unsigned int)zeit);

	printf("%i mal w%crfeln lassen!", WUERFEGESAMT, 129);
	getch();

	for(int i = 0; i < WUERFEGESAMT; i++){
		wuerfel[i][0] = (rand() % 6) + 1;
		wuerfel[i][1] = (rand() % 6) + 1;
		wuerfel[i][2] = wuerfel[i][0] + wuerfel[i][1];
	}

	printf("\n\nW%crfeln abgeschlossen, Ausgabe?\n-%cberspringen mit Esc", 129, 154);
	if(getch() != 27){
		for(int i = 0; i < WUERFEGESAMT; i++){
			printf("%6i. Wurf: %i und %i - Summe %2i\n", i+1, wuerfel[i][0], wuerfel[i][1], wuerfel[i][2]);
		}
	}

	printf("\nDurchschnitt berechnen!");
	getch();

	int anteil[11];
	for(int i = 0; i < 11; i++) anteil[i] = 0;
	for(int i = 0; i < WUERFEGESAMT; i++){
		anteil[wuerfel[i][2]-2]++;
	}

	for(int i = 0; i < 11; i++){
		printf("\n%2i - %.1lf2%%", i + 2, (100 / (double)WUERFEGESAMT) * anteil[i]);
	}

	getch();
}
vote_ok
von kathleenw (3600 Punkte) - 03.07.2020 um 10:56 Uhr
Quellcode ausblenden C-Code
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int zufallszahl(int min, int max)
{
    int zahl;
    zahl= (rand()%((max+1)-min))+min;
    return zahl;
}

int main()
{
    int wuerfel1, wuerfel2, summe, i;
    long obere_grenze;
    int ergebnisse[13]= {0};
    const int min=1, max=6;
    
    srand(time(NULL));
    
    printf("Wie oft soll gewürfelt werden? ");
    scanf("%ld", &obere_grenze);
    fflush(stdin);
    
    for (i=1;i<=obere_grenze;i++) {
        wuerfel1 = zufallszahl(min, max);
        wuerfel2 = zufallszahl(min,max);
        summe = wuerfel1 + wuerfel2;
        ergebnisse[summe] = ergebnisse[summe] + 1;
    }
    
    printf("\nEs wurde %ld gewürfelt. \nDabei ergibt sich folgende Verteilung:\n\n", obere_grenze);
    
    for (i=2;i<=12;i++)
        printf("%2d \t %7d \t %6.2f \n", i, ergebnisse[i], ((float)ergebnisse[i]/obere_grenze)*100);
    
    printf("\n");
}