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