Algorithme d'Euclide en Javascript



Le texte ci-dessous est interactif, dans le sens où l'utilisateur peut entrer des données (nombres entiers) et cliquer sur un bouton pour faire calculer automatiquement leur pgcd, par une boucle exécutée en javascript.
Par contre, pour la simplicité du code, aucune protection n'est prévue pour empêcher ledit utilisateur de mettre n'importe quoi à la place des entiers. Ceci dit Javascript résiste plutôt bien aux erreurs...



Entrer un nombre entier
Entrer un autre nombre entier

Le plus grand nombre qui divise à la fois ces deux entiers est


Voici le code javascript qui produit ce qu'on voit ci-dessus:


function pgcd(x,y){
var m=x;
var n=y;
var t=m;
while (n>0){
t=m % n;
m=n;
n=t;
}
return(m);
}
function maj(oreille){
a=document.oreille.ent1.value;
b=document.oreille.ent2.value;
document.c=pgcd(a,b);
document.oreille.sortie.value=pgcd(a,b).toString();
}

Le code est formé de deux fonctions, la première, de deux variables entières, calcule le pgcd, et la deuxième met à jour l'affichage des deux données entrées et de la donnée sortie.


On peut raccourcir le code de la fonction pgcd, en le rendant récursif:
function gcd(a,b) {
if (a>b){return (gcd(b,a));
}else{
if ((b % a) == 0){return (a);
}else{return (gcd(a,b-a));
}}}
mais, outre le fait que les programmes récursifs tendent à être moins efficaces que leurs versions itératives, la notion de récursivité n'est pas au programme de Seconde...


Bien que ce ne soit pas précisé dans l'entête du code (pour des raisons de légèreté), celui-ci est soumis à la license GPL3.0, ce qui veut dire qu'on est autorisé (et même encouragé) à l'utiliser, à le modifier. La seule restriction importante est que la license GPL3.0 est héréditaire, ce qui veut dire qu'une fois modifié, le code obtenu reste sous license GPL, et qu'il est notamment interdit de le transformer en un code commercial, ou de prétendre être l'auteur de l'intégralité du nouveau code.