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? :/
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.
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
MOUSEWAITDiese Angaben sind wie immer ohne Gewähr :)
Konnte ich dir damit helfen?
Cheers
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"
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
NEXTSo long,
Gernot
Hi,
also das Beispiel mit dem durcheinandermischen gefällt mir fast besser ;)
Danke auf jedenfall für die Hilfe :)