gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control system (* Modul za rad sa polinomima preko listi\r
- verzija 2012, rev 1 *)\r
+ verzija 2014; rev 1 *)\r
IMPLEMENTATION MODULE PolinomL;\r
FROM InOut IMPORT Write, WriteString, WriteLn,\r
WriteCard, ReadCard, Done;\r
END\r
END Stampaj;\r
\r
+PROCEDURE PostaviClan(k:REAL; st:CARDINAL;\r
+ VAR p:Polinom);\r
+VAR\r
+ cilj, prethodni : Polinom;\r
+BEGIN\r
+ cilj := p;\r
+ prethodni := NIL;\r
+ WHILE (cilj # NIL) AND (cilj^.st>st) DO\r
+ prethodni := cilj;\r
+ cilj := cilj^.veza;\r
+ END;\r
+ (* da li upisujemo vrednost ili sklanjamo clan *)\r
+ IF k#0.0 THEN\r
+ (* da li menjamo clan ili pravimo novi *)\r
+ IF (cilj # NIL) AND (cilj^.st = st) THEN\r
+ cilj^.k:=k;\r
+ ELSE\r
+ NEW(cilj);\r
+ cilj^.k := k;\r
+ cilj^.st := st;\r
+ cilj^.veza := NIL;\r
+ IF prethodni = NIL THEN\r
+ (* ili je prazan polinom, ili dodajemo na pocetak *)\r
+ cilj^.veza := p;\r
+ p := cilj;\r
+ ELSE\r
+ cilj^.veza := prethodni^.veza;\r
+ prethodni^.veza := cilj;\r
+ END;\r
+ END;\r
+ ELSE\r
+ (* da li postoji ovakav clan *)\r
+ IF (cilj # NIL) AND (cilj^.st = st) THEN\r
+ IF p = cilj THEN\r
+ p := p^.veza;\r
+ ELSE\r
+ prethodni^.veza:= prethodni^.veza^.veza;\r
+ END;\r
+ DISPOSE(cilj); \r
+ END;\r
+ END;\r
+END PostaviClan;\r
+\r
+PROCEDURE KoeficijentUz(p:Polinom; st:CARDINAL):REAL;\r
+VAR\r
+ tekuci : Polinom;\r
+BEGIN\r
+ tekuci := p;\r
+ WHILE (tekuci#NIL) AND (tekuci^.st > st) DO\r
+ tekuci := tekuci^.veza;\r
+ END;\r
+ IF (tekuci # NIL) AND (tekuci^.st = st) THEN\r
+ RETURN tekuci^.k;\r
+ ELSE\r
+ RETURN 0.0;\r
+ END;\r
+END KoeficijentUz;\r
+\r
+PROCEDURE MaksimalniStepen(p:Polinom):CARDINAL;\r
+BEGIN\r
+ IF p#NIL THEN\r
+ RETURN p^.st;\r
+ ELSE\r
+ RETURN 0;\r
+ END;\r
+END MaksimalniStepen;\r
+\r
PROCEDURE UbaciMonom(mon:Polinom; VAR p: Polinom);\r
VAR\r
stari, tekuci, kopija: Polinom;\r
\r
PROCEDURE Puta(p1, p2: Polinom; VAR pr: Polinom);\r
VAR\r
- pomocni: Polinom;\r
+ pomocni, brisi: Polinom;\r
BEGIN\r
Anuliraj(pr);\r
IF (p1 <> NIL) AND (p2 <> NIL) THEN\r
MonomPuta(p1, p2, pomocni);\r
REPEAT\r
UbaciMonom(pomocni, pr);\r
- pomocni := pomocni^.veza\r
+ brisi := pomocni;\r
+ pomocni := pomocni^.veza;\r
+ DISPOSE(brisi);\r
UNTIL pomocni = NIL;\r
p2 := p2^.veza\r
END\r
novi^.k := - ost^.k / p2^.k;\r
novi^.st := ost^.st - p2^.st;\r
MonomPuta(p2, novi, pomocni);\r
- Saberi(ost, pomocni, ost);\r
+ SaberiNa(pomocni, ost);\r
+ DisposePolinom(pomocni);\r
novi^.k := - novi^.k;\r
UbaciMonom(novi, kol);\r
DISPOSE(novi);\r
VAR rez: Polinom);\r
VAR\r
i: CARDINAL;\r
+ pret : Polinom;\r
BEGIN\r
IF n = 0 THEN\r
NEW(rez);\r
rez^.k := 1.0;\r
rez^.st := 0;\r
rez^.veza := NIL;\r
- ELSIF n = 1 THEN\r
- Kopiraj( p, rez );\r
ELSE\r
- rez := p;\r
+ Kopiraj( p, rez );\r
FOR i := 2 TO n DO\r
- Puta(rez, p, rez)\r
+ pret := rez;\r
+ Puta(pret, p, rez);\r
+ DisposePolinom(pret);\r
END\r
END;\r
END PolinomNaN;\r