Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1627 connectés 

  FORUM HardWare.fr
  Programmation

  [C (ou Java,ou autre chose...)] nombres: arabes <-> romain <-> litéral

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C (ou Java,ou autre chose...)] nombres: arabes <-> romain <-> litéral

n°36370
cycojesus
Mèo Lười
Posté le 01-06-2001 à 10:57:24  profilanswer
 

Bonjour,
 
J'arrive pas à trouver un source C (voire Java, mais beuh...), même pas le plus petit bout d'algo pour traduire un nombre arabe (1 456, l'espace est important :-( ) en litéral (mille quatre cents cinquante six), et inversement...
 
Pourtant je me disais qu ce genre de truc devait être courant... mais non !
 
Quelqu'un aurait-il ça ?
 
Merci d'avance


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
mood
Publicité
Posté le 01-06-2001 à 10:57:24  profilanswer
 

n°36371
cycojesus
Mèo Lười
Posté le 01-06-2001 à 10:58:52  profilanswer
 

Y'a même un petit cadeau pour celui qui trouve ;-)


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
n°36378
cthulhu
Merci, merci...
Posté le 01-06-2001 à 11:04:52  profilanswer
 

moi je vois pas, en plus en french, ca va pas etre evident...

n°36386
cycojesus
Mèo Lười
Posté le 01-06-2001 à 11:12:58  profilanswer
 

Cthulhu a écrit a écrit :

moi je vois pas, en plus en french, ca va pas etre evident...




 
C'est clair !
 
arabe <-> romain j'ai trouvé tout de suite, mais arabe <-> français (sans aucun sous-entendu douteux !) nada !


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
n°36391
wouatouwou​atou
Posté le 01-06-2001 à 11:18:49  profilanswer
 

a mon humble avis... tu devrais te pencher sur de la reconnaissance syntaxique... du genre tu definies ton vocabulaire pi tu definies tes regles de langage et hop... le tour est joué...  
moi je commencerais par faire un 'dictionnaire' des nombres...
du genre ... je me base sur les chiffres arabes et de là, je fais de la correspondance (indexage koi)...
exemple : pour le litterale : 0 -> zero, 1 -> un, 2 -> deux, etc.
pour le romain : 0 -> jsais pas :D , 1 -> I , 2 -> II , etc.
 
Comme ca ta plus ka fournir le dictionnaire (vocabulaire) à ton module de conversion et il fait tout !!!  
 
plus precisement, via des tables de hachage : clé -> "de koi reperer ton chiffre"
valeur -> le chiffre.
Bien sur...le plus dur sera de trouver les regle de syntaxes...
bon courage... :D

 

[edit]--Message édité par wouatouwouatou--[/edit]


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°36407
El_gringo
Posté le 01-06-2001 à 11:31:30  profilanswer
 

wouatouwouatou a écrit a écrit :

pour le romain : 0 -> jsais pas :D , 1 -> I , 2 -> II , etc.
 




 
Normal, les romains n'connaissaient pas encore le Zéro, donc y en a pas en chiffre romain...y sont con ces romains ! :D

n°36408
El_gringo
Posté le 01-06-2001 à 11:32:07  profilanswer
 

mais c carrément interressant ton truc, j'vais y réfléchir...

n°36412
cthulhu
Merci, merci...
Posté le 01-06-2001 à 11:34:11  profilanswer
 

quand ta trouve tu fais passer la source...hehe :D

n°36415
JPA
Posté le 01-06-2001 à 11:35:10  profilanswer
 

sur : http://www.multimania.com/jmy51/contr.htm
tu l'auras en Pascal (de entier vers texte)
Actuellement le serveur semble un peu chargé...

n°36416
morcandel
Posté le 01-06-2001 à 11:36:13  profilanswer
 

il y a fort-fort longtemps, j'avais fait un truc du genre... il me semble qu'il y avait des erreurs de français (ex. cents ou cent quand il y a plusieurs centaines suivies ? "trois cents douze" ou "trois cent douze" ?)
 
void int2asc(int a)
{
  int b, r;
 
  char *chiffres[] = {"zéro", "un", "deux", "trois", "quatre", "cinq",  
        "six", "sept", "huit", "neuf", "dix", "onze",  
        "douze", "treize", "quatorze", "quinze", "seize"};
 
  if ( a>=1E9 )
    {
      b = a/1E9;
      r = a % 1000000000;
      int2asc(b);
      if ( b>1 )
 printf(" milliards" );
      else
 printf(" milliard" );
      if ( r>0 )
 {
   printf(" " );
   int2asc(r);
 }
      return;
    }
 
  if ( a>=1E6 )
    {
      b = a/1E6;
      r = a%1000000;
      int2asc(b);
      if ( b>1 )
 printf(" millions" );
      else
 printf(" million" );
      if ( r>0 )
 {
   printf(" " );
   int2asc(r);
 }
      return;
    }
 
  if ( a>=1E3 )
    {
      b = a/1E3;
      r = a%1000;
      if ( b>1 )
 {
   int2asc(b);
   if ( r==0 )
     printf(" milles" );
   else
     printf(" mille" );
 }
      else
 printf("mille" );
      if ( r>0 )
 {
   printf(" " );
   int2asc(r);
 }
      return;
    }
   
  if ( a>=100 )
    {
      b = a/100;
      r = a%100;
      if ( b > 1 )
 {
   int2asc(b);
   printf(" cents" );
 }
      else
 printf("cent" );
      if ( r>0 )
 {
   printf(" " );
   int2asc(r);
 }
      return;
    }
   
  if ( a>=80 )
    {
      r=a-80;
      printf("quatre-vingt" );
      if ( r>0 )
 {
   printf(" " );
   int2asc(r);
 }
      return;
    }
 
  if ( a>=60 )
    {
      r=a-60;
      printf("soixante" );
      if ( r>0 )
 {
   if ( r==1 )
     printf(" et" );
   printf(" " );
   int2asc(r);
 }
      return;
    }
 
  if ( a<=16 )
    {
      printf("%s", chiffres[a]);
      return;
    }
 
  b = a/10;
  r = a%10;
 
  switch ( b )
    {
    case 5:
      printf("cinquante" );
      break;
    case 4:
      printf("quarante" );
      break;
    case 3:
      printf("trente" );
      break;
    case 2:
      printf("vingt" );
      break;
    case 1:
      printf("dix" );
      break;
    }
  if ( r>0 )
    {
      if ( r==1 )
 printf(" et" );
      printf(" " );
      int2asc(r);
    }
}

mood
Publicité
Posté le 01-06-2001 à 11:36:13  profilanswer
 

n°36419
El_gringo
Posté le 01-06-2001 à 11:38:24  profilanswer
 

tu veux que ça puisse traduire les chiffres jusqu'a conbient !?
le millier, le million, le milliard !

n°36431
El_gringo
Posté le 01-06-2001 à 11:49:37  profilanswer
 

ça va être un peu chaud, je suis au boulot, g pas l'temps, mais j'y repenserai plus tard, juste qqs conseils :
selon moi tu devrai stocker ça -> les chiffres littéraux de 1 à 19 (pour soixante douze, soixante traize,...) et puis 20, 30, 40, 50, 60, 80, 100, 1000, 1000000,... selon jusqu'a combient tu veux aller !
et après tu crée des règle pour conbiner tt ça !
vu que le pb est pas franchement simple, resous le en algorithmique avant de passer au C...
 
bonne chance... :D  :D

n°36454
minusplus
Posté le 01-06-2001 à 12:06:57  profilanswer
 

j'ai un script Bash de Noah Friedman qui traite les nombre entiers jusqu'à 67 digits. mais bon, c'est pas du C (si tu te sent de le traduire...)

n°36473
wouatouwou​atou
Posté le 01-06-2001 à 12:24:37  profilanswer
 

El_gringo a écrit a écrit :

 
selon moi tu devrai stocker ça -> les chiffres littéraux de 1 à 19 (pour soixante douze, soixante traize,...) et puis 20, 30, 40, 50, 60, 80, 100, 1000, 1000000,... selon jusqu'a combient tu veux aller !




Moi jaurais aussi mis le zero... mais si les romains ne lavait pas.. ben... fo faire ce cas exceptionnel.
remarque: je me demande koment ils faisaient sans le zero !!! c a la base de tout !!!!


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°36491
cycojesus
Mèo Lười
Posté le 01-06-2001 à 13:02:31  profilanswer
 

Milles mercis !!
 
je vais étudier tout ça cet aprèm.
 
Quelques précisions :
- on intègre le zéro avec les chiffres romains (tant pis pour l'histoire des maths...)
- on gère jusqu'au million
 
 
 
P.S.: le cadeau sera en téléchargement sur mon site soit ce soir soit au plus tard mardi (et la semaine prochaine sur SourceForge, j'espère...). Il n'a rien à voir avec ce projet, mais c'est sympa quand même (enfin je trouve...)
 
:jap:


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
n°36493
cycojesus
Mèo Lười
Posté le 01-06-2001 à 13:05:23  profilanswer
 

Un copain me file à l'instant deux sites (je dois être faché avec Google et Altavista moi !...) :
 
http://www.multimania.com/clo7/grammaire/nombre.htm
http://moire4.u-strasbg.fr/oct98/w_cont.htm


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
n°36495
wouatouwou​atou
Posté le 01-06-2001 à 13:16:20  profilanswer
 

wow... bon courage... je savais pa ke la grammaire etait aussi compliqué avec les nombres ... entre mille et mil et les accors et tou et tou... :crazy: :D


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°36499
HelloWorld
Salut tout le monde!
Posté le 01-06-2001 à 13:43:33  profilanswer
 

qq'un peut rappeller aussi les regles orthographiques ... une petite révision (pour moi en tous cas :D)
dix mils ...
dix mil quarante ...  
c'est bien comme ca le 's' ? :D  
au fait : tu veux dix mil quarante ou dix mil zéro quarante ?
(=> ne crois pas qu'en fonction de ta réponse je vais te sortir un source tout pret :lol:)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°36511
cycojesus
Mèo Lười
Posté le 01-06-2001 à 14:30:59  profilanswer
 

Voila les cadeaux :
http://cycojesus.ctw.net/files/MonPCEnOpenGL.zip
et
http://cycojesus.ctw.net/files/Ope [...] v0.2.7.zip
 
Pour éxecuter, il faut les dll de GLUT ( http://reality.sgi.com/mjk_asd/glu [...] ml#windows )
 
Pour compiler (Visual C++ 6.0), il faut GLUT (idem) et GLUI ( http://www.cs.unc.edu/%7Erademach/glui/ ) (pour OpenGLavity seulement)
 
wouatouwouatou > merci, j'en aurais besoin :-)
 
HelloWorld > http://www.multimania.com/clo7/grammaire/nombre.htm , ça à l'air assez complexe ;-)

 

[edit]--Message édité par cycojesus--[/edit]


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
n°36512
morcandel
Posté le 01-06-2001 à 14:31:31  profilanswer
 

attention, "mil", c'est uniquement pour les années... j'ai jeté un coup d'oeil aux règles, il ne faut pas grand chose pour que la fonction donnée ci-dessus les respectent...
 
4383 quatre mille trois cent quatre-vingt-trois
886 huit cent quatre-vingt-six
2777 deux mille sept cent soixante-dix-sept
1915 mille neuf cent quinze
2793 deux mille sept cent quatre-vingt-treize
3335 trois mille trois cent trente-cinq
386 trois cent quatre-vingt-six
492 quatre cent quatre-vingt-douze
1649 mille six cent quarante-neuf
1421 mille quatre cent vingt-et-un
 
fonction à appeler avec un 1 en deuxième paramètre (pour les tirets pour les nombres < 100 et les appels récursifs)...  :sweat:  
 
void int2asc(int a, int t)
{
  int b, r;
 
  char *chiffres[] = {"zéro", "un", "deux", "trois", "quatre", "cinq",  
        "six", "sept", "huit", "neuf", "dix", "onze",  
        "douze", "treize", "quatorze", "quinze", "seize"};
 
  if ( a>=1E9 )
    {
      b = a/1E9;
      r = a % 1000000000;
      int2asc(b,0);
      if ( b>1 && r==0 )
 printf(" milliards" );
      else
 printf(" milliard" );
      if ( r>0 )
 {
   printf(" " );
   int2asc(r,1);
 }
      return;
    }
 
  if ( a>=1E6 )
    {
      b = a/1E6;
      r = a%1000000;
      int2asc(b,0);
      if ( b>1 && r==0 )
 printf(" millions" );
      else
 printf(" million" );
      if ( r>0 )
 {
   printf(" " );
   int2asc(r,1);
 }
      return;
    }
 
  if ( a>=1E3 )
    {
      b = a/1E3;
      r = a%1000;
      if ( b>1 )
 {
   int2asc(b,0);
   if ( r==0 )
     printf(" milles" );
   else
     printf(" mille" );
 }
      else
 printf("mille" );
      if ( r>0 )
 {
   printf(" " );
   int2asc(r,1);
 }
      return;
    }
   
  if ( a>=100 )
    {
      b = a/100;
      r = a%100;
      if ( b>1 )
 {
   int2asc(b,0);
   if ( r==0 )
     printf(" cents" );
   else
     printf(" cent" );
 }
      else
 printf("cent" );
      if ( r>0 )
 {
   printf(" " );
   int2asc(r,1);
 }
      return;
    }
   
  if ( a>=80 )
    {
      r=a-80;
      printf("quatre-vingt" );
      if ( r>0 )
 {
   if ( t )
     printf("-" );
   else
     printf(" " );
   int2asc(r,1);
 }
      return;
    }
 
  if ( a>=60 )
    {
      r=a-60;
      printf("soixante" );
      if ( r>0 )
 {
   if ( r==1 )
     if ( t )
       printf("-et" );
     else
       printf(" et" );
   if ( t )
     printf("-" );
   else
     printf(" " );
   int2asc(r,1);
 }
      return;
    }
 
  if ( a<=16 )
    {
      printf("%s", chiffres[a]);
      return;
    }
 
  b = a/10;
  r = a%10;
 
  switch ( b )
    {
    case 5:
      printf("cinquante" );
      break;
    case 4:
      printf("quarante" );
      break;
    case 3:
      printf("trente" );
      break;
    case 2:
      printf("vingt" );
      break;
    case 1:
      printf("dix" );
      break;
    }
  if ( r>0 )
    {
      if ( r==1 )
 if ( t )
 printf("-et" );
      if ( t )
 printf("-" );
      else
 printf(" " );
      int2asc(r,1);
    }
}
 
int main()
{
  int a ,i;
 
  for ( i = 0 ; i<10 ; i++ )
    {
      a = rand() % 5000;
      printf("%d ", a);
      int2asc(a,1);
      printf("\n" );
    }
 
  return 0;
}

n°36516
morcandel
Posté le 01-06-2001 à 14:40:50  profilanswer
 

ok, je ne suis qu'une loutre... il y a un léger petit bug dans la fonction précédente pour les nombres supérieurs à 1E12 :D il faut remplacer (dans la fonction) les int2asc(r,1) par int2asc(r,t)...

n°36517
grosmethos
Posté le 01-06-2001 à 14:44:48  profilanswer
 

les romains ils avaient rien compris aux chiffres :
si tu soustrais I à IV tu obtient V donc n'importe quoi!!!
 
Sont trop forts ces arabes....

n°36527
El_gringo
Posté le 01-06-2001 à 15:06:04  profilanswer
 

wouatouwouatou a écrit a écrit :

 
Moi jaurais aussi mis le zero... mais si les romains ne lavait pas.. ben... fo faire ce cas exceptionnel.
remarque: je me demande koment ils faisaient sans le zero !!! c a la base de tout !!!!




 
J'imagine qu'il faisaient pas trop de Maths, tout simplement. Par ce que c'était qd même pas pratique, imagines la galère pour les équation par exemple: Xx + ln(IV)y = IX
...on est d'accord, c l'bordel !

n°36530
cycojesus
Mèo Lười
Posté le 01-06-2001 à 15:10:53  profilanswer
 

El_gringo a écrit a écrit :

 
 
J'imagine qu'il faisaient pas trop de Maths, tout simplement. Par ce que c'était qd même pas pratique, imagines la galère pour les équation par exemple: Xx + ln(IV)y = IX
...on est d'accord, c l'bordel !




 
Ce qui m'amène une question : Et les Grecs ?


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
n°36546
El_gringo
Posté le 01-06-2001 à 15:58:55  profilanswer
 

ouais, c une question excente, j'me posait la même !
en fait, les grecs, Aristote et tout l'toutim ils étaient carrément meilleurs que les romain, les romains, leur truc, c'était plutot foutre sur la gueule des pays qui les entourent, conquérir tout ce qu'ils peuvent (un peu comme les Américains aujourd'hui à la méthode moderne...par le pognon au lieu du pilum !).
Pour en revenir à la question de base...ils utilisaient quoi comme chiffres les grecs, moi j'dirait les chiffre arabes, mais c bizare: si ces chiffre existaient déja au temps des romains, pourquoi ils seraient allé en inventer des moins pratiques...ils étaint fou ces romain, ça on l'sais bien, mais qd même !

n°36930
cycojesus
Mèo Lười
Posté le 05-06-2001 à 09:37:14  profilanswer
 

Big niouze :
Ce soir je fini la fonction nombre litéral -> nombre arabe (enfin j'espère...)
 
Je la posterais demain.


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
n°40193
cycojesus
Mèo Lười
Posté le 15-06-2001 à 17:31:14  profilanswer
 

Enfin ce projet est fini, vous pouvez le dl ici : http://www.citeweb.net/cycojesus/files/nombres.zip
 
Merci à tous et à bientôt :jap:

 

[edit]--Message édité par cycojesus--[/edit]


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C (ou Java,ou autre chose...)] nombres: arabes <-> romain <-> litéral

 

Sujets relatifs
[java] installer jaxp[java] - le meilleur moyen de gerer les evenement
[JAVA] String et outputStreamJAVA comment faire dire Bonjours ''le_nom_du_gas'' dans un mail
[java] je trouve pas un objet dans AWTLancer une requete sur Google depuis un programme Java
[JAVA] lancer un .bat ds un prgautre chose que du dev pour une fois!! sur jewel case creator
[JAVA] Exercise pour Débutant!!!!![JAVA] utilisation de la doc API
Plus de sujets relatifs à : [C (ou Java,ou autre chose...)] nombres: arabes <-> romain <-> litéral


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR