Witam serdecznie, mam program który oblicza silnie metodą rekurencyjną, ale coś nie chce działać, nie mam pojęcia dlaczego. Bardzo bym prosił o poprawienie go. Wiem, że chodzi o coś z Begin, tylko tyle :x
{program liczy funkcje metoda rekurencjna}
program s;
uses
crt;
function silnia(n:integer):integer; //funkcja liczaca rekurencyjnie silnie
begin
if (n=0) or (n=1) then
result:=1
else
result:=silnia(n-1)*n;
end;
var
n:integer;
begin
repeat
write('Podaj dla jakiego n chcesz obliczac: ');
readln(n);
if n<0 then
writeln('Nie ma silni z liczb ujemnych');
until n>=0;
writeln(n,'!= ',silnia(n)); //wywolanie funkcji liczacej silnie
readln;
end.
Dziękuję ci bardzo a mam jeszcze jeden. On działa, ale po ukazaniu się wyniku program wyłącza się i powraca do kodu źródłowego. Aby zobaczyć wynik silni muszę z powrotem wejść w uruchomienie programu, bardzo bym prosił o poprawienie tego małego błędu.
Jeśli nie bardzo wiecie o co chodzi to wystarczy skopiować poniższy kod do notatnika, zapisać z rozszerzeniem pas i otworzyć w pascalu.
{Program obliczajacy silnie metoda rekurencyjna}
program SilniaRekurencyjna;
uses crt;
{Obliczanie wartosci silni}
function silnia(n: longint): longint;
begin
clrscr;
if n=0 then
begin
silnia :=1;
exit
end;
silnia :=n * silnia(n-1)
end;
var
kk: longint;
begin
write ('Podaj liczbe naturalna: ');
read(k);
writeln(k, '! = ',silnia(k))
end.
{Program obliczajacy silnie metoda rekurencyjna}
program SilniaRekurencyjna;
uses crt;
{Obliczanie wartosci silni}
function silnia(n: longint): longint;
begin
clrscr;
if n=0 then
begin
silnia :=1;
exit
end;
silnia :=n * silnia(n-1)
end;
var
kk: longint;
begin
write ('Podaj liczbe naturalna: ');
read(k);
writeln(k, '! = ',silnia(k));
readln;
end.
Na moje wystarczy cos takiego hmm tak jak poprzednicy pisali:)
Nie działa, trzeba zmienić kk: longint; na k: longint; (czyli jedno k ma być), ale i tak nie działa poprawnie tak jak pisałem wcześniej.
Program się uruchamia, ale po ukazaniu wyniku program wyłącza się i powraca do kodu źródłowego. Aby zobaczyć wynik silni muszę z powrotem wejść w uruchomienie programu, bardzo bym prosił o poprawienie tego małego błędu.
Jeśli nie bardzo wiecie o co chodzi to wystarczy skopiować poniższy kod do notatnika, zapisać z rozszerzeniem pas i otworzyć w pascalu.
{Program obliczajacy silnie metoda rekurencyjna}
program SilniaRekurencyjna;
uses crt;
{Obliczanie wartosci silni}
function silnia(n: longint): longint;
begin
if n=0 then
begin
silnia :=1;
exit;
end
else
silnia :=n * silnia(n-1)
end;
var
k: longint;
begin
clrscr;
write ('Podaj liczbe naturalna: ');
read(k);
readln;
writeln(k, '! = ',silnia(k));
readln;
end.