[C++] programme de conversion chiffres en mot

Résolu
yam_j Messages postés 3 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
bonjour,
je voudrais si c'est possible avoir de l'aide à propos d'un programme en langage C++ pour la convertion d'un chiffre en mot en respectant l'orthographe français.
par exemple:
- 512 => Cinq cente douze.
merci d'avance.

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 942
     
    L'idée c'est de lire un entier, et de créer une fonction permettant d'extraire pour un nombre compris entre 0 et 999 :
    - les nombres inférieurs à 20
    - le chiffre des centaines
    - pour les nombres supérieur à 999, le des blocks de trois chiffres en partant de la droite. Exemple :
    54 894 213 => {54,894,213}
    car il suffit ensuite d'écrire le chiffre du bloc suivit de mille/millions/milliards etc... Voici un début de code
    #include <iostream>
    #include <cassert>
    #include <vector>
    
    template <Tstream>
    void ecrire_nb20(Tstream & out,const unsigned int & x){
      assert(x<10);
      switch(x){
        case 0: out << "zéro"; break;
        case 1: out << "un"; break;
    //...
        case 19: out << "dix-neuf"; break;
        default: break;// n'arrive jamais grâce au assert
      }
    }
    
    template <Tstream>
    void ecrire_dizaine_unite(Tstream & out,const unsigned int & x){
      assert(x<9);
      const unsigned int dizaine = floor(x/10);
      const unsigned int unite = x - dizaine;
      assert(unite<9);
      assert(dizaine<9);
      if(dizaine>1 && dizaine < 5){
        switch(dizaine){
          case 2: out << "vingt"; break;
          case 3: out << "trente"; break;
          //...
        }
        if(unite==1) out <<" et ";
        else out << ' ';
        ecrire_nb20(x);
      }else{
        switch(dizaine){
          case 6: 
          case 7: out << "soixante"; ecrire_nb20(x-60);break;
          case 8:
          case 9: out << "quatre-vingt"; ecrire_nb20(x-80); break;
          default: break;
        }
      }
    }
    
    // ecrire la fonction qui décompose en bloc de trois chiffres
    std::vector<unsigned short int>
    decompose_par_groupe3(const unsigned int & x){
      std::vector<unsigned short int>  
      //...
      return res;
    }
    
    template <Tstream>
    void ecrire_entier(Tstream & out,const unsigned int & x){
      std::vector<unsigned short int> blocs;
      ...
    }
    
    int main(){
      unsigned int x;
      std::cout << "saisir un entier : " << std::endl;
      std::cin >> x;
      return 0;
    }
    0