Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Leon8086x en 18 Septiembre 2011, 04:06 am



Título: Problemas con una funcion en c
Publicado por: Leon8086x en 18 Septiembre 2011, 04:06 am
Bueno, la hago cortita.

Estoy probando 3 funciones propias muy simples en c el programa es este.

pot o sea potencia de un numero usando recursividad

atonum de caracter ascii a numero

esnum o sea a ver si el carácter introducido den ascii es un numero



#include <stdio.h>



int pot (int base, int exp);
int esnum (int numero);
int atonum (int numero);

void main(void)
{

char exp,base,numero;

 printf("ingrese un numero del 0 al 9 \n \n \t \t");
 scanf("%c",&numero);

 printf ("La funcion esnum dio %d", esnum(numero));

 numero=atonum(numero);

 if (numero==-1)
 {
 printf("No es un numero del 0 al 9 \n \n \t \t");
 return (0);
 }
 printf("el numero ingresado es  \t \t %d \n \n ", numero);
 printf("ingrese un numero \n \n \t \t");
 scanf("%d",&exp);
 printf("ingrese un numero \n \n \t \t");
 scanf("%d",&base);



        
      return (0);
}

int pot (int base, int exp)
{

   exp=exp-1;
   base*=base;

   if (exp>=0)
   base=pot (base, exp);

   if (exp==0)
   return (1);

   return (base);

   return (1);

}


int esnum (int numero)
{
   if (0<=(numero-48)<=9)
   return (1);
   return (-1);
}

int atonum (int numero)
{
   if (0<=(numero-48)<=9)
   return (numero-48);
   return (-1);
}



El tema que al ejecutar la función esnum, si meto un caracter, debería darme -1 y después en el if, salir e imprimir por pantalla un -1. Pero no lo hace. Es como si lo pasara a int y luego lo trata como un numero.  


Bueno ya estoy muy mareado y cansado de debugear esto una y otra vez, probablemente me enfrasque en un error muy tonto, pero ya estoy atascado asi que recurro a un tercero que se apiade de este pobre inepto y marque el error.


Bueno esos es todo desde ya gracias por su tiempo y paciencia.


Título: Re: Problemas con una funcion en c
Publicado por: rir3760 en 18 Septiembre 2011, 18:02 pm
Si eres un principiante no deberías depurar un programa ya que esa aplicación te indicara donde se genera un error pero NO el porque de este.

Tienes que darle un buen repaso a tu material de referencia ya que hay errores de concepto, si no tienes un libro de calidad revisa los temas fijos del foro.

Lo usual en matemáticas para un rango:
Código:
0 <= a <= 9
No es valido en C, en este debes comparar con cada limite utilizando el operador lógico AND de esta forma:
Código:
0 <= (numero - 48) && (numero - 48) <= 9

La sentencia de retorno no es una llamada a función, no necesitas los paréntesis en cada "return N;".

La función de potencia no la utilizas y esta mal diseñada (verifica que pasa si el exponente es cero) debería ser:
Código
  1. int pot(int base, int exp)
  2. {
  3.   if (exp > 0)
  4.      return base * pot(base, exp - 1);
  5.   else
  6.      return 1;
  7. }

Todas las comparaciones en la forma:
Código
  1. if (0 <= (numero - 48) <= 9)
Hay que cambiarlas por:
Código
  1. if (numero >= '0' && numero <= '9')

Toma eso como un empujón, suerte.

Un saludo


Título: Re: Problemas con una funcion en c
Publicado por: Leon8086x en 18 Septiembre 2011, 18:19 pm
Solucionado.

Si el c lo tenia flojo.

 Desde ya muchas gracias.


Bueno aca como quedaron las funciones. Las hice por separado.

http://foro.elhacker.net/programacion_cc/ejemplos_de_funciones_en_c-t339386.0.html