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 :

convertir des chiffres en lettres


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 27
    Points : 13
    Points
    13
    Par défaut convertir des chiffres en lettres
    salut;
    je veux réaliser une application pour mon petit projet je dois convertir des chiffres en lettres c'est a dire 1 on un, 2 on deux ect.....
    voila avec un button un edit et un label
    merci de m'aidez

  2. #2
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par bicha_27 Voir le message
    salut;
    je veux réaliser une application pour mon petit projet je dois convertir des chiffres en lettres c'est a dire 1 on un, 2 on deux ect.....
    voila avec un button un edit et un label
    merci de m'aidez
    Un petit café avec ?

    Sinon sers toi de Qt (par exemple) pour l'interface, et de ta tête pour la conversion.

    Edit : Oodini a été plus sympa que moi^^
    Nullius in verba

  3. #3
    Candidat au Club
    Inscrit en
    Août 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je ne connais que les solutions un peu sauvage mais je :

    1- décomposerais bien le chiffre en digit
    2- avec un switch / case j'ai une association digit <-> mot
    3- avec un compteur sur la décomposition en digit je sais que c'est une unité/dizaine/centaine/... et je met les "-" et/ou "cent, mil, ..." là où il faut.

    Rapido et à la louche mais ça devrait fonctionner.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par Falckounet Voir le message
    Je ne connais que les solutions un peu sauvage mais je :

    1- décomposerais bien le chiffre en digit
    2- avec un switch / case j'ai une association digit <-> mot
    3- avec un compteur sur la décomposition en digit je sais que c'est une unité/dizaine/centaine/... et je met les "-" et/ou "cent, mil, ..." là où il faut.

    Rapido et à la louche mais ça devrait fonctionner.
    Même pas la peine, il cherche à convertir des chiffres un simple tableau fait l'affaire, il n'y a que 10 possibilités.

    Par contre s'il souhaite convertir des nombres le mieux est de faire un tableau de chiffres.
    Ensuite il faudra parcourir ce tableau du chiffre de poids le plus fort au chiffre de poids le plus faible.
    On peut aussi décider de faire des regroupements de 3 chiffres avec un tableau de 1000 chaînes de caractères pour les convertions. Ainsi pour chaque regroupement on fera : char * nombre = conversion[regroupement]

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Otez-moi un doute, pour 15 et 95, on dit bien "dix-cinq" et "nonante-cinq"?
    Et bien sûr "trente-un".

    Trève de taquinerie, les nombres sont bien plus complexe à traduire que les chiffres, parce que notre chère langue française est pleine de subtilités.

    Par exemple, "quatre-vingts" mais "quatre-vingt un" (le pluriel n'est mis que si aucun chiffre non nul ne suit). De même "trois cents" mais "deux cent un".
    Et pour comble de bonheur, mille est invariable.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Une solution de facilité est de regrouper les chiffres par trois et d'avoir dans un tableau les nombres de 0 à 999.

    Sinon, si on part du poids fort vers le poids faible, ce n'est pas compliqué, c'est juste un petit peu long à regrouper toutes les règles de la langue française comme le fait remarquer leternel mais au final, ce ne sont que des bêtes if/else.

    On pourrait même utiliser des tableaux de pointeurs de fonctions si on veut traiter les chiffres un à un.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char nombre[21];
    std::string = "";
    for(int i = 20; i != -1; --i)
            std::string += traiterChiffre[i%3](nombre, i);
             // [i%3] : on détermine si on traite des unités, dizaines ou centaines.
             //nombre : le nombre traité
             //passage du compteur par référence si jamais la fonction de traitement traite plusieurs chiffres à la fois (ex : 15)
    Et par exemple une fonction :
    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
    traiterUnite(char * nombre, int & i)
    {
             std::string retour = unite[ nombre[i] ];
             retour += gpSuivant[i/3](nombre, i); //manque d'inspiration pour nommer ce tableau de fonctions
             return retour;
     
    }
     
    traiterDizaine(char * nombre, int & i)
    {
            if(nombre[i] == 1)
                   return tableauContenantLesNombresA2ChiffresAyant1PourChiffreDesDizaines[nombre[i-1] ];
           if(nombre[i] == 2 && ...)
            ...;
    }
    Donc voilà, ce n'est pas vraiment la mer à boire, le plus dur reste de trouver des noms de variables et de fonctions appropriées^^

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Hello

    Je me suis prêté à l'exercice par curiosité, ce fut un peu plus dur que prévu mais que je crois que j'y suis arrivé. Le code est dispo ici et ça supporte toutes les valeurs d'un int sur 4 octets.
    Find me on github

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Pas mal du tout mais :
    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
     
        int milliards = i / 1000000000;
        int reste_milliards = i % 1000000000;
        int millions = reste_milliards / 1000000;
        int reste_millions = reste_milliards % 1000000;
        int milliers = reste_millions / 1000;
        int reste_milliers = reste_millions % 1000;
     
        if(0 < milliards) {
          result_stream << traiter_inferieur_1000(milliards,false) << "milliard" << ((1 < milliards) ? m_suffixe_pluriel : m_vide) << ((millions || milliers || reste_milliers) ? m_espace : m_vide);
        }
     
        if(0 < millions) {
          result_stream << traiter_inferieur_1000(millions,false) << "million" << ((1 < millions) ? m_suffixe_pluriel : m_vide) << ((milliers || reste_milliers) ? m_espace : m_vide);
        }
     
        if(0 < milliers) {
          result_stream << (1 < milliers ? traiter_inferieur_1000(milliers,false) : m_vide) << "mille" << (reste_milliers ? m_espace : m_vide);
        }
     
        result_stream << traiter_inferieur_1000(reste_milliers);
    Je pense qu'il aurait été plus sage d'utiliser une boucle avec un tableau contenant "millier", "million", "milliard" ...
    Ainsi on peut facilement repousser les limites si on le souhaite pour aller jusqu'à plusieurs trilliard (même si on ne doit pas en avoir beaucoup d'utilité).

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Je pense qu'il aurait été plus sage d'utiliser une boucle avec un tableau contenant "millier", "million", "milliard" ...
    Ainsi on peut facilement repousser les limites si on le souhaite pour aller jusqu'à plusieurs trilliard (même si on ne doit pas en avoir beaucoup d'utilité).
    J'y ai pensé après coup mais pas le temps de ré-écrire, j'y avais passé assez de temps ^^

    Et attention : mille a un traitement particulier car il n'est pas accordé au pluriel et on dit "mille" et pas "un mille" (mais on dit "un million"). Le tableau en marche qu'à partir de millions et un int en 4 octets n'excédant pas 2 millards et quelque... flemme.
    Find me on github

  10. #10
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Tu t'es déjà prêté au jeux, tu as même fournit un exemple de code qui sera sûrement très utile au P.O., c'est déjà très bien.

    Je faisais surtout ces remarques pour montrer quelques petites améliorations possibles que le P.O. pourrait effectuer plutôt que de faire un bête copié-collé du code.

Discussions similaires

  1. Convertir des chiffres en lettres
    Par azde7015 dans le forum VBA Access
    Réponses: 16
    Dernier message: 19/05/2019, 15h16
  2. convertir des chiffres en lettres
    Par funmatica dans le forum Langage
    Réponses: 3
    Dernier message: 04/11/2010, 18h44
  3. Convertir des chiffres en lettres
    Par bruce207 dans le forum Contribuez
    Réponses: 1
    Dernier message: 02/09/2010, 14h24
  4. Convertir des chiffres en lettres
    Par stratocasters dans le forum BIRT
    Réponses: 20
    Dernier message: 21/10/2008, 12h09
  5. convertir des chiffres en lettres
    Par stratocasters dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2008, 13h47

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