ChronoMath, une chronologie des MATHÉMATIQUES
à l'usage des professeurs de mathématiques, des étudiants et des élèves des lycées & collèges


Suite de Hamming         Programme JavaScript

  Richard W. Hamming (1915 - ) est un ingénieur informaticien américain qui s'intéressa aux problèmes du codage des caractères alphanumériques afin de traitement automatique par des machines (programme informatique). Le code Hamming est un système de codage possédant 3 bits de contrôles de parité croisés permettant de détecter et d'éliminer (ou du moins de très fortement diminuer) toute erreur de transmission de l'information à distance.

Voici un problème d'arithmétique d'apparence simple mais dont la résolution informatique demande une certaine réflexion : vous devez rechercher par ordre croissant les entiers n n'admettant comme diviseurs premiers que 2, 3 ou 5. Ces nombres constituent la suite dite de Hamming.

Astuce : Vérifier que si n est candidat divisible par 2, 3 ou 5, sa moitié, son tiers ou son cinquième est alors élément de la suite déjà construite.

Programmation de la méthode en JavaScript

Pour tester ce programme vous devrez simplement entrer la valeur maximale de n. L'expression x = a%b retourne dans x le reste de la division euclidienne de a par b.

Boucle : Pour n variant de 6 à max : si n est divisible par 2, on cherche si sa moitié est dans la table, de même pour divisible par 3 ou 5. Si oui, le drapeau d est mis à 1. Le compteur nh augmente alors de 1 (nh++) ; on stocke h(nh) et on l'écrit à l'écran. Si nh est multiple de 4, on passe à la ligne.

 Fonction (sous-programme) "cherche" : on recherche si n/2 (ou n/3 ou n/5) est dans la table. Si oui, le drapeau d est mis à 1 et on force la fin de la boucle : n est élément de la suite et on retourne la valeur du drapeau (return d) au programme principal.

 JavaScript : fonctions mathématiques usuelles , traitement des chaines de caractères
 




<SCRIPT LANGUAGE=JavaScript>
var h=new Array();
function go()
{
n=prompt("Donnez n max : ",500);
if (n==null) {return} else {nmax=eval(n)};

for (i=1;i<=4;i++) {h[i]=i+1}
suite="2-3-4-5";
// initialisation des premiers termes de la suite
nh=4;
 // nh est le compteur de la suite

for (n=6;n<=nmax;n++)
{
x=0;
if (n%2==0) {x=n/2};
if (n%3==0) {x=n/3};
if (n%5==0) {x=n/5};
if (x>0)
{
d=cherche(x,nh)
if (d==1)
{
nh++;h[nh]=n;
suite=suite+"-"+n.toString();
}
}
}
alert(suite)
}

function cherche(x,nh)
{
d=0;
for (j=1;j<=nh;j++){if (h[j]==x) {d=1;j=nh}}
return d
}
</SCRIPT>


2
3
4
5
6
8
9
10
12
15
16
18
20
24
25
27
30
32
36
40
45
48
50
54
60
64
72
75
80
81
90
96
100
108
120
125
128
135
144
150
160
162
180
192
200

216
225
240
243
250
256
270
288
300
320
324
360
375
384
400
405
432
450
480
486
500


© Serge Mehl - www.chronomath.com