【问题标题】:Ada thread to pass auto random generated data to a procedureAda 线程将自动随机生成的数据传递给程序
【发布时间】:2016-04-27 15:19:17
【问题描述】:

我将如何创建一个程序,它是一个在指定范围内连续传递自动随机生成的数据的线程。

我目前必须使用以下过程在控制台中手动输入每一位数据。我想创建一个程序,它在运行时能够将数据传递给这个程序,就好像它被输入到控制台本身一样。

procedure Analyse_Data is
  Data : Integer;
begin
  DT_Put_Line("Data input by user");
  loop
     DT_Get(Data,"Data must be taken as a whole number");
     exit when (Data >=0) and (Data <= Maximum_Data_Possible);
     DT_Put("Please input a value between 0 and ");
     DT_Put(Maximum_Data_Possible);
     DT_Put_Line("");
  end loop;
  Status_System.Data_Measured := Data_Range(Data);
end Analyse_Data;

我没有包含规范文件 (.ads) 我是 Ada 的新手,我们将不胜感激。

【问题讨论】:

  • DT_ 子程序与普通的Ada.Text_IO 有什么不同?为什么必须是一个任务(Ada 中的“线程”一词)调用此过程,而不是让某些东西直接重复更新 Status_System.Data_Measured
  • 我想我想做的是:程序要求数据,即。高度是多少? (任务从指定范围传递一些随机数)并继续询问其他变量,速度是多少?等等等等我已将其设置为由用户手动输入,但如果它们由任务完成会更好。几乎就像程序在问一组问题,而任务只是将数据传回给它。现在都是为了研究
  • 如果您知道问题的顺序,trashgod’s answer 应该可以解决问题。但如果没有,你可以看看this article about GNAT.Expect

标签: random ada


【解决方案1】:

使用Discrete_Random 的实例生成所需范围内的一些随机数据值:

subtype Valid_Range is Natural range 0 .. Maximum_Data_Possible;
package Some_Value is new Ada.Numerics.Discrete_Random(Valid_Range);
G : Some_Value.Generator;
…
procedure Generate is
N : Valid_Range;
begin
   for I in 1 .. Count loop
      N := Some_Value.Random(G);
      Put(N);
   end loop;
end;

将值保存到文件中:

./generate > test_data.txt

使用命令行中的 I/O 重定向将该文件提供给您的程序:

./analyse_data < test_data.txt

具体细节取决于您的实际程序。有关标准输入中的空行,请参阅此相关 Q&A

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多