PROGRAM acker2;

{ Ackermann-Funktion }

VAR x, y : real;

{$A-}
{====================================================================}

FUNCTION acker (a, b : real) : real;

{ Sonderbehandlung der Faelle : a = 1 :  f (1, b) := b+2
                                a = 2 :  f (2, b) := 2*b+3
                                a = 3 :  f (3, b) := 2^(b+3)-3     }

VAR e : real;

BEGIN { acker }
  IF a = 0
    THEN
      acker := b+1
    ELSE
      IF b = 0
        THEN
          acker := acker (a-1, 1)
        ELSE
          IF a = 1
            THEN
              acker := b+2
            ELSE
              IF a = 2
                THEN
                  acker := 2*b+3
                ELSE
                  IF a = 3
                    THEN
                      BEGIN
                        e := 8;
                        WHILE b > 0 DO
                          BEGIN
                            e := 2*e;
                            b := b-1
                          END;
                        acker := e-3
                      END
                    ELSE
                      acker := acker (a-1, acker (a, b-1))
END; { acker }

{====================================================================}

BEGIN { acker2 }
  write ('Geben Sie x und y ein : ');
  readln (x, y);
  writeln ('Ackermann (', x:1:0, ',', y:1:0, ') = ', acker(x,y):1:0);
  writeln
END.  { acker2 }