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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema al crear una función a partir de un programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al crear una función a partir de un programa  (Leído 2,331 veces)
jamatbar

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Problema al crear una función a partir de un programa
« en: 30 Noviembre 2011, 15:55 pm »

Buenas, tengo el siguiente programa, que hace lo siguiente;

Un programa que lea dos caracteres hexadecimales y dé como salida su valor en decimal, en el que se permiten el uso de minusculas y además, que si se introduce un caracter invalido te lo indicará con un mensaje de error, y por ultimo, que si escribes la sentencia qq el programa se termine.

El codigo del programa es el siguiente (ya hace todo lo que se pide);

Código
  1. #include <stdio.h>
  2.  
  3. int main ()
  4. {
  5.  // Declaramos las variables
  6.  char car1;
  7.  char car2;
  8.  char valor1;
  9.  char valor2;
  10.  int valor;
  11.  int flag; // Declaramos la variable de control
  12.  
  13. do { // Iniciamos el bucle do-while
  14.    flag=0;
  15.    printf("Introduzca un valor hexadecimal:\n");
  16.    scanf("\n%c%c", &car1, &car2);
  17.  
  18.    if (car1 == 'q' && car2 == 'q') // Con esta sentencia hacemos que el programa finalice al escribir qq
  19.        {
  20.        printf("Presione enter para salir\n");
  21.        while (getchar()!='\n');
  22.        getchar ();
  23.        return 0;
  24.        }
  25.  
  26.    else
  27.     {
  28.        if('0'<=car1 && car1<='9')
  29.        valor1=car1-'0';
  30.        else if ('A'<=car1 && car1<='F')
  31.        valor1=car1-'A'+10;
  32.        else if ('a'<=car1 && car1<='f')
  33.        valor1=car1-'a'+10;
  34.        else
  35.          {
  36.          flag=1;
  37.          printf("Valor erroneo\n\n");
  38.          }
  39.  
  40.        if('0'<=car2 && car2<='9')
  41.        valor2=car2-'0';
  42.        else if ('A'<=car2 && car2<='F')
  43.        valor2=car2-'A'+ 10;
  44.        else if ('a'<=car2 && car2<='f')
  45.        valor2=car2-'a'+10;
  46.        else
  47.          {
  48.            flag=1;
  49.            printf("Valor erroneo\n\n");
  50.          }
  51.  
  52.        if (flag==0)
  53.          {
  54.            valor= 16*valor1 + valor2;
  55.            printf("EL valor decimal de 0x%c%c es %d\n",car1,car2,valor);
  56.          }
  57.     }
  58.  
  59. }  
  60.    while(1);
  61.  
  62.    return 0;
  63. }

Y ahora me piden lo siguiente: Modificar el programa de tal forma que, además de la función main, exista una función que tome como parámetros dos caracteres hexadecimales y devuelva su valor decimal: Esto supone: declarar la nueva función, definir la nueva función y modificar la función main para que use la nueva funcion.

Pues bien, haciendo algunos cambios he llegado a esto:

Código
  1. #include <stdio.h>
  2.  
  3. int hexadecimal (char car1, char car2);
  4. int main ()
  5.  
  6. {
  7.  
  8.  char car1;
  9.  char car2;
  10.  char valor1;
  11.  char valor2;
  12.  int valor;
  13.  int flag;
  14.  
  15.  
  16.    flag=0;
  17.    printf("Introduzca un valor hexadecimal:\n");
  18.    scanf("\n%c%c", &car1, &car2);
  19.  
  20.    valor=hexadecimal(car1,car2);
  21.  
  22.    int hexadecimal (char car1, char car2)
  23.  
  24.    {
  25.  
  26.    if (car1 == 'q' && car2 == 'q')
  27.        {
  28.        printf("Presione enter para salir\n");
  29.        while (getchar()!='\n');
  30.        getchar ();
  31.        return 0;
  32.        }
  33.  
  34.    else
  35.     {
  36.        if('0'<=car1 && car1<='9')
  37.        valor1=car1-'0';
  38.        else if ('A'<=car1 && car1<='F')
  39.        valor1=car1-'A'+10;
  40.        else if ('a'<=car1 && car1<='f')
  41.        valor1=car1-'a'+10;
  42.        else
  43.          {
  44.          flag=1;
  45.          printf("Valor erroneo\n\n");
  46.          }
  47.  
  48.        if('0'<=car2 && car2<='9')
  49.        valor2=car2-'0';
  50.        else if ('A'<=car2 && car2<='F')
  51.        valor2=car2-'A'+ 10;
  52.        else if ('a'<=car2 && car2<='f')
  53.        valor2=car2-'a'+10;
  54.        else
  55.          {
  56.            flag=1;
  57.            printf("Valor erroneo\n\n");
  58.          }
  59.  
  60.        if (flag==0)
  61.          {
  62.            valor= 16*valor1 + valor2;
  63.            printf("EL valor decimal de 0x%c%c es %d\n",car1,car2,valor);
  64.          }
  65.     }
  66.     }
  67.  
  68.  
  69.  
  70.    return 0;
  71. }

Pero me da una serie de errores al compilar, ¿alguna ayuda o sugerencia?

Gracias de antemano y saludos!


En línea

jamatbar

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Problema al crear una función a partir de un programa
« Respuesta #1 en: 30 Noviembre 2011, 16:24 pm »

Bueno, he seguido intentándolo y he llegado a compilar sin errores, el problema es que es como si no usara la función, ya que pongo dos valores y me dice que su valor en hexadecimal es 0, y eso con cualquiera :S

Código
  1. #include <stdio.h>
  2.  
  3. int hexadecimal (char car1, char car2);
  4. int main ()
  5.  
  6. {
  7.  
  8.  char car1;
  9.  char car2;
  10.  int valor;
  11.  int flag;
  12.  
  13.  
  14.  
  15.    flag=0;
  16. while ((car1!='q') && (car2!='q'))
  17. {
  18.    printf("Introduzca un valor hexadecimal:\n");
  19.    scanf("\n%c%c", &car1, &car2);
  20.    valor=hexadecimal(car1, car2);
  21.    if ((car1!='q') && (car2!='q')){
  22.            printf("EL valor decimal de 0x%c%c es %d\n",car1,car2,valor);
  23.    }
  24.    }
  25.    return 0;
  26.  
  27.    }
  28.  
  29.  
  30.    int hexadecimal (char car1, char car2)
  31.  
  32.    {
  33.    char valor1;
  34.    char valor2;
  35.    int flag;
  36.    int valor;
  37.    if (car1 == 'q' && car2 == 'q')
  38.        {
  39.        printf("Presione enter para salir\n");
  40.        while (getchar()!='\n');
  41.        getchar ();
  42.        return 0;
  43.        }
  44.  
  45.    else
  46.     {
  47.        if('0'<=car1 && car1<='9')
  48.        valor1=car1-'0';
  49.        else if ('A'<=car1 && car1<='F')
  50.        valor1=car1-'A'+10;
  51.        else if ('a'<=car1 && car1<='f')
  52.        valor1=car1-'a'+10;
  53.        else
  54.          {
  55.          flag=1;
  56.          printf("Valor erroneo\n\n");
  57.          }
  58.  
  59.        if('0'<=car2 && car2<='9')
  60.        valor2=car2-'0';
  61.        else if ('A'<=car2 && car2<='F')
  62.        valor2=car2-'A'+ 10;
  63.        else if ('a'<=car2 && car2<='f')
  64.        valor2=car2-'a'+10;
  65.        else
  66.          {
  67.            flag=1;
  68.            printf("Valor erroneo\n\n");
  69.          }
  70.  
  71.        if (flag==0)
  72.          {
  73.            valor= 16*valor1 + valor2;
  74.            printf("EL valor decimal de 0x%c%c es %d\n",car1,car2,valor);
  75.          }
  76.     }
  77.     return valor;
  78.     }
  79.  
  80.  


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema al crear una función a partir de un programa
« Respuesta #2 en: 30 Noviembre 2011, 17:37 pm »

Esa funcion la debes hacer de forma tal que solo indique si la conversion no es valida (por ejemplo devolviendo -1), quien la llama (la funcion principal en tu caso) se debe hacer cargo de hacer lo necesario (imprimir el mensaje de error).

Mas o menos asi:
Código
  1. #include <stdio.h>
  2.  
  3. int hexadecimal (char car1, char car2);
  4.  
  5. int main(void)
  6. {
  7.   char car1;
  8.   char car2;
  9.   int valor;
  10.   int flag;
  11.  
  12.   while (1){
  13.      puts("Introduzca un valor hexadecimal:");
  14.      scanf(" %c%c", &car1, &car2);
  15.      if (car1 == 'q' && car2 == 'q'){
  16.         printf ("Presione enter para salir\n");
  17.         while (getchar() != '\n')
  18.            ;
  19.         getchar();
  20.         break;
  21.      }else if ((valor = hexadecimal (car1, car2)) == -1)
  22.         printf ("Valor erroneo\n\n");
  23.      else
  24.         printf("0x%c%c == %d\n", car1, car2, valor);
  25.   }
  26.  
  27.   return 0;
  28. }
  29.  
  30. int hexadecimal(char car1, char car2)
  31. {
  32.   char valor1;
  33.   char valor2;
  34.  
  35.   if ('0' <= car1 && car1 <= '9')
  36.      valor1 = car1 - '0';
  37.   else if ('A' <= car1 && car1 <= 'F')
  38.      valor1 = car1 - 'A' + 10;
  39.   else if ('a' <= car1 && car1 <= 'f')
  40.      valor1 = car1 - 'a' + 10;
  41.   else
  42.      return -1;
  43.  
  44.   if ('0' <= car2 && car2 <= '9')
  45.      valor2 = car2 - '0';
  46.   else if ('A' <= car2 && car2 <= 'F')
  47.      valor2 = car2 - 'A' + 10;
  48.   else if ('a' <= car2 && car2 <= 'f')
  49.      valor2 = car2 - 'a' + 10;
  50.   else
  51.      return -1;
  52.  
  53.   return valor1 * 16 + valor2;
  54. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
jamatbar

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Problema al crear una función a partir de un programa
« Respuesta #3 en: 1 Diciembre 2011, 16:16 pm »

Gracias por la aclaración, ahora lo he ampliado para que convierta 4 digitos hexadecimales en un numero decimal, pero el orden del resultado sale alterado, por ejemplo, si pongo 25BC me sale que en decimal es 48165, cuando este número en hexadecimal es el BC25, es decir, justo al reves, este es el codigo:

EDITO POR QUE LO ACABO DE SOLUCIONAR

Un saludo!
« Última modificación: 1 Diciembre 2011, 16:22 pm por jamatbar » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
crear un DVD a partir de un avi
Multimedia
eco2001 3 2,528 Último mensaje 13 Noviembre 2004, 06:39 am
por eco2001
Crear String a partir de una Lista de caracteres son concatenar(problema)
Java
er_rafael_rafi 5 8,477 Último mensaje 24 Junio 2009, 17:38 pm
por juancho77
funcion para partir en dos una matriz, help
PHP
HardieVon 3 2,688 Último mensaje 2 Julio 2009, 12:59 pm
por Hadess_inf
programa para crear videos a partir de fotos y música
Multimedia
g0nsan 2 5,567 Último mensaje 7 Septiembre 2009, 23:32 pm
por g0nsan
Crear instalador de programa a partir de su instalación?
Software
1mpuls0 5 1,468 Último mensaje 26 Marzo 2014, 19:31 pm
por 1mpuls0
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines