Advertisement
pseudocreator

SPA1 Polinom H/Advanced #izracunaj

May 15th, 2014
448
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MODULE Polinomic;
  2. FROM InOut IMPORT WriteString, WriteLn;
  3. FROM RealInOut IMPORT WriteReal;
  4. FROM Storage IMPORT ALLOCATE, DEALLOCATE;
  5. FROM PolinomL IMPORT Polinom, UbaciMonom, Stampaj, Anuliraj;
  6.  
  7. (*izracunaj //polinom, naprednija*)
  8. PROCEDURE izracunaj(a: REAL;p: Polinom;VAR pro: BOOLEAN): REAL;
  9.  
  10.   (*Izracunavanje stepena uzastopnim kvadriranjem*)
  11.   PROCEDURE Stepen(a: REAL; n: INTEGER; VAR ok: BOOLEAN): REAL;
  12.  
  13.         PROCEDURE Sqr(x: REAL): REAL;
  14.         BEGIN
  15.              RETURN x*x
  16.         END Sqr;
  17.  
  18.         PROCEDURE RekStepen(a: REAL; n: INTEGER): REAL;
  19.         BEGIN
  20.              IF n = 1 THEN
  21.                RETURN a
  22.              ELSIF ODD(n) THEN
  23.                   RETURN a * Sqr(RekStepen(a,n DIV 2))
  24.              ELSE
  25.                  RETURN Sqr(RekStepen(a,n DIV 2))
  26.              END;
  27.         END RekStepen;
  28.  
  29.   BEGIN
  30.      IF (a = 0.0) AND (n <= 0) THEN
  31.        ok := FALSE;
  32.        RETURN 0.0
  33.      ELSE
  34.          ok := TRUE;
  35.          IF a = 0.0 THEN
  36.            RETURN 0.0
  37.          ELSIF (n = 0) OR (a = 1.0) THEN
  38.               RETURN 1.0
  39.          ELSIF n = 1 THEN
  40.               RETURN a
  41.          ELSE
  42.              IF n < 0 THEN
  43.                a := 1.0 / a;
  44.                n := ABS(n)
  45.              END;
  46.              RETURN RekStepen(a, n)
  47.          END
  48.      END
  49.   END Stepen;
  50.  
  51. VAR
  52.    tekuci: Polinom;
  53.    akum: REAL;
  54.    rez: REAL;
  55. BEGIN
  56.         rez := 0.0;
  57.     tekuci := p;
  58.         pro := TRUE;
  59.     WHILE (tekuci <> NIL) AND pro DO
  60.              akum := Stepen(a, tekuci^.st, pro);
  61.              rez := rez + tekuci^.k * akum;
  62.              tekuci := tekuci^.veza;
  63.     END;
  64.         RETURN rez;
  65.  
  66. END izracunaj;
  67.  
  68. VAR
  69.    monom, polinom: Polinom;
  70.    rez : REAL;
  71.    ok : BOOLEAN;
  72.    
  73.  
  74. BEGIN
  75.      Anuliraj(polinom);
  76.  
  77.      NEW(monom);
  78.      monom^.st := 3;
  79.      monom^.k := 2.0;
  80.      monom^.veza := NIL;
  81.      UbaciMonom(monom, polinom);
  82.      DISPOSE(monom);
  83.  
  84.      NEW(monom);
  85.      monom^.st := 2;
  86.      monom^.k := 5.0;
  87.      monom^.veza := NIL;
  88.      UbaciMonom(monom, polinom);
  89.      DISPOSE(monom);
  90.  
  91.      NEW(monom);
  92.      monom^.st := 1;
  93.      monom^.k := 3.0;
  94.      monom^.veza := NIL;
  95.      UbaciMonom(monom, polinom);
  96.      DISPOSE(monom);
  97.  
  98.      NEW(monom);
  99.      monom^.st := 0;
  100.      monom^.k := 5.0;
  101.      monom^.veza := NIL;
  102.      UbaciMonom(monom, polinom);
  103.      DISPOSE(monom);
  104.  
  105.      WriteString('Polinom pre procedure:  ');
  106.      Stampaj(polinom,0);
  107.      WriteLn; WriteLn;
  108.  
  109.      rez := izracunaj(2.0,polinom,ok);
  110.      WriteString('Rez je:  ');
  111.      WriteReal(rez,0);
  112.  
  113.  
  114.  
  115. END Polinomic.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement