se desea redondear un entero positivo N a la centena mas proxima y visualizar la salida.
Para ello la entrada de datos debe de sr los cuatro digitos A,B,C,D del entero N. Por ejemplo, si A es 2, B es 3, C es 6 y D es2, entonces N será 2362 y el resultado redondeado será 2400. SiN es 2342, el resultado seeá 2300 , y si N=2962, entonces el numero será 3000
Mod: Obligatorio el uso de títulos descriptivos. Segundo aviso.
https://foro.elhacker.net/reglas
Te voy a responder yo porque creo que no lo va a hacer nadie más.
No se hacen tareas. Si quieres ayuda deberás haber creado la solución, mostrarla e indicar dónde te has quedado bloqueado. Pero desde cero nadie se va a poner a hacértelo.
Me puedes ayudar como comienza por favor y la formula como redondear te lo ruego porfavor es un deber para mañana que esa clase falte por razones de enfermedad
para redondear en c++ usualmente lo mejor es cambiar el numero a float, dividirlo entre la base del redondeo (en tu caso 100) pasar el resultado a entero, restar el float y si el resultado es mayr que 0.5 sumas 1 al entero... luego le multiplicas por la base
int base = 100;
int numero = 1234;
float numero_decimal = numero;
numero /= base;
numero_decimal /= base;
if(numero_decimal-numero > 0.5) {
numero ++;
}
numero *= base;
no uses ayuda como titulo de tus temas no son para nada descriptivos
#include <iostream>
int main(){
float x = 12.9, aux;
int y = x;
aux = x - y; //aux = 12.9 - 12 = 0.9
if (aux >= 0.5){
++y; // Es igual a y += 1 que es igual a y = y + 1
}
std::cout << y;
std::cin.get();
return 0;
}
Si usas
using namespace std;
quita los [std::] y ya estaría
Cita de: 98Fran en 4 Septiembre 2019, 12:07 PM
#include <iostream>
int main(){
float x = 12.9, aux;
int y = x;
aux = x - y; //aux = 12.9 - 12 = 0.9
if (aux >= 0.5){
++y; // Es igual a y += 1 que es igual a y = y + 1
}
std::cout << y;
std::cin.get();
return 0;
}
Si usas
using namespace std;
quita los [std::] y ya estaría
Esto redondea a la unidad y lo que están solicitando es un redondeo a la centena... :silbar:
La solución que sí funciona es la que ha dado @engel lex.
Ei, bonito reto. Bueno, ahora que ya ha pasado la fecha límite:
Siempre que no se tenga en cuenta que xy45 pueda promocionar a 50 y este a x(y+1)00 os dejo este código de una sola línea, dónde n es nuestro número:
n = (n/100 + (n%100>=50)) * 100;
;-)
n = (n/100 + (n%100>=50)) * 100;
buen uso de la promoción de operandos para este caso
solo para hacerlo modular
base = 100
n = (n/base + (n%base>=base/2)) * base;
donde n y base deben ser enteros y base mayor a 10 (porque si no solo truncará)
Parece mas simple no multiplicar, asi:
redondeo = (n+50) - (n+50)%100
Qué guapo. Me gusta.
Citarse desea redondear un entero positivo N a la centena mas proxima y visualizar la salida.
Para ello la entrada de datos debe de sr los cuatro digitos A,B,C,D del entero N. Por ejemplo, si A es 2, B es 3, C es 6 y D es2, entonces N será 2362 y el resultado redondeado será 2400. SiN es 2342, el resultado seeá 2300 , y si N=2962, entonces el numero será 3000
En C++ moderno es inmediato, por ejemplo:
#include <cmath>
#include <iostream>
long redondear_a_la_centena(int n) {
return std::lround(n / 100.0) * 100;
}
int main()
{
std::cout << "2362 redondedo a la centena: " << redondear_a_la_centena(2362) << '\n';
std::cout << "2342 redondedo a la centena: " << redondear_a_la_centena(2342) << '\n';
std::cout << "2962 redondedo a la centena: " << redondear_a_la_centena(2962) << '\n';
}
Ventajas?Ver la documentación, en especial "Error handling"
https://en.cppreference.com/w/cpp/numeric/math/round (https://en.cppreference.com/w/cpp/numeric/math/round)