joben22
Messages postés4Date d'inscriptionmercredi 10 février 2010StatutMembreDernière intervention10 octobre 2010
-
10 févr. 2010 à 08:29
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 2015
-
10 févr. 2010 à 11:04
Bonjour,
Je viens demander un peu d'aide pour un petit programme en C#.
Je suis en 3eme année en d'informatique spé Developpement et j'ai un devoir a rendre pour la fin de la semaine en C# et la je patoge.
Je dois concevoir un programme qui convertit un Chiffre en Lettre de 1 a 1 milliard.
Par exemple : l'utilisateur entre 12590 et le programme lui renvoie "Douze mille cinq cents quatre vingt dix"
Si quelqu'un a une idée sur l'algo ou encore une portion de code qui pourrait m'aider je vous remercie par avance et si je n'ai pas été assez clair je repondrai a vos question le plus vite possible.
Merci a vous pour votre aide.
PS : J'ai lu le reglement et je sais qu'il est interdit de demander un programme tout fait et ce n'est pas ce que je demande je voudrai juste un peu d'aide sur l'algo parceque je ne vois pas comment faire...
Merci encore
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 10 févr. 2010 à 11:04
Salut
Pour cela, il faut raisonner un peu de la même manière que toi quand tu veux prononcer ce mot.
Prenons ce nombre : 123456789
string EcrireNombreEnLettres(int nombre)
Tu commences par compter le nombre de chiffres et par les regrouper par 3 à partir de la droite. On a donc 123 456 789
Il te faut une méthode pour écrire la valeur d'un nombre à 3 chiffres max, à laquelle tu envoies ton nombre à 3 chiffres et un booléen qui dit s'il s'agit des 3 chiffres les plus à droite.
Pour chaque groupe de chiffre (de 0 à nbgroupes-1),
- si i < nbgroupe-2 et groupe[i] = 1, tu marques "un".
- Ensuite, tu appelles Ecrire3Chiffres(groupe[i], i != nbgroupes-1).
- Si i nbgroupes-2, tu marques "mille". Si i nbgroupes-3, tu marques "million" (+"s" si groupe[i] > 1). Si i = nbgroupes-4, tu marques "milliard" (+"s" si groupe[i] > 1).
Si tu as (sur ton nombre à 3 chiffres max) un chiffre des centaines supérieur à 1, tu marques sa valeur via Ecrire1Chiffre(), puis "cent" (tu marques également "cent" si le chiffre des centaines est égal à 1). Si ce sont les 3 chiffres les plus à droite (booléen transmis) et que les 2 derniers chiffres sont 00, tu mets un "s" après "cent". Ensuite, tu écris les 2 derniers chiffres via une fonction dédiée.
- Si la valeur est entre 1 et 19, tu appelles la fonction Ecrire1a19().
- Sinon, tu écris (selon le chiffre des dizaines) "vingt", "trente", "quarante", "cinquante", "soixante", "soixante", "quatre-vingt" ou "quatre-vingt". Si la valeur est 80 pile et que lePlusADroite est true, tu rajoutes un "s". Si le dernier chiffre est un 1 sauf 91, tu rajoutes " et ". Si le dernier chiffre n'est ni 0 ni 1, tu rajoutes "-".
- Si le chiffre des dizaines est différent de 0, 7 et 9, tu appelles Ecrire1a19() sur le dernier chiffre. Si le chiffre des dizaines est 7 ou 9, tu appelles Ecrire1a19() sur le dernier chiffre + 10.
string Ecrire1a19(int nombre);
Tu marques directement la valeur :
un, deux, trois, quatre... ...dix-huit, dix-neuf
Bon, avec ça, tu ne devrais pas avoir le moindre problème
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -