{Uwaga! Program nie rozroznia parzystego i nieparzystego stopnia
pierwiastkow poniewaz a i b sa rzeczywiste, wiec potega 1/2 jest
tylko przyblizeniem pierwiastka stopnia 2; w rzeczywistosci
1/2, wiec 0.5, w Pascalu moze byc rowne np., 0.5000000...?...1.
Problem wynika z niemoznosci zastosowania ulamkow zwyklych.
Nalezaloby zatem napisac modul, ktory liczylby w zapisie ulamkow
zwyklych (czyli bez przyblizenia w wypadkach wykladnikow wymiernych).
Wniosek: Dla podstawy a<0 wyniki moga byc bledne (wynik nie uwzglednia
czesci urojonej liczby).

Program a_do_b;   {Dla a i b rzeczywistych funkcja potegowania}
uses crt;
var a,b:real;

  function pot(x,y:real):real;
  begin
  if x=0 then pot:=0;
  if x>0 then pot:=exp(y*ln(x));
  if x<0 then begin
            if (trunc(abs(y)) mod 2 = 0) then
            pot:=exp(y*ln(abs(x)));
            if (trunc(abs(y)) mod 2 = 1) then
            pot:=-exp(y*ln(abs(x)));
            end;
  end;

Begin
clrscr;
writeln('Program wykorzystuje funkcje potegowania dwoch liczb rzeczywistych (a^b).');
write('Podaj podstawe potegi, a = ');readln(a);
write('Podaj wykladnik potegi, b = ');readln(b);
write('a^b = ',pot(a,b):2:5);
repeat until keypressed;
End.