Buenas este año empiezo ingeniería informática y me he quedado encallado en una de mis practicas. Tengo que hacer un convertidor de números romanos a decimales solo se me permite procesar I V X L D M y el salto de linea para cualquier otro tengo que sacar mensaje de error y salir . Este es mi código, a ver si alguien me echa un cable .
#include <stdio.h>
char n;
int suma=0;
int a;
int b;
int main () {
printf("Escribe un numero en romano \n");
scanf("%c",&n);
if (n=='I' || n=='V' || n=='X' || n=='L' || n=='C' || n=='D' || n=='M' || n=='\n'){
while (n!='\n'){
if (n=='I') {
a=1;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b);}
}
if (n=='V') {
a=5;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='X') {
a=10;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='L') {
a=50;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='C') {
a=100;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='D') {
a=500;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='M') {
a=1000;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
b=a;
scanf("%n",&n);
}
}
else {
fprintf(stderr,"ERROR: El numero introducido no es correcto \n");
return -1;
}
printf("Este es el numero: %i",suma);
return 0;
}
Solo se me permiten usar condicionales if, else if, else y bucles while y for. Nada de arrays . Ni break.
Cuando ejecuto me reconoce si es uno de los caracteres permitidos y saca mensaje de error si no es el esperado, pero cuando pongo uno de los esperados no hace nada.
Buenos días Sr. ratchetmdt.
Con la intención de ayudarle he realizado 2 cambios en su codificación y su programa funciona sintaxticamente. Se las listo a continuación:
1. Siempre se deben inicializar las variables en C/C++ porque sino las llena de basura (variable a = 0, b= 0 ).
2. La variable char se debe leer con %c (entiendo que aquí tal vez se confundió -- refiriéndome al segundo sacanf que tiene).
Citarscanf("%n",&n);
Luego de esto he logrado que corra correctamente, mas no tiene la logica cuando ingreso VVV = 25 eso es falso debe ser = 15.
#include <stdio.h>
char n;
int suma=0;
int a = 0;
int b = 0;
int main () {
printf("Escribe un numero en romano \n");
scanf("%c",&n);
if (n=='I' || n=='V' || n=='X' || n=='L' || n=='C' || n=='D' || n=='M' || n=='\n'){
while (n!='\n'){
if (n=='I') {
a=1;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b);}
}
if (n=='V') {
a=5;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='X') {
a=10;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='L') {
a=50;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='C') {
a=100;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='D') {
a=500;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='M') {
a=1000;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
b=a;
scanf("%c",&n);
}
}
else {
fprintf(stderr,"ERROR: El numero introducido no es correcto \n");
return -1;
}
printf("Este es el numero: %i",suma);
return 0;
}
Si tienes problemas con la lógica para la conversión lo indicas y se te puede ayudar.
Cordiales Saludos.
Lo unico que me piden es que sume y reste bien , que se repita mas de 3 veces me dicen que no lo debo de contemplar.
Gracias por la correccion del fallo .
aun que sus instruciones no son tan claras, pra mi eso funciona
ese codigo tiene varias complicaciones que no son necesarios, pero eso funciona. yo le recomendaria a hacerlo de nnuevo, y poner algo como
if n == X
suma = 10
if n == I
suma = 1
if memcmp(n, "XX", 2) == 0
suma = 20
etc
suerte
#include <stdio.h>
char n;
int suma=0;
int a;
int b;
int main () {
printf("Escribe un numero en romano \n");
scanf("%c",&n);
if (n=='I' || n=='V' || n=='X' || n=='L' || n=='C' || n=='D' || n=='M' || n=='\n')
{
// tiene que sacar eso, porque ese condicion va a ser infinito y no es nesecario
//while (n!='\n')
//{
if (n=='I') {
a=1;
// a que refiere con "b"? b no tiene valor... seria mejor
// y menos codigo a simplamente escribir " suma = 1 "
if(b<a)
{
// aun que en ASM no tiene mucha diferencia, en C es mejor escribalo asi
// suma=suma+(a-b);
suma += (a - b)
}
else { suma=suma+(a+b);}
}
if (n=='V') {
a=5;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='X') {
a=10;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='L') {
a=50;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='C') {
a=100;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='D') {
a=500;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='M') {
a=1000;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
b=a;
scanf("%n",&n);
// }
}
else {
fprintf(stderr,"ERROR: El numero introducido no es correcto \n");
return -1;
}
printf("Este es el numero: %i",suma);
return 0;
}