Título: Problema con mi codigo
Publicado por: Naluem en 8 Noviembre 2014, 13:03 pm
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"); 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; } } 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.
Título: Re: Problema con mi codigo
Publicado por: lluvplay en 8 Noviembre 2014, 14:24 pm
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). scanf("%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.
Título: Re: Problema con mi codigo
Publicado por: Naluem en 8 Noviembre 2014, 14:38 pm
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 .
Título: Re: Problema con mi codigo
Publicado por: plataplomo2948 en 8 Noviembre 2014, 19:44 pm
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; }
|