IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

programmation de chiffres en lettres


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Par défaut programmation de chiffres en lettres
    bonjour,
    Je suis étudiant et je n'ai jamais fais de programmation en C, on me demande de faire un programme qui consiste à taper un chiffre numérique et le programme doit convertir en lettre donc pouvez vous m'aidez svp ? merci d'avance !


    je vous joins le descriptif exact :

    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.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    Bonjour,

    L'idée du forum c'est plutôt d'aider quelqu'un qui bloque sur un point précis que de faire des exercices à la place des étudiants.
    Tu peux bien commencer quelque chose, lire les caractères à l'écran, faire au moins un "if" pour le "zéro"...
    Enfin, c'est pas pour te faire la morale mais autant tu trouveras sur ce forum des tas de gens ravis de te donner un coup de main autant personne ne fera l'exercice à ta place.

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Par ailleurs, tu n'as jamais fait de C? Ce n'est pas grave.
    Fais déjà l'algorithme. Il s'agit tout simplement d'expliquer formellement la tache à accomplir.

    L'énoncé est assez long (je ne l'ai pas lu, je l'ai aperçu) pour être assez détaillé… Réfléchit un peu.

    Comment t'y prendrais-tu, toi, pour convertir 1245 en mille deux cents quarante-cinq?

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 442
    Par défaut
    Citation Envoyé par jazzepa Voir le message
    bonjour,
    Je suis étudiant et je n'ai jamais fais de programmation en C, on me demande de faire un programme qui consiste à taper un chiffre numérique et le programme doit convertir en lettre donc pouvez vous m'aidez svp ? merci d'avance !
    Avant toute chose, comment t'es-tu retrouvé à devoir écrire un programme en C sans jamais avoir vu ce langage ?

    Ensuite, dans le cas où il s'agirait justement du premier TP de ton premier cours de C, qu'as-tu écrit jusqu'ici ?

  5. #5
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    bonjour

    selon moi pour commencer tu pourrais demander a l'utilisateur d'entrer la valeur et cette valeur serai un tableau d'entier.

    puis tu pourrais parcourir ce tableau pour compter le nombre de chiffre ainsi tu pourrai savoir si c'est un chiffre ou un nombre et aussi de combien à combien il irai ( exemple : 500 = 3 chiffre donc il sera entre 100 et 999) cela te permettrai de traduire le nombre plus facilement toujours même exemple 500 tu prend le premier chiffre c'est 5 donc cinq et cent derrière.

    voila aprés a toi de voir pour le reste

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Et si l'utilisateur tape "0500" ou " 500" ?

  7. #7
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Citation Envoyé par diogene Voir le message
    Et si l'utilisateur tape "0500" ou " 500" ?
    bah dans se cas la tu fait en sorte de vérifier cela imaginon que c'est 0500 tu met un if ou un tant que c'est pas different de 0 il continue a parcourir une fois que c'est différent de 0 il se place et commence le compteur .

    ou aussi il peut prendre sa sous forme de chaine de caractere qu'il parcourera une fois qu'il tombe sur un chiffre entre 1 et 9 il commence le compteur et le place dans un nouveau tableau une fois arriver au '/0' il met des if pour le compteur du genre if(cpt = 4 ) { printf("%d mille %d cent %d", tabfinal[0], tabfinal[1], ; } etc... a lui d'arranger aprés mais c'est un bon debut de mon point de vue aprés pas forcement la meilleure facon

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par jazzepa Voir le message
    Je suis étudiant
    En quoi ? En informatique ???
    Citation Envoyé par jazzepa Voir le message
    et je n'ai jamais fais de programmation en C on me demande de faire un programme qui consiste à taper un chiffre numérique et le programme doit convertir en lettre
    Absolument invraisemblable. Les débutants on leur fait faire des tests "nombre pair/nombre impair; des jeux "plus petit/plus grand". Ce genre d'exercice est déjà d'un niveau bien confirmé. Maintenant si tu n'as jamais écouté/étudié en cours ce n'est pas la même chose...

    [edit] Je viens de lire l'énoncé. Aller jusqu'à spécifier quand mettre un "s" et quand ne pas en mettre c'est pas confirmé comme niveau, c'est carrément un truc niveau fin de cours. Je comprends que celui qui n'a jamais fait de C soit un peu largué. Même pour les habitués de ce fofo ce serait un joli challenge. Mais de toute façon cela ne te serait d'aucun bénéfice qu'on te le fasse pour toi. Le vrai jour du test, c'est toi qui sera devant l'écran...

    Citation Envoyé par devdeb91 Voir le message
    bah dans se cas la tu fait en sorte de vérifier cela imaginon que c'est 0500 tu met un if ou un tant que c'est pas different de 0 il continue a parcourir une fois que c'est différent de 0 il se place et commence le compteur .

    ou aussi il peut prendre sa sous forme de chaine de caractere qu'il parcourera une fois qu'il tombe sur un chiffre entre 1 et 9 il commence le compteur et le place dans un nouveau tableau une fois arriver au '/0' il met des if pour le compteur du genre if(cpt = 4 ) { printf("%d mille %d cent %d", tabfinal[0], tabfinal[1], ; } etc... a lui d'arranger aprés mais c'est un bon debut de mon point de vue aprés pas forcement la meilleure facon
    Plus simplement: sscanf("0000500", "%d", &i) donnera au final i=500. En revanche je ne sais pas comment il se comporte si la chaine commence par des espaces (et j'ai un peu la flemme de regarder). M'enfin même dans le pire des cas c'est pas la mort de gérer les "isspace()" éventuels situés en début de nombre...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/02/2010, 09h21
  2. conversion chiffre en lettre
    Par arezki76 dans le forum Oracle
    Réponses: 3
    Dernier message: 17/12/2005, 12h31
  3. [VB.NET] Import donnes d'excel : chiffres et lettres
    Par JohnGT dans le forum Windows Forms
    Réponses: 5
    Dernier message: 19/10/2004, 18h53
  4. Réponses: 4
    Dernier message: 21/07/2004, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo