1. Présentation du sujet du devoir
Il s'agit d'écrire un algorithme qui traduit en toutes lettres un nombre entier positif inférieur à un million (0-999999). Les nombreuses exceptions de la langue française fournissent avec cet exercice un sujet classique d'algorithmique.
Le principe de base que vous allez adopter pour ce problème consiste à isoler les chiffres constituant le nombre et à énoncer chaque chiffre suivi de sa valeur (mille, cent..)
Ainsi 305234 s'écrit : trois cent cinq mille deux cent trente-quatre.
Les chiffres exprimant les dizaines et celui des unités sont reliés par un tiret (trente-trois, soixante-huit).
« Quelques » exceptions existent tout de même...
1.Le chiffre des dizaines doit être traité différemment : on écrit trente-quatre et non trois dix quatre.
2.Le chiffre 1 n'est pas écrit s'il précède mille ou cent : on écrit mille trois cent vingt-huit et non un mille trois cent vingt-huit.
3.Les nombres de 11 à 16 n'obéissent pas à la règle générale : onze au lieu de dix-un, ... seize au lieu de dix-six.
4.Quand une dizaine est suivie de un, il faut rajouter la conjonction et entre les deux : on écrit trente-et-un et non trente-un. Attention toutefois, ceci ne s'applique ni pour quatre-vingt-un, ni pour quatre-vingt-onze. A noter, enfin, une exception dans l'exception, car on dit bien soixante-et-onze...
5.De 61 à 79 (respectivement de 81 à 99) on écrit soixante (respectivement quatre-vingt) suivi de l'expression du nombre compris entre 1 et 19).
6.Quand cent et vingt sont précédés d'un chiffre et terminent le nombre, ils prennent un « s ». deux cents (200), quatre-vingts (80), mais quatre-vingt-trois (83), deux cent mille (200000) et quatre-vingt mille trois cent quarante-sept (80347).
7.Attention au cas très particulier du « zéro » qui ne s'écrit que lorsque le nombre à traduire en lettre vaut 0...
2. Travail à réaliser
Il vous est demandé de concevoir un programme qui affiche à l'écran le nombre en toutes lettres saisi par l'utilisateur au clavier. L'écriture des algorithmes puis le programmation en C de ces mécanismes doivent être réalisées dans le cadre de ce devoir en suivant scrupuleusement les indications ci-après.
3. Démarche à adopter
1. Structuration du programme et réflexion préliminaires (§1.7)
En remarquant que le traitement des trois chiffres du rang des milliers est assez similaire à
celui du rang des unités, le programme peut être bâti autour d'un sous-programme capable
d'effectuer la traduction d'un nombre compris entre 0 et 999. Existe-t-il des différences entre
le traitement des milliers et des unités ? Si oui, quelle information doit être transmise au
sous-programme (en plus de la valeur à traduire bien sûr) pour qu'il puisse s'exécuter
correctement ? Donner la déclaration d'un tel sous programme dont l'identificateur sera
Traduire (le corps de ce sous-programme ne sera pas étudié à ce stade, vous vous
contenterez des deux délimiteurs début et fin).
2. Bloc de programme appelant le sous programme Traduire (§1.2, 1.3, 1.4, 1.5)
Le traitement dans ce bloc doit enchaîner, la lecture du nombre à traduire, la vérification que la
valeur est comprise dans la plage prévue et l'appel au sous programme Traduire.
Décomposer soigneusement ces étapes de façon à pouvoir les écrire en utilisant le
formalisme de l'algorithmique. Attention, le cas ou le nombre saisi est 0 est très particulier.
N'oubliez pas les déclarations des variables, constantes ou types nécessaires pour votre
algorithme dans un dictionnaire de données (voir les exemples de la section 8 du polycopié).
3. Écriture du bloc de programme du sous-programme Traduire (§1.2, 1.3, 1.4, 1.5)
3.1 Réflexions préliminaires
La traduction en lettre d'un chiffre peut être assurée par un tableau dont de chaînes de
caractères dont la chaîne correspond à la traduction de l'indice du tableau qui permet d'y
accéder (0 -> « zero », 2-> « deux », etc.). Peut-on se contenter des chiffres de 0 à 9?
En déduire la déclaration de ce tableau de correspondance « valeur -> chaîne ». Peut-on
utiliser le même principe pour le chiffre des dizaines ? Donner la déclaration du tableau
correspondant.
3.2 extraction des trois chiffres du nombre à traduire.
Ce traitement est préliminaire à tout ce qui suit. Écrire les deux ou trois lignes d'algorithme
qui permettent cette extraction dans trois variables (Centaine, Dizaine, Unite).
3.3 algorithme pour les centaines.
Donner l'algorithme qui permet d'écrire un chiffre suivi du mot « cent ». Attention aux
exceptions qui devront être traitées en priorité. Rappelez-vous en particulier que « cent »
ne prend jamais de « s » s'il est suivi du mot mille, que l'on n'écrit pas « un cent », etc...
3.4 Algorithme pour les dizaines et les unités.
Ici encore le traitement de ces deux chiffres doit d'abord résoudre les exceptions avant
d'appliquer la méthode standard qui peut se résumer à :
ecrire (dizaine, "-",unite);
Ne pas oublier également que vingt ne prends pas de « s » s'il est suivi de mille.
4. Algorithme complet
Donner enfin l'algorithme complet de votre solution accompagné du dictionnaire des données. Vous serez très attentifs à cette étape de bien suivre les recommandations d'écriture données dans le polycopié. Plus votre algorithme sera écrit soigneusement, plus la traduction en langage C sera aisée..
5. Codage de votre solution
Transformer l'algorithme en code C puis le compiler et effectuer la mise au point. Vous vous bornerez à utiliser de l'ANSI C pour assurer la portabilité de votre solution.
Au cours de cette phase de mise au point, vous vous attacherez à comprendre les éventuelles erreurs, à corriger les parties d'algorithme correspondantes puis à modifier le code source pour prendre en compte ces modifications. Sauf s'il s'agit d'une erreur introduite par l'étape de codage elle-même, ne corrigez jamais le code source en C avant d'avoir résolu le problème en algorithmique !
Ce qui est attendu par le correcteur
1. L'algorithme complet de la solution (avec son dictionnaire de données) tel qu'il est demandé à la question 4. Cet algorithme devra être suffisamment commenté pour être compréhensible sans trop d'effort par le correcteur.
2. Le code source du programme en langage C correspondant exactement à l'algorithme. La encore, des commentaires sur les parties vous semblant les plus délicates seront les bienvenues.
3. La liste des valeurs pour lesquelles le programme a été testé et fonctionne. Éventuellement, la liste des valeurs pour lesquelles le programme a été testé et ne fonctionne pas.
Partager