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 originalint tam (float a)
{
int b=0;
{
a /= 10.0;
b++;
}
return b;
}
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,