PROGRAM mathlib (INPUT,OUTPUT);

{Nuetzliche Prozeduren}

VAR x : REAL;
    n : INTEGER;



FUNCTION Wurzel ( x : REAL ) : REAL;
{Berechnet die positive Quadratwurzel von x}
VAR x0, x1 : REAL;
BEGIN
IF x>=0 THEN BEGIN
             x1:=x;
             REPEAT
               x0:=x1;
               x1:=(x0+x/x0)/2;
             UNTIL (x0 + abs(x0-x1) = x0);
             Wurzel:=x1;
             END
        ELSE BEGIN
             WRITELN('Fehler: Wurzel ist komplex!');
             END;
END; {Wurzel}


FUNCTION xhochn ( x : REAL; n : INTEGER ) : REAL;
{Berechnet $x^n$ fuer n ganzzahlig}
VAR z : REAL;

  FUNCTION HilfMir ( x : REAL; n : INTEGER ) : REAL;
  {Vorsicht: Voraussetzung n>=0 }
  BEGIN
  IF n=0 THEN HilfMir:=1
         ELSE HilfMir:=HilfMir(x,n-1)*x;
  END; {HilfMir}

BEGIN
z:=HilfMir(x,abs(n));
IF n<0 THEN z:=1/z;
xhochn:=z;
END; {xhochn}


FUNCTION kteWurzel ( x : REAL; k : INTEGER ) : REAL;
{Berechnet die k-te Wurzel von x fuer k ganzzahlig}
VAR x0, x1 : REAL;
BEGIN
IF x>=0 THEN BEGIN
             x1:=x;
             REPEAT
               x0:=x1;
               x1:=((abs(k)-1)*x0 + x/xhochn(x1,abs(k-1)))/abs(k)
             UNTIL (x0+abs(x0-x1)=x0);
             IF k<0 THEN x1:=1/x1;
             kteWurzel:=x1;
             END
        ELSE BEGIN
             WRITELN('Fehler: Wurzel ist komplex!');
             END;
END;{kteWurzel}


BEGIN
WRITELN;
WRITELN;
WRITELN;
WRITELN;
WRITELN;
WRITELN;
WRITELN('Zuerst x');
READLN(x);
WRITELN('dann n');
READLN(n);
WRITELN;
WRITELN;
WRITELN;
WRITELN;
WRITELN;
WRITELN;
WRITELN('Wurzel(x) ist ',Wurzel(x));
WRITELN('Probe: ',Wurzel(x)*Wurzel(x));
WRITELN('x hoch n ist ',xhochn(x,n));
WRITELN('Probe: ',kteWurzel(xhochn(x,n),n));
WRITELN('n-te Wurzel aus x ist ',kteWurzel(x,n));
WRITELN('Probe: ',xhochn(kteWurzel(x,n),n));
WRITELN;
WRITELN;
END.

 
