Fonction en toutes letttres

w120 Messages postés 5 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 1 janvier 2010 - 31 déc. 2009 à 13:57
w120 Messages postés 5 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 1 janvier 2010 - 31 déc. 2009 à 14:01
salut les gar.
j'ai essayé d'ecrire une fonction qui permet de convertir en toutes lettres un montant donnés sous forme d'un double mais j'ai pensé vue la longueur de mon script que c'est vraiment bète et nécessite d'optimisation mais bon puisque chui débutaant je me tolère.
le probleme c'est que j'arrive pas a avoir une fonction qui fonctionne correctement car par exemple si je saisis le montant 120
la fonction me retourne cent et quatre vingt!!!
j'ai revisé mon code sans trouver le fuit j'espere que vpous m'aider d'une part a rectifier la mienne et d'autres part de me donner si c'est possibles des idées pour optimiser et merci d'avance.

voici le code:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MONTANT_max 999999999.999 //declaration du montant maximal
/*fonction d'initialisation des chaines*/
void init_chaine(char*t , int n,char c)//t est la cahine a initialisé de taille n
// c est le caractere qu'avec la chaine sera initialisé
{
int i;
i=0;
while (i<n)
{
t[i]='c';
i++;
}
}
void makezero(char*t , int n)
{
int i;
for(i=0;i<=n;i++)
{
if (t[i]==' ')
t[i]='0';
}
}
/*foction convert qui permet de convertir un entier en son equivalent en lettre*/
void convert(char x , char*convx)
{
switch (x)
{
case '0':
sprintf(convx,"zero");break;
case '1':
sprintf(convx,"un");break;
case '2':
sprintf(convx,"deux");break;
case '3':
sprintf(convx,"trois");break;
case '4':
sprintf(convx,"quatre");break;
case '5':
sprintf(convx,"cinq");break;
case '6':
sprintf(convx,"six");break;
case '7':
sprintf(convx,"sept");break;
case '8':
sprintf(convx,"huit");break;
case '9':
sprintf(convx,"neuf");break;

}
}

/*fonction qui permet de convertir en lettre un bloc de chiffres*/
void convert_bloc(char* bloc, char*R)
{
char Sa[10];char Sb[10];char Sc[10];
char a=bloc[0],b=bloc[1],c=bloc[2];
convert(a,Sa);
convert(b,Sb);
convert(c,Sc);
if(a!='0')
{


switch (b)
{

case'0':
{
switch(c)
{
case'0':
sprintf(R,"%s cent");
default:
sprintf(R,"%s cent et %s",Sa,Sc);
}
}
case'1':
{
switch(c)
{
case'0':
sprintf(R,"%s cent dix",Sa); break;
case'1':
sprintf(R,"%s cent onze",Sa);break;
case'2':
sprintf(R,"%s cent douze",Sa);break;
case'3':
sprintf(R,"%s cent treize",Sa);break;
case'4':
sprintf(R,"%s cent quatorze",Sa);break;
case'5':
sprintf(R,"%s cent quinze",Sa);break;
case'6':
sprintf(R,"%s cent seize",Sa);break;
case'7':
sprintf(R,"%s cent dixsept",Sa);break;
case'8':
sprintf(R,"%s cent dixhuit",Sa);break;
case'9':
sprintf(R,"%s cent dixneuf",Sa);break;
}
}
case'2':
{
switch(c)
{
case'0':
sprintf(R,"%s cent vingt",Sa);break;
case'1':
sprintf(R,"%s cent vingt et un",Sa);break;
default:
sprintf(R,"%s cent vingt %s",Sa,Sc);break;
}
}
case'3':
{
switch(c)
{
case'0':
sprintf(R,"%s cent trente",Sa);break;
case'1':
sprintf(R,"%s cent trente et un",Sa);break;
default:
sprintf(R,"%s cent trente %s",Sa,Sc);break;
}
}

case'4':
{
switch(c)
{
case'0':
sprintf(R,"%s cent quarante",Sa);break;
case'1':
sprintf(R,"%s cent quarante et un",Sa);break;
default:
sprintf(R,"%s cent quarante %s",Sa,Sc);break;
}
}

case'5':
{
switch(c)
{
case'0':
sprintf(R,"%s cent cinquante",Sa);break;
case'1':
sprintf(R,"%s cent cinquante et un",Sa);break;
default:
sprintf(R,"%s cent cinquante %s",Sa,Sc);break;
}
}
case'6':
{
switch(c)
{
case'0':
sprintf(R,"%s cent soixante",Sa);break;
case'1':
sprintf(R,"%s cent soixante et un",Sa);break;
default:
sprintf(R,"%s cent soixante %s",Sa,Sc);break;
}
}
case'7':
{
switch(c)
{
case'0':
sprintf(R,"%s cent soixnte dix",Sa);break;
case'1':
sprintf(R,"%s cent soixante et onze",Sa);break;
case'2':
sprintf(R,"%s cent soixante douze",Sa);break;
case'3':
sprintf(R,"%s cent soixante treize",Sa);break;
case'4':
sprintf(R,"%s cent soixante quatorze",Sa);break;
case'5':
sprintf(R,"%s cent soixante quinze",Sa);break;
case'6':
sprintf(R,"%s cent soixante seize",Sa);break;
case'7':
sprintf(R,"%s cent soixante dixsept",Sa);break;
case'8':
sprintf(R,"%s cent soixante dixhuit",Sa);break;
case'9':
sprintf(R,"%s cent soixante dixneuf",Sa);break;
}
}

case'8':
{
switch(c)
{
case'0':
sprintf(R,"%s cent quatre vingt",Sa);break;
case'1':
sprintf(R,"%s cent quatre vingt et un",Sa);break;
default:
sprintf(R,"%s cent quatre vingt %s",Sa,Sc);break;
}
}

case'9':
{
switch(c)
{
case'0':
sprintf(R,"%s cent quatre vingt dix",Sa);break;
case'1':
sprintf(R,"%s cent qautre vingt et onze",Sa);break;
case'2':
sprintf(R,"%s cent quatre vingt douze",Sa);break;
case'3':
sprintf(R,"%s cent quatre vingt treize",Sa);break;
case'4':
sprintf(R,"%s cent quatre vingt quatorze",Sa);break;
case'5':
sprintf(R,"%s cent quatre vingt quinze",Sa);break;
case'6':
sprintf(R,"%s cent quatre vingt seize",Sa);break;
case'7':
sprintf(R,"%s cent quatre vingt dixsept",Sa);break;
case'8':
sprintf(R,"%s cent quatre vingt dixhuit",Sa);break;
case'9':
sprintf(R,"%s cent quatre vingt dixneuf",Sa);break;
}
}
}
}

else
if(a=='0')
{

switch(b)
{
case'0':
sprintf(R,"%s",Sc);break;
case'1':
{
switch(c)
{
case'0':
sprintf(R,"dix"); break;
case'1':
sprintf(R,"onze");break;
case'2':
sprintf(R,"douze");break;
case'3':
sprintf(R,"treize");break;
case'4':
sprintf(R,"quatorze");break;
case'5':
sprintf(R,"quinze");break;
case'6':
sprintf(R,"seize");break;
case'7':
sprintf(R,"dixsept");break;
case'8':
sprintf(R,"dixhuit");break;
case'9':
sprintf(R,"dixneuf");break;
}
}
case'2':
{
switch(c)
{
case'0':
sprintf(R,"vingt");break;
case'1':
sprintf(R,"vingt et un");break;
default:
sprintf(R,"vingt %s",Sc);break;
}
}
case'3':
{
switch(c)
{
case'0':
sprintf(R,"trente");break;
case'1':
sprintf(R,"trente et un");break;
default:
sprintf(R,"trente %s",Sc);break;
}
}

case'4':
{
switch(c)
{
case'0':
sprintf(R,"quarante");break;
case'1':
sprintf(R,"quarante et un");break;
default:
sprintf(R,"quarante %s",Sc);break;
}
}
case'5':
{
switch(c)
{
case'0':
sprintf(R,"cinquante");break;
case'1':
sprintf(R,"cinquante et un");break;
default:
sprintf(R,"cinquante %s",Sc);break;
}
}

case'6':
{
switch(c)
{
case'0':
sprintf(R,"soixante");break;
case'1':
sprintf(R,"soixante et un");break;
default:
sprintf(R,"soixante %s",Sc);break;
}
}
case'7':
{
switch(c)
{
case'0':
sprintf(R,"soixante dix");break;
case'1':
sprintf(R,"soixante et onze");break;
case'2':
sprintf(R,"soixante douze");break;
case'3':
sprintf(R,"soixante treize");break;
case'4':
sprintf(R,"soixante quatorze");break;
case'5':
sprintf(R,"soixante quinze");break;
case'6':
sprintf(R,"soixante seize");break;
case'7':
sprintf(R,"soixante dixsept");break;
case'8':
sprintf(R,"soixante dixhuit");break;
case'9':
sprintf(R,"soixante dixneuf");break;
}
}
case'8':
{
switch(c)
{
case'0':
sprintf(R,"quatre vingt");break;
case'1':
sprintf(R,"quatre vingt et un");break;
default:
sprintf(R,"quatre vingt %s",Sc);break;
}
}

case'9':
{
switch(c)
{
case'0':
sprintf(R,"quatre vingt dix");break;
case'1':
sprintf(R,"qautre vingt et onze");break;
case'2':
sprintf(R,"quatre vingt douze",Sa);break;
case'3':
sprintf(R,"quatre vingt treize",Sa);break;
case'4':
sprintf(R,"quatre vingt quatorze",Sa);break;
case'5':
sprintf(R,"quatre vingt quinze",Sa);break;
case'6':
sprintf(R,"quatre vingt seize",Sa);break;
case'7':
sprintf(R,"quatre vingt dixsept",Sa);break;
case'8':
sprintf(R,"quatre vingt dixhuit",Sa);break;
case'9':
sprintf(R,"quatre vingt dixneuf",Sa);break;
}
}
}

}
}
/*********************************************************************/
/*programme principale*/
int main()
{
char sarf[3], unit[3], mille[3], million[3];
char Rsarf[40],Runit[40],Rmille[40],Rmillion[40], arg1[10],arg2[10];
char c;
double m;
char s[12];
printf("donner arg1");
gets(arg1);
printf("arg2");
gets(arg2);

init_chaine(s,12,' ');
init_chaine(sarf,3,' ');
init_chaine(unit,3,' ');
init_chaine(mille,3,' ');
init_chaine(million,3,' ');
init_chaine(Rsarf,40,' ');
init_chaine(Runit,40,' ');
init_chaine(Rmille,40,' ');
init_chaine(Rmillion,40,' ');
do
{
printf("entrer le montant en chiffre: ");
scanf("%Lf", &m);
}
while(m>= MONTANT_max);
sprintf(s,"%13.3Lf",m);
makezero(s,12);
puts(s);
memcpy(sarf,s+10,3);
memcpy(unit,(s+6),3);
memcpy(mille,(s+3),3);
memcpy(million,(s),3);
convert_bloc(sarf,Rsarf);
convert_bloc(unit,Runit);
convert_bloc(mille,Rmille);
convert_bloc(million,Rmillion);
printf("%s\n",Rsarf);
printf("%s\n",Runit);
printf("%s\n",Rmille);
printf("%s\n",Rmillion);
printf("le montant en chiffre est:%s\n ",s);
printf("%s million %s mille %s %s et %s %s",Rmillion,Rmille,Runit,arg1,Rsarf,arg2);


getch();

return 1;
}

1 réponse

w120 Messages postés 5 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 1 janvier 2010
31 déc. 2009 à 14:01
les arguments arg1 et arg2 sont respectivement monnaie unitaire et monnaie fractionnaire.
par exemple arg1=euro

arg2=centime
0
Rejoignez-nous