Suite de fibonaci

Contenu du snippet

un exemple simple de la POO et d'une librairie en cours de dévelopement (par moi même) qui permetrais d'utiliser de grands nombres...
cette librairie est actuellement sufisament dévelopée pour permetre de calculer la suite de fibonaci (on ne doit faire que des aditions, donc j'ai déja fais trop de fonctions)...

j'ai ajouté la multiplication et la soustraction...

la suite de fibonaci est telle que :
U(0)=1
U(1)=1
U(n)=U(n-1)+U(n-2)

donc, il suffit de faire des aditions...
U(n)/U(n-1) tend vers (1+sqrt(5))/2 (le nombre d'or)

Source / Exemple :


<html>
<head>
<title>fibonaci</title>
</head>
<body>
<input type="text" id="a" />
<input type="text" id="b" />
<input type="button" onclick="fibo();" value="suivant" />
<script>

function Int_big(nom,string){
/*
Ceci sert de constructeur....

  • /
//on y déclare les variables var taille=string.length; var i; //on déclare les variables de la class this.nombre=new Array(); this.signe=1; this.taille=0; this.nom=nom; //on déclare les fonctions this.affiche=Int_big_afficher; this.valeur=Int_big_valeur; this.plus=Int_big_plus; this.moins=Int_big_moins; this.fois=Int_big_fois; this.t_react=Int_big_t_react; this.compare=Int_big_compare; //on copie le nombre dans l'objet for (i=0;i<taille;i++){ this.nombre[i]=string.charAt(taille-i-1)*1; if (this.nombre[i]!=0) this.taille=i+1; } } function Int_big_afficher(obj){ /* Ceci sert à afficher le nombre dans une case de texte
  • /
var i; obj.value=this.nom+"="+this.valeur(); } function Int_big_valeur(){ /* Cette fonction permet d'avoir dans une variable string, la chaine qui corespond aux caractères
  • /
var i, valeurs=""; //on met la valeur à 0 for (i=0;i<this.taille;i++){ //on prends les valeurs caractères par caractères valeurs=valeurs+this.nombre[this.taille-i-1]; //on les ajoute à la chaine } return valeurs; //et on renvoi } function Int_big_moins(add){ /* Ceci sert à afficher le nombre dans une case de texte
  • /
a=this.compare(add); if (a=="egalite"){ //si les nombres sont égaux, alors on renvoi 0 for (i=0;i<taille1;i++){ this.nombre[i]=0; } this.t_react(); //on recherche la taille actuelle }else if (a=="plus petit"){ //si le premier nombre est plus petit, alors on affiche une erreur alert("la soustraction entre "+this.nom+" et "+add.nom+" n'a pas pu être effactuée... "+add.com+" est plus grand que "+this.com+"..."); }else{ var i; for (i=0;i<add.taille;i++){ //on soustrait this.nombre[i]-=add.nombre[i]; if (this.nombre[i]<0){ //on enlève les retenues this.nombre[i]+=10; this.nombre[i+1]--; } } this.t_react(); //on recherche la taille d'orifine } } function Int_big_plus(add){ /* Ceci sert à afficher le nombre dans une case de texte
  • /
var i; var taille1=this.taille; var taille2=add.taille; if (taille2<=taille1){ //si le secons nombre est le plus petit, alors on ne vas pas jusqu'a la fin des aditions, on coupe avant taille1=taille2; taille2=0; } //alert(taille1 +','+taille2); for (i=0;i<taille1;i++){ //on parcourt le nombre pour effectuer les aditions this.nombre[i]+=add.nombre[i]; if (this.nombre[i]>9){ //si on a une retenue alors : this.nombre[i]-=10; //ceci sert lorsque l'on ajoute un chiffre au nombre, car on n'a pas forcément assigné une valeur au chifre suivant if (this.nombre[i+1]) this.nombre[i+1]++; else this.nombre[i+1]=1; } } if (taille2){ //si le second nombre est le plus grand, alors on va mettre la fin du nombre à la fin de la valeur for (i=taille1;i<taille2;i++){ this.nombre[i]=add.nombre[i]; // alert("i="+i); } } this.t_react(); //calcule la taille } function Int_big_fois(add){ var i,j; var taille2=this.taille; var taille1=add.taille; var valeur=new Array(); for (i=0; i <taille1+taille2+1 ; i++) valeur[i]=0; //mets à 0 le tableau de valeur for ( i = 0 ; i < taille1; i++){ //fait varier les nombres de a for ( j = 0 ; j < taille2 ; j++){ //puis de b valeur[i+j] += add.nombre[i] * this.nombre[j]; //calcule la multiplication et l'adition en même temps } } for ( i = 0 ; i <valeur.length; i++){ //recopie le tableau de valeurs while (9<valeur[i+j]){ //calcule la retenue valeur[i+j+1]++; valeur[i+j]-=10; } this.nombre[i]=valeur[i]; } this.t_react(); //retrouve la taille } function Int_big_t_react(){ /* cette fonction recalcule les tailles
  • /
for (i=0;i<this.nombre.length;i++){ if (this.nombre[i]!=0) this.taille=i+1; } } function Int_big_compare(nbr){ /* cette fonction permet de comparer deux nombres
  • /
var taille1=this.taille; var taille2=add.taille; var reponse="egalite"; if (taille1<taille2) reponse="plus petit" else if (taille2<taille1) reponse="plus grand" else{ for (taille1=0;taille1<taille2;taille1++){ if (taille1<taille2){ reponse="plus petit" taille1=taille2; }else if (taille2<taille1){ reponse="plus grand" taille1=taille2; } } } return reponse; } function min(a,b){ //donne le minimum entre a et b var min="err"; if (a<b) min=a; else if (b<a) min=b; return (min); } function max(a,b){ //donne le maximum entre a et b var min="err"; if (a<b) min=b; else if (b<a) min=a; return (min); } function fibo(){ var c= b.valeur(); b.plus(a); a=new Int_big('a', c); a.affiche(document.getElementById('a')); b.affiche(document.getElementById('b')); } /* (médiocre) Exemple d'utilisation
  • /
a=new Int_big('a','1'); b=new Int_big('b','2'); a.affiche(document.getElementById('a')); b.affiche(document.getElementById('b')); </script> <p>La suite de fibonaci... (une histoire de lapins)</p> </body> </html>

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.