diff --git a/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad2_silnia_czas.pas b/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad2_silnia_czas.pas new file mode 100644 index 0000000..9b970e1 --- /dev/null +++ b/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad2_silnia_czas.pas @@ -0,0 +1,71 @@ +program silnia; +uses sysUtils; +function Czytaj_liczbe: Int64; +var + liczba : Int64; +begin + Write('Podaj liczbę 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 liczbę 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.