Random Ada:如何定义一个随机常数?

Random Ada:如何定义一个随机常数?,random,constants,ada,Random,Constants,Ada,我目前正在研究John English的“Ada 95:面向对象编程的技巧”。我在: 编写一个程序来玩一个简单的猜谜游戏。定义一个值范围为1到1000的整数类型,并将一个秘密值声明为该类型的常量,然后给用户十次猜测其值的机会 我现在写的(作为存根)是 显然,这并没有实现将秘密值声明为常量的要求。但是,由于我必须调用Reset(Gen)才能将随机生成的值分配给secret,因此我无法在begin之前将变量secret定义为常量 仍然可以将secret定义为随机常数吗?使用“declare”打开新范

我目前正在研究John English的“Ada 95:面向对象编程的技巧”。我在:

编写一个程序来玩一个简单的猜谜游戏。定义一个值范围为1到1000的整数类型,并将一个秘密值声明为该类型的常量,然后给用户十次猜测其值的机会

我现在写的(作为存根)是

显然,这并没有实现
将秘密值声明为常量的要求。但是,由于我必须调用
Reset(Gen)
才能将随机生成的值分配给
secret
,因此我无法在
begin
之前将变量
secret
定义为常量

仍然可以将
secret
定义为随机常数吗?

使用“declare”打开新范围。例如:

with Ada.Text_IO; use Ada.Text_IO;

procedure Example is

   package Integer_Text_IO is new Integer_IO (Integer);
   use Integer_Text_IO;

   A : Integer;

begin

   Get(A);

   declare
      C : constant Integer := A; 
   begin
      Put(C);
   end;

end Example;
我认为本文所说的是,在编写代码时应该选择secret值,并将其“硬编码”插入源代码。

使用“declare”打开新的作用域。例如:

with Ada.Text_IO; use Ada.Text_IO;

procedure Example is

   package Integer_Text_IO is new Integer_IO (Integer);
   use Integer_Text_IO;

   A : Integer;

begin

   Get(A);

   declare
      C : constant Integer := A; 
   begin
      Put(C);
   end;

end Example;
我认为这篇文章的意思是,在编写代码时,您应该选择秘密值,并将其“硬编码”插入源代码。

后者建议您“修改程序,以便在每次运行程序时随机选择要猜测的值。”这要求在建立机密值之前初始化。一种方法是将秘密值封装在一个文件中,如图所示。在下面的示例中,
生成器
的一个实例是
Reset
,用于在阐述包时执行的语句序列中初始化
Secret
,如所讨论和说明

给定一个猜测的
,您可以在程序中根据需要对其进行
检查

Value : Game_Model.Guess_Value;
…
Ada.Text_IO.Put_Line(Boolean'Image(Game_Model.Check(Value)));
后者建议您“修改程序,以便在每次运行程序时随机选择要猜测的值”。这要求在建立秘密值之前初始化密码。一种方法是将秘密值封装在一个文件中,如图所示。在下面的示例中,
生成器
的一个实例是
Reset
,用于在阐述包时执行的语句序列中初始化
Secret
,如所讨论和说明

给定一个猜测的
,您可以在程序中根据需要对其进行
检查

Value : Game_Model.Guess_Value;
…
Ada.Text_IO.Put_Line(Boolean'Image(Game_Model.Check(Value)));

您可以在主过程的声明部分内创建另一个过程来返回随机数

procedure je_5_1 is
  type guess_value is new Integer range 1..1000;

  function get_random return guess_value
  is
     package random_guess_value is new Ada.Numerics.Discrete_Random(guess_value);
     Gen : random_guess_value.Generator;
  begin
     random_guess_value.Reset(Gen);
     return random_guess_value.Random(Gen);
  end get_random;

  secret : constant guess_value := get_random;
begin
   --do your 10 chance loop
end je_5_1;

您可以在主过程的声明部分内创建另一个过程来返回随机数

procedure je_5_1 is
  type guess_value is new Integer range 1..1000;

  function get_random return guess_value
  is
     package random_guess_value is new Ada.Numerics.Discrete_Random(guess_value);
     Gen : random_guess_value.Generator;
  begin
     random_guess_value.Reset(Gen);
     return random_guess_value.Random(Gen);
  end get_random;

  secret : constant guess_value := get_random;
begin
   --do your 10 chance loop
end je_5_1;

是的,成功了!但是没有,(完整的)练习明确表示要使用RNG。我只是删节了正文,把重点放在我的主要问题上。谢谢是的,成功了!但是没有,(完整的)练习明确表示要使用RNG。我只是删节了正文,把重点放在我的主要问题上。谢谢