Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/10/2012, 02:04
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 8 meses
Puntos: 73
Respuesta: problemas al ejecutar una función recursiva.

if(-1>a>1)

Extraña condición.

En primer lugar, si -1 es mayor que a, a nunca puede ser mayor que 1.
En segundo lugar, si a es mayor que 1, nunca puede ser menor que -1.
Conclusión: El resultado de esto siempre será FALSO.

Interpreto que lo que quieres es ver si a está entre -1 y 1. La condición correcta sería (matemáticamente):

if (-1 < a < 1)[/B]

En segundo lugar, al programar no puedes encadenar condicionales de esa manera. La evaluación de la expresión de arriba sería:

(1) Evaluar (-1 < a). Si a está entre -1 y 1, el resultado será VERDADERO (o sea, 1).
(2) Evaluar el resultado de (1) con 1, es decir, comparas 1 con 1, son iguales, 1 no es menor que 1, el resultado va a ser siempre FALSO.

Por ello, cuando necesites hacer comparaciones múltiples, debes hacerlas por separado. En este caso:

if ( (-1 < a) && (a < 1) )

Otra cosa que estás haciendo es que, cada vez que entras a la función, haces b=1 y acto seguido incrementas en 1 su valor, por lo que hagas lo que hagas al salir b siempre valdrá 2. Para lo que (aparentemente) quieres hacer, prueba con esto:

Código C++:
Ver original
  1. int tam (float a)
  2. {
  3.     int b=0;
  4.  
  5.     while (fabs(a) >= 1.0)
  6.     {
  7.         a /= 10.0;
  8.         b++;
  9.     }
  10.     return b;
  11. }

Nota: Para utilizar fabs (valor absoluto en coma flotante) probablemente tendrás que incluir <math.h> en tu programa.

Y una sugerencia final: Cuando utilices constantes de tipo float o double, pon siempre el punto decimal (como he hecho arriba) para forzar a que el compilador te las evalúe como tales, si no lo más normal es que te las evalúe como enteros y puedes encontrarte con que el resultado final no coincide con el que debería ser, por ejemplo, 1/4 con aritmética entera va a ser 0, pero 1.0/4.0 va a ser 0.25.

Saludos,