Problemas con una funcion en c

Iniciado por Leon8086x, 18 Septiembre 2011, 04:06 AM

0 Miembros y 1 Visitante están viendo este tema.

Leon8086x

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.

rir3760

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:
0 <= a <= 9
No es valido en C, en este debes comparar con cada limite utilizando el operador lógico AND de esta forma:
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:
int pot(int base, int exp)
{
   if (exp > 0)
      return base * pot(base, exp - 1);
   else
      return 1;
}


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

Toma eso como un empujón, suerte.

Un saludo
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

Leon8086x

#2
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