IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Décodage inverse d'un chiffre


Sujet :

Algorithmes et structures de données

  1. #1
    Membre habitué

    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Points : 157
    Points
    157
    Par défaut Décodage inverse d'un chiffre
    Bonjour,

    Je me prends la tête depuis quelques jours pour ce problème simple. Y a t'il un algo pour cela :

    Pour stocker en un seul chiffres différente catégorie, je cherche à trouver l'algo. de décodage inverse ???

    Si on a une catégorie "1" qui correspond à (par ex) "pizzeria",
    2 à "gastronomique",
    4 à "kebab",
    8 à "brasserie",
    16 à "hamburger"
    etc .... (donc une multi par 2 à chaque fois)

    On peut coder que le restaurant qui fait des "kebab" + "hamburger" + "pizza", rentre donc dans la catégorie 21 - 4 + 16 + 1 = 21
    Alors comment décomposer ce chiffre pour retrouver les différentes catégories ????

    26 == 16 + 8 + 2
    11 == 8 + 2 + 1
    19 == 16 + 2 + 1
    ...

    Merci d'avance

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 663
    Points
    5 663
    Par défaut
    Luo,

    Comme chaque valeur est une puissance de 2, elle est tout simplement représentée par un bit on/off dans l'entier (?) ou tu stockes le total.

    S'il y a plus de valeurs que de bits disponibles pour les variables que tu peux gérer, il faudra voir pour plutôt faire un ensemble pouvant contenir les différentes valeurs (qui, à ce moment là, ne devront plus être des puissances de 2, mais une simple suite de 1 à n).


  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Dans ce cas on utilise des opérations bit à bit, par exemple en C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if( resto & 1 ) {
      // pizzeria
    }
    Généralement, on définit quelques variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #define PIZZA 1
    #define GASTRONOMIQUE 2
    #define MER 4
    // ...
    ça rend plus facile la lecture du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if( resto & PIZZA ) {
      // pizzeria
    }
    if( resto & GASTRONOMIQUE ) {
      // gastronomique
    }
    --
    Jedaï

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    pour reprendre la question originale, pour décomposer un nombre N en puissance de 2:

    1. chercher la plus grande puissance de 2 inferieure ou egale a N. (appelons la p)
    2. Retirer p a N
    3. retour etape 1, tant que N n'est pas nul.

    exemple: N=21

    1. La plus grande puissance de 2 inferieure ou egale a 23 est: p=16
    2. N = N-p = 21-16 = 5
    3. La plus grande puissance de 2 inferieure ou egale a 5 est: p=4
    4. N = N-p = 5-4 = 1
    5. La plus grande puissance de 2 inferieure ou egale a 1 est: p=1
    6. N = N-p = 1-1 = 0 ... fini

    La decomposition est donc 16 + 4 +1

  5. #5
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Pour savoir si dans X le bit correspondant à 1, 2, 4,... est à 1, tu boucles sur un décalage à droite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    i=1
    tant que X!=0
       si(X!=2*(X>>1)) alors "i est dans X"
       X>>1
       i=i*2
    fin tant que

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    i=1
    tant que X!=0
       si (X & 1) alors "i est dans X" 
       X>>1
       i=i*2
    fin tant que
    C'est plus propre. enfin, moi ce que j'en dis...

  7. #7
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    su^rement... tu sais moi l'informatique... à part la MOA...

  8. #8
    Membre habitué

    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Points : 157
    Points
    157
    Par défaut
    Merci beaucoup pour la réponse, j'avais la tête ailleurs dans les diagrammes UML
    Je vais essayer de tester cela en php très rapidemment.
    Merci
    JY

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Manque le premier chiffre lors de décodage d'un code barre EAN13
    Par JenniferBP2I dans le forum Discussions diverses
    Réponses: 3
    Dernier message: 27/08/2010, 15h31
  2. [Dev-Pascal] Inverser les deux derniers chiffres d'un nombre
    Par chalou999 dans le forum Autres IDE
    Réponses: 5
    Dernier message: 11/10/2009, 10h01
  3. [PHP 5.0] Inverse d'un chiffre
    Par Whombat dans le forum Langage
    Réponses: 4
    Dernier message: 09/01/2009, 10h55
  4. [Tableaux] Aide pour inverser des chiffres
    Par Equinoxe5 dans le forum Langage
    Réponses: 5
    Dernier message: 30/01/2008, 23h32
  5. Inverser nombre entier de 4 chiffres
    Par zenattitude dans le forum Langage
    Réponses: 3
    Dernier message: 27/11/2005, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo