46 lines
1.1 KiB
ObjectPascal
46 lines
1.1 KiB
ObjectPascal
uses numlibabc;
|
|
|
|
function muller_seq(n: integer): real;
|
|
begin
|
|
var seq := Lst(Frc(0), Frc(2), Frc(-4));
|
|
foreach var i in range(3, n + 1) do
|
|
begin
|
|
var next_value := 111 - 1130 / seq[i - 1] + 3000 / (seq[i - 1] * seq[i - 2]);
|
|
seq.Add(next_value);
|
|
end;
|
|
result := seq[n].ToReal
|
|
end;
|
|
|
|
function tofraction(s: string): Fraction;
|
|
begin
|
|
var period := s.IndexOf('.');
|
|
result := Frc(s.Remove(period, 1).ToBigInteger, Power(10bi, s.Length - period - 1));
|
|
end;
|
|
|
|
function bank(years: integer): real;
|
|
const
|
|
e = '2.71828182845904523536028747135266249775724709369995';
|
|
begin
|
|
var bigE := ToFraction(e);
|
|
var balance := bigE - 1;
|
|
for var year := 1 to years do
|
|
balance := balance * year - 1;
|
|
result := balance.ToReal;
|
|
end;
|
|
|
|
function rump(a, b: biginteger): real;
|
|
begin
|
|
var f := ToFraction('333.75') * b ** 6
|
|
+ a ** 2 * (11 * a ** 2 * b ** 2 - b ** 6 - 121 * b ** 4 - 2)
|
|
+ ToFraction('5.5') * b ** 8 + Frc(a, 2 * b);
|
|
result := f.ToReal;
|
|
end;
|
|
|
|
begin
|
|
println('Task 1:');
|
|
foreach var n in [3, 4, 5, 6, 7, 8, 20, 30, 50, 100] do
|
|
println(n, muller_seq(n));
|
|
println('Task 2: ', bank(25));
|
|
println('Task 3: ', rump(77617, 33096));
|
|
end.
|