elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con mi codigo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con mi codigo  (Leído 1,393 veces)
Naluem

Desconectado Desconectado

Mensajes: 2



Ver Perfil
Problema con mi codigo
« 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 .

Código
  1. #include <stdio.h>
  2. char n;
  3. int suma=0;
  4. int a;
  5. int b;
  6. int main () {
  7. printf("Escribe un numero en romano \n");
  8. scanf("%c",&n);
  9.    if (n=='I' || n=='V' || n=='X' || n=='L' || n=='C' || n=='D' || n=='M' || n=='\n'){
  10.        while (n!='\n'){
  11.            if (n=='I') {
  12.                    a=1;
  13.                    if(b<a) { suma=suma+(a-b); }
  14.                    else { suma=suma+(a+b);}
  15.            }
  16.            if (n=='V') {
  17.                    a=5;
  18.                    if(b<a) { suma=suma+(a-b); }
  19.                    else { suma=suma+(a+b); }
  20.            }
  21.            if (n=='X') {
  22.                    a=10;
  23.                    if(b<a) { suma=suma+(a-b); }
  24.                    else { suma=suma+(a+b); }
  25.            }
  26.            if (n=='L') {
  27.                    a=50;
  28.                    if(b<a) { suma=suma+(a-b); }
  29.                    else { suma=suma+(a+b); }
  30.            }
  31.            if (n=='C') {
  32.                    a=100;
  33.                    if(b<a) { suma=suma+(a-b); }
  34.                    else { suma=suma+(a+b); }
  35.            }
  36.            if (n=='D') {
  37.                    a=500;
  38.                    if(b<a) { suma=suma+(a-b); }
  39.                    else { suma=suma+(a+b); }
  40.            }
  41.            if (n=='M') {
  42.                    a=1000;
  43.                    if(b<a) { suma=suma+(a-b); }
  44.                    else { suma=suma+(a+b); }
  45.            }
  46.            b=a;
  47.            scanf("%n",&n);
  48.        }
  49.  
  50.    }
  51.    else {
  52.        fprintf(stderr,"ERROR: El numero introducido no es correcto \n");
  53.        return -1;
  54.    }
  55. printf("Este es el numero: %i",suma);
  56.    return 0;
  57. }



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.


« Última modificación: 8 Noviembre 2014, 13:21 pm por Eternal Idol » En línea

lluvplay

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Re: Problema con mi codigo
« Respuesta #1 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).
Citar
  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.

Código:
#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.


En línea

* Determinismo Causal !! Estamos Programados Para Necesitar Respuestas!!

* No deberías copiar un código, sin antes haber comprendido porque funciona de esa manera !
Naluem

Desconectado Desconectado

Mensajes: 2



Ver Perfil
Re: Problema con mi codigo
« Respuesta #2 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 .
En línea

plataplomo2948

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Problema con mi codigo
« Respuesta #3 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

Código:
    #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;
    }


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con código
Programación Visual Basic
z3r0 Bug 7 2,211 Último mensaje 24 Noviembre 2005, 16:51 pm
por NYlOn
¿Cuál es la diferencia entre código objeto, código máquina y código binario?
Programación General
Aikanáro Anário 9 28,961 Último mensaje 23 Diciembre 2010, 15:19 pm
por pucheto
Extrayendo código fuente de una web (Problema con código generado por JS)
PHP
Littl3 4 7,842 Último mensaje 3 Marzo 2011, 04:13 am
por Nakp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines