|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |
Étudiant Inscription : février 2013 Messages : 15 ![]() |
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 : Citation:
|
|
|
|
05
|
|
|
#2 |
|
Membre éclairé
![]() ![]() Inscription : août 2007 Messages : 174 ![]() |
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. |
|
|
31
|
|
|
#3 |
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 220 ![]() |
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?
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
10
|
|
|
#4 | |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Citation:
Ensuite, dans le cas où il s'agirait justement du premier TP de ton premier cours de C, qu'as-tu écrit jusqu'ici ? |
|
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
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 |
|
|
00
|
|
|
#6 |
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 435 ![]() |
Et si l'utilisateur tape "0500" ou " 500" ?
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
|
|
10
|
|
|
#7 |
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
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 |
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé Sénior
![]() ![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 498 ![]() |
Bonjour
En quoi ? En informatique ??? Citation:
[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:
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
||
|
|
20
|
|
|
#9 | |
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
Citation:
|
|
|
|
00
|
|
|
#10 |
Étudiant Inscription : février 2013 Messages : 15 ![]() |
je suis étudiant par correspondance et le premier exercice que je dois faire c'est celui ci donc oui c'est clair je suis complètement largué...
non je ne suis pas en informatique, je suis en électronique, électricité je ne demande pas de me le faire mais que l'on m'explique... je regarde sur d'autre site pour voir comment on fait un algorithme de facon correct... |
|
|
00
|
|
|
#11 |
Étudiant Inscription : février 2013 Messages : 15 ![]() |
pour l'algorithme :
DEBUT Lire n Afficher n Si n=0 FAIRE AFFICHER "Zéro" Si n=1 FAIRE AFFICHER "un" Si n=2 FAIRE AFFICHER "deux" Si n=3 FAIRE AFFICHER "trois" Si n=4 FAIRE AFFICHER "quatre" Si n=5 FAIRE AFFICHER "cinq" Si n=6 FAIRE AFFICHER "six" Si n=7 FAIRE AFFICHER "sept" Si n=8 FAIRE AFFICHER "huit" Si n=9 FAIRE AFFICHER "neuf" Si n=10 FAIRE AFFICHER "dix" Si n=11 FAIRE AFFICHER "onze" Si n=12 FAIRE AFFICHER "douze" Si n=13 FAIRE AFFICHER "treize" Si n=14 FAIRE AFFICHER "quatorze" Si n=15 FAIRE AFFICHER "quize" Si n=16 FAIRE AFFICHER "seize" Si n=17 FAIRE AFFICHER "dix-sept" Si n=18 FAIRE AFFICHER "dix-huit" Si n=19 FAIRE AFFICHER "dix-neuf" FIN mais comment on fait pour dire que pour les chiffres 19<n>99 on répète les nombres de 0 à 9 en ajoutant le chiffre de la dizaine ? et après ça sera la même chose pour les centaines,... |
|
|
10
|
|
|
#12 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Après une lecture plus approfondie, il semblerait que ton devoir consiste principalement à écrire l'algorithme d'une manière générale et de ne le traduire qu'une fois cette partie menée à bien. Autrement dit, ce n'est pas le programme C lui-même qui va te faire gagner le plus de points.
Comme dit plus haut, tu parviens à naturellement énoncer un nombre, par exemple « 14576 » en « Quatorze mille cinq cent soixante-seize » sans avoir à y réfléchir. C'est parce que tu y es habitué depuis la petite enfance, et également parce que les entends pratiquement tous les jours. Tout ce que tu as à faire dès lors est rédiger sur papier la méthode à suivre en utilisant si possible du pseudo-code. Comme le nombre à traiter est un entier naturel inférieur à un million, les choses sont déjà simplifiées : les parties supérieures et inférieures à mille se traitent de la même façon. Par exemple « 945945 » se dit « neuf cent quarante-cinq mille neuf cent quarante-cinq ». La première chose à faire consiste donc à « séparer les deux moitiés de ton nombre ». Cela se fait en le divisant par mille : le quotient est la partie de gauche, supérieure à mille et le reste est celle de droite. Tu écris donc une fonction « affiche_millier » qui te permettra d'écrire un nombre de 1 à 999. Puis, dans l'ordre :
Je te laisse développer le reste pour le moment. |
|
|
30
|
|
|
#13 | ||
Étudiant Inscription : février 2013 Messages : 15 ![]() |
Code :
Et comment faire pour simplifier de 71 à 79 et de 91 à 90 car c'est un peux comme de 11 à 19 ? |
||
|
|
00
|
|
|
#14 | |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Citation:
Ça permet de mettre en évidence le fait qu'on lit — et énonce — un nombre de gauche à droite, c'est-à-dire du poids le plus fort vers le plus faible. Ton programme, d'une certaine manière, devrait donc faire la même chose. Il y a plusieurs techniques pour factoriser son code et éviter d'avoir à le réécrire en double. Par exemple, pour les nombres de 1 à 19 puis de 80 à 99, il te suffit de commencer par vérifier si le nombre est effectivement supérieur ou égal à 80, afficher « quatre-vingt- » puis soustraire 80 à la variable que tu utilises : tu te retrouveras alors avec « 1 ≤ n ≤ 19 » et le morceau de code suivant entrera automatiquement en action pour compléter ta chaîne, sans savoir si le nombre était dès le départ compris dans cette tranche où si on lui a retranché 80. Cela dit, je ne t'expose cette méthode qu'à titre d'exemple. Pas la peine de t'embrouiller l'esprit avec pour le moment. Essaie plutôt de suivre les étapes que je t'ai données dans mon précédent commentaire. |
|
|
|
10
|
|
|
#15 |
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 220 ![]() |
pour t'aider, tu devrais remarquer que la numération est écrite par série de "centaines, unités":
123 456 789 s'écrit: "cent" "vingt-trois" "millions" - "quatre cent" "cinquante-six" "mille" - "sept cent" "quatre-vingt-neuf" "" Partant de là, tu as trois choses à faire: découper par triplet encoder chaque triplet en "N cent(s) quelque chose" encoder les centaines (un chiffre…) encoder les unités (deux chiffres) compter les blocs pour savoir quel multiple associer à chaque triplet
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
20
|
|
|
#16 | ||
Étudiant Inscription : février 2013 Messages : 15 ![]() |
ok ok et si je fais comme ca :
Code :
|
||
|
|
00
|
|
|
#17 |
|
Expert Confirmé
![]() Inscription : septembre 2006 Messages : 2 375 ![]() |
Une solution générique qui permet de supporter assez facilement et très rapidement un grand nombre de langues différentes est :
1. avoir des tableaux dans lesquels on stocke les valeurs des chaînes pour les unités, dizaines, centaines et puissances de "millier" (million, milliard, etc) et pour les chaînes "spéciales" : les mots de liaison (par exemple le "et", le suffixe de pluriel s'il y en a un dans la langue...); 2. avoir pour la langue le nombre de digit des "milliers" et leurs puissances : si pour la plupart des langues occidentales le groupement est par 3, beaucoup de langues asiatiques groupent par 4 : ils diront "dix dix-mille" là où nous disons "cent mille" (càd qu'ils ont des mots pour dire "dix-mille", "cent-millions", ... là où nous avons "mille", "million", ...); 3. dans le cas général d'un montant on traite partie entière et décimale séparément : la routine de base ne s'occupe que de valeur entière; 4. la routine de base recevra donc un entier qu'elle convertira en chaîne en ajoutant devant autant de 0 que nécessaire pour obtenir une chaîne de N x le groupement correspondant à la longueur maximum du montant que l'on peut exprimer, par exemple en français si vous décidez de vous limitez aux milliards ce sera au maximum 12 caractères, donc pour une entrée de 12345 vous commencez avec 000000012345 cette routine de base va assembler selon les régles de grammaire de la langue les morceaux retournés par une sous-routine qui elle s'occupera des groupes de chiffres par taille du groupement en commençant par la droite (en fait on constate vite qu'il est plus facile d'inverser la chaîne de départ : donc dans notre exemple on assemblera les résultats retournés par les appels successifs à cette sous-routine pour "543", "210", ... - juste faire attention à ne pas sortir "zéro milliard zéro million douze mille...") Cette sous-routine est alors assez triviale à écrire puisque le premier digit est celui des unités (donc on obtient trivialement son index dans le tableau de chaînes des "unités") le second celui des dizaines et le troisième celui des centaines... Seules les régles de grammaire de la langue cible peuvent induire des variations pour la gestion des pluriels, là où il faut ou pas un espace ou un trait d'union entre les mots, les exceptions, ... Et notez la gestion en groupe des unités et dizaines pour la plupart des langues germaniques (qui disent "un et vingt" pour 21...) La routine de base elle assemblera les morceaux et saura évidemment à quel stade des unités, milliers, millions, milliards elle en est et ira dans le tableau adhoc chercher le bon mot et appliquera la régle de grammaire de la langue pour le pluriel éventuel. Avec cette technique, n'importe quelle langue est supportée en environ une centaine de lignes de C, et encore : bien aéré. (et tableau de chaînes en Unicode évidemment avec les routines C adaptées si vous voulez supporter les langues exotiques: pas de "strcat" and C°, cela va de soi) (et pour le français n'oubliez pas les variations régionales : "septante", "octante" ou "huitante", "nonante" en Belgique et Suisse au lieu des "soixante-dix" et "quatre-vingt-dix" en France) |
|
|
10
|
|
|
#18 |
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 435 ![]() |
Ta méthode n'est pas bonne (sauf le principe du découpage en fonctions).
Par exemple, 384434 donnera : fonction(g) -> affichage "trois cent mille" fonction(f) -> affichage "trois cent mille quatre vingt mille" fonction(e) -> affichage "trois cent mille quatre vingt mille quatre mille" fonction(d) -> affichage "trois cent mille quatre vingt mille quatre mille quatre cent" fonction(c) -> affichage "trois cent mille quatre vingt mille quatre mille quatre cent trente" fonction(a) -> affichage "trois cent mille quatre vingt mille quatre mille quatre cent trente quatre" Pour afficher 384434 -> 384 et 434 afficher 384 -> "trois cent quatre-vingt-quatre" afficher "mille" afficher 434 -> "quatre cent trente-quatre" Pour afficher 380380 -> 380 et 380 afficher 380 -> "trois cent quatre-vingt" singulier de vingt puisqu'il sera suivi de "mille" afficher "mille" afficher 380 -> "trois cent quatre-vingts" pluriel de vingt puisqu'il n'est pas suivi de quelque chose De la même façon, la méthode de base pour la fonction qui affiche les nombres de 0 à 999 est illustrée par l'exemple : Pour afficher 384 -> 3 et 84 afficher 3 afficher "cent" afficher 84 etc.
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
|
|
30
|
|
|
#19 |
Étudiant Inscription : février 2013 Messages : 15 ![]() |
ah oui exact, il répète mille plusieurs fois, je suis complètement perdu du coup...
je ne vois plus comment il faut que je fasse... mais de 0 à 999 c'est correct non ? |
|
|
00
|
|
|
#20 | ||||
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Hello,
Citation:
Ton erreur est que tu raisonnes comme si tu voulais résoudre une opération arithmétique, ce qui en temps normal est une bonne chose mais qui n'est pas l'approche à suivre dans le cas présent. Ici, tu prends chaque poids « centaines de milliers, dizaine de milliers, milliers, centaines, dizaines et unités », puis tu les traites séparément en affichant individuellement leur valeur comme si tu voulais les cumuler. En réalité, quand on énonce un nombre en français, on fait des groupes de trois chiffres, donc de 0 à 999, puis on applique éventuellement un coefficient multiplicateur, c'est-à-dire que l'on « alloue » une nouvelle tranche de trois chiffres : milliers, millions, ou milliards, ce qui permet de décaler respectivement ce nombre de une, deux ou trois fois trois chiffres. Quand on a besoin d'aller plus loin, on cumule ces mêmes coefficients : « milliers de millions, milliers de milliards, millions de milliards, … ». On pourrait croire que la centaine est construite également de la même façon mais ce n'est pas tout-à-fait le cas : on ne peut pas les énumérer par dizaines : « cinquante-deux cent » (pour 5200) n'est pas correct. Ce n'est toléré que dans le langage courant et jusqu'à 19 seulement. Ainsi, lorsque tu écris « 542456123 », tu obtiens : … que tu énonces donc en fait : Donc il faut d'un côté écrire une fonction qui écrit les nombres de 0 à 999 d'une manière générale puis utiliser cette fonction à bon escient selon les différentes tranches que tu as isolées. Citation:
Et pour faire tout cela, tu pourrais même utiliser une seule fonction servant à tout faire, à condition qu'elle soit… récursive ! :-) Mais chut, je ne dis rien de tout cela pour le moment… |
||||
|
|
10
|
Copyright © 2000-2013 - www.developpez.com