C :: Aufgabe #3 :: Lösung #4

4 Lösungen Lösungen öffentlich
#3

Lotto - Simulation - 6 aus 49

Anfänger - C von Gustl - 25.11.2012 um 16:16 Uhr
Schreiben Sie ein Programm, welches 6 Zahlen zwischen 1 und 49 abfrägt. Danach soll das Programm solange 6 Zufallszahlen berechnen bis alle 6 eingegebenen Zahlen übereinstimmen. Natürlich darf eine Zahl nicht zweimal vorkommen.
Dann soll ausgegeben werden nach wie vielen "Spielen" ein 6er erzielt wurde und wie hoch die Chance auf einen 3er, einen 4er und einen 5er war.
#4
vote_ok
von kathleenw (3600 Punkte) - 08.07.2020 um 08:16 Uhr
Quellcode ausblenden C-Code
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdbool.h>
#include <time.h>
#include <unistd.h>

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

bool ueberpruefe(int zahlen[], int zufallszahl)
{
    int i;
    bool ergebnis;
    

    for (i=0;i<6;i++)
    {
        if (zahlen[i] == zufallszahl)
        {
            ergebnis = true;
            break;
        }
        else
        {
            ergebnis = false;
        }
    }
    
    return ergebnis;
}

int zahlen_stimmen(int zufall[], int zahlen[])
{
    int anzahl_richtige, i, j;
    anzahl_richtige = 0;
    
    for (i=0;i<6;i++)
    {
        for (j=0;j<6;j++)
        {
            if (zufall[i]==zahlen[j])
                anzahl_richtige++;
        }
    }
    
    return anzahl_richtige;
}

double berechne_versuche(double haeufig[])
{
    int anzahl,i;
    anzahl = 0;
    
    for (i=0;i<7;i++)
    {
        anzahl = anzahl + haeufig[i];
    }
    
    return anzahl;
}

int main(void)
{
    int zahlen[] = {1,2,3,4,5,6};
    int zufall[6] = {0};
    int gefunden[6] = {0};
    double haeufigkeit[7] = {0};
    int i, j, auswahl, anzahl_simulationen, richtige;
    double versuche, versuche_gesamt;
    
    srand((unsigned)time(NULL));
    anzahl_simulationen = 1;
    versuche_gesamt = 0;
    
    
    printf("Bitte gebe die Zahlen ein, auf welche du tippen möchtest: \n");
    for (i=0;i<6;i++) {
        printf("%d. Zahl: ", i+1);
        scanf("%d", &zahlen[i]);
        if (zahlen[i]>49 || zahlen[i]<1) {
            printf("Die Zahl muss zwischen 1 und 49 liegen\n");
            --i;
        }
            
    }
    
    
    printf("\nMöchtest du die Wahrscheinlichkeit für einer 3er, 4er, 5er oder 6er berechnen?  ");
    scanf("%d", &auswahl);
    
    for (j=0;j<anzahl_simulationen;j++)
    {
        for (i=0; i<6; i++)
            gefunden[i] = 0;
        for (i=0; i<6; i++)
            haeufigkeit[i] = 0;
        do {
            //Finde 6 unterschiedliche Zufallszahlen
            for (i=0; i<6; i++) {
                zufall[i] = zufallszahl();
                
                if (ueberpruefe(gefunden,zufall[i])==true)
                    --i;
                else {
                    gefunden[i] = zufall[i];
                    //printf("%d, ",zufall[i]);
                }
            }
            
            //Wieviele richtige gibt es?
            richtige = zahlen_stimmen(zufall,zahlen);
            
            //Aufaddieren
            haeufigkeit[richtige] = haeufigkeit[richtige] + 1;
        } while (haeufigkeit[auswahl]==0);
        versuche = berechne_versuche(haeufigkeit);
        printf ("%.0f ",versuche);
        versuche_gesamt=versuche_gesamt + versuche;
    }
    
    printf("\n\nBei einer Simulationen wurden im Schnitt %.0f Ziehungen für einen %der gebraucht.\nDie Wahrscheinlichkeit liegt damit bei %.20f\nEs gibt 104 Ziehungen pro Jahr, damit brauchen sie %.0f Jahre eh sie wahrscheinlich einen %der haben.\n\n",(float)versuche_gesamt/anzahl_simulationen,auswahl,1/((float)versuche_gesamt/anzahl_simulationen),((float)versuche_gesamt/anzahl_simulationen)/104,auswahl);
    
  
    return EXIT_SUCCESS;
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2097031

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.