[C++] programme de conversion chiffres en mot

Résolu/Fermé
yam_j Messages postés 3 Date d'inscription dimanche 10 décembre 2006 Statut Membre Dernière intervention 13 avril 2007 - 10 déc. 2006 à 00:46
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 11 déc. 2006 à 21:37
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.
A voir également:

1 réponse

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
11 déc. 2006 à 21:37
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