|
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"
|