Re: [LA-discussions] cases à cocher : transmission des choix en une seule valeur

[ Thread Index | Date Index | More linuxarverne.org/discussions Archives ]


Bonjour,

 

Le mercredi 17 avril 2013 18:48:21, Daniel Cartron a écrit :

> J'ai lu il y a fort longtemps une astuce pour transmettre l'intégralité des

> choix effectues dans une liste de cases à cocher sous forme d'un unique

> nombre égal à la somme des puissances de 2 des numéros de case : exemple

> 22 c'est 2 +4 +16 ça veut dire case 1 2 et 4 cochées mais pas la 3.

 

Il s'agit ici d'un problème classique en algorithmique, correspondant à l'écriture en base 2 d'un nombre. Pour mémoire, nous comptons en base 10, ce qui fait que pour nous 22 = 2*10^1 + 2*10^2.

 

Une manière universelle de procéder consiste à procéder itérativement de la manière suivante:

 

== Algorithme d'écriture en base 2 ==

=== Variables ===

Soit n mon nombre à décomposer.

Soit b[] un tableau tel que b[i] est vrai si et seulement si la case dont tu parles est cochée.

Au début, b[i]=0 pour tout i

Soit k la puissance de deux en cours.

On commence avec k = 0

=== Procédure ===

Tant que n est différent de 0 faire

Si n%2 est égal à 1 alors

b[k] <- 1

Fin Si

k <- k + 1

n <- partie entière de (n / 2)

Fin Tant que

== Fin de l'algorithme ==

 

On a noté dans cet algorithme n%2 le reste de la division euclidienne de n par 2, c'est-à-dire 1 si n est impaire, et 0 sinon.

 

Suivant les langages, on peut trouver d'autres astuces, comme par exemple lire directement les bits (en effet, en informatique un nombre entier est stocké en utilisant cette notation en base 2).

 

Bref, j'espère ne pas avoir répondu à côté de la plaque.

--

jm - http://jmtrivial.info



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/