Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3050 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Retrouver les nombres qui composent un chiffre en binaire.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Retrouver les nombres qui composent un chiffre en binaire.

n°2046705
Sebastien
Posté le 06-01-2011 à 09:37:21  profilanswer
 

Bonjour je cherche une facon simple (j'en ai trouvé plusieurs mais ca doit pouvoir etre plus sympa) pour connaitre les nombres decimales qui composent un binaire
 
exemple  
1011 c'est 8+2+1
 
j'ai trouvé en inversant le chiffre et prenant l'index du tableau pour le mettre à la puissance 2 (si different de 0) mais c'est pas forcement des plus 'parlant'
 
Exemple
1011 => 1101
tableau  [index] [valeur]
[0][1]
[1][1]
[2][0]
[3][1]
 
donc  
1x2^0
1*2^1
--0*2^2 //exclure car = 0
1*2^3

mood
Publicité
Posté le 06-01-2011 à 09:37:21  profilanswer
 

n°2046843
olivthill
Posté le 06-01-2011 à 12:25:38  profilanswer
 

Bonjour,
 

Citation :

connaitre les nombres decimales qui composent un binaire


Désolé, mais je ne comprends pas bien :
 
- Les "nombres" ou les "chiffres" ?
- Les "nombres décimales" ou les "nombres décimaux", ou la "partie décimale d'un nombre décimal" ?
- Un "binaire" ? Ce mot peut avoir plusieurs significations. Par exemple, il peut désigner un programme. Mais ici, je devine qu'il s'agit d'un "nombre écrit en notation binaire" ou plutôt d'une chaîne de caractères composées des caractères "0" et 1".
 

Citation :

1011 c'est 8+2+1


Désolé, je ne comprends pas bien :
 
- L'expression "c'est" n'est pas claire.
Est-ce qu'il faut trouver 1011 à à partir de 11 ou bien trouver 11 à partir de 1011 ?
 

Citation :

c'est pas forcement des plus 'parlant'


Désolé, je ne comprends pas bien :
 
- Est-ce que la priorité est de faire un algorithme qui marche ou un algorithme qui est "parlant" (avec des guillemets comme c'est l'usage en français et en anglais des Etats Unis, les apostrophes étant l'usage en anglais du Royaume Uni) ?
 
Je crois qu'il faut utiliser les puissance de 2 d'une manière ou d'une autre. Je ne vois pas bien comment faire autrement et pourquoi ne pas s'en servir. Sinon, on pourrait utiliser les décalages, mais je ne sais si cela fait partie de votre cours.


Message édité par olivthill le 06-01-2011 à 12:26:23
n°2046856
Sebastien
Posté le 06-01-2011 à 13:13:32  profilanswer
 

Je cherche les chiffres décimales qui le composent
 
1011 est composé en décimal de 8-2-1

n°2046875
olivthill
Posté le 06-01-2011 à 14:10:12  profilanswer
 

Les "chiffres décimales" ?
 
S'il vous plait, regardez dans un dictionnaire de français.
 
Il existe l'adjectif "décimal", et alors il faut dire les "chiffres décimaux"
 
Il existe aussi le nom "décimal", et alors cela n'a aucun sens en français de mettre deux noms communs l'un à la suite de l'autre. C'est comme si vous disiez la "musique chant", ou le "piano longueur".

n°2046956
leonhard
Posté le 06-01-2011 à 16:09:25  profilanswer
 

Sebastien a écrit :

Bonjour je cherche une facon simple (j'en ai trouvé plusieurs mais ca doit pouvoir etre plus sympa) pour connaitre les nombres decimales qui composent un binaire
 
exemple  
1011 c'est 8+2+1
 
j'ai trouvé en inversant le chiffre et prenant l'index du tableau pour le mettre à la puissance 2 (si different de 0) mais c'est pas forcement des plus 'parlant'
 
Exemple
1011 => 1101
tableau  [index] [valeur]
[0][1]
[1][1]
[2][0]
[3][1]
 
donc  
1x2^0
1*2^1
--0*2^2 //exclure car = 0
1*2^3


 
 
Pas très clair en effet. Un nombre binaire est composé de chiffres binaires (0 ou 1). Un nombre décimal est composé de chiffres décimaux (0, 1, 2, ..., 9). Mais bon je suppose que tu veux transformer un nombre décimal en binaire.  Dans ce cas, il suffit de faire une simple division. L'algo donne quelque chose du genre:

Code :
  1. index = 0;
  2. tantque (nombreDécimal > 0) faire
  3.    tableau[index] = nombreDecimal modulo 2
  4.    nombreDécimal = nombreDécimal div 2      --> division entière
  5.    incrémenter index
  6. fin tantque


 
L'algorithme peut facilement s'étendre à n'importe quelle base, il suffit de remplacer la valeur 2 par la base souhaitée. Il faut juste considérer que pour les bases supérieures à 10, il faut des "nouveaux" chiffres (par exemple 'A', 'B', 'C', 'D', 'E' et 'F' pou la base 16).
 
Pour a conversion inverse c'est un poil plus compliqué (mais juste un poil). Par exemple tu peux regarder le schéma de Horner qui donne par exemple pour le nombre binaire 1011 le calcule
 
nombreDecimal = (((1*2)+0)*2 + 1)*2 + 1

n°2046983
h3bus
Troll Inside
Posté le 06-01-2011 à 17:07:52  profilanswer
 

Moi je comprend qu'il veut afficher les puissances de 2 dont la somme donne son nombre.

 

Un truc comme ça quoi:

Code :
  1. Index <- 1
  2. Tant que nombre est différent de 0
  3. Faire
  4.    Si nombre modulo 2 est différent de 0
  5.    Alors
  6.       Afficher Index
  7.    Fin Si
  8.    Index <- Index * 2
  9.    Nombre <- Nombre / 2 
  10. Fin Faire


Message édité par h3bus le 06-01-2011 à 17:08:20

---------------
sheep++
n°2047023
Sebastien
Posté le 06-01-2011 à 20:49:21  profilanswer
 

H3bus est le plus proche meme si à premiere vue son algo me parait bizarre, mais à tester, ou à arranger je vois son idée et oui ca pourrait etre une piste.
 
Donc pour faire simple
J'ai 101 je veux afficher  
4
1
 
 
 
Pour la petite histoire
J'ai une base qui gère un questionnaire à choix multiple, sur des volumes conséquents.
 
Et le système est composé ainsi :
[pre]
ID - Réponse
1     Choix 1
2     Choix 2
4     Choix 3
8     Choix 4
16   Choix 5
.....
512 Choix 10
 
 
Et donc la 'table' des réponses est :
 
User - Reponses
1        4
2        27
3        954
....
[/pre]
 
Exemple l utilisateur 2 à choisit les réponses choix 5 (valeur 16) choix 4 (valeur 8) choix 2 (valeur 2) choix 1 (valeur 1) 16+8+2+1 = 27
 
On evite ainsi d'avoir pour chaque membres x lignes et on réduit la volumetrie d'autant plus.
 
Et donc je cherchais comment faire une correspondance entre les 2.
Mon idée fut donc pour pas m'embeter d'utiliser une table de transcodage entre les 2 systèmes, qui contiendrait donc les 1023 combinaisons possibles
 
Au final il existe en sql (enfin j'utilise sql server 2008 je sais pas trop si c'est standard) une fonction '&' qui permet de faire la liaison entre les 2
une jointure du type  

Citation :

user & id = id


 
Mais bon je veux quand meme savoir en Algo comment retransformer ca.

n°2047045
smaragdus
whores, drugs & J.S. Bach
Posté le 06-01-2011 à 23:14:39  profilanswer
 

voilà typiquement le genre d'optimisation qui fait perdre plus de temps au final. Une table n-n entre user et choix auraient été certes plus grosse mais 100 x plus efficace à inner-jointurer (et je parle même pas des contraintes d'intégrité)
 
Le cas d'école. Faut il rappeler que les optimisations ça se fait APRES avoir fait des benchmark et pas juste au pifomètre "ouais ça va être gros"


Message édité par smaragdus le 06-01-2011 à 23:15:08
n°2047119
Sebastien
Posté le 07-01-2011 à 10:33:57  profilanswer
 

Justement non vu que c'est natif au code SQL en fait donc en terme de performance on y perd pas.
La par la suite c'est pour ma culture 'algo' que je me posais la question

 

http://msdn.microsoft.com/en-us/library/ms174965.aspx
ca semble exister partout (mysql oracle par exemple)
Assez marrant les fonctions
genre
SELECT 29 | 15;
SELECT 29 & 15;


Message édité par Sebastien le 07-01-2011 à 11:03:38
n°2047557
Olivier51
Posté le 08-01-2011 à 15:28:14  profilanswer
 

La facon, la plus sera de faire ca:
Si tu veux savoir si ton utilisateur a repondu a la question N:

if (Reponse & (1 << (N-1))) then
  Il a repondu
endif


Message édité par Olivier51 le 08-01-2011 à 15:28:35

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Retrouver les nombres qui composent un chiffre en binaire.

 

Sujets relatifs
MYSQL : Problème pour retrouver la clé primaire dans les metadatasVBA Excel : Question simple, Textbox stocke des nombres en texte
Mysqld en mode log binaire sous linux[C++] Récupérer la taille d'un fichier binaire
extraire un chiffre d une chaine de caractere [résolu][Regex] Détecter des nombres entre crochets
PAttern.matches comment autoriser que les chiffres et un point ?[RESOLU] seek + truncate remplissent de binaire !
[WebDev15] GUID Ldap ou comment récupérer de l'hexadecimale..exercice nombres décroissants
Plus de sujets relatifs à : Retrouver les nombres qui composent un chiffre en binaire.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR