tratando de realizar el siguiente problema:
Una aplicacion de funcion floor es la de redondear un valor al entero mas cercano, la instruccion:
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:
int main(){
float x;
int y;
printf("\nAdd: ");
scanf("%f", &x);
y = x+.5;
printf("\nThe Value x is: %d", y);
}
Ahora estuve adaptandolo en un modelo base de funciones:
#include<stdio.h>
float floor(float);
int main(){
float x;
int y;
printf("\nAdd: ");
scanf("%f", &x);
y = floor(x+.5);
printf("\nValues is: %d", y);
}
float floor(float value){
return value;
}
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! :/
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
#include <stdio.h>
#include <math.h>
int main(){
double x;
printf("\nAdd : ");
scanf("%lf", &x);
if (x - (int)x >= 0.5)
printf("\n%lf\n", ceil(x));
else
printf("\n%lf\h", floor(x));
return 0;
}
o sí lo prefieres modular:
#include <stdio.h>
#include <math.h>
double enteroCercano(double x);
int main(){
double x;
printf("\nAdd : ");
scanf("%lf", &x);
printf("\n%lf\n", enteroCercano(x));
return 0;
}
double enteroCercano(double x){
if (x - (int)x >= 0.5)
return ceil(x);
return floor(x);
}
$4!u2
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:
#include<stdio.h>
int floor(float);
int main(){
float x;
int y;
printf("\nAdd: ");
scanf("%f", &x);
y = floor(x);
printf("\nValues is: %d", y);
}
int floor(float value){
if(value >= 0)
return (int)(value + 0.5);
else
return (int)(value - 0.5);
}
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.
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