probability - 有没有更好的方法来编程这个,

标签 probability ada

with Ada.Text_IO;                  use Ada.Text_IO;
with Ada.Integer_Text_IO;          use Ada.Integer_Text_IO;
with Ada.Float_Text_IO;            use Ada.Float_Text_IO;
with Ada.Numerics.Float_Random;
with Ada.Numerics.Discrete_Random;

procedure Probability is
   
   subtype My_Characters is
     Character range 'a' .. 'z';
      
   package My_Random_Character_Package is
     new Ada.Numerics.Discrete_Random(My_Characters);
   
   use My_Random_Character_Package;
   
   Gen_1 : My_Random_Character_Package.Generator;




procedure My_Character_Program(First_Character, Second_Character : in Character) is
      
   begin
      
      Put(First_Character);
      Put(" ");
      Put(Second_Character);
      New_Line;
      Put("All characters between ");
      Put(First_Character);
      Put(" and ");
      Put(Second_Character);
      Put(":");
      for C in Character range First_Character .. Second_Character loop
         Put(" ");
     Put(A);
      end loop;
      
   end My_Character_Program;
   
procedure Part_2 is 
      
      First_Character, Second_Character : Character;
      
   begin
      
      Put_Line("PART 2:");
      Put_Line("Two random characters from a to z will now be generated.");
      Put("Random characters: ");
      First_Character  := Random(Gen_1);
      Second_Character := Random(Gen_1);
      
      if First_Character > Second_Character then
     My_Character_Program(Second_Character, First_Character);
      else
     My_Character_Program(First_Character, Second_Character);
      end if;
      
   end Part_2;   


   
begin   
   
   --  Reset(Gen_1);
   Part_2; 
   New_Line(2);


end Probability;

以下程序将在 A 和 Z 之间随机选择两个字母,然后将它们之间的所有字母打出来。因此,例如,如果它随机生成字母

d 和 g

它会输出

d e f g

但是我需要你的帮助。即使我的程序可以运行,我也不认为它执行得那么好,尤其是第 2 部分。有没有办法可以将我的“第 2 部分程序”的一部分放入“我的角色程序程序”中?如您所见,我交换了第一个和第二个字符。我不能用其他方式做到这一点吗?

我很感激我能得到的任何帮助。

最佳答案

看看你的“工具箱”——Ada 以 subtypeSucc/Pred 属性的形式提供了你想要的,您已经使用过。

procedure My_Character_Program(First, Second : in Character) is
  Subtype Middle is Character range
     Character'Succ(First)..Character'Pred(Second);
begin
  Put_Line( First & ' ' & Second );

  Put("All characters between " & First & " and " & Second & ':');
  for C in Middle loop
     Put(' ' & C);
  end loop;
  Put_Line( "." );
end My_Character_Program;

关于第 2 部分,请允许我建议一个更好的方法是使用内联声明 block 和属性/重命名。

--...
First_Character  := Random(Gen_1);
Second_Character := Random(Gen_1);
 
Declare
  First  : Character renames Character'Min(First_Character,Second_Character);
  Second : Character renames Character'Max(First_Character,Second_Character);
Begin
  My_Character_Program(First, Second);
End;

关于probability - 有没有更好的方法来编程这个,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69678807/

相关文章:

exception - 将 Ada 标量类型与子类型进行比较时,是否需要进行范围检查?

numbers - 如何在 ada 中引用数字中的个位数?

c - 发生概率函数

r - 条件概率

python-2.7 - Mt4 概率脚本

Ruby:在代码中使用 rand() 但编写测试来验证概率

c++ - 二项分布压缩

BBC Micro :Bit with the MCP23017 上 I2C 的 Ada

visibility - 从子包中隐藏记录

compiler-errors - gnatmake链接在macOS上失败