Это набросок части решения.
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;
... и аналогично для другой процедуры.