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

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


Salut,

 

Le mercredi 17 avril 2013 21:41:55, Daniel Cartron a écrit :

> Mon algo à moi il fait ça, pour une valeur $valeur correspondant à un

> nombre de cases $nbcases :

>

> $nbcases = 6; //on peut mettre ce qu'on veut ça marchera

> for ($i=$nbcases; $i>=1; $i--) {

> if ($valeur >= pow(2, $i)) {

> "commande.$i";

> $valeur = $valeur - pow(2, $i);

> }

> else { "non-commande.$i": }

> }

>

 

En fait, la différence majeure entre ton algorithme et le mien est que le tien connais la taille de bits qui sera nécessaire pour stocker le nombre, car tu commences par la puissance la plus grande. Mon algorithme est plus générique dans le sens où il peut marcher pour un nombre arbitrairement grand.

Le reste de la division euclidienne par 2 est une opération très simple à implémenter sur un processeur qui compte en binaire (il suffit de regarder le dernier bit). Par contre, suivant l'implémentation, pow peut être une catastrophe (il peut s'agir d'une mise à la puissance, très coûteux). En C, on peut utiliser tout de même 2^n = 2 << (n - 1).

Pour la division par deux, c'est pareil, il suffit de faire un décalage à gauche (voir par exemple [1]).

 

En fait, on voit surtout à nos deux algorithmes que notre culture diffère, dans le sens où mon algorithme est "optimisé" pour les langages type C, C++, pascal, ... (compilés), là où le tiens est plus écrit dans l'esprit php.

 

Ah, les joies de l'agorithmie !

 

--

jm - http://jmtrivial.info

 

[1] http://www.siteduzero.com/informatique/tutoriels/fonctionnement-d-un-ordinateur-depuis-zero/decalages-et-rotations-1

 



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