while Schleife



  • Hallo

    ich habe hier ein Programm welches 5 Zufallszahlen ergibt und vergleicht ob sie nur einmal vorkommen. Ich hätte jetzt gerne dass ich eingeben kann wieviele Zufallszahlen es ausgeben soll jedoch weiß ich nicht wie ich die if-Bedingung ändern soll.

    while (zahl[4] == 0)
            {
                num=rand() %8+1;
    
                if ( (num != zahl[0]) && (num != zahl[1]) && (num != zahl[2]) && (num != zahl[3]) && (num != zahl[4]) )
                {
                    zahl[i]=num;
                    i++;
                }
            }
    

    Es soll ca so ausschauen

    while (zahl[anzahl-1] == 0) 
            {
                num=rand() %8+1;
    
                if ( (num != zahl[0]) && (num != zahl[1]) && (num != zahl[2]) && (num != zahl[3]) && (num != zahl[4]) )
                {
                    zahl[i]=num;
                    i++;
                }
            }
    

    Ebenso beim scanf:

    scanf ("%d %d %d %d %d", &nummer[0], &nummer[1], &nummer[2], &nummer[3], &nummer[4]);
    

    Ich will am Ende Enter drücken. Beim scanf habe ich 5 Zahlen eingegeben. Ich hätte aber jetzt gerne dass ich

    [anzahl]
    

    Zahlen eingeben kann.

    MfG



  • Du musst dein Array dynamisch machen (Stichwort malloc), so dass die Größe halt deinem jeweiligen Wunsch entspricht. Das Überprüfen auf Vorkommen machst du dann in einer for-Schleife mit sovielen Iterationen, wie das Array Elemente hat.



  • Meintest du so:

    printf("Wieviele Zahlen");
    scanf(%d, &zahlanzahl);)
    
    switch (zahlanzahl-1)
    {
    case 0:
      num=rand() %8+1;
      if (num != zahl[0])
      {
        zahl[0]=num;
      }
      break;
    
    case 1:
      while (zahl[1] == 0) // prüfen bis zahl [zahlanzahl]
      {
        num=rand() %8+1;
    
        if ( (num != zahl[0]) && (num != zahl[1]) )
        {
          zahl[i]=num;
          i++;
        }
      }
      break;
    .
    .
    .
    
    }
    

    Gibt es da keine einfachere Möglichkeit. Wie ist es dann bei 1000 Zahlen.

    Wozu ich das malloc brauche habe ich nicht verstanden.

    Wie mache ich das mit dem scanf wenn der Computer 6 Zufallszahlen generiert. Auch mit switch.



  • _matze schrieb:

    Das Überprüfen auf Vorkommen machst du dann in einer for-Schleife mit sovielen Iterationen, wie das Array Elemente hat.

    Ich glaube das kann ich nicht. Bei der for-Schleife wenn ich 6 Zahlen haben will und eine Zahl kommt doppelt for, würde es mir nur noch 5 Zahlen ausgeben.



  • Mal so als kleiner Denkanstoß:

    int num=3;
    	int numberCount=15;
    	int *zahl=malloc(numberCount*sizeof(int));	//dynamisches Array, zahl kann jetzt 15 Elemente fassen
    
    	//Array füllen...
    
    	//statt
     //if ( (num != zahl[0]) && (num != zahl[1]) && ...
    
    	//kannst du jetzt sowas hier machen:
    	BOOL alreadyExists=FALSE;
    	for(int i=0;i<numberCount;++i) {		//funktioniert mit jeder Anzahl an Elementen im Array
    		if(num==zahl[i]) {
    			alreadyExists=TRUE;
    			break;
    		}
    	}
    	if(!alreadyExists) {
    		//...
    	}
    

    malloc reserviert soviel Speicher, wie du angibst. Damit kann man halt Arrays beliebiger (uns erst zur Laufzeit festgelegter) Größe erstellen.

    Abgesehen davon habe ich nicht ganz verstanden, was eigentlich dein Ziel ist. Die Sache mit den Zufallszahlen ist ja schön und gut, aber wozu soll der Benutzer was eingeben?? Na ja, jedenfalls kannst du nicht mit scanf beliebig viele Zahlen einlesen, so wie du es möchtest. Du kannst aber z.B. in einer Schleife hintereinander eine Zahl nach der nächsten einlesen (nach dem Motto: "Bitte Zahl 1 eingeben", "Bitte ahl 2 eingeben" usw.).



  • Ich habe ein Programm welches 5 Zufallszahlen generiert und ich muss erraten welche Zahlen das sind.

    Vorher war es vorgegeben dass 5 Zufallszahlen generiert werden. Jetzt möchte ich aber eingeben können wieviele Zahlen generiert werden sollen.

    while (zahl[4] == 0)
            {
                num=rand() %8+1;
    
                if ( (num != zahl[0]) && (num != zahl[1]) && (num != zahl[2]) && (num != zahl[3]) && (num != zahl[4]) )
                {
                    zahl[i]=num;
                    i++;
                }
            }
    
    scanf ("%d %d %d %d %d", &nummer[0], &nummer[1], &nummer[2], &nummer[3], &nummer[4]);
    

    Hier war es vorgegeben dass 5 Zahlen generiert werden und ich auch fix 5 Zahlen eingeben muss.

    Mein Ziel ist es jetzt dass ich eingeben kann wieviele Zufallszahlen generiert werden sollen.

    Wenn ich mit zb. 6 Zahlen spielen will soll es auch 6 Zahlen generieren und man soll auch 6 Zahlen eingeben können.
    Beim scanf ist jetzt das Problem: Erst wenn ich alle Zahlen eingebe soll es die Zahlen vergleichen. Vorher habe ich immer mit 5 Zahlen gespielt. Das war nicht so ein Problem. Aber wie mache ich das wenn ich einmal mit 3 und einmal mit 4 Zahlen spielen will.



  • if ( (num != zahl[0]) && (num != zahl[1]) && (num != zahl[2]) && (num != zahl[3]) && (num != zahl[4]) )
    

    Das Ziel dieser Zeile war es dass insgesamt 5 Zahlen generiert werden sollen, aber nicht doppelt vorkommen.
    Falls eine Zahl generiert wird, die schon vorkommt soll für die jeweilige Stelle eine andere Zahl generiert werden die noch nicht vorkommt.



  • jack the stripper schrieb:

    if ( (num != zahl[0]) && (num != zahl[1]) && (num != zahl[2]) && (num != zahl[3]) && (num != zahl[4]) )
    

    Das Ziel dieser Zeile war es dass insgesamt 5 Zahlen generiert werden sollen, aber nicht doppelt vorkommen.
    Falls eine Zahl generiert wird, die schon vorkommt soll für die jeweilige Stelle eine andere Zahl generiert werden die noch nicht vorkommt.

    Prinzipiell kannst du das so machen wie hier, guckst du:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-238288.html


Anmelden zum Antworten