Advertisement
ridjis

procedure_polinomi

May 15th, 2014
415
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Modula 2 11.23 KB | None | 0 0
  1. PROCEDURE SmanjiZa(st:CARDINAL; p: Polinom; VAR rez: Polinom);
  2. VAR   temp, pom:Polinom;
  3. BEGIN
  4.     Anuliraj(rez);
  5.     IF p^.st > st THEN
  6.         Kopiraj(p, rez);
  7.         temp := rez;
  8.         pom := NIL;
  9.         WHILE (temp # NIL) AND (temp^.st >= st) DO
  10.             pom := temp;
  11.             temp := temp^.veza;
  12.         END;
  13.         IF temp#NIL THEN
  14.             pom^.veza := NIL;
  15.             DisposePolinom(temp);
  16.         END;       
  17.         temp := rez;
  18.         WHILE temp#NIL DO
  19.             temp^.st := temp^.st - st;
  20.             temp := temp^.veza;
  21.         END;
  22.     ELSIF p^.st = st THEN
  23.         NEW(rez);
  24.         rez^.st := 0;
  25.         rez^.k := p^.k;
  26.         rez^.veza := NIL;
  27.     ELSE
  28.         NEW(rez);
  29.         rez^.st := 0;
  30.         rez^.k := 0.0;
  31.         rez^.veza := NIL;
  32.     END;
  33. END SmanjiZa;
  34.  
  35. // stampa monome sa parnim stepenom
  36.  
  37. PROCEDURE ParniStepen (p:Polinom);
  38. VAR temp,pom:Polinom;  
  39. BEGIN
  40.     temp:=p;
  41.     WHILE (temp#NIL) DO
  42.         IF NOT ODD(temp^.st) THEN
  43.             NEW(pom);
  44.             pom^.st:=temp^.st;
  45.             pom^.k:=temp^.k;
  46.             Stampaj(pom,1);
  47.             DISPOSE(pom);
  48.             WriteLn;
  49.         END;
  50.         temp:=temp^.veza;
  51.     END;
  52. END ParniStepen;
  53.  
  54. // stampa monome kod kojih je koeficijent veci od stepena
  55.  
  56. PROCEDURE KoefVeciSt (p:Polinom);
  57. VAR temp,pom:Polinom;
  58. BEGIN
  59.     IF p#NIL THEN
  60.         temp:=p;
  61.         WHILE (temp#NIL) DO
  62.             IF (temp^.k > FLOAT(temp^.st)) THEN
  63.                 NEW(pom);
  64.                 pom^.k:=temp^.k;
  65.                 pom^.st:=temp^.st;
  66.                 Stampaj(pom,1);
  67.                 DISPOSE(pom);
  68.                 WriteLn;
  69.             END;
  70.             temp:=temp^.veza;
  71.         END;
  72.  
  73.     END;
  74. END KoefVeciSt;
  75.  
  76. // stampa monome kod kojih je koef veci od stepena
  77.  
  78. PROCEDURE VeciOdSt (p:Polinom);
  79. VAR temp,monom:Polinom;
  80. BEGIN
  81.     IF p#NIL THEN
  82.         temp:=p;
  83.         WHILE (temp#NIL) DO
  84.             IF temp^.k > FLOAT(temp^.st) THEN
  85.                 NEW(monom);
  86.                 monom^.k:=temp^.k;
  87.                 monom^.st:=temp^.st;
  88.                 Stampaj(monom,1);
  89.                 DISPOSE(monom);
  90.                 temp:=temp^.veza;
  91.             ELSE
  92.                 temp:=temp^.veza;
  93.             END;
  94.         END;
  95.  
  96.     END;   
  97. END VeciOdSt;
  98.  
  99. // izbaci iz liste sve (koji zadovoljavaju kriterijum)
  100. // u ovom slučaju koeficijente veće od 2
  101.  
  102. PROCEDURE IzbaciSve (VAR p:Polinom);
  103. VAR temp, prethodni:Polinom;
  104. BEGIN
  105.     WHILE (p#NIL) AND (p^.k > 2.0) DO
  106.         temp:=p;
  107.         p:=p^.veza;
  108.         DISPOSE(temp);
  109.     END;
  110.  
  111.     IF (p#NIL) THEN
  112.         temp:=p;
  113.         WHILE (temp^.veza#NIL) DO
  114.             prethodni:=temp;
  115.             temp:=temp^.veza;
  116.             IF (temp^.k > 2.0) THEN
  117.                 prethodni^.veza:=temp^.veza;
  118.                 DISPOSE(temp);
  119.                 temp:=prethodni;
  120.             END;
  121.         END;   
  122.     END;   
  123. END IzbaciSve;
  124.  
  125. // prebrojava neparne stepene monoma i stampa
  126.  
  127. PROCEDURE BrojNep (p:Polinom);
  128. VAR temp,monom:Polinom;
  129.     i:CARDINAL;
  130. BEGIN
  131.     IF p#NIL THEN
  132.         temp:=p;
  133.         WHILE (temp#NIL) DO
  134.             IF ODD(temp^.st) THEN
  135.                 INC(i);
  136.                 NEW(monom);
  137.                 monom^.st:=temp^.st;
  138.                 monom^.k:=temp^.k;
  139.                 Stampaj(monom,1);
  140.                 WriteLn;
  141.                 DISPOSE(monom);
  142.                 temp:=temp^.veza;
  143.             ELSE
  144.                 temp:=temp^.veza;
  145.             END;
  146.         END;
  147.     END;
  148.     IF i=0 THEN
  149.         WrieteString('U polinomu nema neparnih stepena.');
  150.     ELSE
  151.         WriteString('Polinom ima ');
  152.         WriteCard(i,1);
  153.         WriteString(' monoma sa neparnim stepenima.');
  154.         WriteLn;
  155.     END;
  156.    
  157. END BrojNep;
  158.  
  159. // odstranjuje monome sa negativnim koeficijentom
  160.  
  161. PROCEDURE BrisiNegKoef (VAR p:Polinom);
  162. VAR temp,neg,monom:Polinom;
  163. BEGIN
  164.     IF (p#NIL) THEN
  165.         temp:=p;
  166.         WHILE (temp#NIL) DO
  167.             IF (temp^.k < 0.0) THEN
  168.                 NEW(monom);
  169.                 monom^.k:=temp^.k;
  170.                 monom^.st:=temp^.st;
  171.                 monom^.veza:=NIL;
  172.                 UbaciMonom(monom,neg);
  173.             END;
  174.             temp:=temp^.veza;
  175.         END;
  176.         Oduzmi(p,neg,p);
  177.         DisposePolinom(neg);
  178.     END;   
  179. END BrisiNegKoef;
  180.  
  181. // ispravnost polinoma, redoslednom od 0 stepeni.
  182.  
  183. PROCEDURE Check (p:Polinom):BOOLEAN;
  184. VAR ok:BOOLEAN;
  185.     temp:Polinom;
  186. BEGIN
  187.     temp:=p;
  188.     ok:=TRUE;
  189.     WHILE (temp^.veza#NIL) DO
  190.         IF (temp^.st < temp^.veza^.st) OR (temp^.k = 0.0) THEN
  191.             ok:=FALSE;
  192.         END;
  193.         temp:=temp^.veza;
  194.     END;
  195.     RETURN ok;
  196. END Check;
  197.  
  198. // Deli polinom na parne i neparne
  199.  
  200. PROCEDURE Rasclani (p:Polinom;VAR parni,neparni:Polinom);
  201. VAR temp:Polinom;
  202. BEGIN
  203.     IF (p#NIL) THEN
  204.         Anuliraj(parni);
  205.         Anuliraj(neparni);
  206.         temp:=p;
  207.         WHILE (temp#NIL) DO
  208.             IF ODD(temp^.st) THEN
  209.                 UbaciMonom(temp,neparni);
  210.             ELSE
  211.                 UbaciMonom(temp,parni);
  212.             END;
  213.             temp:=temp^.veza;
  214.         END;
  215.     END;   
  216. END Rasclani;
  217.  
  218. // odsranjuje negativne(koeficijente) monome
  219.  
  220. PROCEDURE OdstraniNeg (VAR p:Polnom);
  221. VAR temp, prethodni:Polinom;
  222. BEGIN
  223.     IF (p#NIL) THEN
  224.         WHILE (p#NIL) AND (p^.k < 0.0) DO
  225.             temp:=p;
  226.             p:=p^.veza;
  227.             DISPOSE(temp);
  228.         END;
  229.         IF (p#NIL) THEN
  230.             temp:=p;
  231.             WHILE (temp^.veza#NIL) DO
  232.                 prethodni:=temp;
  233.                 temp:=temp^.veza;
  234.                 IF (temp^.k < 0.0) THEN
  235.                     prethodni^.veza:=temp^.veza;
  236.                     DISPOSE(temp);
  237.                     temp:=prethodni;
  238.                 END;
  239.             END;
  240.         END;
  241.     END;   
  242. END OdstraniNeg;
  243.  
  244. // Brise svaki drugi monom u polinomu
  245. // tj briše monome na parnim pozicijama
  246.  
  247. PROCEDURE Svaki2 (VAR p:Polinom);
  248. VAR temp,prethodni:Polinom;
  249.     i:CARDINAL;
  250. BEGIN
  251.     i:=1;
  252.     IF (p#NIL) THEN
  253.         temp:=p;
  254.         WHILE (temp^.veza#NIL) DO
  255.             prethodni:=temp;
  256.             temp:=temp^.veza;
  257.             INC(i);
  258.             IF (i MOD 2 = 0) THEN
  259.                 prethodni^.veza:=temp^.veza;
  260.                 DISPOSE(temp);
  261.                 temp:=prethodni;
  262.             END;
  263.         END;
  264.     END;   
  265. END Svaki2;
  266.  
  267. // Briše monome na neparnim pozicijama
  268.  
  269. PROCEDURE Svaki1 (VAR p:Polinom);
  270. VAR temp,prethodni:Polinom;
  271.     i:CARDINAL;
  272. BEGIN
  273.     i:=1;
  274.     IF (p#NIL) THEN
  275.         temp:=p;
  276.         p:=p^.veza;
  277.         DISPOSE(temp);
  278.         temp:=p;
  279.         WHILE (temp^.veza#NIL) DO
  280.             prethodni:=temp;
  281.             temp:=temp^.veza;
  282.             INC(i);
  283.             IF (i MOD 2 = 0) THEN
  284.                 prethodni^.veza:=temp^.veza;
  285.                 DISPOSE(temp);
  286.                 temp:=prethodni;
  287.             END;
  288.         END;
  289.     END;   
  290. END Svaki1;
  291.  
  292. // Uklanja monome sa neparnim stepenom
  293.  
  294. PROCEDURE NeparniStepeni (VAR p:Polinom);
  295. VAR temp, prethodni:Polinom;
  296. BEGIN
  297.     IF (p#NIL) THEN
  298.        
  299.         WHILE (p#NIL) AND (p^.st MOD 2 # 0) DO
  300.             temp:=p;
  301.             p:=p^.veza;
  302.             DISPOSE(temp);
  303.             temp:=p;
  304.         END;
  305.         IF (p#NIL) THEN
  306.             temp:=p;
  307.             WHILE (temp^.veza#NIL) DO
  308.                 prethodni:=temp;
  309.                 temp:=temp^.veza;
  310.                 IF (temp^.st MOD 2 # 0) THEN
  311.                     prethodni^.veza:=temp^.veza;
  312.                     DISPOSE(temp);
  313.                     temp:=prethodni;
  314.                 END;
  315.             END;   
  316.         END;
  317.     END;   
  318. END NeparniStepeni;
  319.  
  320. // Izbacuje monom sa max koef
  321.  
  322. PROCEDURE IzbaciMaxKoef (VAR p:Polinom);
  323. VAR temp, prethodni:Polinom;
  324.     max:REAL;
  325. BEGIN
  326.     IF (p#NIL) THEN
  327.         temp:=p;
  328.         max:=temp^.k;
  329.         (* nalazenje maxa *)
  330.         WHILE (temp#NIL) DO
  331.             IF (temp^.k > max) THEN
  332.                 max:=temp^.k;
  333.             END;
  334.             temp:=temp^.veza;
  335.         END;
  336.         (* brisanje maxa *)
  337.         WHILE (p#NIL) AND (p^.k = max) DO
  338.             temp:=p;
  339.             p:=p^.veza;
  340.             DISPOSE(temp);
  341.         END;
  342.         IF (p#NIL) THEN
  343.             temp:=p;
  344.             WHILE (temp^.veza#NIL) DO
  345.                 prethodni:=temp;
  346.                 temp:=temp^.veza;
  347.                 IF (temp^.k = max) THEN
  348.                     prethodni^.veza:=temp^.veza;
  349.                     DISPOSE(temp);
  350.                     temp:=prethodni;
  351.                 END;
  352.             END;   
  353.         END;
  354.     END;
  355. END IzbaciMaxKoef;
  356.  
  357. // stampa monome sa keficijentom vecim od stepena
  358.  
  359. PROCEDURE VeciOdStepena (p:Polinom);
  360. VAR temp,monom:Polinom;
  361. BEGIN
  362.     IF (p#NIL) THEN
  363.         WriteString("Monomi sa koeficijentom vecim od stepena: ");
  364.         WriteLn;
  365.         Anuliraj(monom);
  366.         temp:=NIL;
  367.         WHILE (temp#NIL) DO
  368.             IF (temp^.k>FLOAT(temp^.st)) THEN
  369.                 NEW(monom);
  370.                 monom^.k:=temp^.k;
  371.                 monom^.st:=temp^.st;
  372.                 monom^.veza:=NIL;
  373.                 Stampaj(monom,1);
  374.                 WriteLn;
  375.             END;
  376.             temp:=temp^.veza;
  377.         END;
  378.     END;   
  379. END VeciOdStepena;
  380.  
  381. // procedura povecava keoficijen monoma za prethodni
  382.  
  383. PROCEDURE PovecajZaPrethodni (VAR p:Polinom);
  384. VAR temp:Polinom;
  385. BEGIN
  386.     IF (p#NIL) AND (p^.veza # NIL) THEN
  387.         temp:=p;
  388.         WHILE (temp^.veza#NIL) DO
  389.             temp^.veza^.k:=temp^.veza^.k + temp^.k;
  390.             temp:=temp^.veza;
  391.         END;
  392.     END;   
  393. END PovecajZaPrethodni;
  394.  
  395. // artimetička sredina koeficijenata polinoma
  396.  
  397. PROCEDURE Avg (p:Polinom): REAL;
  398. VAR temp:Polinom;
  399.     br:CARDINAL;
  400.     avg,sum:REAL;
  401. BEGIN
  402.     IF (p#NIL) THEN
  403.         temp:=p;
  404.         i:=0;
  405.         sum:=0.0;
  406.         WHILE (temp#NIL) DO
  407.             sum:=sum+temp^.k;
  408.             INC(br);
  409.             temp:=temp^.veza;
  410.         END;
  411.         avg:=sum / FLOAT(br);
  412.     END;
  413.     RETURN avg
  414. END Avg;
  415.  
  416. // monom sa najvećim proizvodom k i st
  417.  
  418. PROCEDURE MaxProizvod (p:Polinom);
  419. VAR temp,mon:Polinom;
  420.     max,k,pom:REAL;
  421.     st:CARDINAL;
  422. BEGIN
  423.     Anuliraj(mon);
  424.     IF (p#NIL) THEN
  425.         temp:=p;
  426.         max:=temp^.k * FLOAT(temp^.st);
  427.         st:=temp^.st;
  428.         k:=temp^.k;
  429.         temp:=temp^.veza;
  430.         WHILE (temp#NIL) DO
  431.             pom:=temp^.k * FLOAT(temp^.st);
  432.             IF (pom>max) THEN
  433.                 max:=pom;
  434.                 st:=temp^.st;
  435.                 k:=temp^.k;
  436.             END;
  437.             temp:=temp^.veza;
  438.         END;
  439.     END;
  440.     PostaviClan(k,st,mon);
  441.     WriteString("Stepen sa najvecim proizvodom k i st: ");
  442.     WriteLn;
  443.     Stampaj(mon,1);
  444.     DISPOSE(mon);  
  445. END MaxProizvod;
  446.  
  447. // uvecaj stepen za 'st'
  448.  
  449. PROCEDURE UvecajStepen (VAR p:Polinom;st:CARDINAL);
  450. VAR temp:Polinom;
  451. BEGIN
  452.     IF (p#NIL) AND (st#0) THEN
  453.         temp:=p;
  454.         WHILE (temp#NIL) DO
  455.             temp^.st:=temp^.st + st;
  456.             temp:=temp^.veza;
  457.         END;
  458.     END;
  459.    
  460. END UvecajStepen;
  461.  
  462. // stampa neparne stepene
  463.  
  464. PROCEDURE StampajNepSt (p:Polinom);
  465. VAR temp,mon:Polinom;
  466. BEGIN
  467.     IF (p#NIL) THEN
  468.         Anuliraj(mon);
  469.         temp:=p;
  470.         WHILE (temp#NIL) DO
  471.             IF (temp^.st MOD 2 # 0) THEN
  472.                 NEW(mon);
  473.                 mon^.st:=temp^.st;
  474.                 mon^.k:=temp^.k;
  475.                 Stampaj(mon,1);
  476.                 WriteLn;
  477.                 DISPOSE(mon);
  478.             END;
  479.             temp:=temp^.veza;
  480.         END;
  481.     END;   
  482. END StampajNepSt;
  483.  
  484. // izbacuje polinom najveceg stepena
  485.  
  486. PROCEDURE MonMaxSt (VAR rez:Polinom; p:Polinom);
  487. VAR temp,mon:Polinom;
  488. BEGIN
  489.     Anuliraj(rez);
  490.     Kopiraj(p,rez);
  491.     IF (rez#NIL) THEN      
  492.         temp:=rez;
  493.         NEW(mon);
  494.         mon^.st:=temp^.st;
  495.         mon^.k:=temp^.k;
  496.         mon^.veza:=NIL;
  497.         Oduzmi(rez,mon,rez);
  498.     END;   
  499. END MonMaxSt;
  500.  
  501. // Ispisuje monome ciji su koef veci od stepena
  502.  
  503. PROCEDURE KoefSt (p:Polinom);
  504. VAR mon:Polinom;
  505. BEGIN
  506.     Anuliraj(mon);
  507.     IF (p#NIL) THEN
  508.         WHILE (p#NIL) DO
  509.             IF (p^.k > FLOAT(p^.st)) THEN
  510.                 NEW(mon);
  511.                 mon^.st:=p^.st;
  512.                 mon^.k:=p^.k;
  513.                 mon^.veza:=NIL;
  514.                 Stampaj(mon,1);
  515.                 WriteLn;
  516.                 DISPOSE(mon);
  517.             END;
  518.             p:=p^.veza;
  519.         END;
  520.     END;   
  521. END KoefSt;
  522.  
  523. // ispisuje koeficijent minimalnog stepena
  524.  
  525. PROCEDURE KoefMinSt (p:Polinom):REAL;
  526. VAR temp:Polinom;
  527. BEGIN
  528.     IF (p#NIL) THEN
  529.         WHILE (temp^.veza # NIL) THEN
  530.             temp:=temp^.veza;
  531.         END;
  532.         RETURN temp^.k;
  533.     END;
  534. END KoefMinSt;
  535.  
  536. // najveci koeficijent
  537.  
  538. PROCEDURE MaxKoef (p:Polinom):REAL;
  539. VAR temp:Polinom;
  540.     max:REAL;
  541. BEGIN
  542.     IF (p#NIL) THEN
  543.         max:=p^.k;
  544.         temp:=p^.veza;
  545.         WHILE (temp#NIL) DO
  546.             IF (temp^.k > max) THEN
  547.                 max:=temp^.k;
  548.             END;
  549.             temp:=temp^.veza;
  550.         END;
  551.     END;
  552.     RETURN max 
  553. END MaxKoef;
  554.  
  555. // Procedura koja mnozi polinom 'n' puta
  556.  
  557. PROCEDURE BrojPuta (VAR p:Polinom; n:REAL);
  558. VAR temp:Polinom;
  559. BEGIN
  560.     IF (p#NIL) AND (n#0) THEN
  561.         temp:=p;
  562.         WHILE (temp#NIL) DO
  563.             temp^.k:=temp^.k * n;
  564.             temp:=temp^.veza;
  565.         END;
  566.     END;
  567. END BrojPuta;
  568.  
  569. // Izvod polinoma
  570.  
  571. PROCEDURE Izvod (p:Polinom;VAR rez:Polinom);
  572. VAR temp:Polinom;
  573. BEGIN
  574.     Anuliraj(rez);
  575.     IF (p#NIL) THEN
  576.         WHILE (p#NIL) AND (p^.st>0) DO 
  577.             NEW(temp);     
  578.             temp^.k:=temp^.k * FLOAT(temp^.st);
  579.             temp^.st:=temp^.st - 1;
  580.             UbaciMonom(temp,rez);
  581.             DISPOSE(temp);
  582.             p:=p^.veza;
  583.         END;
  584.     END;   
  585. END Izvod;
  586.  
  587. // Kompozicija procedura
  588.  
  589. PROCEDURE Kompozicija (p,q:Polinom; VAR rez:Polinom);
  590. VAR temp:Polinom;
  591. BEGIN
  592.     Anuliraj(rez);
  593.     IF (p#NIL) AND (q#NIL) THEN
  594.         WHILE (p#NIL) DO
  595.             PolinomNaN(q,p^.st,temp);
  596.             BrojPuta(temp,p^.k);
  597.             SaberiNa(temp,rez);
  598.             p:=p^.veza;
  599.         END;
  600.     END
  601. END Kompozicija;
  602.  
  603. // Izracunaj vr polinoma za uneto avg
  604.  
  605. PROCEDURE Izracunaj (a:REAL;p:Polinom):REAL;
  606. VAR temp,rez:Polinom;
  607. BEGIN
  608.     IF (p#NIL) AND (a#0.0) THEN
  609.         Anuliraj(temp);
  610.         PostaviClan(a,0,temp);
  611.         Kompozicija(p,temp,rez);
  612.         RETURN rez^.k;
  613.     END;
  614. END Izracunaj;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement