% Tento program je mozne pouzit pro vypocet retezovych zlomku, kde rady 
% polynomu se nelisi vice jak o 1. 
% Nastaveni pocatecnich hodnot
format long
poc=1
vysl=[0]

% PRIKLAD 5.5 ucebnice 
ep=0.508847
H_1=ep*[1 3.704249 6.860730 7.853312 5.555815 1.965227]
fi=[1 0 0 0 0 0]
efi=ep*fi
p2=polyad(H_1,efi)
p1=polyad(H_1,-efi)
p1=p1(2:end)

%p2=[2*ep 3.236068*ep^(4/5) 5.236068*ep^(3/5) 5.236068*ep^(2/5) 3.236068*ep^(1/5) 1]
%p1=[3.236068*ep^(4/5) 5.236068*ep^(3/5) 5.236068*ep^(2/5) 3.236068*ep^(1/5) 1]
m2=length(p2) % Urcuje delku polynomu p2 (napr. polynom  ax^2+bx+c ma
% delku 3
m1=length(p1) % Urcuje delku polynomu p1
if m1<=m2 % Rozdeli reseni na dve casti. 
% Prvni urcuje ze rad polynomu citatele je mensi nez rad jmenovatele  
% a druhe reseni naopak

% 1. cast
% Pokud je rad polynomu citatele mesni nebo rovno radu jmenovatele,tak
% zamenime citatel za jmenovatel. 
	xx1=p1
   p1=p2
   p2=xx1
   while m2~=1
% Cyklus pracujici do doby, kdy je polynom ve tvaru (dx+c)
      [q,r]= deconv(p1,p2)
% Promenna q urcuje vysledek po deleni a do r se uklada zbytek po deleni.
% Vydelime citatel jmenovatelem
      p1=p2
% Zapiseme co bylo ve jmenovateli do citatele pro dalsi pouziti v cyklu.
      vysl(poc)=q(1)
% Ulozime vysledek na pozici danou promenno poc. 
      poc=poc+1
% Tato cast programu se zabyva upravou zbytku po deleni pro Matlab, 
% tj. je potreba vyrusit nuly ze zapisu polynomu, protoze Matlab nezvlada
% deleni 0, v tom tvaru zbytku, co vychazi po deleni.  
      koef=1
      poz=1
% Je potreba vynulovat polynom pro dalsi zpracovani. 
      polo=[0]
      delzb=length(r) % Znazornuje delku zbytku.
      while (r(koef)<0.0000000001)&(r(koef)>-0.0000000001)
% Provadi nacitani promenne koef tak dlouho dokud je v polynomu 0.
% Tato uprava znazornuje 0, protoze Matlab pri deleni desetinnym cislem 
% dava ve vysledku nenulovy vysledek napr. 10^-16.  	
         koef=koef+1
      end
      for i=koef:delzb
% Prepise zbytek cislic do noveho polynomu.
         polo(poz)= r(i);
         poz=poz+1;
      end 
% Vysledek zapiseme zpatky do polynomu p2
      p2=polo;
      m2=length(p2);
   end
% Jelikoz nyni mame vysledek ve tvaru (dx+c), tak ho jeste musime jednou 
% vydelit a to nam urci posledni hodnotu, kterou vepiseme do vektoru vysl.
   [q,r]= deconv(p1,p2);
   p1=p2;
% Promenna vysl urcuje reseni retezovych zlomku a zaroven hodnoty 
% prvku v obvodu.
   vysl(poc)=q(1);
% Promenna zakon urcuje v obvodu jeho zakonceni. 
   zakon=q(2);
else
% 2.cast 
% Reseni je naprosto stejne s predchozim jen chybi cast, kde se meni 
% citatel za jmenovatel.
   while m2~=1
      [q,r]= deconv(p1,p2);
      p1=p2;
      vysl(poc)=q(1);
      poc=poc+1;
      koef=1;
      poz=1;
      polo=[0];
      delzb=length(r);
      while (r(koef)<0.0000000001)&(r(koef)>-0.0000000001)
         koef=koef+1;
      end
      for i=koef:delzb
         polo(poz)= r(i);
         poz=poz+1;
      end 
      p2=polo;
      m2=length(p2);
   end
   [q,r]= deconv(p1,p2);
   p1=p2;
   vysl(poc)=q(1);
   zakon=q(2);
 end
vysl
zakon