/* euler.js
   Copyright (C) 2003-2005 Jean-Paul Davalan <jpdvl@wanadoo.fr>

   utilisation réservée au site
   http://perso.wanadoo.fr/jean-paul.davalan/

*/

function euler() {

  this.nlignes=0; 
  this.lignes=new Array();
  this.lignes[0]=new Array();
  this.lignes[0][0] = 1;
  this.c0=1;
  this.c1=1;
  this.co=true;
  
 function coefs() {
   var a = document.frm2.c.value, b="";
   this.nlignes=0;
   var r=0;
   do {
     r++;
     b=a;
     a=b.replace(/\s+/g," ");
     a=a.replace(/-\s/g,"-");
     a=a.replace(/^\s+/g,"");
     a=a.replace(/\s+$/g,"");
   } while(a != b);
   document.frm2.c.value = a;
   var t=a.split(/\s/);
   if(t.length==2) {
     this.c0=t[0];
     this.c1=t[1];
   } else {
     this.c0=1;
     this.c1=1;
   }
   if(this.c0==1 && this.c1==1) this.co=true;
   else this.co = false;
 }
 this.coefs=coefs;
 
 function nouvelle() {
   this.nlignes++;
   var n = this.nlignes
//   alert("nouvelle "+this.nlignes);
   this.lignes[n]=new Array();
   
   if( n%2 == 1) {  // lignes impaires  <-
     this.lignes[n][n] = 0;
     for(i=n-1; i>=0; i--)
        this.lignes[n][i] = eval("("+this.c1+")*("+this.lignes[n][i+1]+")+("+this.c0+")*("+this.lignes[n-1][i]+")");
   } else {  // lignes paires
     this.lignes[n][0] = 0;
     for(i=1;i<=n;i++)
       this.lignes[n][i] = eval("("+this.c0+")*("+this.lignes[n-1][i-1]+")+("+
                         this.c1+")*("+this.lignes[n][i-1]+")");
   }
   
 }
 this.nouvelle=nouvelle;
 
 function complete(n) {
 
   while(this.nlignes<n) 
     this.nouvelle();
  
 }
 this.complete=complete;
 
 function affiche(k) {
 
   if(this.nlignes < k) 
     this.complete(k);
   var i, s="";
   for(var i=0; i<=k; i++) {
     for(var j=0; j<=i; j++)
       s += this.lignes[i][j]+" ";
     s +="\n";
   }
   if(this.co) s +="\nT : ";
   else s +="\nG : ";
   
   for(i=0; i<=k; i++) 
     if(i%2 !=0) 
       s += this.lignes[i][0]+",";
   
   if(this.co) s +="\nEuler E : ";
   else s +="\nD : ";
   
   for(i=0; i<=k; i++) 
     if(i%2==0) 
       s += this.lignes[i][i]+",";
   if(this.co) s +="\nEuler-Bernoulli\nEB : ";
   else s +="\nS : ";
   for(i=0; i<=k; i++)
     if(i%2==0) s += this.lignes[i][i]+",";
     else s += this.lignes[i][0]+",";
   if(k<=30 && this.co) {
   s +="\nnombres de Bernoulli\nB : 1 -1/2 " 
   var m=0, p=1, q=-1;
   for(i=1; i<=k; i++)
     if(i%2 !=0) {
       m++;
       p *=4;
       q = -q;
       num= m*this.lignes[i][0];
       den=p*(p-1)/2;
       var r = gcd(num,den);
       if(r!=0) {
       num /= r;
       den /= r;
       }
       s += q*num+"/"+den+" 0 ";
     }
   }
   document.frm2.eb.value=s;
   
 }
 this.affiche=affiche;

}

var eb = new euler();


function calcule() {
//  alert("calcule");
  var n = parseInt(document.frm2.l.value);
  eb.coefs();
  eb.affiche(n);
}

function gcd(a, b) {
  var u= a, v=b, w;
  while(v!=0) {
    w=u%v;
    u=v;
    v=w;
  }
  return u;
}

function exemple(c, k) {
  document.frm2.l.value=k;
  document.frm2.c.value=c;
  calcule();
}

