RosettaCodeData/Task/Continued-fraction/Ada/continued-fraction-6.ada
Ingy döt Net 764da6cbbb CDE
2013-04-10 16:57:12 -07:00

87 lines
2.1 KiB
Ada

with Ada.Text_IO;
with Continued_Fraction_Ada95;
procedure Test_Continued_Fractions_Ada95 is
type Scalar is digits 15;
package Square_Root_Of_2 is
function A (N : in Natural) return Natural;
function B (N : in Positive) return Natural;
function Estimate is new Continued_Fraction_Ada95 (Scalar, A, B);
end Square_Root_Of_2;
package body Square_Root_Of_2 is
function A (N : in Natural) return Natural is
begin
if N = 0 then
return 1;
else
return 2;
end if;
end A;
function B (N : in Positive) return Natural is
begin
return 1;
end B;
end Square_Root_Of_2;
package Napiers_Constant is
function A (N : in Natural) return Natural;
function B (N : in Positive) return Natural;
function Estimate is new Continued_Fraction_Ada95 (Scalar, A, B);
end Napiers_Constant;
package body Napiers_Constant is
function A (N : in Natural) return Natural is
begin
if N = 0 then
return 2;
else
return N;
end if;
end A;
function B (N : in Positive) return Natural is
begin
if N = 1 then
return 1;
else
return N - 1;
end if;
end B;
end Napiers_Constant;
package Pi is
function A (N : in Natural) return Natural;
function B (N : in Positive) return Natural;
function Estimate is new Continued_Fraction_Ada95 (Scalar, A, B);
end Pi;
package body Pi is
function A (N : in Natural) return Natural is
begin
if N = 0 then
return 3;
else
return 6;
end if;
end A;
function B (N : in Positive) return Natural is
begin
return (2 * N - 1) ** 2;
end B;
end Pi;
package Scalar_Text_IO is new Ada.Text_IO.Float_IO (Scalar);
use Ada.Text_IO, Scalar_Text_IO;
begin
Put (Square_Root_Of_2.Estimate (200), Exp => 0); New_Line;
Put (Napiers_Constant.Estimate (200), Exp => 0); New_Line;
Put (Pi.Estimate (10000), Exp => 0); New_Line;
end Test_Continued_Fractions_Ada95;