PDA

Visualizza la versione completa : [C] Esercizio: algoritmo di conversione in numeri romani


Sos_Code
08-05-2012, 20:05
Vorrei capire perché il programma non mi converte i numeri decimali in romani.
Sicuramente c'è qualche errore, ma non sono riuscita ad individuarlo.
Qualcuno può aiutarmi?


#include <stdio.h>
#include <stdlib.h>

int main()
{
int numero, decina, unita;

printf("Inserire un numero da 1 a 99:\n");
scanf("%d", &numero);

if (numero <= 0)
printf("Numero impossibile da scrivere in numeri romani\n");

else
{
printf("\n%d = ", numero);
decina = numero / 10;
unita = numero % 10;

if (numero >= 0)
{
switch (decina)
{
case '1': printf("X");
break;

case '2': printf("XX");
break;

case '3': printf("XXX");
break;

case '4': printf("XL");
break;

case '5': printf("L");
break;

case '6': printf("LX");
break;

case '7': printf("LXX");
break;

case '8': printf("LXXX");
break;

case '9': printf("LC");
}
}
switch (unita)
{
case '1': printf("I");
break;

case '2': printf("II");
break;

case '3': printf("III");
break;

case '4': printf("IV");
break;

case '5': printf("V");
break;

case '6': printf("VI");
break;

case '7': printf("VII");
break;

case '8': printf("VIII");
break;

case '9': printf("IX");
}
printf("\n\n");
}
return 0;
}

escocat
08-05-2012, 21:13
E' l'algoritmo che non va. In questo modo il 49 ti esce XLIX e invece è IL.

Sos_Code
08-05-2012, 21:30
49 dovrebbe essere giusto. Si scrive XLIX.


Però, nel momento in cui faccio partire il programma,
mi stampa ad esempio

"49 = "

Cioè, il ciclo switch è come se non ci fosse..non ci entra nemmeno.

torn24
08-05-2012, 21:33
L'ALGORITMO VA :biifu:
nello switch fai il confronto con caratteri

switch(numero)
{
case '1':
break;

case '2':
break;



}


deve essere un confronto tra numeri "senza virgolette"
switch(numero)
{
case 1:
break;

case 2:
break;



}


controlla che tutte le parentesi graffe sono chiuse e aperte correttamente

e sostituisci

decine=numero/10;
con
if(numero>=10)
decine=(int)numero/10;

oregon
08-05-2012, 21:33
Devi usare i tag CODE per il codice ... dovresti già saperlo ...

Lo switch non è un ciclo ...

Se decina è un numero devi scrivere

case 1:

e non

case '1':

Alex'87
08-05-2012, 21:51
Originariamente inviato da escocat
E' l'algoritmo che non va. In questo modo il 49 ti esce XLIX e invece è IL. No, XLIX è giusto :mem:

escocat
08-05-2012, 22:24
L'ho sempre pensato che il C non è il mio linguaggio :malol:

Sos_Code
08-05-2012, 22:55
Originariamente inviato da torn24
L'ALGORITMO VA :biifu:
nello switch fai il confronto con caratteri

switch(numero)
{
case '1':
break;

case '2':
break;



}


deve essere un confronto tra numeri "senza virgolette"
switch(numero)
{
case 1:
break;

case 2:
break;



}


controlla che tutte le parentesi graffe sono chiuse e aperte correttamente

e sostituisci

decine=numero/10;
con
if(numero>=10)
decine=(int)numero/10;


Grazie mille, davvero. Adesso il programma funziona perfettamente! Mi è bastato togliere le virgolette..lo terrò a mente per le prossime volte!

oregon
08-05-2012, 23:10
Originariamente inviato da Sos_Code
Mi è bastato togliere le virgolette..

Ma dovresti anche spiegarti cosa significa mettere o non mettere le virgolette ...

Sos_Code
08-05-2012, 23:13
Se per te non è un disturbo, potresti spiegarmelo tu..

Loading