79 lines
2.1 KiB
Ada
79 lines
2.1 KiB
Ada
with Ada.Text_IO;
|
|
with Ada.Numerics.Generic_Elementary_Functions;
|
|
|
|
procedure Juggler is
|
|
|
|
subtype Number is Long_Long_Integer;
|
|
type Index_Type is new Natural;
|
|
|
|
subtype Initial_Values is Number range 20 .. 39;
|
|
|
|
generic
|
|
Initial : Number;
|
|
package Generic_Juggler is
|
|
procedure Next (Value : out Number; Index : out Index_Type);
|
|
end Generic_Juggler;
|
|
|
|
package body Generic_Juggler is
|
|
|
|
type Real is new Long_Long_Float;
|
|
|
|
package Real_Math is
|
|
new Ada.Numerics.Generic_Elementary_Functions (Real);
|
|
|
|
K : Index_Type := 0;
|
|
A_K : Real := Real (Initial);
|
|
|
|
procedure Next (Value : out Number; Index : out Index_Type) is
|
|
use Real_Math;
|
|
begin
|
|
Value := Number (A_K);
|
|
Index := K;
|
|
A_K := (if Number (A_K) mod 2 = 0
|
|
then Real'Floor (A_K ** 0.5)
|
|
else Real'Floor (A_K ** 1.5));
|
|
K := K + 1;
|
|
end Next;
|
|
|
|
end Generic_Juggler;
|
|
|
|
procedure Statistics (N : Number; L_N : out Index_Type;
|
|
H_N : out Number; I_N : out Index_Type)
|
|
is
|
|
package Juggler_Generator is new Generic_Juggler (Initial => N);
|
|
use Juggler_Generator;
|
|
Value : Number;
|
|
begin
|
|
H_N := 0;
|
|
I_N := 0;
|
|
loop
|
|
Next (Value, L_N);
|
|
if Value > H_N then
|
|
H_N := Value;
|
|
I_N := L_N;
|
|
end if;
|
|
exit when Value = 1;
|
|
end loop;
|
|
end Statistics;
|
|
|
|
procedure Put_Table is
|
|
package Number_IO is new Ada.Text_IO.Integer_IO (Number);
|
|
package Index_IO is new Ada.Text_IO.Integer_IO (Index_Type);
|
|
use Ada.Text_IO, Number_IO, Index_IO;
|
|
L_N : Index_Type;
|
|
H_N : Number;
|
|
I_N : Index_Type;
|
|
begin
|
|
Put_Line (" N L(N) H(N) I(N)");
|
|
Put_Line ("---------------------------------");
|
|
for N in Initial_Values loop
|
|
Statistics (N, L_N, H_N, I_N);
|
|
Put (N, Width => 3); Put (L_N, Width => 7);
|
|
Put (H_N, Width => 16); Put (I_N, Width => 7); New_Line;
|
|
end loop;
|
|
end Put_Table;
|
|
|
|
begin
|
|
Put_Table;
|
|
end Juggler;
|