我有一个包含任务的程序。 我想生成两个随机数,
首先:介于0.5和3.5之间
第二:介于4.5和6.5之间
我必须在受保护的单位中实施它:
with Ada.Text_IO, Ada.Numerics.Float_Random;
use Ada.Text_IO, Ada.Numerics.Float_Random;
procedure simulation is
.
.
.
protected Helper is
procedure generateFirstRandomNumber;
procedure generateSecondRandomNumber;
end Helper;
.
.
.
protected helper is
procedure generateFirstRandomNumber is
begin
...
end generateFirstRandomNumber;
procedure generateSecondRandomNumber is
begin
...
end generateSecondRandomNumber;
end helper;
.
.
.
begin
.
.
.
end simulation;
我有两个入口点,我必须传递这些值。
那么如何在受保护单元中实现这两个随机数生成器呢?
答案 0 :(得分:2)
这是解决方案的一部分草图。
protected Helper is
procedure Generate_First_Random_Number (Result : out Float);
procedure Generate_Second_Random_Number (Result : out Float);
首先,我希望我不会踩到你的脚趾,但这是一种更标准的Ada风格(Title_Case_With_Underscores)。
其次,你需要以某种方式得出结果。您不能使用函数,因为函数不允许更改PO的内部状态,并且(部分)内部状态是随机数生成器。
第三,我已宣布子类型代表您必须提供的范围:subtype Lower_Range is Float range 0.5 .. 3.5;
,例如。
private
Gen : Ada.Numerics.Float_Random.Generator;
必须在受保护规范的私有部分声明内部变量。而且,作为一般规则,使用完全合格的名称会更好,因此对象的来源显而易见(个人而言,Ada.Text_IO
例外)
end Helper;
protected body Helper is
您必须在此处使用body
这个词。
procedure Generate_First_Random_Number (Result : out Float)
is
Rnd : constant Float := Ada.Numerics.Float_Random.Random (Gen);
Rnd
位于0.0 .. 1.0
,
begin
Result := 3.0 * Rnd + 0.5;
但您想要0.5 .. 3.5
中的结果。
end Generate_First_Random_Number;
......和其他程序类似。
答案 1 :(得分:1)
由于它似乎是为了你的学习,我只会指出你正确的方向。 Ada Language Reference Manual包括Ada标准库的详细说明。这些恰好包括在明确定义的范围内生成具有相等分布的随机浮点值的规定。