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 :

Conversion de la base 10 vers la base 16


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 0
    Points
    0
    Par défaut Conversion de la base 10 vers la base 16
    Bonjour, j'essaye de faire un algo pour convertir une base 10 vers base 16 et inversement, mais j'ai quelques petites soucis je ne sait pas comment faire pour que 10 = A par exemple.
    Voici ce que j'ai fait pour le moment, dite moi si c'est bon jusqua la ç part ce probleme de switch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Programme conversion
    choix : caractère
    hexa : chaine
    nb, k : entier
     
    debut
        //boucle sur le menu
        Choix ← ‘’Z’’
        Tantque choix <> ‘’Q’’ et choix <> ‘’q’’
     
            //menu
            Afficher ‘’ conversion decimal vers hexadecimal…………1’’
            Afficher ‘’conversion hexadecimal vers decimal………….2’’
            Afficher ‘’quitter………………………………………………………….Q’’
            Saisir choix
     
            //conversion entier vers hexadecimal
            Si choix = ‘’1’’ alors
                Hexa ← ‘’ ‘’
                Afficher ‘’entrer un entier = ‘’
                Saisir nb
                Tantque nb <> 0
                    hexa ←str(nb mod 2) + hexa
                    nb ←nb div 16
                fin tantque
                afficher ‘’conversion en hexadecimal = ‘’ + hexa
            sinon
     
              //conversion hexadecimal vers decimal
    merci

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Tu trouveras la réponse au problème ici.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    je débute dans l’étude des algorithmes , alors si en plus les explications sont en anglais...

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Tu parles d'afficher 'A' au lieu de '10' pour la valeur en hexa ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Oui c'est ça, j'aimerai créer une sorte de switch qui permette cela

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    En pseudo code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    si valeur < 10 alors afficher( '0' + valeur )
    sinon afficher( 'A'  + valeur - 10 )
    Les codes ASCII des entiers de 0 à 9 sont rangés dans l'ordre croissants, de même pour l'alphabet de A à Z.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    si valeur < 10 alors afficher( '0' + valeur )
    sinon afficher( 'A' + valeur - 10 )
    ??? Donc prenons valeur=16. La sortie de ton conseil est A6. Crois-tu vraiment que 1610 égale A616 ou même G16 ?


    Il faut chercher la puissance de 16 maximale inférieur à ton nombre. Imaginons que ce soit 4. (donc N>164 mais N<165)
    il faut alors chercher i4,i3,i2,i1,i0 tels que i4*164+i3*163+i2*162+i1*161+i0*160=N
    Tu peux soustraire encore et encore les puissances de 16 pour avoir un programme facile à écrire.
    Ou alors chercher le multiple idoine par dichotomie.
    Ou alors utiliser le logarithme en base 16.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    ??? Donc prenons valeur=16. La sortie de ton conseil est A6. Crois-tu vraiment que 1610 égale A616 ou même G16 ?
    Non, non, je partais de son programme ou il connais chaque demi-octet séparément constituant la valeur hexa. Le pseudo-code fourni doit être placé dans une boucle pour traiter chaque demi-octet.
    Il demandait comment afficher les chaines de 0 à F à partir d'une valeur entière entre 0 et 15.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  9. #9
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Points : 738
    Points
    738
    Billets dans le blog
    2
    Par défaut
    Avec un algorithme de divisions successives. Dans chiffrey, y est le rang.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    y <- 0
    tant que x >= 16
      chiffre<sub>y</sub> <- x mod 16
      si chiffre<sub>y</sub> > 9
        chiffre<sub>y</sub> <- chiffre<sub>Y</sub>  +  'A' - 10
      sinon
        chiffre<sub>y</sub> <- chiffre<sub>Y</sub>  +  '0'
      fin si
      y <- y + 1
      x <- x  / 16
    fin tan que
    // pour le dernier chiffre
    si x > 9
      chiffre<sub>y</sub> <- x  +  'A' - 10
    sinon
      chiffre<sub>y</sub> <- x  +  '0'
    fin si
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

  10. #10
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    tant que x>0 ne t'éviterait-il pas de faire ton dernier tour de boucle à l'extérieur de la boucle ?

    Tu vas me dire que si x=0, alors rien ne s'affiche. Mais c'est un cas particulier qu'il est normal de traiter à part. Tandis que 3, 9 ou A, n'est pas normal.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Points : 738
    Points
    738
    Billets dans le blog
    2
    Par défaut
    @Flodelarab: tu devrais nous proposer ta version complète, je suis curieux ...
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

  12. #12
    Membre actif Avatar de cedd70
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mars 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 154
    Points : 263
    Points
    263
    Par défaut
    Bonjour
    Je verrais bien ça tout simplement ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    nombre [3] = 6AF1
     
    for i=0 to size(nombre)
    	if nombre[i] = A alors nb = 10
    	if nombre[i] = B alors nb = 11
    	if nombre[i] = C alors nb = 12
    	if nombre[i] = D alors nb = 13
    	if nombre[i] = E alors nb = 14
    	if nombre[i] = F alors nb = 15
    	else nb = nombre[i] 
     
    	dec = nb*2^i + dec
    end for

  13. #13
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Sinon, il est possible de se basé sur la version donnée par Java :

    Voici le code qui corresponds.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    package org.k.developpez.forum;
     
    import java.lang.annotation.Native;
     
    public class Integer {
     
    	public static void main(String[] args) {
    		System.out.println(Integer.toHexString(234546346));
    	}
     
    	/**
             * The number of bits used to represent an {@code int} value in two's complement binary form.
             *
             * @since 1.5
             */
    	@Native
    	public static final int SIZE = 32;
     
    	/**
             * All possible chars for representing a number as a String
             */
    	final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a',
    			'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
    			'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
     
    	/**
             * Returns the number of zero bits preceding the highest-order ("leftmost") one-bit in the two's complement binary representation of the specified {@code int} value. Returns 32 if the specified value has no one-bits in its two's complement representation, in other words if it is equal to zero.
             *
             * <p>
             * Note that this method is closely related to the logarithm base 2. For all positive {@code int} values x:
             * <ul>
             * <li>floor(log<sub>2</sub>(x)) = {@code 31 - numberOfLeadingZeros(x)}
             * <li>ceil(log<sub>2</sub>(x)) = {@code 32 - numberOfLeadingZeros(x - 1)}
             * </ul>
             *
             * @param i
             *            the value whose number of leading zeros is to be computed
             * @return the number of zero bits preceding the highest-order ("leftmost") one-bit in the two's complement binary representation of the specified {@code int} value, or 32 if the value is equal to zero.
             * @since 1.5
             */
    	public static int numberOfLeadingZeros(int i) {
    		// HD, Figure 5-6
    		if (i == 0)
    			return 32;
    		int n = 1;
    		if (i >>> 16 == 0) {
    			n += 16;
    			i <<= 16;
    		}
    		if (i >>> 24 == 0) {
    			n += 8;
    			i <<= 8;
    		}
    		if (i >>> 28 == 0) {
    			n += 4;
    			i <<= 4;
    		}
    		if (i >>> 30 == 0) {
    			n += 2;
    			i <<= 2;
    		}
    		n -= i >>> 31;
    		return n;
    	}
     
     
    	/**
         * Returns a string representation of the integer argument as an
         * unsigned integer in base&nbsp;16.
         *
         * <p>The unsigned integer value is the argument plus 2<sup>32</sup>
         * if the argument is negative; otherwise, it is equal to the
         * argument.  This value is converted to a string of ASCII digits
         * in hexadecimal (base&nbsp;16) with no extra leading
         * {@code 0}s.
         *
         * <p>The value of the argument can be recovered from the returned
         * string {@code s} by calling {@link
         * Integer#parseUnsignedInt(String, int)
         * Integer.parseUnsignedInt(s, 16)}.
         *
         * <p>If the unsigned magnitude is zero, it is represented by a
         * single zero character {@code '0'} ({@code '\u005Cu0030'});
         * otherwise, the first character of the representation of the
         * unsigned magnitude will not be the zero character. The
         * following characters are used as hexadecimal digits:
         *
         * <blockquote>
         *  {@code 0123456789abcdef}
         * </blockquote>
         *
         * These are the characters {@code '\u005Cu0030'} through
         * {@code '\u005Cu0039'} and {@code '\u005Cu0061'} through
         * {@code '\u005Cu0066'}. If uppercase letters are
         * desired, the {@link java.lang.String#toUpperCase()} method may
         * be called on the result:
         *
         * <blockquote>
         *  {@code Integer.toHexString(n).toUpperCase()}
         * </blockquote>
         *
         * @param   i   an integer to be converted to a string.
         * @return  the string representation of the unsigned integer value
         *          represented by the argument in hexadecimal (base&nbsp;16).
         * @see #parseUnsignedInt(String, int)
         * @see #toUnsignedString(int, int)
         * @since   JDK1.0.2
         */
        public static String toHexString(int i) {
            return toUnsignedString0(i, 4);
        }
     
    	/**
             * Convert the integer to an unsigned number.
             */
    	private static String toUnsignedString0(int val, int shift) {
    		// assert shift > 0 && shift <=5 : "Illegal shift value";
    		int mag = Integer.SIZE - Integer.numberOfLeadingZeros(val);
    		int chars = Math.max(((mag + (shift - 1)) / shift), 1);
    		char[] buf = new char[chars];
     
    		formatUnsignedInt(val, shift, buf, 0, chars);
     
    		// Use special constructor which takes over "buf".
    		return new String(buf);
    	}
     
    	static int formatUnsignedInt(int val, int shift, char[] buf, int offset, int len) {
    		int charPos = len;
    		int radix = 1 << shift;
    		int mask = radix - 1;
    		do {
    			buf[offset + --charPos] = Integer.digits[val & mask];
    			val >>>= shift;
    		} while (val != 0 && charPos > 0);
     
    		return charPos;
    	}
     
    }

    Toute la logique de conversion se trouve dans la fonctionstatic int formatUnsignedInt(int val, int shift, char[] buf, int offset, int len)L'idée est d'avoir un masque correspondant à la valeur voulu à savoir 15 dans notre cas, puis de faire un shift du nombre de bytes correspondant. Pour faire du plus petit au plus grand.

    Sinon on veux faire simpliste et ne pas traiter tout les cas comme le fait le standard Java on a un code ressemblant à:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    package org.k.developpez.forum;
     
    public class Integer {
    	int maskHex =15;
    	int shiftHex = 4;
     
    	public static void main(String[] args) {
    		int number =234546346;
    		String toHex = toHex(number);
    		System.out.println(toHex);
    	}
     
    	private static String toHex(int number) {
    		String toHex="";
    		while(number>0){
    			toHex=Integer.digits[number & maskHex]+toHex;
    			number =number>>>shiftHex;
    		}
    		return toHex;
    	}
     
    	/**
             * All possible chars for representing a number as a String
             */
    	final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a',
    			'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
    			'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
    }

    Pour information >>> est l'opérateur de décalage de bit vers la droite (signe décalé)

    Cordialement,
    Patrick Kolodziejczyk.

    source :
    http://fr.wikibooks.org/wiki/Program...p%C3%A9rateurs
    Et les sources de java.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Sinon ça serait pas plus interessant d'utiliser un tableau de vecteur?

  15. #15
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Points : 738
    Points
    738
    Billets dans le blog
    2
    Par défaut
    implantation Batch de l’algorithme de division successive

    http://initscreen.developpez.com/tut...t-batch/#LVI-D
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

Discussions similaires

  1. Probleme conversion fichier provenant d'une base oracle vers une base mysql
    Par jonnyboy dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 18/06/2009, 09h40
  2. Comment convertir de la base 16 vers la base 10 ?
    Par beegees dans le forum Assembleur
    Réponses: 10
    Dernier message: 25/12/2008, 11h01
  3. Réponses: 7
    Dernier message: 18/02/2008, 14h33
  4. Réponses: 4
    Dernier message: 06/07/2007, 20h53
  5. Migration d'une base Access vers une base PostgreSQL
    Par ttalourd dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 22/11/2004, 16h59

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