funcion trunc

Iniciado por m@o_614, 4 Febrero 2012, 21:41 PM

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

m@o_614

Hola!! Quiero usar la función trunc en mi programa al que le tengo que ingresar un numero, y este me tiene que devolver si es entero o flotante

lo que yo tengo en mente es que le paso el dato a la funcion, y cuando esta me devuelva la parte entera   le resto de nuevo el dato y si es 0 me devuelve el entero y sus rangos de valores y si no es flotante. Pero en esta ultima parte no compila :huh:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//Este programa muestra los valores de los tipos de datos//

int main()
{
    char dato;
    printf("Dame un dato\n");
    scanf("%c",&dato);
    if(trunc(dato)-dato==0)
        printf("Es un tipo de dato int\nCon un rango de -32,768 a 32,767\n");
    else
    if(trunc(dato)-dato!=0)
        printf("Es un tipo de dato float\nCon un rango de 3.4 E-38 a 3.4 E+38\n");
    return 0;
}

el_nene_kpy

Yo diria que es porque en tu codigo utilizas intentas realizar la operacion trunc(dato)-dato, siendo dato un caracter (char). En todo caso podria funcionar si fuese un entero.

eleon

#2
El fallo está en que un tipo char almacena caracteres. ¿Puedes almacenar números?, si, pero lo que almacena es el símbolo no el operando y además solo guarda el primer dígito. Por ejemplo: si le introduces el número 123.456, lo único que va a almacenar es el "1" (un solo caracter).

Y otra cosa es que cuando usas la función "trunc" no se ejecuta sobre el número almacenado (el 1) sino por su valor en ASCII (no hay cifras reales), por eso mismo siempre te dice que es un entero.

Para solucionarlo lo único que tienes que cambiar es el tipo a float:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//Este programa muestra los valores de los tipos de datos//

int main()
{
   float dato;
   printf("Dame un dato\n");
   scanf("%f",&dato);
   if(trunc(dato)-dato==0)
       printf("Es un tipo de dato int\nCon un rango de -32,768 a 32,767\n");
   else
       printf("Es un tipo de dato float\nCon un rango de 3.4 E-38 a 3.4 E+38\n");
   return 0;
}


Saludos.

m@o_614

 ;D Y que pasaría si tuviera que incluir el tipo de dato char tambié. Como tendria que implementar esa parte??  :huh:

gracias

Xandrete

Cita de: m@o_614 en  5 Febrero 2012, 02:21 AM
;D Y que pasaría si tuviera que incluir el tipo de dato char tambié. Como tendria que implementar esa parte??  :huh:

gracias

Bueno, si es necesario usar caracteres... El número lo puedes leer como double o float y luego hacer la conversión a char. Si lo has leído en f, por ejemplo, (char) f te devolvería la parte entera de f como carácter. Cuando haces la conversión, te queda la parte entera del float únicamente y no tienes que utilizar la función trunc. De todas formas, te aviso de que el rango de un char no va de -32768 a 32767, sino de 0 a 255 o de -128 a 127 (dependiendo de si lo consideras sin o con signo). Estas consideraciones sobre el rango del tipo char, en teoría, varían en función de la máquina y del compilador, pero en la práctica se cumplen en la mayoría de (por no decir todos) los casos. Así que si estas pensando en rangos mayores, no puedes usar char de esta forma.

Otra planteamiento: puedes leer de la entrada guardando los datos como cadena de caracteres y luego mirar si hay un punto. En caso afirmativo, es un float, y si no, es un int. O mejor, puedes ir leyendo carácter a carácter, comprobando si algún carácter es un punto (y si alguno lo es, cancelas la lectura e imprimes un mensaje diciendo que es un float). Si no te encuentras con ningún punto y llegas a un separador, cancelas la lectura y dices que es un int.

Saludos