|
IF len > 1 THEN (* Algorithm P: Shuffling *) j := len; (* P1 *) REPEAT randomval := RandomGenerators.RealVal(); (* P2 *) k := SHORT(ENTIER(j * randomval)); (* P3 *) (* P4: exchange value[k] and value[j-1] *) tmp := value[k]; value[k] := value[j-1]; value[j-1] := tmp; DEC(j); (* P4 *) UNTIL j = 1; END; |
Das Modul RandomGenerators liefert gleichförmig
verteilte Pseudo-Zufallszahlen. RealVal liefert
hier einen gleichverteilten Wert aus [0..1).
| |
ENTIER entspricht den abrundenden Gauß'schen
Klammern ⌊ ··· ⌋. Da ENTIER
den Datentyp LONGINT liefert, während k
vom Typ INTEGER ist, ist SHORT notwendig
für die Konvertierung von LONGINT zu INTEGER.
| |
Bei P4 muß darauf geachtet werden, daß in Oberon
die Indizierung bei 0 beginnt. Entsprechend ist j-1
anstelle von j anzugeben.
|
Copyright © 2004, 2005 Andreas Borchert, in HTML konvertiert am 18.02.2005 |