X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa1skripta-public.git;a=blobdiff_plain;f=kodovi%2Fpolinomi%2FPOLINOML.MOD;h=1623cb8f60f5b5369d5e6cde3af162d0c8e49f5b;hp=6de51656eb818843353f71ae0033a74ea219b60c;hb=87e5ad8b805393185679739de75a30dde1e2be82;hpb=8ea141bd11f257ecaa188607303730099b5c6a67 diff --git a/kodovi/polinomi/POLINOML.MOD b/kodovi/polinomi/POLINOML.MOD index 6de5165..1623cb8 100644 --- a/kodovi/polinomi/POLINOML.MOD +++ b/kodovi/polinomi/POLINOML.MOD @@ -83,36 +83,35 @@ BEGIN prethodni := cilj; cilj := cilj^.veza; END; - IF cilj = NIL THEN - IF k#0.0 THEN + (* da li upisujemo vrednost ili sklanjamo clan *) + IF k#0.0 THEN + (* da li menjamo clan ili pravimo novi *) + IF (cilj # NIL) AND (cilj^.st = st) THEN + cilj^.k:=k; + ELSE NEW(cilj); cilj^.k := k; cilj^.st := st; cilj^.veza := NIL; IF p = NIL THEN p := cilj; + ELSIF prethodni = NIL THEN + cilj^.veza := p^.veza; + p := cilj; ELSE + cilj^.veza := prethodni^.veza; prethodni^.veza := cilj; END; END; - ELSIF cilj^.st=st THEN - IF k # 0.0 THEN - cilj^.k:=k; - ELSE + ELSE + (* da li postoji ovakav clan *) + IF (cilj # NIL) AND (cilj^.st = st) THEN IF p = cilj THEN p := p^.veza; ELSE prethodni^.veza:= prethodni^.veza^.veza; END; - DISPOSE(cilj); - END; - ELSE - IF k # 0.0 THEN - NEW(cilj); - cilj^.k := k; - cilj^.st := st; - cilj^.veza := prethodni^.veza; - prethodni^.veza := cilj; + DISPOSE(cilj); END; END; END PostaviClan; @@ -132,6 +131,15 @@ BEGIN END; END KoeficijentUz; +PROCEDURE MaksimalniStepen(p:Polinom):CARDINAL; +BEGIN + IF p#NIL THEN + RETURN p^.st; + ELSE + RETURN 0; + END; +END MaksimalniStepen; + PROCEDURE UbaciMonom(mon:Polinom; VAR p: Polinom); VAR stari, tekuci, kopija: Polinom; @@ -265,7 +273,7 @@ END MonomPuta; PROCEDURE Puta(p1, p2: Polinom; VAR pr: Polinom); VAR - pomocni: Polinom; + pomocni, brisi: Polinom; BEGIN Anuliraj(pr); IF (p1 <> NIL) AND (p2 <> NIL) THEN @@ -275,7 +283,9 @@ BEGIN MonomPuta(p1, p2, pomocni); REPEAT UbaciMonom(pomocni, pr); - pomocni := pomocni^.veza + brisi := pomocni; + pomocni := pomocni^.veza; + DISPOSE(brisi); UNTIL pomocni = NIL; p2 := p2^.veza END @@ -294,7 +304,8 @@ PROCEDURE Kolicnik(p1, p2: Polinom; VAR kol, ost: Polinom; VAR ok: BOOLEAN); novi^.k := - ost^.k / p2^.k; novi^.st := ost^.st - p2^.st; MonomPuta(p2, novi, pomocni); - Saberi(ost, pomocni, ost); + SaberiNa(pomocni, ost); + DisposePolinom(pomocni); novi^.k := - novi^.k; UbaciMonom(novi, kol); DISPOSE(novi); @@ -318,18 +329,19 @@ PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL; VAR rez: Polinom); VAR i: CARDINAL; + pret : Polinom; BEGIN IF n = 0 THEN NEW(rez); rez^.k := 1.0; rez^.st := 0; rez^.veza := NIL; - ELSIF n = 1 THEN - Kopiraj( p, rez ); ELSE - rez := p; + Kopiraj( p, rez ); FOR i := 2 TO n DO - Puta(rez, p, rez) + pret := rez; + Puta(pret, p, rez); + DisposePolinom(pret); END END; END PolinomNaN;