Lottozahlen im 2D Array



  • 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.


Anmelden zum Antworten