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

C Discussion :

afficher un unsigned int


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Par défaut afficher un unsigned int
    Bonsoir,

    je viens vous voir ce soir parce que j'ai un petit problème.
    J'ai un projet à faire dans lequel je dois afficher des nombres.
    Pour les entiers pas de problème, je déclare une variable que j'appelle exp (comme exponentielle) qui est du type unsigned int (afin de pouvoir être supérieur à la valeur d'un int).

    Mon exp est initialisé à 10 et multiplié par 10 tant qu'il est inférieur à mon nombre (pour pouvoir avoir la puissance de 10 de mon nombre).
    Quand j'ai trouvé la puissance, je divise mon nombre par la puissance correspondante, et affiche le résultat, puis je soustrais à mon nombre, le nombre affiché * la puissance (pour diminuer d'une puissance).

    Le problème est qu'avec un unsigned int, je ne peux pas trouver de variable suffisament grande pour accepter une valeur plus grande qu'un unsigned int.
    Est ce que quelqu'un comprend mon problème est serait capable de m'aiguiller?

    merci d'avance

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par m0ul3sh0t Voir le message
    Bonsoir,

    je viens vous voir ce soir parce que j'ai un petit problème.
    J'ai un projet à faire dans lequel je dois afficher des nombres.
    Pour les entiers pas de problème, je déclare une variable que j'appelle exp (comme exponentielle) qui est du type unsigned int (afin de pouvoir être supérieur à la valeur d'un int).

    Mon exp est initialisé à 10 et multiplié par 10 tant qu'il est inférieur à mon nombre (pour pouvoir avoir la puissance de 10 de mon nombre).
    Quand j'ai trouvé la puissance, je divise mon nombre par la puissance correspondante, et affiche le résultat, puis je soustrais à mon nombre, le nombre affiché * la puissance (pour diminuer d'une puissance).

    Le problème est qu'avec un unsigned int, je ne peux pas trouver de variable suffisament grande pour accepter une valeur plus grande qu'un unsigned int.
    Est ce que quelqu'un comprend mon problème est serait capable de m'aiguiller?

    merci d'avance
    Tu n'as pas le droit d'appeler une fonction exp(), étant donné que cette fonction est déjà définie dans la bibliothèque standard. Ensuite, en ce qui concerne la taille du type que tu utilises pour représenter tes valeur, si unsigned int ne suffit pas (valeur max garantie: 65535), tu peux utiliser unisgned long ou unsigned long long (si ton compilateur implante C99).

    Pour le reste, poste ton code, ce sera certainement plus clair.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par m0ul3sh0t Voir le message
    je viens vous voir ce soir parce que j'ai un petit problème.
    J'ai un projet à faire dans lequel je dois afficher des nombres.
    Pour les entiers pas de problème, je déclare une variable que j'appelle exp (comme exponentielle) qui est du type unsigned int (afin de pouvoir être supérieur à la valeur d'un int).

    Mon exp est initialisé à 10 et multiplié par 10 tant qu'il est inférieur à mon nombre (pour pouvoir avoir la puissance de 10 de mon nombre).
    Quand j'ai trouvé la puissance, je divise mon nombre par la puissance correspondante, et affiche le résultat, puis je soustrais à mon nombre, le nombre affiché * la puissance (pour diminuer d'une puissance).

    Le problème est qu'avec un unsigned int, je ne peux pas trouver de variable suffisament grande pour accepter une valeur plus grande qu'un unsigned int.
    Est ce que quelqu'un comprend mon problème est serait capable de m'aiguiller?
    En effet, il est tout à fait possible que sur ta machine, un unsigned int et un unsigned long aient la même valeur maximale. Oui, il existe des limites aux valeurs. Ce n'est pas nouveau.

    Par contre, si tu as besoin de faire des calculs avec des entiers de plage infinie (en théorie), il faut utiliser une bibliothèque dédiée comme GMP :

    http://gmplib.org/

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Par défaut
    Voila ce que jai pour pouvoir afficher un int.
    En fait pour l'unsigned int le problème est réglé mais maintenant cest pour le long long que je bloque..

    Pour l'unsigned int, je ne fais pas appel à la fonction exp mais je déclare une variable que j'appelle exp (le nom n'est pas le plus optimisé mais pour la compréhension je trouve que c'est plus facile).
    Comme j'ai fait dans mon code, je multiplie ma variable exp par 10 jusqu'a ce qu'elle soit supérieur a mon nombre afin d'avoir la puissance, puis j'affiche le chiffre.

    Sachant que le long long est la plus grand valeur possible pour un int, comment est ce que je peux afficher un long long?
    j'ai beau chercher sur le net, je ne trouve rien qui pourrait m'aider...

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par m0ul3sh0t Voir le message
    Comme j'ai fait dans mon code, je multiplie ma variable exp par 10 jusqu'a ce qu'elle soit supérieur a mon nombre afin d'avoir la puissance, puis j'affiche le chiffre.
    Je pense que c'est l'algorithme qui n'est pas bon. On travaille plutôt par division successives par 10 et on fini par le modulo... Mais moi et le calcul, ça fait trois...

    Tu peux t'inspirer de ça que j'avais fait pour les cas critiques (peu de pile) :

    http://emmanuel-delahaye.developpez.com/clib.htm
    Module ITOA
    Fonction ultoa10 ()

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Par défaut
    Bonjour,
    fais attention avec une fonction comme ca: my_putchar(), tu es repéré direct ^^.
    Sinon d'après ce que je me rappelle ya 2 possibilité de le faire :
    - Par récusirvité
    - En passant par un tableau de char intermédiaire et fesant un modulo 10 suivit d'une division par 10 du nombre.
    Je suis pas très clair, j'espère que cela te suffira.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Par défaut
    Citation Envoyé par BaZoR Voir le message
    Bonjour,
    fais attention avec une fonction comme ca: my_putchar(), tu es repéré direct ^^.
    Sinon d'après ce que je me rappelle ya 2 possibilité de le faire :
    - Par récusirvité
    - En passant par un tableau de char intermédiaire et fesant un modulo 10 suivit d'une division par 10 du nombre.
    Je suis pas très clair, j'espère que cela te suffira.
    je ne demande pas de solution juste une indication
    avoir un code donné ne me servirait à rien du tout

    en fait j'ai réussit à modifier ma fonction pour qu'elle marche avec un long long

    il me reste juste à adapter pour ma premiere fonction ^^

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Par défaut
    Retiens quand même que l'utilisation de type toujours plus gros n'est pas une manière judicieuse de résoudre le problème.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Par défaut
    Citation Envoyé par BaZoR Voir le message
    Retiens quand même que l'utilisation de type toujours plus gros n'est pas une manière judicieuse de résoudre le problème.
    tu me conseillerais plutot de jongler entre des divisions et des modulos?

    au vu de ta précédente réflexion je suppose que tu es un tek ou un ancien tek

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Par défaut
    Jongler avec les divisions et les modulo en stockant au fur et a mesure dans une chain de charactère est une bonne solution si tu souhaites appliquer des traitements à ton nombre avant de l'afficher (modificateur de printf).

    Si tu souhaites juste l'afficher direcetement la récursion me semble la solution la plus adaptée: tant que ton nombre est supérieur a 9 tu fais une récursion et en remontant tu affiches ton nombre modulo 10 ...

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par BaZoR Voir le message
    fais attention avec une fonction comme ca: my_putchar()<...>
    Pas d'ostracisme. Les gens de la piscine ont aussi droit à une vie...

Discussions similaires

  1. unsigned int dans un vector
    Par Mindiell dans le forum SL & STL
    Réponses: 6
    Dernier message: 12/09/2007, 11h07
  2. afficher de unsigned short en hexa?
    Par lykim1982 dans le forum C
    Réponses: 2
    Dernier message: 23/05/2007, 17h51
  3. Réponses: 1
    Dernier message: 15/02/2007, 17h32
  4. int, unsigned int, et la fonction pow
    Par salseropom dans le forum C
    Réponses: 11
    Dernier message: 22/12/2006, 17h53
  5. [WMI] Variant de type Unsigned Int 64 ...
    Par phplive dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 09/05/2006, 20h15

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