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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  redondeado en C con funciones.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: redondeado en C con funciones.  (Leído 19,596 veces)
ryan parker

Desconectado Desconectado

Mensajes: 81



Ver Perfil
redondeado en C con funciones.
« en: 1 Mayo 2012, 18:55 pm »

tratando de realizar el siguiente problema:
Una aplicacion de funcion floor es la de redondear un valor al entero mas cercano, la instruccion:

Código
  1. y = floor(x + .5);

redondea el numero x al entero mas cercano, y asigna el resultado a y. Escriba un programa que lea varios numeros al entero mas cercano, Por cada uno de los numeros procesados, imprima el numero original y el numero redondeado.

estoy tratando de escribir un modelo base:

Código
  1. int main(){
  2.    float x;
  3.    int y;
  4.  
  5.    printf("\nAdd: ");
  6.    scanf("%f", &x);
  7.  
  8.    y = x+.5;
  9.    printf("\nThe Value x is: %d", y);
  10. }

Ahora estuve adaptandolo en un modelo base de funciones:

Código
  1. #include<stdio.h>
  2.  
  3. float floor(float);
  4.  
  5. int main(){
  6.    float x;
  7.    int y;
  8.  
  9.    printf("\nAdd: ");
  10.    scanf("%f", &x);
  11.  
  12.    y = floor(x+.5);
  13.  
  14.    printf("\nValues is: %d", y);
  15. }
  16.  
  17. float floor(float value){
  18.    return value;
  19. }

Código:
si x=3.5 entonces resulta y=4
si x=2.3 entonces resulta y=2

no se si esto este bien, por que espera la suma del .5, por ejemplo del 2.3 + 0.5 -> 2.8 entonces y deberia tener -> 3

alguna explicacion o necesito revisar la teoria de la aritmetica ?

Claro que si corren en un compilador ansi este vota warning! :/


En línea

Your kung-fu is not strong!
STANHMAL

Desconectado Desconectado

Mensajes: 107


ςταηhmαl - hηαfε


Ver Perfil WWW
Re: redondeado en C con funciones.
« Respuesta #1 en: 1 Mayo 2012, 20:31 pm »

Hola que tal,

Bueno la función que tienes no esta haciendo nada, puesto que le entra un float, y retorna el mismo float.

para lo que quieres hacer necesitas la utilización de la función ceil, en conjunto de floor, ambas en math.h

Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main(){
  5.    double x;
  6.  
  7.    printf("\nAdd : ");
  8.    scanf("%lf", &x);
  9.  
  10.    if (x - (int)x >= 0.5)
  11.        printf("\n%lf\n", ceil(x));
  12.    else
  13.        printf("\n%lf\h", floor(x));
  14.  
  15.    return 0;
  16. }
  17.  

o sí lo prefieres modular:

Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. double enteroCercano(double x);
  5.  
  6. int main(){
  7.    double x;
  8.  
  9.    printf("\nAdd : ");
  10.    scanf("%lf", &x);
  11.  
  12.    printf("\n%lf\n", enteroCercano(x));
  13.  
  14.    return 0;
  15. }
  16.  
  17. double enteroCercano(double x){
  18.    if (x - (int)x >= 0.5)
  19.        return ceil(x);
  20.    return floor(x);
  21. }
  22.  

$4!u2


« Última modificación: 1 Mayo 2012, 20:38 pm por STANHMAL » En línea

Power Metal vs Reggaeton



Que es mi ordenador mi tesoro que todo el mundo ha de temer. Mi ley, el ratón y el módem. Mi única patria, la red
exel

Desconectado Desconectado

Mensajes: 50



Ver Perfil
Re: redondeado en C con funciones.
« Respuesta #2 en: 1 Mayo 2012, 21:10 pm »

Hola

 El Warning que muestra el compilador es una advertencia; esto sucede porque la variable y es un entero mientras que lo que devuelve tu funcion floor es un valor de punto flotante, entonces el compilador se ve obligado a truncar el valor que devuelve tu funcion para asignarlo a y.

 Existen muchas maneras de resolver la situacion. Yo propongo la siguiente solucion:

Código
  1. #include<stdio.h>
  2.  
  3. int floor(float);
  4.  
  5. int main(){
  6.    float x;
  7.    int y;
  8.  
  9.    printf("\nAdd: ");
  10.    scanf("%f", &x);
  11.  
  12.    y = floor(x);
  13.  
  14.    printf("\nValues is: %d", y);
  15. }
  16.  
  17. int floor(float value){
  18.    if(value >= 0)
  19.       return (int)(value + 0.5);
  20.    else
  21.       return (int)(value - 0.5);
  22. }
  23.  
« Última modificación: 1 Mayo 2012, 21:12 pm por exel » En línea

ryan parker

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Re: redondeado en C con funciones.
« Respuesta #3 en: 2 Mayo 2012, 00:17 am »

Gracias a ambos por sus propuestas no habia pensado en hacer la resta del entero y realizar las comparaciones. :)

Y ni enterado que existia el floor en las librerias  :o

Excelente por ambos, tengo mucho por aprender.
En línea

Your kung-fu is not strong!
Iranny

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: redondeado en C con funciones.
« Respuesta #4 en: 4 Diciembre 2013, 21:46 pm »

Disculpen la molestia pero para redondear un número a entero por ejemplo
si es 2678 que me lo redondee a 2700
el código mencionado aquí seria parecido para hacer este redondeo o se tendría que utilizar algunas otras funciones y cuestiones para hacer este.

Si me podrían ayudar con ese condigo les agradecería mucho
es para un examen 


Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
PHP y funciones tcp/ip « 1 2 »
PHP
nacho2003 11 5,043 Último mensaje 21 Septiembre 2006, 00:07 am
por deya
Funciones en php
PHP
Lambda 2 1,815 Último mensaje 14 Octubre 2006, 17:00 pm
por Thaorius
funciones y FOR
PHP
pepelon 4 1,624 Último mensaje 9 Diciembre 2006, 02:49 am
por pepelon
Email(con contraseña) y Logaritmo(Redondeado) en C++
Programación C/C++
necro1991 0 2,303 Último mensaje 20 Septiembre 2010, 22:06 pm
por necro1991
[C] Problema con Struct en funciones que llaman a otras funciones
Programación C/C++
‭lipman 9 21,893 Último mensaje 19 Mayo 2011, 23:39 pm
por Littlehorse
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines