elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  funcion trunc
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: funcion trunc  (Leído 9,069 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
funcion trunc
« en: 4 Febrero 2012, 21:41 pm »

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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. //Este programa muestra los valores de los tipos de datos//
  5.  
  6. int main()
  7. {
  8.    char dato;
  9.    printf("Dame un dato\n");
  10.    scanf("%c",&dato);
  11.    if(trunc(dato)-dato==0)
  12.        printf("Es un tipo de dato int\nCon un rango de -32,768 a 32,767\n");
  13.    else
  14.    if(trunc(dato)-dato!=0)
  15.        printf("Es un tipo de dato float\nCon un rango de 3.4 E-38 a 3.4 E+38\n");
  16.    return 0;
  17. }


En línea

el_nene_kpy

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: funcion trunc
« Respuesta #1 en: 4 Febrero 2012, 23:23 pm »

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.


En línea

eleon

Desconectado Desconectado

Mensajes: 99


Ver Perfil
Re: funcion trunc
« Respuesta #2 en: 5 Febrero 2012, 00:24 am »

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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. //Este programa muestra los valores de los tipos de datos//
  5.  
  6. int main()
  7. {
  8.    float dato;
  9.    printf("Dame un dato\n");
  10.    scanf("%f",&dato);
  11.    if(trunc(dato)-dato==0)
  12.        printf("Es un tipo de dato int\nCon un rango de -32,768 a 32,767\n");
  13.    else
  14.        printf("Es un tipo de dato float\nCon un rango de 3.4 E-38 a 3.4 E+38\n");
  15.    return 0;
  16. }
  17.  

Saludos.
« Última modificación: 5 Febrero 2012, 00:48 am por eleon » En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: funcion trunc
« Respuesta #3 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
En línea

Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: funcion trunc
« Respuesta #4 en: 5 Febrero 2012, 03:06 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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
manejo de argumentos en funcion dentro de funcion ???
PHP
SpiderNet 2 3,425 Último mensaje 30 Septiembre 2008, 03:01 am
por SpiderNet
Duda con funcion dentro de funcion en un echo
PHP
N4X 6 5,856 Último mensaje 21 Enero 2010, 18:12 pm
por N4X
* [Source+Funcion+vb6] AceptarConeccion (Sencilla funcion)
Programación Visual Basic
BlackZeroX 0 2,700 Último mensaje 19 Abril 2010, 00:54 am
por BlackZeroX
funcion como argumento a otra funcion
Programación C/C++
Dark Invader 5 4,838 Último mensaje 29 Junio 2011, 20:52 pm
por Dark Invader
Función que retorna el valor de retorno de otra función
Programación C/C++
naderST 7 4,731 Último mensaje 7 Diciembre 2011, 23:45 pm
por naderST
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines