[c unix] nombres en lettres

Fermé
fredo10 Messages postés 31 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 4 février 2006 - 3 déc. 2005 à 20:38
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 5 déc. 2005 à 00:12
salut tout le monde,
j'aimerais avoir un peu d'aide pour continuer mon code.
je fais un programme qui traduit les nombres passes en parametre en lettres sans fautes d'orthographe et je suis bloque apres vingt.
j'ai d'abord fait deux fonctions qui gerent les nombres de 0 a 19 et je veux maintenant gerer les nombres entre 20 et 99,avant de passer a 1000 et ainsi de suite.alors, j'ai besoin d'un coup de main sur la maniere de proceder pour y arriver.merci

4 réponses

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
4 déc. 2005 à 01:04
En fait il faut découper le nombre par tranches de trois décimales en partant du "." : ainsi, si l'on sait traité les nombres de à à 999 il est facile de gérer les milliers, les millions etc...

Reste à gérer les nombre de à à 999. Si l'on sait compter de 0 à 99, il est très facile de compter dès lors jusqu'à 999 en rajoutant le bon brefixe pour le chiffre des centaines.

Le problème se réduit donc à traiter les nombres de 0 à 99. Pour les chiffres de 0 à 20, en effet il faut être exhaustif. Pour les suivants, il suffit de regarder le chiffre des dizaines (>2) :
3x -> trente
4x -> quarante
...

Ensuite il suffit de regarder le chiffre des unités pour obtenir le suffixe de ton nombre :
x1 -> -et-un
x2 -> -deux
x3 -> -trois
...
Voire :
x1 -> -et-un
xy -> -y (en faisant appel à la fonction qui convertit à 0<=y<=9 en entier)

Ainsi :

char *to_string_0_9(unsigned int i){
   switch(i){
    case 0 : return "zero";
    case 1 : return "un";
    //...
    case 9 : return "neuf";
    default : break;
  }
  return "";
}

char *to_string_10_19(unsigned int){
   switch(i){
     case 10 : return "dix";
     case 11 : return "onze";
     //...
   }
   return ""
}

char *to string_20_99(unsigned int i){
   char buf[255];
   unsigned int unite,dizaine=floor(i/10);
   if (dizaine > 9 || dizaine <2 ) return "";
   int unite=i-dizaine*10;
   switch(dizaine){
      case 3 : buf="trente"
       //...
   }
   switch(unite){
     case 1 : strcat(buf,"-et-un");
     case 2 : strcat(buf,"-deux");
    //...
  }
  return &buf[0]; //enfin je crois
}

char *to_string_0_99(unsigned int){
  if (0<=i && i<9) return to_string_0_9(i);
  else if (10<=i && i<19) return to_string_10_19(i);
  else if (20<=i && i<99) return to_string_20_99(i);
  else return "";
}

La fin est facile ;-)

Bonne chance
1
a mon avis tout ses fonctions c'est pour compliquer les choses
parceque a chaque nombre est associer une phrase unique
1: un
2:deux
/
/etc

je pense que c'est mieux de faire entrer tout les phrases associer aux nombres "un, deux trois , ..."

idées de ++++
0
a mon avis tout ses fonctions c'est pour compliquer les choses
parceque a chaque nombre est associer une phrase unique
1: un
2:deux
/
/etc

je pense que c'est mieux de faire entrer tout les phrases associer aux nombres "un, deux trois , ..."

idées de ++++
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
5 déc. 2005 à 00:12
ouais et onze ?
et quatre vingt quatorze ?
0