Lotto



  • moin.

    hab für die schule ein Lotto programm schreiben wollen
    sieht so aus:

    #include <stdio.h>
    #include <time.h>
    #include <conio.h>
    
    int main() {
        int lotto[7]={0}; // lotto[0] -> Temp für Bubblesort lotto[1] bis lotto[6] für die Lottozahlen
        int i=1, k=1;
    
        printf("<<Lottogenerator! Press Enter to continue>>");
        getch();
    
        for(i=1; i<7; i++) {
    
                 lotto[i]=srand(time(0))%49 +1;
    
                 for (k=1; k<7; k++) if(lotto[i] == lotto[k]) i--;
        }
    
        for(i=1; i<7; i++) printf("\n%i. %i",i,lotto[i]);
        getch();
    }
    

    Ist klar was es machen soll: 6 mal geht es eine schleife durch die die Werte der Arrays "lotto[i]" auf zufalls zahlen zwischen 1-49 gesetzt werden soll.
    nach dem vorgang wird aber mit jedem der 6 arrays die die letzte gezogene zahl vergleichen und wenn diese gleich ist wird i um eins runter gesetzt -> ergo: er macht die aktuelle ziehung nochmal.

    dannach gibts nur noch die ausgabe der lottozahlen..

    aber das programm hängt sich auf.. das hängt nach einigen tests auch glaub ich mit der for-if schleife zusammen die i--; setzt...

    wisst ihr eine Lösung? danke im vorraus



  • Die Funktion srand() initalisiert nur den Zufallszahlengenerator.
    Diese Funktion musst du nur einmal am Anfang aufrufen.
    Zum Erzeugen einer Zufallszahl verwendest du dann rand()



  • hm.. hab ich schon geändert aber wenns dann

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <time.h>
    
    int main() {
        int lotto[7]={0}; // lotto[0] -> Temp für Bubblesort;  lotto[1] bis lotto[6] -> Lottozahlen
        int i=1, k=1;
    
        srand(time(0));
    
        printf("<<Lottogenerator! Press Enter to continue>>");
        getch();
    
        do {
            lotto[i] = (rand()%49+1);             
            k=1;
    
            while (k<7)  if(lotto[i] == lotto[k]) {
                   i--;
                   k=10;
            }
            i++;
    
        } while (i<7);
    
        for(i=1; i<7; i++) printf("\n%i. %i",i,lotto[i]);
        getch();
    }
    

    ist funkt es genauso wenig...



  • // doch nicht.



  • In der inneren Schleife solltest du auf k<i überprüfen.
    Sonst ist es ja klar das es jedesmal einen Treffer gibt.
    Zum Stil: Schonmal was von continue und break gehört?

    //EDIT
    Achja Arrays fangen bei 0 mit dem zählen an. lotto[0] ist also
    das erste Element! Wenn du das nicht beachtest hast du am Schluss
    eine Zahl zu wenig.



  • doch:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    
    void do_draw( unsigned short draw[ 7 ] ) {
    
    	unsigned short pod[ 49 ];
    	size_t i = 0;
    	size_t current;
    
    	for( ; i < 49; pod[ i ] = i + 1, ++i );
    
    	for( i = 0; i < 7; ++i ) {
    
    		do {
    			current = rand( ) % 49;
    
    		} while( !pod[ current ] );
    
    		draw[ i ] = pod[ current ];
    		pod[ current ] = 0;
    	}
    }
    
    int main() {
    
    	unsigned short draw[ 7 ];
    	size_t i = 0;
    
    	srand( ( ( unsigned	) time( 0 ) ) );
    	do_draw( draw );
    
    	puts( "Die Lottozahlen:" );
    
    	for( i = 0; i < 6; ++i ) {
    
    		printf( "%i, ", draw[ i ] );
    	}
    
    	printf( "Zusatzzahl: %i\n", draw[ 6 ] );
    }
    

    greetz, Swordfish



  • naja hab iwie rumgefummelt und mit ner forschleife anstatt ner while gings dann letzt endlich.

    thx @swordfisch ^^" aber die meisten befehle davon sind mir neu und war eigendlich nur auf fehler suche.. trotzdem ty

    @strom: steht als comment dahinter das lotto[0] quasi eine temp variable ist

    ^^ das war der erste part und schließend wollte ich lotto[0] also temp für bubblesort usen.

    trotzdem danke euch beiden!



  • #include <stdio.h>
    #include <time.h>
    
    int main() 
    {
        int lotto[7]={0}; // lotto[0] -> Temp für Bubblesort lotto[1] bis lotto[6] für die Lottozahlen
        int i,k;
    
        printf("<<Lottogenerator! Press Enter to continue>>");
        getchar();
    
        srand(time(0));
    
        for(i=1; i<7; i++) 
        {
          lotto[i]=rand()%49 +1;
          for (k=1; k<i; k++) 
            if(lotto[i] == lotto[k]) 
              i--;
        }
    
        for(i=1; i<7; i++) 
          printf("\n%i. %i",i,lotto[i]);
    
        getchar();
    }
    

    🙂


Anmelden zum Antworten