Random 如何在Ada中生成浮点随机数?

Random 如何在Ada中生成浮点随机数?,random,ada,protected,Random,Ada,Protected,我有一个任务程序。 我想生成两个随机数 第一:介于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 generateFirstRando

我有一个任务程序。 我想生成两个随机数

第一:介于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;
我有两个入口点必须通过这些值


那么,我如何在受保护的单元中实现这两个随机数生成器呢?

既然它似乎是为了你的研究,我只为你指出正确的方向。包括Ada标准库的详细说明。其中包括生成在定义范围内具有相等分布的随机浮点值的规定。

这是解决方案的一部分示意图

受保护的帮助程序是
程序生成\u第一个\u随机\u数(结果:外浮点数);
程序生成第二个随机数(结果:外浮点数);
首先,我希望我不会踩到你的脚,但这是一种更标准的Ada风格(标题加下划线)

第二,你需要以某种方式把结果公布出来。您不能使用函数,因为函数不允许更改PO的内部状态,并且(部分)该内部状态是随机数生成器

第三,我要声明子类型来表示您必须提供的范围:
子类型Lower\u Range是Float Range 0.5。。3.5;

private
Gen:Ada.Numerics.Float_Random.Generator;
内部变量必须在受保护规范的私有部分声明。作为一般规则,最好使用完全限定的名称,因此对象的来源很明显(我个人认为,
Ada.Text\u IO

end助手;
受保护的身体助手是
你必须在这里使用单词
body

过程生成\u第一个\u随机数(结果:out Float)
是
Rnd:常量浮点:=Ada.Numerics.Float\u Random.Random(Gen);
Rnd
0.0范围内。。1.0

开始
结果:=3.0*Rnd+0.5;
但您希望结果为
0.5。。3.5

end生成第一个随机数;

。。。对于另一个过程也是如此。

您将如何在受保护对象之外实现它?(而且,从技术上讲,PO不能是一个单元;单元是可编译的实体,PO必须位于包(或者,不同寻常的是,在您的示例中是子程序)中)。一旦你做到了(请把它编辑到你的问题中给我们看),我们就可以讨论PO部分了。一点-您需要将随机数返回给调用者,因此过程需要
out
参数。我不知道您写了什么,因为我对Ada的了解很差。我希望在受保护的帮助程序中有两个过程或函数,它们生成两个随机数(第一个在0.5和3.5之间,第二个在4.5和6.5之间)。我想稍后再调用它。你知道如何使用
Ada.Numerics.Float\u Random.Random
来获取范围
0.0.内的浮点数吗。。1.0
?给出这样一个结果,您知道如何获取不同范围内的浮点数吗?子类型myRandom是浮点范围0.5..3.5?如果您想让我看到注释,请使用例如“@KeithThompson”标记我。单击注释输入框旁边的“帮助”链接了解详细信息。让我们再试一次。您知道如何使用
Ada.Numerics.Float\u Random.Random
获取范围
0.0.内的浮点数吗。。1.0