Как генерировать случайные числа с плавающей точкой в ​​Аде? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть программа с заданиями. Я хочу сгенерировать два случайных числа,

Первый: от 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;

У меня есть две точки входа, где я должен передать эти значения.

Так как я могу реализовать два генератора случайных чисел в защищенном блоке?

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Это набросок части решения.

protected Helper is
   procedure Generate_First_Random_Number (Result : out Float);
   procedure Generate_Second_Random_Number (Result : out Float);

Во-первых, я надеюсь, что не наступлю на ваши пальцы, но это более стандартный стиль Ады (Title_Case_With_Underscores).

Во-вторых, вам нужно как-то получить результаты.Вы не можете использовать функцию, потому что функциям не разрешено изменять внутреннее состояние ПО, и (частично) это внутреннее состояние является генератором случайных чисел.

В-третьих, я бы объявилподтипы для представления диапазонов, которые вы должны предоставить: subtype Lower_Range is Float range 0.5 .. 3.5;, например.

private
   Gen : Ada.Numerics.Float_Random.Generator;

Внутренние переменные должны быть объявлены в закрытой части защищенной спецификации.И, как правило, лучше использовать полностью определенные имена, поэтому очевидно, откуда исходит объект (лично я делаю исключение для Ada.Text_IO).

end Helper;

protected body Helper is

Вы должны использоватьслово body здесь.

   procedure Generate_First_Random_Number (Result : out Float)
   is
      Rnd : constant Float := Ada.Numerics.Float_Random.Random (Gen);

Rnd находится в диапазоне 0.0 .. 1.0,

   begin
      Result := 3.0 * Rnd + 0.5;

, но вы хотите получить результат в 0.5 .. 3.5.

   end Generate_First_Random_Number;

... и аналогично для другой процедуры.

0 голосов
/ 11 мая 2018

Поскольку это, кажется, для вашего обучения, я только укажу вам правильное направление.Справочное руководство по языку содержит подробное описание стандартных библиотек Ada.Они включают положения для генерации случайных значений с плавающей запятой с равным распределением в четко определенном диапазоне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...