AHE/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad2_silnia_czas.pas

72 lines
1.5 KiB
ObjectPascal

program silnia_czas;
uses sysUtils;
function Czytaj_liczbe: Int64;
var
liczba : Int64;
begin
Write('Podaj liczbe calkowita: ');
ReadLn(liczba);
Czytaj_liczbe := liczba;
end;
function Silnia_rekurencyjna(n: Int64): Int64;
begin
if n = 0 then
Silnia_rekurencyjna := 1
else
Silnia_rekurencyjna := n * Silnia_rekurencyjna(n - 1);
end;
function Silnia_iteracyjna(n: Int64): Int64;
var
wynik, i : Int64;
begin
wynik := 1;
for i := 1 to n do
wynik := wynik * i;
Silnia_iteracyjna := wynik;
end;
procedure Wypisz_wyniki(liczba,ile,wynikRek, wynikIter : Int64; CzasI, CzasR : TdateTime);
begin
writeln('Podana liczba: ', liczba);
writeln('Podana liczba iteracji', ile);
writeln('Czas silni rekurencyjnej: ', CzasR:0:2, ' sekund');
WriteLn('Silnia rekurencyjna: ', wynikRek:10);
writeln('Czas silni iteracyjnej: ', CzasI:0:2, ' sekund');
WriteLn('Silnia iteracyjna: ', wynikIter:10);
end;
procedure Glowna_procedura;
var
CzasI, CzasR : TdateTime;
i : Int64;
ile, liczba : Int64;
wynikI, wynikR : Int64;
begin
liczba := Czytaj_liczbe();
Write('Podaj liczbe iteracji: ');
ReadLn(ile);
CzasI := Time();
for i := 0 to ile do
wynikI := Silnia_iteracyjna(liczba);
CzasI := Time()-CzasI;
CzasI := CzasI*24*60*60;
CzasR := Time();
for i := 0 to ile do
wynikR := Silnia_rekurencyjna(liczba);
CzasR := Time()-CzasR;
CzasR := CzasR*24*60*60;
Wypisz_wyniki(liczba,ile,wynikR,wynikI,CzasI,CzasR);
end;
begin
Glowna_procedura()
end.