Accueil > Forum > > > > convertisseur romain
convertisseur romain
lundi 9 mai 2005 à 12:24:24 |
convertisseur romain

Tavarez59282
|
Bonjour je suis étudiant en licence informatique première année et on nous a donné un sujet que je ne comprend pas très bien. Voilà on doit taper un sous programme qui convertit des chiffres romains en décimales. Le problèmes c'est qu'on ne peut ni utiliser de chaines, ni de tableaux mais uniquement des variables et une boucle "tant que". De plus le chiffre romain entré doit tenir sur une seule ligne, en gros une seule entrée et le programme doit le ressortir en decimale, pas d'étapes intermédiaires. Donc voila si quelqu'un peut m'aider s'il vous plait ce serait sympa  . Merci d'avance!
|
|
lundi 9 mai 2005 à 14:00:49 |
Re : convertisseur romain

buno
|
Salut!
En fait, c'est pas super difficile, en supposant que l'utilisateur ne fait pas de faute de frappes. Il te faut 2 int (NombreGlobal qui contient la valeur décimale et DecimalCourant qui contient ce que l'utilisateur à taper), un char (Caractere qui contient le caractère donné par l'utilisateur), la fonction getchar() et une boucle while().
Voici en gros l'agorithme à mettre en oeuvre:
NombreGlobal=0; DecimalCourant=0;
// boucle sur les caractères lus juqu'à un caractère de sortie while(Caractere=getchar() != SORTIE) { // test de la validité du caractère if ( (Caractere != 'V') ...) return code_erreur;
// ici, nous avons un chiffre romain dans Caractere // il faut le traduire en décimales (avec un switch par exemple) DecimalCourant=ConvertChiffreRomain(Caractere);
// Mise à jour du nombre entré NombreGlobal = ... }
// affichage du nombre
En gros, ça ressemble à ça....
@+
Buno ---------------------------------------- L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
|
|
lundi 9 mai 2005 à 14:51:41 |
Re : convertisseur romain

Tavarez59282
|
Réponse acceptée !
Ca m'aide un peu ce que tu m'écris mais je comprend pas tout si tu veux je vais t'envoyer l'énoncé tel qu'il est et si ça t'inspire quelque chose dis le moi:
Ecrire et mettre au point un programme qui accepte un nombre donné en chiffres romains et affiche la valeur décimale correspondante. On supposera que l'entrée tiendra sur une seule ligne ne contenant qu'un seul nombre en chiffres romains, bien formé et plus petit que 8999. Pour faciliter la mise au point, le programme invitera à entrer une valeur et affichera le résultat.
Après y'a des histoires de préfixe mais ça je sais comment faire c'est pas trop dur...je demande pas non plus qu'on le fasse a ma place mais juste le fil conducteur car là je suis bien perdu lol. Ce qui me pose le plus de problèmes c'est qu'avec des variables on doit faire tenir le chiffre romain sur une seule ligne!
Merci d'avance!
|
|
lundi 9 mai 2005 à 15:24:31 |
Re : convertisseur romain

buno
|
Ok. En gros, ce que j'ai compris: - l'utilisateur entre un chiffre romain: "XIV" et valide par ENTREE - ensuite, tu affiche le résultat sous forme décimale
L'algo précédent boucle sur getchar(), te permettant ainsi t'attendre que l'utilisateur appuie sur une touche. A chaque passage, tu reçois un caractère ('X', 'I' et 'V' ici) que tu dois convertir en décimal (=faire une correspondance entre 'I' et 1, 'V' et 5...). Une fois que tu as le décimal, il faut calculer le nombre résultat pour avoir ceci: - 1er passage: 'X' --> NombreGlobal = 10 - 2e passage: 'I' --> NombreGlobal = 10+1 = 11 - 3e passage 'V' --> NombreGlobal = 11+3 = 14 - 4e passage: ENTREE --> sortie du programme et affichage de la valeur décimale.
Tu vois ce que je veux dire?
Attention, il te faudra surement une variable contenant le(s) caractère(s) précédent(s) pour gérer les caractères du style IV par exemple.
Quant à l'affichage du chiffre romain, tu n'as pas à le faire (étant donné que c'est la fenêtre de commandes qui le fait). Concernant l'affichage du résultat, un simple printf ou un cout devrait suffire.
Si t'as d'autres soucis, n'hésites pas.
Buno ---------------------------------------- L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
|
|
lundi 9 mai 2005 à 15:57:57 |
Re : convertisseur romain

Tavarez59282
|
J'ai tapé ça, j'ai oublié de te préciser qu'on ne se sert jamais de getchar() en cour donc si je l'utilise vais me faire tirer les oreilles . Par contre la il veut pas compiler si tu vois l'erreur dis le moi stp car je trouve pas. C'est la dernière fois que je t'embete. Merci encore
#include<stdio.h> #define F #define M #define D #define C #define L #define X #define V #define I
conv_var() {int d; char r,E,pr; while((d<=8999)&&(r!=E)) {pr=E; scanf("%d",&r); switch(r) { case F : {if(pr==M){d=d+4000;else d=d+5000;pr=F;} case M : {if(pr==C){d=d+900;else d=d+1000;pr=M;} case 'D' : {if(pr==C){d=d+400;else d=d+500;pr=D;} case 'C' : {if(pr==X){d=d+90;else d=d+100;pr=C;} case 'L' : {if(pr==X){d=d+40;else d=d+50;pr=L;} case 'X' : {if(pr==I){d=d+9;else d=d+10;pr=X;} case 'V' : {if(pr==I){d=d+4;else d=d+5;pr=V;} case 'I' : {d=d+1;pr=I;} } return d; }
main()
{ printf("Entrez votre chiffre romain, entrez E pour terminer:\n"); conv_var(); }
|
|
lundi 9 mai 2005 à 16:32:26 |
Re : convertisseur romain

buno
|
Mes impressions (je n'ai pas testé ton code): - tes define ne sont pas nécessaires, surtout si tu ne leur attribue pas de valeur  . - pour chaque comparaison/manipulation/affectation de caractères, n'oublie pas les simples quotes: 'a', 'b', etc... ainsi que dans les case ( case F à remplacer par ca se 'F'). - quand tu fais scanf, tu récupère le caractère entré par l'utilisateur et non un entier. Donc, il faut faire scanf("%c", &r) (et non %d). - à la fin de chaque case (sauf le dernier), ne pas oublier de mettre un break!!! Sinon, le prog va passer dans tous tes cas... - j'ai pas bien compris: ton E signifie la variable de sortie ou le caractère 'E' ??? Attention...  - initialise ta variable d=0 sinon, tu ne peux pas prévoir ce que fais d=d+1 au 1er passage - à la fin de ton programme, tu pourrais afficher le nombre décimal... tu t'es donné assez de mal pour le faire lol  Regarde déjà ça. Si ça ne marche toujours pas... bah... envoi un post  Buno ---------------------------------------- L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
|
|
lundi 9 mai 2005 à 18:39:49 |
Re : convertisseur romain

Tavarez59282
|
Mon prog marche mais je peux rentrer n'importe quoi il me renvoie toujours 2 c'est bizarre je l'ai revu et corrigé selon tes conseils pourtant . Voilà ce que ça donne:
#include<stdio.h>
conv_var(int d) { char r,pr;d=0; while(d<=8999) {pr=0; scanf("%c",&r); if((r='F')||(r='M')||(r='D')||(r='C')||(r='L')||(r='X')||(r='V')||(r='I')) {switch(r){ case 'F' : {if(pr=='M'){d=d+4000;}else {d=d+5000;};pr='F';} break; case 'M' : {if(pr=='C'){d=d+900;}else {d=d+1000;};pr='M';} break; case 'D' : {if(pr=='C'){d=d+400;}else {d=d+500;};pr='D';} break; case 'C' : {if(pr=='X'){d=d+90;}else {d=d+100;};pr='C';} break; case 'L' : {if(pr=='X'){d=d+40;}else {d=d+50;};pr='L';} break; case 'X' : {if(pr=='I'){d=d+9;}else {d=d+10;};pr='X';} break; case 'V' : {if(pr=='I'){d=d+4;}else {d=d+5;};pr='V';} break; case 'I' : {d=d+1;pr='I';} } return d;}else{printf("Erreur ce chiffre romain n'existe pas\n");} } } main()
{ char F,M,D,C,L,X,V,I; int d; printf("Entrez votre chiffre romain:\n"); conv_var(d); printf("Le chiffre est %d", d); }
Voilà si tu trouves d'où ça peut venir, sinon le prog compile donc merci des conseils et merci pour tout 
|
|
lundi 9 mai 2005 à 22:27:51 |
Re : convertisseur romain

Matt67
|
Bonsoir,
J'ai mis tout les cas même ceux qui ne sont pas utilisé.
Par exemple 49 ne s'ecrit pas IC mais XLIX, mais le convertisseur
marche pour les deux cas, à toi de le modifier pour verifier les
entrées, les combinaisons possibles ... (Je pense que l'on peut optimiser tout cela, si quelqu'un a le courage)
#include <stdio.h>
int main()
{
char szChaineRomaine[50];
char *c;
int iDec = 0;
char cPrecedent = 'A';
printf("Entrez un nombre romain : ");
fgets(szChaineRomaine, 49, stdin);
c = szChaineRomaine;
while(*c != '\n')
{
switch(*c)
{
case 'M':
if(cPrecedent == 'D')
iDec = iDec;
else if(cPrecedent == 'C')
iDec = iDec + 800;
else if(cPrecedent == 'L')
iDec = iDec + 900;
else if(cPrecedent == 'X')
iDec = iDec + 980;
else if(cPrecedent == 'V')
iDec = iDec + 990;
else if(cPrecedent == 'I')
iDec = iDec + 998;
else
iDec = iDec + 1000;
cPrecedent = 'M';
break;
case 'D':
if(cPrecedent == 'C')
iDec = iDec + 300;
else if(cPrecedent == 'L')
iDec = iDec + 400;
else if(cPrecedent == 'X')
iDec = iDec + 480;
else if(cPrecedent == 'V')
iDec = iDec + 490;
else if(cPrecedent == 'I')
iDec = iDec + 498;
else
iDec = iDec + 500;
cPrecedent = 'D';
break;
case 'C':
if(cPrecedent == 'L')
iDec = iDec;
else if(cPrecedent == 'X')
iDec = iDec + 80;
else if(cPrecedent == 'V')
iDec = iDec + 90;
else if(cPrecedent == 'I')
iDec = iDec + 98;
else
iDec = iDec + 100;
cPrecedent = 'C';
break;
case 'L':
if(cPrecedent == 'X')
iDec = iDec + 30;
else if(cPrecedent == 'V')
iDec = iDec + 40;
else if(cPrecedent == 'I')
iDec = iDec + 48;
else
iDec = iDec + 50;
cPrecedent = 'L';
break;
case 'X':
if(cPrecedent == 'V')
iDec = iDec;
else if(cPrecedent == 'I')
iDec = iDec + 8;
else
iDec = iDec + 10;
cPrecedent = 'X';
break;
case 'V':
if(cPrecedent == 'I')
iDec = iDec + 3;
else
iDec = iDec + 5;
cPrecedent = 'V';
break;
case 'I':
iDec = iDec + 1;
cPrecedent = 'I';
break;
}
c++;
}
*c='\0';
printf("\n");
printf("Le nombre romain %s.\nLe nombre decimal %d.\n\n", szChaineRomaine, iDec);
return 0;
}
Bonne soirée, Matt...
|
|
mardi 10 mai 2005 à 19:47:28 |
Re : convertisseur romain

Tavarez59282
|
Merci Matt mais le problème c'est que j'avais pas le droit d'utiliser de chaine mais bon le programme est un peu semblable à ce que j'ai fait dc c'est bon signe merci 
|
|
mardi 10 mai 2005 à 19:53:20 |
Re : convertisseur romain

Joky
|
Bé tu sais t'as pas trop le choix pour les chaînes de caractères... Rien que l'entrée de l'utilisateur c'est une chaine. Donc à partir de la lol...
void Aurevoir( void ); //Bonne journée
|
|
Cette discussion est classée dans : programme, convertisseur, seule, romain
Répondre à ce message
Sujets en rapport avec ce message
convertisseur c++ -->algo? [ par johanb ]
bonjour à tous, j'aimerais savoir si quelqu'un connais un logiciel permettant de convertir du texte c++ en algo.En effet, j'ai réalisé un programme da
convertir du code c++ en algorithmique? [ par johanb ]
bonjour à tous, j'aimerais savoir si quelqu'un connais un logiciel permettant de convertir du code c++ en algo.En effet, j'ai réalisé un programme dan
Registre Association extention fichier [ par mortiis ]
Bonjour à tousJe fais un programme qui utilise des fichier .wasj'aimerais savoir comment dans la base de registre je peut dire que ce type de fichier
Oracle OCI ou fichier ? [ par PunkDude424 ]
salut, je voudrais faire un programme et avoir la possibilité qu'il sois billingue, alors je me demandais se que j'était mieux de faire, mon programme
BeSoin d un programme ????? [ par WaNoU ThE EpSyLoN ]
salut tout le monde je début sur le C ou C++ et je voudrai savoir si il faut se procurer des logiciels pour pouvoir créer des projet avec ce langage ?
Utilisation d'une dll compilée dans un programme C [ par Cako19 ]
Bonjour, Je souhaite utiliser une fonction présente dans une dll compilée qu'on m'a fournie. Comment puis-je faire en sorte que le programme dans lequ
Recherche le fichier "device.h" [ par marc_pl ]
Bonjour, j'ai essayé de compiler ce programme: http://research.microsoft.com/~hollasch/thesis/wire4-101.zipMais il me manque le fichier device.h pour
C'est quoi itoa? [ par bball ]
Bonjour, j'ai recupere un programme qui permet de récuperer l'heure. Le programme contient une fonction qui s'appelle itoa. Le probleme c'est que je n
executer un programme et lire sur le port // [ par berdam ]
bonjour a tous,est-ce que c'est possible d'executer un programme quand une des entrées du port parallel est a 1je voudrais faire ca en c/++ ou autre s
Lire un fichier de configuration [ par neoTHGLF ]
Bonjour,je cherche à lire un fichier de configuration de ce type :#Commentaires "skippés" par le programmenom_variable = données#donc le programme che
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|