Der Misch-Algorithmus

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]

ShuffleInts.om
   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.
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 2004, 2005 Andreas Borchert, in HTML konvertiert am 18.02.2005