Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: djpacheco3 en 3 Septiembre 2019, 21:36 PM

Título: [C++] Redondear un entero positivo a la centena más proxima
Publicado por: djpacheco3 en 3 Septiembre 2019, 21:36 PM
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
Título: Re: ayuda!!!!
Publicado por: MAFUS en 3 Septiembre 2019, 22:07 PM
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.
Título: Re: ayuda!!!!
Publicado por: djpacheco3 en 3 Septiembre 2019, 23:20 PM
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
Título: Re: ayuda!!!!
Publicado por: engel lex en 4 Septiembre 2019, 02:47 AM
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
Título: Re: Ayuda
Publicado por: 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
Título: Re: Ayuda
Publicado por: K-YreX en 4 Septiembre 2019, 20:00 PM
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.
Título: Re: [C++] Redondear un entero positivo a la centena más proxima
Publicado por: MAFUS en 4 Septiembre 2019, 21:17 PM
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;
Título: Re: [C++] Redondear un entero positivo a la centena más proxima
Publicado por: engel lex en 4 Septiembre 2019, 21:25 PM
 ;-)

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á)
Título: Re: [C++] Redondear un entero positivo a la centena más proxima
Publicado por: CalgaryCorpus en 5 Septiembre 2019, 12:58 PM
Parece mas simple no multiplicar, asi:

redondeo = (n+50) - (n+50)%100
Título: Re: [C++] Redondear un entero positivo a la centena más proxima
Publicado por: MAFUS en 6 Septiembre 2019, 09:28 AM
Qué guapo. Me gusta.
Título: Re: [C++] Redondear un entero positivo a la centena más proxima
Publicado por: Loretz en 7 Septiembre 2019, 00:11 AM
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:

Código (cpp) [Seleccionar]
#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)