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>
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.