Zufall mit bestimmten Werten

Previous topic - Next topic

Alexander

Hi,
Ich habe momentan ein kleines Problem:

Nehmen wir mal an ich habe ein Array/Feld mit 8x8. Jetzt möchte ich in jedes dieser Felder per Zufall einen Wert zwischen 1 und 64 schreiben, jedoch darf jede Zahl nur einmal auftreten.

Wie kann ich das ganze am dümsten anstellen? Mit Randomize/RND krieg ich ja nicht jeden Wert nur einmal, sondern u.Umständen mehrmals... und solange Zufallszahlen zu generieren bis ich einmal alle hab dauert warscheinlich ewig.

In einen anderen Programmiersprache hatte ich immer eine Listbox angelegt, da jede Zahl einmal reingeschrieben und dann mit Randomize einen davon ausgelesen und anschliessend aus der Liste geworfen. Da es keine Listboxen in GLBasic gibt, kann ich das leider nicht so einfach machen...

Wer kann mir helfen? :/

BumbleBee

Hi
Du brauchst eine zweite Zählschleife, die doppelte Zahlen prüft.
Folgender Code zieht die Lottozahlen, bei der es ja auch
keine doppelten Zahlen geben soll.
Die erste Schleife zieht die Zahlen.
Die zweite Schleife prüft ob eine Zahl schon gezogen wurde.
Kann man natürlich auch anders machen.

Code (glbasic) Select
DIM Zahlen[7]

   FOR i=1 TO 6
      Zahlen[i]=RND(48)+1 //1 addieren falls die Null gezogen wird
         
            //Diese Schleife prüft doppelte Zahlen  
       FOR j=0 TO i-1
         IF Zahlen[j]=Zahlen[i]
           i=i-1
         ENDIF
       NEXT
               //Zahlen ausgeben
       PRINT Zahlen[i],300,100+30*i    
   NEXT  
 
  SHOWSCREEN
  MOUSEWAIT
Diese Angaben sind wie immer ohne Gewähr :)

Konnte ich dir damit helfen?


Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Kitty Hello

Nett. Für dieses spezielle Problem hätte ich jetzt in jedes Feld einen Wert 1-64 geschrieben und dann etwa 500x 2 zufällige Zelle "ausgetauscht"
Code (glbasic) Select
DIM a[8][8]
// Klar oder?
FOR x=0 TO 7; FOR y=0 TO 7; y[x][y]=x+y*8+1; NEXT; NEXT

FOR i=0 TO 500
   x1=RND(7); y1=RND(7); x2=RND(7); y2=RND(7)
   merken  = a[x1][y1]
   a[x1][y1] = a[x2][y2]
   a[x2][y2] = merken
NEXT
So long,
Gernot

Alexander

Hi,

also das Beispiel mit dem durcheinandermischen gefällt mir fast besser ;)

Danke auf jedenfall für die Hilfe :)