Suite de fibonaci

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 111 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

cs_crashtest
Messages postés
105
Date d'inscription
lundi 16 février 2004
Statut
Membre
Dernière intervention
28 août 2005
-
Salut, j'ai voulu essayer avant de regarder le script et il ne marche pas alors je ne c'est pas si c'est parce que j'ai IE.
Mai si j'ai bien compris il devrait servir a calculer de très grand nombre. c'est sa???
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26 -
en fait, j'ai pas IE... si tu pouvais me donner le message d'erreur... ça pourait m'aider...

la suite de fibo est un grand classique des suites...

la librairie elle permet effectivement d'utiliser des nombres énormes (ces nombres doivent êtres dans l'ensemble des naturels N...)
fser
Messages postés
74
Date d'inscription
vendredi 26 septembre 2003
Statut
Membre
Dernière intervention
23 avril 2005
-
Pour ceux qui ne savent pas la suite de Fibonacci ( 2C me semble-t-il ) est la suite qui a pour particularité que le 3eme nombre est la somme des deux précedents.
exemple : 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144

Pour info : tu as fait ça pour le fun, ou apres la lecture de Da Vinci Code ( que je recommande ;) ) ?
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26 -
ton explication, je l'ai mise plus haut...

c'est quoi :Da Vinci Code???
fser
Messages postés
74
Date d'inscription
vendredi 26 septembre 2003
Statut
Membre
Dernière intervention
23 avril 2005
-
Désolé je n'ai pas lu
Da Vinci Code est un livre qui marche plutot bien qui parle d'une enigme autour de l'assassinat du conservateur du louvre qui a mis en scene sa mort de maniere assez surprenante > enquete et enigmes etc ...

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.