Ciao A tutti!
Volevo chiedervi se qualcuno di voi riuscirebbe a capire il perche' del non corretto funzionamento del mio programma. Sono in terza superiore di un tecnico e devo consegnare un progetto finito.
Il programma funziona quasi per tutte le cifre, ma se inserisco MCDV mi risulta 1605 (dovrebbe essere 1405), mentre se inserisco CDV solamente mi da il risultato giusto (405). Qualcuno potrebbe aiutarmi per favore? Grazie in anticipo.
Ecco il programma:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Numeri romani
#define I 1
#define V 5
#define C 100
#define D 500
#define L 50
#define X 10
#define M 1000
int main(int argc, char *argv[]) {
// DICHIARAZIONE VARIABILI
char nRom[100];
int nRomInt[100],nDec=0,cifreRom=0,i,a=0;
//Leggi la stringa con le cifre romane
printf("Inserisci il numero romano da convertire: ");
scanf("%s",&nRom);
//Conta le cifre romane
cifreRom = (int) strlen(nRom);
//Calcola numero decimale
for(i=0;i<cifreRom;i++) {
switch(nRom)
{
case 'I': nRomInt = I;break;
case 'V': nRomInt = V;break;
case 'X': nRomInt = X;break;
case 'L': nRomInt = L;break;
case 'C': nRomInt = C;break;
case 'D': nRomInt = D;break;
case 'M': nRomInt = M;break;
default: printf("Il carattere %c non e' un numero romano.\nIl programma potrebbe non funzionare!\n", nRom);
}
}
// CICLO CONFRONTO CIFRE
for(i=cifreRom;i>0;i--)
{
i--;
if(i==0)
{
if (nRomInt[0]<=nDec)
{
nDec-= nRomInt[0];
}
else
{
nDec+=nRomInt[0];
}
}
else
{
if (nRomInt<=nRomInt[i-1])
{
nDec+= (nRomInt[i]+nRomInt[i-1]);
}
else
{
nDec+=(nRomInt[i]-nRomInt[i-1]);
}
}
}
printf("\nNumero decimale: %d \n\n", nDec);
return 0;
}