Advertisement
pseudocreator

a^n (advanced)

Mar 19th, 2014
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MODULE z;
  2. FROM InOut IMPORT WriteString, WriteLn, WriteInt, ReadInt;
  3. FROM RealInOut IMPORT ReadReal, WriteReal;
  4.  
  5. VAR
  6.    a, result : REAL;
  7.    n : INTEGER;
  8.    ok : BOOLEAN;
  9.  
  10. PROCEDURE Stepen(a: REAL; n: INTEGER; VAR ok: BOOLEAN): REAL;
  11.  
  12.         PROCEDURE Sqr(x: REAL): REAL;
  13.         BEGIN
  14.              RETURN x*x
  15.         END Sqr;
  16.  
  17.         PROCEDURE RekStepen(a: REAL; n: INTEGER): REAL;
  18.         BEGIN
  19.              IF n = 1 THEN
  20.                RETURN a
  21.              ELSIF ODD(n) THEN
  22.                   RETURN a * Sqr(RekStepen(a,n DIV 2))
  23.              ELSE
  24.                  RETURN Sqr(RekStepen(a,n DIV 2))
  25.              END;
  26.         END RekStepen;
  27.  
  28. BEGIN
  29.      IF (a = 0.0) AND (n <= 0) THEN
  30.        ok := FALSE;
  31.        RETURN 0.0
  32.      ELSE
  33.          ok := TRUE;
  34.          IF a = 0.0 THEN
  35.            RETURN 0.0
  36.          ELSIF (n = 0) OR (a = 1.0) THEN
  37.               RETURN 1.0
  38.          ELSIF n = 1 THEN
  39.               RETURN a
  40.          ELSE
  41.              IF n < 0 THEN
  42.                a := 1.0 / a;
  43.                n := ABS(n)
  44.              END;
  45.              RETURN RekStepen(a, n)
  46.          END
  47.      END
  48. END Stepen;
  49.  
  50. BEGIN
  51.     WriteString('Enter a: ');
  52.     ReadReal(a);
  53.     WriteLn;
  54.     WriteString('Enter n: ');
  55.     ReadInt(n);
  56.     WriteLn;
  57.     ok := TRUE;
  58.     result := Stepen(a,n,ok);
  59.     IF ok THEN
  60.       WriteString('Result for a^n is: ');
  61.       WriteReal(result,0)
  62.     ELSE
  63.       WriteString('Invalid input')
  64.     END
  65. END z.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement