Monsieur Excel
Pour tout savoir faire sur Excel !

22 septembre 2012

Plus sur les groupes de « 1 »

Nous prolongeons aujourd’hui l’article publié il y a quatre jours, d’une part en montrant une autre solution dont la formulation est nettement plus compacte , d’autre part en montrant comme on peut engendrer des séquences aléatoires de « 0 » et de « 1 » d’une telle longueur, de 36 caractères.

Une solution par formule matricielle

La copie d’écran nous montre le même résultat que celui obtenu avec la première solution, avec en plus dans les lignes 13 et 14 les solutions proposées par Roberto Mensa.


Les deux formules imaginées par Roberto sont des formules matricielles, donc validées avec [Ctrl]-[Maj]-[Entrée]. Les voici :

A13 : =texte(somme(10^{0;2;4;6;8;10}*(2+nbcar(substitue(substitue($A$3;"01"; "0|1");"10";"1|0"))-nbcar(substitue("|"&substitue(substitue($A$3;"01";
"0|1");"10";"1|0")&"|";"|"&rept(1;{1;2;3;4;5;6})&"|";"||")))/{1;2;3;4;5;6});"|"&rept("00|";6))

A14 : =texte(somme(10^{6;4;3;2;1;0}*(2+nbcar(substitue(substitue($A$3;"01"; "0|1");"10";"1|0"))-nbcar(substitue("|"&substitue(substitue($A$3;"01";
"0|1");"10";"1|0")&"|";"|"&rept(1;{1;2;3;4;5;6})&"|";"||")))/{1;2;3;4;5;6});"|00|00|0|0|0|0|")

Je vous laisse le plaisir de décortiquer ces deux formules…

Série aléatoire de « 0 » et de « 1 »

Pour créer une série aléatoire de 36 valeurs en « 0 » et en « 1 », nous allons utiliser la fonction decbin(), qui assure la conversion d’un nombre décimal en nombre binaire. Le problème, c’est que le plus gros argument positif de cette fonction est 511, ce qui fait en binaire neuf « 1 » d’affilée.

Pour engendrer un nombre aléatoire de 36 bits (dinary digit, donc « 0 » ou
«
1 ») , l’astuce revient à concaténer quatre fonctions. Chacune d’entre elles tire un nombre aléatoire de 0 à 511,999 mais – comme les décimales sont ignorées – cela revient à un nombre entier aléatoire de 0 à 511.

Encore faut-il résoudre un problème, le fait que les « 0 » à gauche ne sont pas affichés, car ils ne sont pas significatifs. Ce problème est résolu grâce à la formule droite("00000000"&decbin(…);9) !

Voici donc la formule permettant de créer un nombre aléatoire de 36 bits :

=droite("00000000"&decbin(512*alea());9)&droite("00000000"&decbin(512*alea());9)&droite("00000000"&decbin(512*alea());9)&droite("0000000"&decbin(512*alea());9)