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
Stránky: 1

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):
//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
Stránky: 1