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

 

 


Tema destacado: Estamos en la red social de Mastodon


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

Desconectado Desconectado

Mensajes: 101


Ver Perfil
Problema con programa conversor de hexadecimal (SOLUCIONADO)
« en: 9 Enero 2014, 23:06 pm »

Buenas, tengo un programa que convierte dos caracteres hexadecimales a su correspondiente número en decimal, admite tanto mayúsculas como minúsculas y si se introduce los caracteres qq el programa termina.

El código es el siguiente:

Código:
#include <stdio.h>

#define NOERROR 1
#define ERROR 0

int hexDec(char c1, char c2);
int main()
{

  /* Declaramos las variables */
  char car1;
  char car2;

  /* Bucle While para que salga con qq */
  do
    {
      printf("Introduzca el numero hexadecimal: ");
      scanf(" %c %c", &car1, &car2);
      
      hexDec(car1, car2);
    
    }
while(car1 != 'q' && car2 != 'q');

  return 0;
}


int hexDec(char c1, char c2)
{

char v1;
char v2;
int cuno = NOERROR;
int cdos = NOERROR;
int resultado;

 if (c1 != 'q' && c2 != 'q')
        {

          if ('0' <= c1 && c1 <= '9')
            v1 = c1 - '0';
          else if ('A' <= c1 && c1 <= 'F')
            v1 = c1 - 'A' + 10;
          else if ('a' <= c1 && c1 <= 'f')
            v1 = c1 - 'a' + 10;
          else
            {
              cuno = ERROR;
              printf("Error en el primer valor introducido\n");

            }
          if ('0' <= c2 && c2 <= '9')
            v2 = c2 - '0';
          else if ('A' <= c2 && c2 <= 'F')
            v2 = c2 - 'A' + 10;
          else if ('a' <= c2 && c2 <= 'f')
            v2 = c2 - 'a' + 10;
          else
            {
              cdos = ERROR;
              printf("Error en el segundo valor introducido\n");

            }

          if (cuno == NOERROR && cdos == NOERROR)
            {
              resultado = 16 * v1 + v2;

              printf("El valor decimal de 0x%c%c es %d\n", c1, c2,
                     resultado);

            }
        }

cuno = NOERROR;
        cdos = NOERROR;


return resultado;

}

Hasta ahí bien, el problema es que me piden una función hexValidos (la función hexDec debe seguir existiendo) que reciba dos caracteres como parámetros, y devuelva una indicación de si los dos caracteres son caracteres hexadecimales válidos o no (con el mensaje "Invalido).

El problema es que no sé muy bien como hacerlo, por ahora he hecho lo siguiente (qué seguro que está mal, pero no se me ocurre otra cosa):

Código:
void hexValidos(char a, char b)
{

int v1;
int v2;
int valor;
int ca = NOERROR;
int cb = NOERROR;

if (a != 'q' && b != 'q')

 {
    if ((('0' <= a && a <= '9') || ('A' <= a && a <= 'F') || ('a' <= a && a <= 'f')) && (('0' <= b && b <= '9') || ('A' <= b && b <= 'F') || ('a' <= b && b <= 'f')))
    
     hexDec(c1,c2);

    else
printf("Invalido\n");

return;

}


¿Alguna ayuda?, no pido que me hagan el código pero si me gustaría al menos tener alguna indicación o consejo sobre como hacerlo.

Gracias de antemano y un saludo!


« Última modificación: 10 Enero 2014, 14:21 pm por jamatbar » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Problema con programa conversor de hexadecimal a decimal
« Respuesta #1 en: 10 Enero 2014, 00:19 am »

no entiendo cual es el problema... que error te da? que conflicto tiene el codigo? que duda tienes?


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
jamatbar

Desconectado Desconectado

Mensajes: 101


Ver Perfil
Re: Problema con programa conversor de hexadecimal a decimal
« Respuesta #2 en: 10 Enero 2014, 00:42 am »

El problema es que no sé que partes quitar de la función hexDec e implementar ambas funciones para hacer lo que me piden :S
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Problema con programa conversor de hexadecimal a decimal
« Respuesta #3 en: 10 Enero 2014, 00:50 am »

tu programaste hexDec? por hexDec revisa la validez de los caracteres... lo otro que no entiendo es por qué tendrias que quitar cosas de hexDec :s creo que es bueno que te expliques con mas detalle (sin codigo) para poder comprender lo siguiente...
- que tienes?
- que quieres?
- que sabes?
- cual es tu problema?
- donde está el problema?

porque hexValidos a simple vista se ve funcional, hexDec también, así que no comprendo el problema del programa
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
jamatbar

Desconectado Desconectado

Mensajes: 101


Ver Perfil
Re: Problema con programa conversor de hexadecimal a decimal
« Respuesta #4 en: 10 Enero 2014, 11:01 am »

Buenas, he conseguido hacer esto:

Código:
#include <stdio.h>

#define NOERROR 1
#define ERROR 0

int hexValidos(char a, char b);
int hexDec(char c1, char c2);
int main()
{

  /* Declaramos las variables */
  char car1;
  char car2;

  /* Bucle While para que salga con qq */
  do
    {
      printf("Introduzca el numero hexadecimal: ");
      scanf(" %c %c", &car1, &car2);
      
      hexDec(car1, car2);
    
    }
while(car1 != 'q' && car2 != 'q');

  return 0;
}


int hexDec(char c1, char c2)
{

char v1;
char v2;
int cuno = NOERROR;
int cdos = NOERROR;
int resultado;

 if (c1 != 'q' && c2 != 'q')
        {

          if ('0' <= c1 && c1 <= '9')
            v1 = c1 - '0';
          else if ('A' <= c1 && c1 <= 'F')
            v1 = c1 - 'A' + 10;
          else if ('a' <= c1 && c1 <= 'f')
            v1 = c1 - 'a' + 10;
          else
            {
              hexValidos(c1,c2);

            }
          if ('0' <= c2 && c2 <= '9')
            v2 = c2 - '0';
          else if ('A' <= c2 && c2 <= 'F')
            v2 = c2 - 'A' + 10;
          else if ('a' <= c2 && c2 <= 'f')
            v2 = c2 - 'a' + 10;
          else
            {
              hexValidos(c1,c2);
            }

          if (cuno == NOERROR && cdos == NOERROR)
            {
              resultado = 16 * v1 + v2;

              printf("El valor decimal de 0x%c%c es %d\n", c1, c2,
                     resultado);

            }
        }

cuno = NOERROR;
        cdos = NOERROR;


return resultado;

}

int hexValidos(char a, char b)
{

char va1;
char va2;
int cuno = NOERROR;
int cdos = NOERROR;


 if (a != 'q' && b != 'q')
        {

          if ('0' <= a && a <= '9')
            va1 = a - '0';
          else if ('A' <= a && a <= 'F')
            va1 = a - 'A' + 10;
          else if ('a' <= a && a <= 'f')
            va1 = a - 'a' + 10;
          else
            {
     cuno = ERROR;
            }
          if ('0' <= b && b <= '9')
            va2 = b - '0';
          else if ('A' <= b && b <= 'F')
            va2 = b - 'A' + 10;
          else if ('a' <= b && b <= 'f')
            va2 = b - 'a' + 10;
          else
            {
     cdos = ERROR;
            }

          if (cuno == ERROR || cdos == ERROR)
            {
             printf("Invalido\n");

            }
        }

return 0;

}

Pero tengo un par de cosas que no me sirven, cuando meto un par de caracteres no validos el programa hace lo siguiente:

Introduzca el numero hexadecimal: ta
Invalido
El valor decimal de 0xta es 1866


¿Cómo puedo hacer que no me salga el mensaje de "El valor decimal..."?

Y segundo, cuando intento compilar con avisos (gcc -W -Wall -o hexDec5 hexDec5.c me sale el siguiente aviso:

aviso: se define la variable ‘va2’ pero no se usa
aviso: se define la variable ‘va1’ pero no se usa


¿Cómo puedo solucionarlo?

Saludos y gracias de antemano!



En línea

jamatbar

Desconectado Desconectado

Mensajes: 101


Ver Perfil
Re: Problema con programa conversor de hexadecimal a decimal
« Respuesta #5 en: 10 Enero 2014, 11:07 am »

tu programaste hexDec? por hexDec revisa la validez de los caracteres... lo otro que no entiendo es por qué tendrias que quitar cosas de hexDec :s creo que es bueno que te expliques con mas detalle (sin codigo) para poder comprender lo siguiente...
- que tienes?
- que quieres?
- que sabes?
- cual es tu problema?
- donde está el problema?

porque hexValidos a simple vista se ve funcional, hexDec también, así que no comprendo el problema del programa

Buenas, sí, yo hice hexDec, el caso es que en mi facultad me piden primero que haga el programa hexDec.c con una función llamada hexDec (aparte de la función main) que haga lo siguiente:

Modifique el programa de 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. Eso supone:

- declarar una nueva función llamada hexDec
- definir la nueva función
- modificar la función main para que utilice la nueva función

Bueno, esta función la hice y me funciona el programa perfectamente, ahora viene el ejercicio 2 donde me piden lo siguiente:

Defina una nueva función hexValidos que reciba dos caracteres como parámetros, y devuelva una indicación de si los dos caracteres son caracteres hexadecimales validos o no.

En mi anterior mensaje pongo lo que llevo hecho y a falta de un par de cosas parece que me sirve perfectamente
En línea

jamatbar

Desconectado Desconectado

Mensajes: 101


Ver Perfil
Re: Problema con programa conversor de hexadecimal a decimal
« Respuesta #6 en: 10 Enero 2014, 14:20 pm »

Bueno pues ya he podido hacerlo después de mil quebraderos de cabeza xD
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Problema con programa conversor de hexadecimal a decimal
« Respuesta #7 en: 10 Enero 2014, 14:24 pm »

observa que en los if de hexDecç

haces esto
Código
  1. if (c1 != 'q' && c2 != 'q')
  2.        {
  3.  
  4.          if ('0' <= c1 && c1 <= '9')
  5.            v1 = c1 - '0';
  6.          else if ('A' <= c1 && c1 <= 'F')
  7.            v1 = c1 - 'A' + 10;
  8.          else if ('a' <= c1 && c1 <= 'f')
  9.            v1 = c1 - 'a' + 10;
  10.          else
  11.            {
  12.              hexValidos(c1,c2);
  13.  
  14.            }

lo que haces es comprobar que sean validos (si no son "q", si son entre 0 y 9 o a y f...) en caso de que el no pueda procesarlos manda a hexValidos... pero quien te dispara el "el resultado es"

es esta linea
Código
  1. if (cuno == NOERROR && cdos == NOERROR)

más la variable "cuno" nunca la tocaste en hexDec  así que siempre va a correr ese mensaje...



el otro problema creo que es porque en hexValidos declaraste
Código
  1. char va1;
  2. char va2;

les asignaste valores... pero propiamente nunca las usaste para dar salida a algo y el compilador te está diciendo que cuidado con eso capaz olvidaste algo

la funcion como la tenias al principio

Código
  1. if (
  2. (
  3.  ('0' <= a && a <= '9') || ('A' <= a && a <= 'F') || ('a' <= a && a <= 'f')
  4. ) && (
  5.  ('0' <= b && b <= '9') || ('A' <= b && b <= 'F') || ('a' <= b && b <= 'f')
  6. )
  7. )

parecía bastante practica si eso es falso, es invalido, si es verdadero es valido

veo que respondiste XD bueno pero checkea esos detallitos
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Batch] Conversor de Decimal a Hexadecimal
Scripting
maxx93 0 2,896 Último mensaje 5 Agosto 2010, 06:08 am
por maxx93
[Batch] Conversor de Hexadecimal a Decimal
Scripting
maxx93 3 3,957 Último mensaje 6 Agosto 2010, 03:14 am
por Binary_Death
Conversor asccii hexadecimal utilizando funciones de salida y entrada C
Programación C/C++
sinsombra_666 0 2,045 Último mensaje 24 Septiembre 2010, 23:08 pm
por sinsombra_666
Problema con programa conversor de decimal a binario
Programación C/C++
jamatbar 3 2,146 Último mensaje 27 Noviembre 2013, 18:32 pm
por jamatbar
Conversor BATCH, hexadecimal a binario etc...
Scripting
Como me puede pasar ami 1 5,637 Último mensaje 18 Diciembre 2014, 11:54 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines