elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 22:23  


Tema destacado: Nueva página de elhacker.net en Google+ Google+

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

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Errores con programa (punteros)
« en: 10 Diciembre 2011, 18:59 »

Buenas, me han dado el enunciado siguiente: Modifique el programa hexdec4 (que os pongo a continuación), añadiendo una función que solicite los dos carácteres hexadecimales, y que devuelva:

-0 si se ha introducido el código qq de salida
-1 si se han introducido dos carácteres hexadecimales correctos.

En este último caso, también devolverá los dos caracteres hexadecimales convertidos.


Una aclaración, si introducimos un caracter que no sea hexadecimal, por ejemplo el mm, el programa nos debe pedir de nuevo que introduzcamos dos nuevos carácteres hexadecimales, así hasta que metamos uno correcto.

El programa lo que hace es una conversión de hexadecimal a decimal.
El programa que hay que modificar es el siguiente:

Código
#include <stdio.h>
 
int hexadecimal (char car1, char car2); //Declaramos la funcion hexadecimal
 
int main ()
{
  //Declaramos las variables
  char car1;
  char car2;
  int valor;
 
  //Iniciamos el bucle while
  while (1){
     printf("Introduzca un valor hexadecimal:");
     scanf(" %c%c", &car1, &car2);
     if (car1 == 'q' && car2 == 'q'){
        printf ("Presione enter para salir\n");
        while (getchar() != '\n');  
        getchar();
        break;
     }if ((valor = hexadecimal (car1, car2)))  //Llamamos a la funcion hexadecimal
 
        printf("El valor decimal de 0x%c%c es %d\n", car1, car2, valor);
  }
 
  return 0;
}
 
int hexadecimal(char car1, char car2)   //Funcion hexadecimal
{
  char valor1;
  char valor2;
 
  if ('0' <= car1 && car1 <= '9')
     valor1 = car1 - '0';
  else if ('A' <= car1 && car1 <= 'F')
     valor1 = car1 - 'A' + 10;
  else if ('a' <= car1 && car1 <= 'f')
     valor1 = car1 - 'a' + 10;
  else
     return -1;
 
  if ('0' <= car2 && car2 <= '9')
     valor2 = car2 - '0';
  else if ('A' <= car2 && car2 <= 'F')
     valor2 = car2 - 'A' + 10;
  else if ('a' <= car2 && car2 <= 'f')
     valor2 = car2 - 'a' + 10;
  else
     return -1;
 
  return valor1 * 16 + valor2;
}
 

Y lo he modificado de tal forma:

Código
#include <stdio.h>
 
int* hexadecimal (char car1, char car2); //Declaramos la funcion hexadecimal
 
int main ()
{
  //Declaramos las variables
 
  char car1;
  char car2;
  int valor, valor1,valor2;
  int*v;
 
 
 
  //Iniciamos el bucle while
  while (1)
  {
     printf("Introduzca un valor hexadecimal:");
     scanf("%c%c", &car1, &car2);
 
     v = hexadecimal (car1, car2);  //Llamamos a la funcion hexadecimal
 
     if(v==0) printf("Presione enter para salir\n");
     else
          v= hexadecimal (car1, car2);
 
 
        printf("El valor decimal de 0x%c%c es %d\n", car1, car2, valor);
 
  }
  return (0);
}
 
int* hexadecimal(char car1, char car2)   //Funcion hexadecimal
{
  char valor1;
  char valor2;
  int*p;
  p=NULL;
  p=(int*)malloc(2*sizeof(int));
  if(!p) printf("Error en la reserva dinamica de memoria:");
  else
  {
  if (car1 == 'q' && car2 == 'q')
  {
  *p=0;
  }
  return(p);
 
  else ((('0' <= car1 && car1 <= '9')||('A' <= car1 && car1 <= 'F')||('a' <= car1 && car1 <= 'f'))&&(('0' <= car2 && car2 <= '9')||('A' <= car2 && car2 <= 'F')||('a' <= car2 && car2 <= 'f')))   {
   {
   valor=valor1 * 16 + valor2;
   return(valor);    
   }
  }
}
 


Me da errores y no hace lo que busco, ¿alguna ayuda?

Saludos!


En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines