[C++] Redondear un entero positivo a la centena más proxima

Iniciado por djpacheco3, 3 Septiembre 2019, 21:36 PM

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

djpacheco3

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

MAFUS

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.

djpacheco3

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

engel lex

#3
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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

98Fran

#4
Código (cpp) [Seleccionar]
#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
Código (cpp) [Seleccionar]
using namespace std;

quita los [std::] y ya estaría

K-YreX

Cita de: 98Fran en  4 Septiembre 2019, 12:07 PM
Código (cpp) [Seleccionar]
#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
Código (cpp) [Seleccionar]
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.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

MAFUS

#6
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;

engel lex

 ;-)

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á)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

CalgaryCorpus

Parece mas simple no multiplicar, asi:

redondeo = (n+50) - (n+50)%100
Aqui mi perfil en LinkedIn, invitame un cafe aqui

MAFUS