Suite de fibonaci

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 152 fois - Téléchargée 39 fois

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

Ajouter un commentaire

Commentaires

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
de rien :)
content de voir que ça sert :)

mais ça n'a pas été noté :(
Messages postés
868
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
26 février 2008
1
Merci, je pense que quelques bribes de ton code vont m'être utiles pour faire l'algo de puissance rapide.
@++
Messages postés
105
Date d'inscription
lundi 16 février 2004
Statut
Membre
Dernière intervention
28 août 2005

tu as résond steph666
comme sa sous ie sa marche
script :
<html>
<head>
<title>fibonaci</title>
<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;i9){ //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
</head>





La suite de fibonaci... (une histoire de lapins)



</html>
Messages postés
74
Date d'inscription
jeudi 6 mars 2003
Statut
Membre
Dernière intervention
5 juin 2008

en mettant tout dans le head, et ensuite en appelant le reste dans le body :

a.affiche(document.getElementById('a'));
b.affiche(document.getElementById('b'));

ça marche sous ie
Messages postés
74
Date d'inscription
jeudi 6 mars 2003
Statut
Membre
Dernière intervention
5 juin 2008

une des erreurs apparemment c que ton code doit être mis dans la balise head sinon la référence à l'objet marche pas, et ensuite dans la fonction d'affichage, obj.value n'a aucune existence pour lui, il a la valeur null.
Afficher les 18 commentaires

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.