Objectif : On souhaite écrire un programme Java qui calcule le nombre d'or utilisé par les anciens comme nombre idéal pour la sculpture et l'architecture. Si l'on considère deux suites numériques (U) et (V) telles que pour n>2 :
et
On montre que la suite (V) tend vers une limite appelée nombre d'or (nbr d'Or = 1,61803398874989484820458683436564).
Spécifications de l’algorithme :
On écrit un programme qui donne une valeur approchée avec une précision fixée de e du nombre d'or. Le programme indiquera en outre le rang du dernier terme de la suite correspondant.
n,Un,Un1,Un2 : sont des entiers naturels
Vn,Vn1, e : sont des nombres réelslire( e ); // précision demandée
Un2 ¬ 1;
Un1 ¬ 2;
Vn1 ¬ 2;
n ¬ 2; // rang du terme courant
Itération
n ¬ n + 1;
Un ¬ Un1 + Un2;
Vn ¬ Un / Un1;
si |Vn - Vn1| £ e alors
Arrêt de la boucle ; // la précision est atteinte
sinon
Un2 ¬ Un1;
Un1 ¬ Un;
Vn1 ¬ Vn;
fsi
fin Itération
ecrire (Vn , n);
Implantation en Java
On entre au clavier un nombre réel ci-dessous 0.00001, pour la précision choisie (ici 5 chiffres après la virgule), puis le programme calcule et affiche le Nombre d'or (les caractères gras représentent ce qui est écrit par le programme, les italiques ce qui est entré au clavier) :
Précision du calcul ? : 0.00001
Nombre d'Or = 1.6180328 // rang=14
Proposition de squelette de classe Java à implanter avec un boucle for :
class AppliNombredOr {
}
Remarquons que nous proposons une boucle for ne contenant pas de condition de rebouclage dans son en-tête (donc en apparence infinie), puisque nous effectuerons le test "si |Vn - Vn1| <= Eps alors Arrêt de la boucle" qui permet l'arrêt de la boucle.