Partage
  • Partager sur Facebook
  • Partager sur Twitter

Entier en hexadécimal

16 mai 2006 à 2:06:16

Bonjour.
Dans mon cours de programmation orienté objet, nous avons un travail à faire. Transformer des chiffre romains en nombre arabe et l'inverse et la transformation(conversion) d'un chiffre Entier en hexa décimal et l'inverse (en version longue. Je veux dire sans les fonctions (que je connais pas) qui sert justement à ce type de conversion).

Pour ma part, j'ai complété la classe CRomain et elle marche bien. la, je suis rendue pour la conversion d'hexa en entier et l'inverse. Je suis un peu perdue.

Est-ce que quelqu'un pourrait m'aider?Juste m'indiquer le drois chemin.

Je vous remercie d'avanc
Harry5
  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2006 à 7:44:18

salut

déjà faut savoir que en C, les nombres hexa se notte avec 0x devant, genre:

int hexa = 0x123;

pour covnertir une base10 et base16, va voir sur wikipedia :p
  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2006 à 7:45:51

tu as probablement eu un cour de math pour info si tu est en prog oriente objet, alors tu a apris comment transphorme un entier en hexa a la main... c'est la meme chose il faut simplement que tu transphorme cette methode en ligne de code.

mais si tu n'as pas aprit comment faire cette transphormation a la main ... tu as peu etre apris celle pour le binaire ou l'octal, c'est la meme chose exepte que la base change(2 pour binaire, 8 pour octal, 10 pour entier 16 pour hexa)

et si tu ne connais pas non plus cherche dans google "conversion entier hexadecimal" je suis certein que tu trouvera quelque chose...
  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2006 à 14:20:32

j'ai déja eu 2 cours de math. Le premier était des statistiques et l'autre math en infographie (vecteur, matrice,etc). J'ai déja appris comment transformer en base 16 uniquement(et ses l'objet du travail). Donc, je c'est comment on fait de hexa à décimal. Mais de décimal à hexa, je ne me rappelle plus trop trop :S

Je vais continuer à chercher et si quelqu'un pourrais me donner un petit coup de main sa serais super gentil :)

En pensant, je fais ce programme en c++ et non en c ;)(j'ai oublier de le préciser lol )
  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2006 à 21:46:38

Si tu veux j'avais ces fonctions en VB. Si tu comprend pas dis le et je les referais en C (par contre C++ je connais pas). Mais ce qui est important c'est l'algorithme, pas le langage.
Pour le décimal vers le binaire:

Public Function DecToHex(ByVal X$) As String
    Dim c As Variant, d As Double
    DecToHex = ""
    Do
        c = X Mod 16 '
        d = Fix(X / 16)
        Select Case c
            Case 10
                c = "A"
            Case 11
                c = "B"
            Case 12
                c = "C"
            Case 13
                c = "D"
            Case 14
                c = "E"
            Case 15
                c = "F"
        End Select
        DecToHex = DecToHex + CStr(c)
        X = d
    Loop Until (c) = 0
    DecToHex = StrReverse(Left(DecToHex, Len(DecToHex) - 1))
End Function
  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2006 à 22:05:47

Excusez moi de m'incruster dans ce topic, mais plutôt que d'en créer un pour une question si bête (qui en plus concerne les chiffres :p )

Quand je recupère une valeur de type double, elle vaut mettons: 45.000000 ^^

Ma question est la suivante: Peut-on fixer le nombre de zéros après la virgule à seulement deux zéros ?

Donc au lieu d'afficher 45.000000 afficher ceci: 45.00 :)

Si oui, bien evidemment: comment faire? :)

Merci ! ;)
  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2006 à 23:48:54

Citation : LeChat

Ma question est la suivante: Peut-on fixer le nombre de zéros après la virgule à seulement deux zéros ?

Donc au lieu d'afficher 45.000000 afficher ceci: 45.00 :)



http://man.developpez.com/

Mais ça ne se fait pas de s'incruster comme ça. C'est si compliqué que ça de créer un nouveau sujet ?
  • Partager sur Facebook
  • Partager sur Twitter
Music only !
16 mai 2006 à 23:51:54

j'ai lue ton code vb et je ne comprend pas beaucou (malgré que j'ai déja fais du Vb.net lol ).
Sa serais sympa si tu le réécrivais en C (c+= et c son presque identique alors je me reconnaitrai facilement ;) )
merci d'avance
harry5
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2006 à 0:06:57

Salut tous le monde :D !!
Pour la conversion d'un entier en Hexa ,c'est très simple :lol: :
Il suffit de diviser par 16 le nombre que tu as , par exemple :
La conversion de 361 en Hexa :

361 / 16 = 22 reste 9 .
22 / 16 = 1 reste 6 .
1 / 16 = 0 reste 1 .

Et on s'arrête de calculez lorsqu'on trouve le Zero .
Donc : (361) = 169 en base 16 .

Voici un autre exemple :
Le nombre 1528 en Hexa , ca donne :

1528 / 16 = 95 reste 8 .
95 / 16 = 5 reste 15 .
5 / 16 = 0 reste 5 .

Et donc la on a le chiffre 15 ,c'est F en Hexa ,donc :

(1528) = 5F8 en base 16 .
Donc la il ne te reste plus qu' a ecrire le programme qui fait ceci avec le modulo qui donne le reste de la division ;) .

Merci .



  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2006 à 3:33:05

Merci medkarim pour tes explications.

J'ai essayer d'écrire un petit programme test avant de le mettre dans mon programme d'école. Mais le problème, si j'essaie avec le nombre 1528, cela me retourne : 8F , mais ou est passer le 5 ?? Voici mon code complet (Sous visual studio.net).Le code est en c++.


#include<iostream>
#include<string>
#include<sstream>
#include<exception>
#pragma warning(disable:4290)

using namespace std;

void Caractere(int iNombre,string &sHexa)throw(exception);

int main()
{
        int Nombre = 1528;
        int iTotalt = Nombre/16;
        int iModulo = Nombre%16;

        string sHexa;
        string sChaineTempo;

        while(iTotalt > 0)
        {
                try
                {
                        Caractere(iModulo,sHexa);
                }
                catch (exception e)
                {
                        cout << e.what() << endl;
                }

                iModulo = iTotalt%16;
                iTotalt = iTotalt/16;

        }

        cout << "La chaine final est: " << sHexa << endl;
}

void Caractere(int iNombre,string &sHexa)throw(exception)
{
        cout << "Nombre recue: " << iNombre << endl;
        string sTempo;

        if(iNombre < 0)
        {
                throw exception("**Nombre Invalide en Hexadecimal**");
        }
        switch(iNombre)
        {
        case 10:
                sHexa += "A";
                break;
        case 11:
                sHexa += "B";
                break;
        case 12:
                sHexa += "C";
                break;
        case 13:
                sHexa += "D";
                break;
        case 14:
                sHexa += "E";
                break;
        case 15:
                sHexa += "F";
                break;
        default:

                //Transforme un INT en STRING
                stringstream ss;
                ss << iNombre;
                ss >> sTempo;

                sHexa += sTempo;
        }
}



Pour ma part, je pense que c'est la boucle le problème. J'ai essayer de mettre >= 0 , mais sa me donne une boucle infinie :S

J'espère que vous pourrez m'aidez à résoudre ce problème.

je vous remercie d'avance :)
harry5
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2006 à 18:05:19

sa y est, je les trouver :.
Par contre, j'aimerais savoir comment transformetons un chiffre hexadécimal en entier ( exepl : que vaux 8f5 par exemple en entier ). Je rappelle que je travail sur base 16.
voila. Merci d'avance
Harry5
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2006 à 18:07:58

8f5 = 8*(16^2) + f*(16^1) + 5*(16^0)
Donc tu n'as plus qu'a faire ton algorithme.
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2006 à 18:11:42

Citation : -ed-

Citation : LeChat

Ma question est la suivante: Peut-on fixer le nombre de zéros après la virgule à seulement deux zéros ?

Donc au lieu d'afficher 45.000000 afficher ceci: 45.00 :)



http://man.developpez.com/

Mais ça ne se fait pas de s'incruster comme ça. C'est si compliqué que ça de créer un nouveau sujet ?



C'est juste pour pas créer un sujet juste pour un réponse ca gagne du temps et ca evite de "spammer" le forum.
Merci quand même. :colere2:
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2006 à 18:14:49

Ca évite de "spammer" le forum mais tu "spammes" quand même ce sujet. Donc à choisir....
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2006 à 18:57:41

Je vous remercie tout le monde. Je crois pouvoir crée ce programme :D

ps: c'est vrai que ce n'est pas polie LeChat. Tu aurais pue ouvrir un autre sujet tout de même. Je trouve ça vraiment impolie et méchant de ta part.
  • Partager sur Facebook
  • Partager sur Twitter
18 mai 2006 à 0:26:19

Citation : harry5

Tu aurais pue ouvrir un autre sujet tout de même. Je trouve ça vraiment impolie et méchant de ta part.


Impoli, OK. Méchant, euh, il faut peut être pas exagérer non plus...
  • Partager sur Facebook
  • Partager sur Twitter
Music only !