Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 28. 11. 2014 09:31 — Editoval Sused521 (28. 11. 2014 10:24)

Sused521
Zelenáč
Příspěvky: 1
Škola: ŽU FRI Detašované pracovisko Prievidza
Pozice: Študent
Reputace:   
 

Pascal: Najväčší spoločný deliteľ dvoch polynómov

Dobrý deň. Už asi 4 dni sa trápim so zadaním na algebru. Úlohou je naprogramovať nájdenie najväčšieho spoločného deliteľa dvoch polynómov pomocou Euklidovho algoritmu. Program sa mi však dostáva do nekonečného cyklu a aj keď som sa snažil písať si na papier, ako presne to podľa príkazov má fungovať, konečný .exe súbor má zjavne iný názor. Vedel by mi prosím vás niekto poradiť, čo robím zle?

Toto je cyklus, ktorý má deliť polynómy (programoval som sám):

Code:

 //Euklidov algoritmus

  I:= Pocet1; //Stupen prveho polynomu
  Y:= Pocet2; //Stupen druheho polynomu
  ZV:= 1;
  zvysok:= 0; //povodna hodnota zvysku
  repeat begin

      while ((I>=Y) and (ZV <> 0)) do begin  //pokial je stupen prveho vacsi ako druheho a zvysok je iny od nuly
         koefpodiel[I-Y]:= koef1[i] / koef2[Y]; //do podielu zapise koeficient podielu
             for M:= 0 to 10 do begin
             koefsucin[M+Y] := koefpodiel[I-Y] * koef2[M]; //vytvori polynom sucinu, roznasobi koeficient polynomu
                                                           //podielu a vytvori to, co budeme odratavat od prveho
             end;
         for M := 0 to I do begin
            koefzvysok[M] := koef1[M] - koefsucin[M]; //vytvori zvyskovy polynom
            end;
           koef1:= koefzvysok;  //na miesto prveho polynomu dosadi zvyskovy polynom
           For Z:= 0 to 10 do begin
           koefpodiel[Z]:= 0;   //vynuluje podiel
           if (koef1[Z] <> 0) then I:= Z; //zisti stupen prveho polynomu
             if (koef2[Z] <> 0) then Y:= Z; //zisti stupen druheho polynomu
           end;
           for Z:= 0 to 10 do begin
          zvysok:= zvysok + koef1[Z]; //zisti zvysok
           end;
  *        Writeln(zvysok);
       if (zvysok = 0) then ZV:= 0; //ak je zvysok nulovy, tak zastavi cyklus
       if (zvysok <> 0 ) then zvysok:= 0;            //inak zvysok vynuluje a ide sa odznova
           end;

      if Y>I then begin //ak je stupen druheho polynomu vyssi ako stupen prveho
      koef1:= koef2;    //na miesto prveho polynomu dosadi druhy polynom
      koef2:= koefzvysok; //na miesto druheho polynomu dosadi zvyskovy polynom
      end;
      

      
      For Z:= 0 to 10 do begin
           koefpodiel[Z]:= 0; //vynuluje podiel
           if (koef1[Z] <> 0) then I:= Z; //zisti stupen prveho polynomu
             if (koef2[Z] <> 0) then Y:= Z; //zisti stupen druheho polynomu
           end;
    end;
    until ZV = 0;

V riadku, kde je na začiatku hviezdička som si nastavil, že mi bude vypisovať zvyšok. Nižšie je nastavené, aby ho vynulovalo, ak nebude rovný nule, ale keď som to tam hodil, tak tá hodnota zvyšku strašne rýchlo narastá a príde mi to, ako keby sa nenulovala.

Vopred ďakujem hocikomu za pomoc. :)

Offline

  • (téma jako vyřešené označil(a) Sused521)

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson