ChronoMath, une chronologie des MATHÉMATIQUES
à l'usage des professeurs de mathématiques, des étudiants et des élèves des lycées & collèges

Listing  JavaScript : calcul du PGCD de deux polynômes
    »
JavaScript : Listes et chaînes de caractères

<SCRIPT LANGUAGE=JavaScript>
function pgcd_poly()
{
var a=new Array(),b=new Array(),co_b=new Array(),co_r=new Array(),q=new Array(),r=new Array(),
LA=new Array(),LB=new Array()
dega="";degb="";Rest="";prime=0;
LA=[1,0,-9,0];LB=[2,-5,-3] //LA=[6,-35,53,-14];LB=[6,-7,-45,-14]
dgr="ordonnée par degrés décroissants"
LA=prompt("Entrez la liste des coefficients de A séparés par une virgule"+"\n"+dgr+" :",LA)
LA=LA.split(",");dega=LA.length-1
for(i=0;i<=dega;i++){ai=LA.slice(i,i+1);a[dega-i]=eval(ai.toString())}
LB=prompt("Entrez la liste des coefficients de B séparés par une virgule"+"\n"+dgr+" :",LB)
LB=LB.split(",");degb=LB.length-1
for(i=0;i<=degb;i++){bi=LB.slice(i,i+1);b[degb-i]=eval(bi.toString())}
bb=b[degb];for(i=0;i<=degb;i++){b[i]=b[i]/bb}
if(dega<=1 || degb<=1){alert("Ce cas est trivial");return}
// fin des données ------
while (1)  // boucle "infinie" dont on sortira par break ---------------------------------------------
{
r=reste(a,b);r=r.split(",");degr=r.length-1;
for(i=0;i<=degr;i++){r[i]=eval(r[i]);co_r[i]=r[i]}
for(i=0;i<=degr;i++){r[i]=co_r[degr-i]}
s=0;for(i=0;i<=degr;i++){s=s+Math.abs(r[i])}
for(i=0;i<=degb;i++){a[i]=b[i];co_b[i]=b[i]};dega=degb;degco_b=degb
// a devient b -----
rr=r[degr];for(i=0;i<=degr;i++){b[i]=r[i]/rr};degb=degr
// b devient r ------
if(s<1E-14){r=0;break}
// la somme des va des coefficients du reste est < à 10-14 : le reste est considéré comme nul----------
if(degr==0 && s!=0){prime=1;break}
}
if(r==0)
{
pgcd="";
for(i=degco_b;i>=0;i--)
{
if(i>0){pgcd=pgcd+frac(co_b[i].toString())+","} else {pgcd=pgcd+frac(co_b[i].toString())}
}
alert("le pgcd est : "+pgcd)
}
if(prime==1){alert("A et B sont premiers entre eux")}
}
// fin pgcd_poly ----------

function reste(a,b)
//------------------calcul des restes successifs par division euclidienne---------------------
{
while(dega-degb>=0) 
//------au départ, si degb > dega, le quotient sera nul et le reste sera a, au tour suivant l'algorithme divisera b par a.
{
k=dega-degb;
if(a[dega]!=0)
{
for(i=k;i<=dega-1;i++){a[i]=a[i]-a[dega]*b[i-k]}
a[dega]=0;
}
dega=dega-1
}// fin while
Rest="";for(i=dega;i>=0;i--)
{
if(i>0){Rest=Rest+a[i].toString()+","} else {Rest=Rest+a[i].toString()}
}
return Rest
} // fin reste()

function frac(x)  //---------------------recherche fractionnaires (fraction continue) ----------------
{
with (Math)
{
b0=0;b1=1;a0=1;a1=floor(x);
if(a1==x){return x.toString()}
else
{
en=x-floor(x);err=1;
while(err>1E-13)
{
q=floor(1/en);en=1/en-q;
a=q*a1+a0;b=q*b1+b0;
asb=a/b;err=abs(x-asb);
a0=a1;b0=b1;a1=a;b1=b;
} // fin while()
return a.toString()+"/"+b.toString()
}
// fin else
}
// fin with Math
}
// fin frac()

function listing() 
//---------------- visualiser le listing du programme
{open ("listing_pgcd_poly.html","")}
</SCRIPT>

JavaScript sur ChronoMath : »


© Serge Mehl - www.chronomath.com