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"


  • Mod

    gehört ins C-Forum


  • Mod

    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 👎


Anmelden zum Antworten