C - Projekt
-
-.- -.-
-
Ich habe den Code mal etwas besser formatiert und zwei Kommentare in Zeile 87+88 hinterlassen:
#include <stdio.h> #include <stdlib.h> #include <time.h> double fak (double n) { //Unterfunktion Fakultät if(n == 0) return 1; return n*fak(n-1); } int main(void) { int Untergrenze = 1; int Obergrenze = 49; int ziehung = 6; int sortierung1; int sortierung2; double binom =1; int i; int j; int k; int m = 0; int eingabe[6]; int Lottozahlen[6]; int treffer[6]; printf("Geben Sie bitte 6 Zahlen von 1-49 ein um an der Lotterieziehung teilzunehmen."); for(i=0; i<ziehung; i++) { printf("\n\nZahleneingabe: "); scanf("%d",&eingabe[i]); while (eingabe[i] < 1) { printf("\n\nIhre Eingabe ist kleiner als zulaessig."); printf("\nWiederholen Sie die Zahleneingabe. "); printf("\n\nZahleneingabe: "); scanf("%d",&eingabe[i]); } while (eingabe[i] > 49) { printf("\n\nIhre Eingabe ist groesser als zulaessig."); printf("\nWiederholen Sie die Zahleneingabe. "); printf("\n\nZahleneingabe: "); scanf("%d",&eingabe[i]); } } //Ende FOR-Schleife für Eingabe for(i=0; i<ziehung; i++) { //Zahlen aufsteigend sortieren for(k=0; k<=4; k++) { if(eingabe[k+1]<=eingabe[k]) { sortierung1=eingabe[k+1]; eingabe[k+1]=eingabe[k]; eingabe[k]= sortierung1; } } } printf("\n\nIhre ausgewaehlten Lottozahlen lauten: \n\n"); printf("1.Auswahl: %d\n",eingabe[0]); printf("2.Auswahl: %d\n",eingabe[1]); printf("3.Auswahl: %d\n",eingabe[2]); printf("4.Auswahl: %d\n",eingabe[3]); printf("5.Auswahl: %d\n",eingabe[4]); printf("6.Auswahl: %d\n",eingabe[5]); while (m < 3) { printf("\n\nDie momentanen Lottozahlen lauten: \n\n"); for (i=0; i<ziehung; i++) { srand(time(NULL)+i); /** srand nur einmal am Programmstart aufrufen! **/ Lottozahlen[i] = /** Hier muss 1+ hin, sonst kann auch 0 vorkommen **/ 1 + (rand() % Obergrenze + Untergrenze); } //Ende der FOR-Schleife für Lottozahlen for(i=0; i<ziehung; i++) { //FOR-Schleife für Sortierung der Lottozahlen aufsteigend for(k=0; k<=4; k++) { if(Lottozahlen[k+1]<=Lottozahlen[k]) { sortierung2=Lottozahlen[k+1]; Lottozahlen[k+1]=Lottozahlen[k]; Lottozahlen[k]= sortierung2; } } } // Ende FOR-Schleife für Sortierung der Lottozahlen for(i=0; i<ziehung; i++) //Zufallszahlen ausgeben printf("%d.Lottozahl: %d\n",i+1,Lottozahlen[i]); for (i=0; i<ziehung; i++) if(Lottozahlen[i]==eingabe[0]) { treffer[m]=eingabe[0]; m++; } for (i=0; i<ziehung; i++) if(Lottozahlen[i]==eingabe[1]) { treffer[m]=eingabe[1]; m++; } for (i=0; i<ziehung; i++) if(Lottozahlen[i]==eingabe[2]) { treffer[m]=eingabe[2]; m++; } for (i=0; i<ziehung; i++) if(Lottozahlen[i]==eingabe[3]) { treffer[m]=eingabe[3]; m++; } for (i=0; i<ziehung; i++) if(Lottozahlen[i]==eingabe[4]) { treffer[m]=eingabe[4]; m++; } for (i=0; i<ziehung; i++) if(Lottozahlen[i]==eingabe[5]) { treffer[m]=eingabe[5]; m++; } if (m > 2) { printf("\nGlueckwunsch, Sie haben %d Zahlen getroffen.\n",m); printf("Die folgenden Zahlen sind richtig: "); for(i=0;i<m;i++) //Ausgabe aller richtig getroffenen Zahlen printf("%d ",treffer[i]); } } //Ende While schleife binom = fak(49) / (fak(6) * fak(43)); //Binomialkoeffizienten berechnen printf("\n\nDie Anzahl der moeglichen Ziehungen: %.0lf", binom); return 0; }
Dein Problem ist, dass du:
printf("\n\nDie momentanen Lottozahlen lauten: \n\n"); for (i=0; i<ziehung; i++) { srand(time(NULL)+i); /** srand nur einmal am Programmstart aufrufen! **/ Lottozahlen[i] = /** Hier muss 1+ hin, sonst kann auch 0 vorkommen **/ 1 + (rand() % Obergrenze + Untergrenze); } //Ende der FOR-Schleife für Lottozahlen for(i=0; i<ziehung; i++) { //FOR-Schleife für Sortierung der Lottozahlen aufsteigend for(k=0; k<=4; k++) { if(Lottozahlen[k+1]<=Lottozahlen[k]) { sortierung2=Lottozahlen[k+1]; Lottozahlen[k+1]=Lottozahlen[k]; Lottozahlen[k]= sortierung2; } } } // Ende FOR-Schleife für Sortierung der Lottozahlen for(i=0; i<ziehung; i++) //Zufallszahlen ausgeben printf("%d.Lottozahl: %d\n",i+1,Lottozahlen[i]);
In der while Schleife ausführst und die Lottozahlen so oft ausgegeben werden bis m = 3 ist,
und weil du m++ immer in der if-Anweisung stehen hast, wird es nur erhöht wenn eine Lottozahl übereinstimmt.
Die ganzen for-Schleifen am Ende kannst du auserdem durch eine verschachtelte ersetzen und j ist "unused"
-
gehört ins C-Forum
-
camper schrieb:
gehört ins C-Forum
Oder eher in den Müll, da der Threadersteller seinen Eingangsbeitrag verunstaltet hat und somit diesen Thread für die Gemeinschaft unbrauchbar gemacht hat. Erstmal schön Hilfe suchen und dann allen gegen's Knie treten