1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Zahlenlotto

Discussion in 'Programmieren' started by Ranunculo, Jun 8, 2007.

Thread Status:
Not open for further replies.
  1. Ranunculo

    Ranunculo Byte

    Hallo Miteinander, ich möchte ein Programm schreiben, in dem man die höchste Zahl selber eingeben kann und 6 Zufallszahlen sollen dabei ausgegeben. Die vorgeschlagene Zahl sollte nicht zweites mal vorkommen.
    Dies sollte ich mit einer Funktion machen.

    Name der Funktion: Zufallszahl
    Eingabe: n /*höchste zu "würfelnde Zahl*/
    Ausgabe Resultat /*Array für 6 Zahlen*/

    Die Zufallszahl sollte mit:

    srand(time(0));
    z=rand();

    erzeugt werden.

    Ich habe nicht wirklich eine Ahnung, wie ich das genau programmieren soll. Ich habe aber einfach ein Programm wie eine Skizze geschrieben, das nicht läuft.
    Ich hoffe sehr, dass mir jemand helfen könnte.

    Liebe Grüsse, Kristina

    HTML:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int n; Resultat [7];
    
    int main() {
    
    printf ("\nModul 118: Zahlenlotto");
    printf ("\n\nBitte hoechste zu wuerfelnde Zahl n eingeben: ");
    scanf ("%i", &n);
    printf ("\n\nEingegeben: %i", n);
    Zahlenlotto(&Resultat);
    printf ("6 Zufallszahlen: %u", Resultat);
    
    system ("PAUSE");
    return 0;
    
    }
    
    int Zufahlszahl(int n, int Resultat) {
        
        srand((unsigned)time(0)); 
                                  for (int x=1, x<=6; x++) {
                                          int z=rand()%n;  
                                          printf ("%u", z);
                                          }
    }
    
    
     
  2. Muddi

    Muddi Megabyte

    Hallo Kristina,

    Hier ein Beispiel:

    Code:
    #include <stdio.h>
    #include <math.h>
    #include <time.h>
    #include <stdlib.h>
    
    void zufallszahl(int max);
    
    int main(void)
    {	int n;
    	printf("Bitte Maximum groesser als 6 eingeben: ");
    	scanf("%d", &n);
    
    	printf("Eingabe: %d\n", n);
            if (n <= 6) {
       	         printf("Eingabe zu klein.\n");
      	 	system("pause");
                    return 3;
    	}
    	zufallszahl(n);
            system("pause");
    	return 0;
    } 
    
    void zufallszahl(int max)
    {
    	int i;
    	int resultat[6];
    		
    	for (i = 0; i < 6; i++)
    		resultat[i] = 0;
    	for (i = 0; i < 6; i++) {
    		srand(time(NULL) + i);
    		resultat[i] = rand() % max;
    	}
    		
    	printf("Zufallszahlen:\n");
    	for (i = 0; i < 6; i++) 
    		printf("%d ", resultat[i]);
    	printf("\n");
    }
    Ein paar Erklärungen:

    void zufallszahl(int max); - Prototyp der Funktion zufallszahl()

    void - die Funktion gibt keinen Rückgabewert, braucht man in dem Fall auch nicht ;)

    int max - verlangt einen Parameter vom Typ int der Name spielt keine Rolle

    zufallszahl(n); - Aufruf der Funktion zufallszahl() mit Parameter n

    for (i = 0; i < 6; i++) {
    srand(time(NULL) + i);
    resultat = rand() % max;
    }
    i wird hochgezählt und den einzelnen Werten von resultat wird eine Zufallszahl gewiesen die höchstens max - 1 groß ist. Wenn max auch noch dabei sein soll dann schreib: rand() % max + 1;

    Der Rest sollte klar sein. ;)

    Grüße
    Muddi
     
  3. Ranunculo

    Ranunculo Byte

    Hallo Muddi,
    danke viel Mal für deine Hilfe. Du kannst dir ja gar nicht vorstellen, wie froh bin ich endlich dieses Programm zu haben.
    Nur noch eins, die Doppeltzahlen wurden nicht berücksichtigt. Was ist, wenn eine Zahl 2 mal vorkommt???

    Grüsse, Kristina
     
  4. Muddi

    Muddi Megabyte

    OK. Wenn keine Zufallszahl doppelt vorkommen darf, wird das Ganze natürlich etwas komplizierter und die Laufzeit des Programmes verlängert sich um ein paar Sekunden, weil ich 3 weitere Variablen und einen weiteren Vektor eingeführt habe.

    Code:
    #include <stdio.h>
    #include <math.h>
    #include <time.h>
    #include <stdlib.h>
    
    void zufallszahl(int max);
    
    int main(void)
    {
    	int n;
    	printf("Bitte Maximum groesser als 6 eingeben: ");
    	scanf("%d", &n);
    	if (n <= 6) {
    		printf("Eingabe zu klein.\n");
          system("pause");
    		return 3;
    	}
    	printf("Eingabe: %d\n", n);
    	zufallszahl(n);
       system("pause");
    	return 0;
    } 
    
    void zufallszahl(int max)
    {
    	int i, zufall, j, found;
    	int resultat[6], geworfen[6];
    		
    	for (i = 0; i < 6; i++)
    		resultat[i] = 0;
    	for (i = 0; i < 6; i++) {
    		srand(time(NULL) + i);
    		geworfen[i] = zufall = rand() % max;
    		for(j = 0, found = 0; j < 6; j++) {
    			if (zufall == geworfen[j])
    				found++;
    		}
    		if (found > 1)
    			i--;
    		else
    			resultat[i] = zufall;
    	}
    		
    	printf("Zufallszahlen:\n");
    	for (i = 0; i < 6; i++) 
    		printf("%d ", resultat[i]);
    	printf("\n");
    }
    
    geworfen = zufall = rand() % max;

    Diese Zuweisung wird von RECHTS nach LINKS bearbeitet.
    D.h. wird rand() % max wird zuerst zufall zugewiesen und dann dem nächsten Wert von geworfen.

    for(j = 0, found = 0; j < 6; j++) {
    if (zufall == geworfen[j])
    found++;
    }
    Checkt ob zufall schonmal vorgekommen ist. Wenn ja, wird found um eins erhöht found++ dafür braucht man eine weitere Zählvariable. Für Zählvariablen nimmt man am besten i,,j, k usw. ;)

    if (found > 1)
    i--;
    else
    resultat = zufall;

    Wenn found größer 1, (Wenn zufall mehr als einmal bereits gefallen ist), wird i um eins verkleinert, damit der nächste Wert von resultat nicht ausgelassen wird. Wenn found 0 oder 1 ist, wird der neue Zufallswert dem nächsten Wert von resultat zugewiesen.

    Grüße.
    Muddi
     
  5. Ranunculo

    Ranunculo Byte



    Also das Programm ist SUPER danke viel mal, du hast mir sehjr geholfen.
    Nur hatte ich noch "0" bekommen und wenn man 7 eingibt, dann kommt die 7 nie...so habe ich das so gelöst.

    geworfen = zufall = rand() % max+1;

    jetzt gibt es kei NULLe und 7 gibt es auch. Ist es dann so schon richti oder??

    Jaja danke viel mal, lg, Kristina
     
  6. Muddi

    Muddi Megabyte



    Ja. Genau. :)

    Grüße,
    Muddi
     
  7. Ranunculo

    Ranunculo Byte

  8. Muddi

    Muddi Megabyte

    Die Beschreibung von main() ist ok.

    Bei zufallszahl() hast du die for-Schleifen falsch "übersetzt".
    Code:
    solange i = 0; i < 6; i++;
    ist falsch.

    Du musst dir das so vorstellen, (ähnlich wie eine while Schleife):

    i = 0; /*Das wird nur einmal ausgeführt. Sonst wäre es eine Endlosschleife.*/

    while (i < irgendwas) {
    tue etwas...danach erhöhe i um 1
    i++;
    }

    Ich würde das so machen:

    Code:
    i=0;
    Solange i < 6 suche eine Zufallszahl
             srand(time(NULL)+i); /*da fehlte noch die Klammer*/
             undsoweiter... und ganz unten dann vor der for-Schleife die alle Werte von resultat ausgibt:
             danach gehe zum nächsten Wert
             i++;
    Und dann:

    Code:
    zufall == geworfen[j] ?  Das ist ein Vergleich und keine Zuweisung
    "=" und "==" ist NICHT das Gleiche
    J                                  N
    found++;                       Nichts
    
    Außerdem würde ich überall i +1 oder found + 1 durch i++ bzw. found++ ersetzen. Wenn dann i = i + 1 oder found = found + 1.
     
  9. Hascheff

    Hascheff Moderator

    Das Struktogramm sollte nicht die Besonderheiten einer Programmiersprache darstellen.
    Code:
    Wiederhole von i = 0 bis 5
    würde ich schreiben.

    Auch der Name der Zufallsfunktion muss nicht drin stehen.
    Code:
    Zufallszahl zwischen 1 und 6
    , fertig ist's.
     
  10. Ranunculo

    Ranunculo Byte

    Hallo Muddi und Hascheff,

    danke sehr für eure Hilfe, ich wär dann mit dieser Aufgabe fertig, müsste nur noch Datenflussdiagramm und das Datenkonzept machen, aber das schaffe ich schon allein:)...denke ich mal.

    Da nur noch eine Kleinigkeit:

    Beim Struktogramm wird "==" NICHT benutzt, nur "=" für Vergleich und ":=" für Zuweisung.

    Ja wünsche noch viel Spass da im Forum, tschüssli.

    Kristy
     
  11. P.A.C.O.

    P.A.C.O. Ex-Foren-Bulle

    Der Thread wird nicht gelöscht
     
  12. Ranunculo

    Ranunculo Byte

    Ich habe doch selber dieses Thema eröffnet und jetzt möchte ich, dass es geschlossen wird. Kapiert ihr Administratoren das denn nicht?
    Ich möchte, dass es geschlossen wird. Ist doch von mir geschrieben wurde!!!
     
  13. P.A.C.O.

    P.A.C.O. Ex-Foren-Bulle

    Reg dich mal bitte ab. Du hast von löschen gesprochen, nicht von schließen.
     
  14. Ranunculo

    Ranunculo Byte

    Ich möchte nur, dass niemand es diesen Beitrag lesen kann...das ganze Thema "Zahlenlotto"...ich möchte, dass es weg ist. Wenigstens für eine Woche...in jedem Forum kann man ihr Thema löschen oder schliessen, das ist das gleiche. Wäre sehr nett...nur für eine Woche...oder ganz weg....
    Nicht, dass man in Google "Zahlenlotto" von mir findet, das will ich eben nicht...
     
  15. P.A.C.O.

    P.A.C.O. Ex-Foren-Bulle

    moment.........
     
  16. P.A.C.O.

    P.A.C.O. Ex-Foren-Bulle

    Der Thread bleibt so wie er ist. Er gehört zur Gesamtstruktur des Forums. Eine temporäre Löschung ist nicht machbar. Schließen hingegen geht...
     
  17. TheD0CT0R

    TheD0CT0R Dr. h.c. Mod

    Das hättest du dir vorher überlegen sollen. Was einmal öffentlich im Internet steht, bleibt auch dort bzw. kann immer wieder gefunden werden.
     
Thread Status:
Not open for further replies.

Share This Page