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

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.
#2
vote_ok
von schlemiel (160 Punkte) - 13.11.2015 um 20:03 Uhr
Quellcode ausblenden C-Code
/*
 * lottoanalyse.c
 *
 *  Created on: 12.11.2015
 *      Author: schlemiel
 */

#include <stdio.h>
#include <time.h> 	// wegen srand()
#include <stdlib.h>
#include <unistd.h> // wegen sleep()

//globale Variablen
int inLotto[6];
int randLotto[6];
int anzVersuche;
int anzTreffer[4];
long maxVersuche = 10000000;

//Funktionsköpfe
void loeschen();
void titel();
void menu();
void status();
int arrSort();
int arrCmp();
void eingabe();
void curserSetzen();
void ausgabe();
void zufallsZahlenreihe();
int zahlenVergleich();



//Hauptprogramm
int main(void) {
	menu();
}

void loeschen() { //Bildschirm löschen und Pos 1/1 setzen
	printf("\033[2J");
	printf("\033[1;1H");
}

void titel(){ //Überschrift
	loeschen();
	printf("=====================================\n");
	printf("             Lottozahlen             \n");
	printf("=====================================\n");
}

void menu() {
	int auswahl;
		titel();
		printf("=====================================\n");
		printf("              Auswahl                \n");
		printf("=====================================\n");
		printf("Zahlenreihe 1 selbst eingeben-------1\n");
		printf("Zahlenreihe 1 erstellen lassen------2\n");
		printf("Zahlenreihe 2 erstellen lassen------3\n");
		printf("Automat-(%ld)------------------4\n",maxVersuche);
		printf("-------------------------------------\n");
		printf("Programm Beenden--------------------9\n");
		printf("=====================================\n");
		status();
		scanf("%d", &auswahl);
		switch (auswahl) {
			case 1:
				curserSetzen(20, 1);
				eingabe();
				menu();
				break;
			case 2:
				curserSetzen(20, 1);
				zufallsZahlenreihe(inLotto);
				menu();
				break;
			case 3:
				curserSetzen(20, 1);
				zufallsZahlenreihe(randLotto);
				menu();
				break;
			case 4:
				status();
				int treffer;
				for(long a = 0; a < maxVersuche; a++) {
					zufallsZahlenreihe(randLotto);
					anzVersuche = a+1;
					treffer = zahlenVergleich();
					if(treffer == 6) {
						anzTreffer[3]++;
						break;
					}
					else if(treffer == 3) anzTreffer[0]++;
					else if(treffer == 4) anzTreffer[1]++;
					else if(treffer == 5) anzTreffer[2]++;
					status();
					printf("Trefferanzahl: %d\n", treffer);
				}
				menu();
				break;
			case 9:
				curserSetzen(20,1);
				titel();
				printf("Programm beendet!\n");
				break;
			default:
				curserSetzen(20,1);
				printf("Auswahl nicht möglich!");
				sleep(1);
				menu();
				break;
		}
}

void status() {
	curserSetzen(14,1);
	printf("Status:\n");
	printf("Zahlenreihe 1: ");
	ausgabe(inLotto);
	printf("Zahlenreihe 2: ");
	ausgabe(randLotto);
	printf("Übereinstimmungen: %d x 3 / %d x 4 / %d x 5 / %d x 6\n", anzTreffer[0], anzTreffer[1], anzTreffer[2], anzTreffer[3]);
	printf("Versuche: %d\n", anzVersuche);
	printf("Prozentuale Verteilung: 3 = %.2lf / 4 = %.2lf / 5 = %.2lf\n", ((double)anzTreffer[0]/anzVersuche*100),
			((double)anzTreffer[1]/anzVersuche*100), ((double)anzTreffer[2]/anzVersuche*100));
}

int arrSort(const void *aa, const void *bb) { //Array sortieren
    const int *a = aa, *b = bb;
    return (*a < *b) ? -1 : (*a > *b);
}

int arrCmp(int tmp, int tmp1[6]) { //Arrays vergleichen
	for(int i = 0; i < 6; i++) {
		if(tmp == tmp1[i])
			return 0;
	}
	return 1;
}

void eingabe() { //Zahleneingabe
	int tmp;
	curserSetzen(20,1);
	printf("Bitte 6 Zahlen zwischen 1 und 49 eingeben! "
			"(Eingabe mit Return abschließen)\n");
	for(int i = 0; i < 6; i++) {
		scanf("%d", &tmp);
		if(tmp < 1 || tmp > 49) {
			printf("Zahl liegt nicht zwischen 1 und 49!\n");
			i--;
		}
		else if (arrCmp(tmp, inLotto)==0) {
			printf("Zahl schon vorhanden!\n");
			i--;
		}
		else {
		inLotto[i]=tmp;
		}
	}
}

void zufallsZahlenreihe(int arrZahlen[]) { //6 Zufallszahlen erstellen
	int tmp;
	srand(time(NULL));
	for(int i = 0; i < 6; i++) {
		tmp = rand()%49+1;
		if(arrCmp(tmp, arrZahlen) == 0) {
			i--;
		} else {
			arrZahlen[i] = tmp;
		}
	}
}

void curserSetzen(int a, int b) { //Curser an bestimmte Stelle setzen
	printf("\033[%d;%dH", a, b);
}

void ausgabe(int arr[]) {
	qsort(arr, 6, sizeof(int), arrSort);
	for(int i = 0; i < 6; i++) {
		printf("%d ", arr[i]);
	}
	printf("\n");
}

int zahlenVergleich() { //gesamte Arrays vergleichen
	int anzahl = 0;
		for(int i = 0; i < 6; i++) {
			for(int j = 0; j < 6; j++) {
				if(inLotto[i] == randLotto[j])
					if(inLotto[i] != 0)
						anzahl++;
			}

		}
		return anzahl;
}

Kommentare:

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

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