Lottozahlen im 2D Array



  • Hallo zusammen,

    Ich habe ein kleines Programm geschrieben, mit dem ich Zahlen 6 aus 49 ausgeben kann. Das Programm gibt mir dies als 2D Array aus. Es funktioniert über die random Funktion in C. Wie könnte man nun diese Werte ordnen ? sodass sie der Reihe nach aufsteigen. Dann würde mich noch interessieren, wie es möglich ist doppelte Zahlen auszuschließen.

    Ich freue mich auf eure Antworten, Danke

    BSP:
    1 4 8 10 23 33
    ....
    .
    .



  • Am besten Du schließt doppelte Zahlen schon beim befüllen Deines Arrays aus, oder?
    Darüber musst Du Dir doch schon Gedanken gemacht haben?!



  • C-Fragensteller schrieb:

    Wie könnte man nun diese Werte ordnen ? sodass sie der Reihe nach aufsteigen.

    sortieren.
    Dazu kannst du die Funktion qsort ( http://www.cplusplus.com/reference/cstdlib/qsort/ ) nehmen oder z.B. selber Bubblesort machen.

    C-Fragensteller schrieb:

    Dann würde mich noch interessieren, wie es möglich ist doppelte Zahlen auszuschließen.

    Eine Möglichkeit ist, dass du nachschaust, ob die Zahl schon vorhanden ist und dann nochmal eine berechnest.

    Oder du machst ein Feld mit den Zahlen von 1 bis 49.
    Dann berechnest du den zufälligen Index (0 bis 48). Diese Zahl nimmst du und schreibst an deren Stelle die letzte gültig Zahl.
    Dann berechnest du einen neuen zufälligen Index. Diesmal hats du aber eine Zahl weniger (0 bis 47). Diese Zahl nimmst du und schreibst an deren Stelle die letzte gültig Zahl. usw...

    int index, gezogene_Zahl = 0;
    int Zahlen[]= {1,2,3,4,5,6,7,8,9,10};
    int Gezogen[3];
    
    solange (gezogene_Zahl < 3) {
      index = rand()%(10-gezogene_Zahl);  
      Gezogen[gezogene_Zahl] = Zahlen[index];
      Zahlen[index] = Zahlen[10-1-gezogene_Zahl];
      gezogene_Zahl++;
    }
    


  • Also ich habe mir schon mal einen Bubblesort programmiert, leider nur für ein Normales 1D Array, ich müsste den also zweimal über das gesamte Array laufen lassen, damit alles geordnet ist oder ?

    Wie kann ich denn doppelte Zahlen vor dem Befüllen des 2D Array ausschließen ?

    Danke



  • Wofür hast du denn überhaupt das 2D-Array?



  • Also das 2D Array soll sozusagen, 6 Zeilen und Spalten ausgeben, in denen dann wie Werte stehen. Ähnlich dem, was ich schon zuvor als Beispiel hier angefügt habe:
    1 3 5 7 20 40
    .
    .
    .

    Wobei mir gerade einfällt, dass ich doch die Reihen selbst ordnen kann, soll heißen ich ordne zuerst Reihe 1 und das müsste dann doch gleichzusetzen sein, mit einem 1D Array ? Das ganze dann 6-Mal und ich habe das 2D Array geordnet.



  • Du definierst dir eine Funktion, die als Parameter ein 6er int-Array bekommt, und diese Funktion füllt die 6 Zahlen ohne doppelte Vorkommen. (weitere Hilfsfunktion zum Testen des Vorhandenseins der gezogenen random-Zahl im Array notwendig)
    Du definierst eine weitere Funktion, die ein 6er int-Array sortiert.
    Beide Funktionen rufst du 6x mal auf.

    int i,zahlen[6][6];
    
    for(i=0;i<6;++i) ziehung(zahlen[i]);
    for(i=0;i<6;++i) sortierung(zahlen[i]);
    


  • C-Fragensteller schrieb:

    Also ich habe mir schon mal einen Bubblesort programmiert, leider nur für ein Normales 1D Array, ich müsste den also zweimal über das gesamte Array laufen lassen, damit alles geordnet ist oder ?

    Wie kann ich denn doppelte Zahlen vor dem Befüllen des 2D Array ausschließen ?

    Danke

    Das 2D-Array als Ganzes zu ordnen, macht keinen Sinn. Sinn macht allenfalls, jede einzelne Zeile für sich zu ordnen.
    Für die Vermeidung doppelter Zahlen in einer Reihe hat DirkB schon zwei Möglichkeiten aufgezeigt.



  • Mein Code bis jetzt:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h> 
    
    int main() {
    	int i, j;
    	int tabelle[6][6];
    	srand(time(0));
    	for (i = 0; i<6; i++) {
    		for (j = 0; j<6; j++) {
    			tabelle[i][j] = rand() % 49+1;
    			printf("%6d ", tabelle[i][j]);
    		}
    		printf("\n");
    	}
    	printf("\n");
    	system("PAUSE");
    	return 0;
    }
    

    Ich habe da etwas falsch interpretiert, und zwar sollte in jeder Reihe keine doppelte Zahl vorkommen, und ich meine bis jetzt tut sie das auch nicht. Oder doch ?

    Dann bleibt nur die Frage, wie ich die einzelnen Reihen sortieren kann.



  • C-Fragensteller schrieb:

    ..., und ich meine bis jetzt tut sie das auch nicht.

    Das ist Zufall.

    Ich fasse mal zusammen:
    Du möchtest also 6 Reihen haben, die jede für sich 6 aus 49 haben.
    In den Reihen dürfen die Zahlen nicht doppelt vorkommen, jedoch in einer anderen Reihe dürfen sie vorhanden sein.
    Gleich Reihen sind zu vermeiden.



  • Genau so sollte es sein, am besten dann noch jede Reihe für sich geordnet



  • Wenn dein bubblesort so (ähnlich) deklariert ist:

    void bubblesort(int *array, int anzahl);
    

    Dann geht das so:

    // Sortierte Ausgabe
        for (i = 0; i<6; i++) {
            bubblesort(tabelle[i],6); 
            for (j = 0; j<6; j++) {
                printf("%6d ", tabelle[i][j]);
            }
            printf("\n");
        }
    

    Oder du nimmst das qsort aus dem Link. Das Beispiel dort ist ja für int-Arrays.



  • Okay ich habs implementiert, es funktioniert nur nicht, es wird nicht sortiert.

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h> 
    
    void bubblesort(int *array, int anzahl) {
    	int p, q;
    	for (p = 0; p < anzahl - 1; p++){
    		for (q = 0; q < anzahl - p - 1; q++){
    			if (array[q]>array[q + 1]){
    				int temp = array[q];
    				array[q] = array[q + 1];
    				array[q + 1] = temp;
    			}
    		}
    	}
    }
    
    int main() {
    	int i, j;
    	int tabelle[6][6];
    	srand(time(0));
    	for (i = 0; i<6; i++) {
    		bubblesort(tabelle[i], 6);
    		for (j = 0; j<6; j++) {
    			tabelle[i][j] = rand() % 49+1;
    			printf("%6d ", tabelle[i][j]);
    		}
    		printf("\n");
    	}
    
    	printf("\n");
    	system("PAUSE");
    	return 0;
    }
    


  • Ahhh, ich habs:

    Jetzt funktioniert es, Danke nochmal an alle, die mich hier weitergebracht haben !

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h> 
    
    void bubblesort(int *array, int anzahl) {
    	int p, q;
    	for (p = 0; p < anzahl - 1; p++){
    		for (q = 0; q < anzahl - p - 1; q++){
    			if (array[q]>array[q + 1]){
    				int temp = array[q];
    				array[q] = array[q + 1];
    				array[q + 1] = temp;
    			}
    		}
    	}
    }
    
    int main() {
    	int i, j;
    	int tabelle[6][6];
    	srand(time(0));
    	for (i = 0; i<6; i++) {
    		for (j = 0; j<6; j++) {
    			tabelle[i][j] = rand() % 49+1;
    		}
    	}
    
    	for (i = 0; i<6; i++) {
    		bubblesort(tabelle[i], 6);
    		for (j = 0; j<6; j++) {
    			printf("%6d ", tabelle[i][j]);
    		}
    		printf("\n");
    	}
    	printf("\n");
    	system("PAUSE");
    	return 0;
    }
    


  • Jetzt schreib noch die Funktionen ziehung() und print() analog zu bubblesort() .
    Die eine füllt Dir eine Zeile (und vermeidet doppelte Zahlen) und die andere gibt eine Zeile auf dem Bildschirm aus.

    Schon hast Du ein wunderschönes Programm.

    int main() {
        int i;
        int tabelle[6][6];
        srand(time(0));
        for (i=0; i<6; i++)
            ziehung(tabelle[i], 6);
    
        for (i=0; i<6; i++)
            bubblesort(tabelle[i], 6);
    
        for (i=0; i<6; i++)
            print(tabelle[i], 6);
    
        system("PAUSE");
        return 0;
    }
    

    PS: Ähnlich hat es schon Wutz heute Mittag vorgeschlagen.


Log in to reply