Computer sind besonders zum Sortieren von Daten geeignet, aber was ist, wenn man das Gegenteil vor hat; wenn man Daten durcheinanderbringen will? Auch hierzu gibt es Lösungen, eine davon sind Zufallszahlen. Man kann sie gut gebrauchen, um willkĂŒrliche Beispieldaten fĂŒr ein Programm zu erstellen. Auch in Spielen sind Zufallszahlen sehr wichtig.
Ein guter Zufallszahlengenerator sollte eine ungefĂ€hre Gleichverteilung seiner Ergebnisse liefern. Bei dem ersten Programm handelt es sich um ein Testprogramm fĂŒr den Zufallszahlengenerator von Omikron.BASIC. Die beiden obersten Zeilen des Programms dienen der Einstellung Ihrer Bildschirmauflösung. Wenn Sie mit dem monochromen Monitor SM-124 von Atari arbeiten, dann lassen Sie die Einstellungen so, wie sie sind. Die Variable Step enthĂ€lt die horizontale Auflösung des Tests. Kleinere Zahlen bringen hier eine höhere Auflösung. Scale enthĂ€lt die vertikale Auflösung. Auch hier gilt: je kleiner, desto genauer. Die FOR-Schleife am Anfang dient der Erzeugung von Zufallszahlen. Wenn Sie einen selbstgeschriebenen Zufallsgenerator testen wollen, dann mĂŒssen Sie hier den RND-Befehl durch Ihren eigenen Unterprogrammaufruf ersetzen. Der Befehl TEXT HEIGHT = 4 schaltet fĂŒr den TEXT-Befehl auf den 6x6-Systemzeichensatz um. An dieser Stelle ist auch mal ein biĂchen AufklĂ€rungsarbeit in Bezug auf den TEXT-Befehl angebracht. Die y-Koordinate in diesem Befehl gibt nicht etwa die obere Ecke fĂŒr die Textausgabe an, sondern die Stelle, an der die Grundlinie des Textes steht. Die Grundlinie ist beim 6x6-Zeichensatz vier Punkte unterhalb der oberen Ecke. Dies ist auch der Grund, weshalb TEXT HEIGHT = 4 auf den 6x6-Zeichensatz umschaltet.
Das zweite Programm ist fĂŒr alle Kartenspieler interessant. In diesem Programm wird ein sortiertes Kartenspiel gemischt und danach wieder sortiert. Die Karten werden dabei durch Zahlen von 0 bis 31 reprĂ€sentiert. Die Farbe einer Karte kann man mit INT(Karte/8) herausbekommen. Man erhĂ€lt einen Wert von 0 bis 3, den man sehr einfach einer Zeichenkette, z.B. âKaroâ zuordnen kann. Die Karte selber erhĂ€lt man durch (Karte MOD 8), also dem Divisionsrest. Etwas schneller und auch âcomputermĂ€Ăigerâ wĂ€re der Ausdruck (Karte AND 7), der zufĂ€lligerweise hier das gleiche Ergebnis liefern wĂŒrde, der dafĂŒr aber schon das VerstĂ€ndnis von bitweisen VerknĂŒpfungen voraussetzen wĂŒrde. Interessant ist vielleicht auch die Methode, wie man ein Kartenspiel mischen kann. Dazu wird einfach jede Karte mit einer beliebigen, zufĂ€lligen anderen Karte vertauscht. Auf diese Weise dĂŒrfte eine bessere Durchmischung gewĂ€hrleistet sein, als man sie durch manuelles Mischen erreichen könnte.
' (c)1992 by MAXON-Computer
Xmax%L=640
Ymax%L=400
Sstep%L=20
Scale%L=1
Mhoehe%L=Ymax%L/Scale%L/2
X1%L= INT(Xmax%L/Sstep%L)
DIM A%L(X1%L)
PRINT "Ich berechne Zufallszahlen..."
FOR I%L=0 TO X1%L*Mhoehe%L-1
Zufall%L= RND(X1%L+1)
A%L(Zufall%L)=A%L(Zufall%L)+1
IF (I%L AND 511) =511 THEN PRINT ".";
NEXT I%L
PRINT
CLS : PRINT CHR$(27);"f": MODE =0: TEXT HEIGHT =4
FILL COLOR =1: FILL STYLE =2,4: OUTLINE ON : CLIP 0,0,Xmax%L,Ymax%L
FOR I%L=0 TO X1%L
PBOX I%L*Sstep%L,Ymax%LâA%L(I%L)*Scale%L TO (I%L+1)*Sstep%L,Ymax%L-1
IF Sstep%L>=14 THEN
TEXT I%L*Sstep%L+(Sstep%L-12)/2,Ymax%L-5,RIGHT$(STR$(100+I%L),2)
A$=MID$(STR$(A%L(I%L)),2) : A1%L= LEN(A$)*6
TEXT I%L*Sstep%L+(Sstep%L-A1%L)/2,Ymax%L-A%L(I%L)*Scale%L-2,A$
ENDIF
NEXT I%L
' (c)1992 by MAXON-Computer
DIM A%L(31),Farbe$(3),Karte$(7)
FOR I%L=0 TO 3: READ Farbe$(I%L): NEXT I%L
FOR I%L=0 TO 7: READ Karte$(I%L): NEXT I%L
DATA "Karo","Herz","Pik","Kreuz"
DATA "Sieben","Acht","Neun","Zehn","Bube","Dame","König","Ass"
FOR I%L=0 TO 31
A%L(I%L)=I%L
NEXT I%L
' ***Jetzt mischen!
FOR I%L=0 TO 31
SWAP A%L(I%L),A%L( RND(32))
NEXT I%L
' ***Gemischt ausgeben
Ausgabe
' ***jetzt wieder sortieren
SORT A%L(0)
' ***und dann ausgeben
Ausgabe
END
'
'***** Prozeduren *****
'
DEF PROC Ausgabe
LOCAL I%L
' ***Automat. Zeilenumbruch einschalten (BASIC ab Version 3.5)
PRINT CHR$(27);"v";
FOR I%L=0 TO 31
IF I%L THEN PRINT ", ";
PRINT Farbe$( INT(A%L(I%L)/8));" ";Karte$(A%L(I%L) MOD 8);
NEXT I%L
PRINT
PRINT
RETURN