11. Anlage
 
zurück

11.1.4.3 Zufallszahlenerzeugung


Für die Zufallszahlenerzeugung gibt es zwei Pakete:

1. Das Paket Numerics.Float_Random für Gleitpunktzahlen und

2. Das generische Paket Numerics.Discrete_Random für Integer- und Aufzählungstypen. Jedes Zufallszahlenpaket besteht aus einem limitiert privaten Typen als Generator und einer Funktion zum Lesen der nächsten Zahl aus diesem Generator sowie einer Prozedur zum Initialisieren bzw. Reinitialisieren des Generators. Weiterhin existiert die Möglichkeit den Status eines Generators zu speichern und auch wieder zu setzen, wodurch die Folge der Zufallszahlen wiederholt werden kann.

Unterprogramme zur Zufallszahlenerzeugung
function Random (Gen : Generator) return Uniformly_Distributed;
function Random (Gen : Generator) return Result_Subtype;
Liefert den nächsten Wert des Generator "Gen". Der Rückgabetyp Uniformly_Distributed ist ein Gleitpunkttyp mit einem Wertebereich von 0.0 bis 1.0, Result_Subtype ist ein generisch formaler Untertyp für Integer- und Aufzählungstypen.

procedure Reset (Gen : in Generator; Initiator : in Integer);
procedure Reset (Gen : in Generator);
Die Prozedur Reset setzt den Generator auf einen zeitabhängigen Wert oder auf einen Wert abhängig von "Initiator", wenn dieser Parameter angegeben wird.

procedure Save (Gen : in Generator; To_State : out State);
procedure Reset (Gen : in Generator; From_State : in State);
Die Prozedur Save speichert den Status den Generators "Gen". Die Prozedur Reset kann diesen Wert wieder einem Generator des entsprechenden Typs zuweisen.

function Image (Of_State : State) return String;
function Value (Coded_State : String) return State;
Die Funktion Image wandelt den Status eines Generators in eine Zeichenkette um, die Funktion Value erzeugt aus dieser Zeichenkette wieder die Statusinformationen.


Beispiel für Discrete_Random:

with Ada.Text_IO;
with Ada.Numerics.Discrete_Random;
procedure Wuerfeln is

   subtype Wuerfel_Typ is Integer range 1..6;
   package Wuerfel_Generator is new Ada.Numerics.Discrete_Random (Wuerfel_Typ);

   Wuerfel_1, Wuerfel_2 : Wuerfel_Typ := 6;
   Wuerfler : Würfel_Generator.Generator;

begin

   Wuerfel_Generator.Reset(Würfler);

   for I in 1..10 loop
      Wuerfel_1 := Würfel_Generator.Random(Wuerfler);
      Wuerfel_2 := Würfel_Generator.Random(Wuerfler);
      Ada.Text_IO.Put("Wurf: " & Integer'Image(Wuerfel_1) & ", " & Integer'Image(Wuerfel_2));
      if Wuerfel_1 = Wuerfel_2 then
         Ada.Text_IO.Put_Line(" - Hurra, Sie haben einen Pasch gewürfelt!");
      else
         Ada.Text_IO.New_Line;
      end if;
   end loop;
end Wuerfeln;



Spezifikation für das Paket "Ada.Numerics.Discrete_Random"

Spezifikation für das Paket "Ada.Numerics.Float_Random"




 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.