Proste potegowanie, rekurencja, konkretne zadanie

0

Napisałem prostą funkcję potęgowania dla wykładników całkowitych i z jakiegoś powodu nie chce działać. Kompilator nie znalazł żadnych błędów po prostu program się zamyka. Byłbym wdzięczny za wskazanie błędu.

function a_k(a: Real; k:integer) : Real;
var
i: Integer;
begin
if k>=0 then begin
                  i:=0;
                  if k>i then begin a_k:=a_k(a, k) * a; i:=i+1; end
                         else if a_k(a,k)=0 then a_k:=1
                                            else a_k:=a_k(a, k);
            end;
if k<0 then begin
                  if k<i then begin a_k:=1/(a_k(a, k) * a); i:=i+1; end
                         else begin a_k:=a_k(a, k); end;
            end;
end;

var
 k : integer;
a: Real;


begin
  readln(a);
  readln(k);
  writeln(a_k(a,k));
  readln;
end. 
0

Uruchom go w CMD, jeżeli będzie jakiś komunikat (jak nic będzie Stack Overflow), to go napisz.
A tak swoją drogą, jeżeli to ma szybko działać... Amen :P

0
function Potega(A, B : Extended): Extended;
var I : Integer;
begin
Result := 1
 for I := 1 to B do
   Result := Result*A;
end;
0

Nie dało żadnego komunikatu. Po prostu przestało działać i spytało czy debugować. Co do drugiej odpowiedzi, to ma być rekurencja ;). Szybki być nie musi, byle by był (w końcu informatyki nie studiuje).

0

z wywołaniem rekurencyjnym może wyglądać np. tak

 program pot;
uses crt;
var
	a,n : Integer;
function potega(a : real;n : Integer) : Real;
begin
	if n > 1 then
		potega:= potega(a,n-1) * a
	else if n = 1 then
		potega:=a
	else if n = 0 then
		potega:=1
end;
begin
        clrscr;
        readln(a,n);
	writeln(potega(a,n));
	readkey;
end.

a dla ujemnych wykładników już samemu wymyślisz ;)

0

Dziękuje! Z ujemnymi nie będzie problemu. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1