CONVERSIONE DA ROMANI A DECIMALI

di il
1 risposte

CONVERSIONE DA ROMANI A DECIMALI

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;
}

1 Risposte

  • Re: CONVERSIONE DA ROMANI A DECIMALI

    Quando presenti del codice, devi usare gli appositi tag "Code" altrimenti la leggibilità viene fortemente compromessa, e le probabilità di ricevere un aiuto risolutivo diventano molto minori.

    Detto questo, il più appariscente errore nel tuo codice è l'errato e inutile decremento della variabile i dentro il secondo ciclo for, che effettua la scansione "da destra" della stringa immessa.
Devi accedere o registrarti per scrivere nel forum
1 risposte