Programation en c++

Fermé
hirvine Messages postés 120 Date d'inscription mardi 12 août 2008 Statut Membre Dernière intervention 30 octobre 2012 - 7 juil. 2009 à 04:04
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 7 juil. 2009 à 20:20
Bonjour,
j ai un bleme avec un trois exercices en C++ et je voudraisun de coup de pousse
pourriez vous maider

exercice
ecrire en c++ un programe qui afiche un menu permettant de
- saisir un nombre sou forme de chiffrev romain ces a dir avec les lette M D C L X V I
puis obtenir leur conversion en nombre entier en base decimale (10)

-saisir un nombre entier en decimale et obtenir a travesr une fonction, saconversion en chiffre romain

Merci pour votre aide!

8 réponses

Cela ne me semble pas tres dur tu dois pouvoir le faire en C aussi.
Pour ton premier exercice tu crée un tableau de la meme taille que ton mot de caractere romain. Ensuite tu prend chaque lettre romaine et tu stocke sa valeur decimale dans le tableau à l'emplacement correspondant.
Tu finis en sommant toutes les valeurs du tableau.
Pour trouver la valeur correspondante à un caractere romain une structure en if doit marcher je pense.

ex tu dois traduire XX

Tu crée un tableau de taille 2 .
Tu compare X à toutes les lettres avec des if. genre if ( strcomp(argument[0],"X")==0) tableau[0]=10. A peaufiner tt de meme.
Ensuite tu sommes tout les tableau[i].
Et t'a ta valeur en decimale.
0
pour le deuxieme exo la clé est la fonction modulo ( % en c)
0
mamiemando Messages postés 33166 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 juillet 2024 7 761
7 juil. 2009 à 10:51
Non modulo ça n'est pas le plus simple (tout ce qui est divisible par 5 par exemple est aussi divisible par 10, 50 etc...). Il faut simplement faire des divisions euclidiennes aux restes successivement obtenus avec une division par 1000, 500, 100, 50, 10, 5.

Bonne chance
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
7 juil. 2009 à 11:49
pour les chiffre romains, il ne suffit pas de sommer toutes les cases:
exemple: I V ->4 (5-1)
si un nombre (I / 1) dans ce cas, a à sa droite un nombre plus grand que lui, il faut le soustraire, et non l'ajouter....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
exact j'avais complétement oublié faut dire que je compte pas souvent en romain ^^. Va falloir faire un controle pour voir si les premiers chiffre sont des I ou pas et aviser l'addition ou la soustraction en fonction mais je manque de connaissance dans le domaine romain. les I peut y en avoir devant un M ? si oui ça donne quoi? 999? et pour faire 998 faut faire IIM ?
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
7 juil. 2009 à 11:58
oui, ca doit etre ca pour tes nombres....

je te conseilles d'abord de faire un tour sur https://fr.wikipedia.org/wiki/Num%C3%A9ration_romaine
et pour tes tests, il faut que tu te fasses une liste de nombres types qui devraient poser des problemes...
genre: XIX ...

je te conseille aussi si tu as le temps, de vérifier la cohérence du nombre.. par exemple, si j'écris 4 comme ca: IIII -> signaller une erreur. de meme qui si j'écris 3 comme ca: IIV
0
hirvine Messages postés 120 Date d'inscription mardi 12 août 2008 Statut Membre Dernière intervention 30 octobre 2012 > Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014
7 juil. 2009 à 16:08
BONJOUR NABLAS
ton astuce m aide beaucoup et je t en remercie infiniment !
0
hirvine Messages postés 120 Date d'inscription mardi 12 août 2008 Statut Membre Dernière intervention 30 octobre 2012
7 juil. 2009 à 16:10
bonjour
j ai bien apprécie ton astuce et je te remercie pour ton aide

bonne journee a toi!
0
j'y suis allé faire un tour et comme le site le dit je pense que tout reside dans le fait qu"il faille compter de droite à gauche. On part du dernier terme on regarde l avant dernier s'il est plus petit on le soustrait au dernier s'il est plus grand on somme et ainsi de suite.
Je pense que les cas bizarres dont tu as parlé ne sont a prendre en compte que dans osn 2eme exercice dans le premier il faut supposer que les nombres donnés sont corrects ( un utilisateur pas fourbe quoi )

PS: ce n'est pas mon post ^^ meme si j'ai posté plus dessus que l'auteur
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
7 juil. 2009 à 13:31
oui, c'est vrai qu'en allant de droite à gauche, on doit avoir moins de problèmes

c'est un exercice assez interessant je trouve
0
mamiemando Messages postés 33166 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 juillet 2024 7 761
7 juil. 2009 à 19:31
Pour moi 998 ne serait pas IIM mais plutôt CMXCVIII (confirmé par l'exemple 1 975 = MCMLXXV sur wikipedia)

Une puissance de 10 ne peut être précédée que d'un nombre strictement plus grand ou de la puissance 10 immédiatement inférieure.

Du coup le programme est assez trivial. Tu écris ton entier dans une chaîne de caractère (par exemple avec un sprintf) et tu regardes la longueur de la chaîne pour en déduire la plus grande puissance de 10. Ensuite tu lis un par un les caractères de cette chaîne et tu les repasses en entier avec la fonction atoi.

Tu appelles une fonction confectionnée par tes soins prenant en paramètre
- unsigned puis: la puissance de 10 courante,
- unsigned val: la valeur obtenue par atoi (valeur comprise entre 0 et 9)
- char *buf: un pointeur vers un buffer dans lequel tu vas écrire la valeur romaine

L'idéal serait que cette fonction manipule un tableau dans lequel sont référencées les puissances de 10 (par exemple {'I','X','C','M'}). Selon la valeur de puis, il est facile de récupérer les bons caractères romains. Ensuite tu fais un switch case sur val et tu écris dans ton buffer à coup de sprintf.

Bonne chance
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
7 juil. 2009 à 20:20
en tout cas, ca me semble un très bon exercice de programmation, et surtout d'algorithmie !
0