Foro de elhacker.net

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

Código:
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
  1. #include <iostream>
  2.  
  3. int main(){
  4. float x = 12.9, aux;
  5. int y = x;
  6.  
  7. aux = x - y; //aux = 12.9 - 12 = 0.9
  8.  
  9. if (aux >= 0.5){
  10. ++y; // Es igual a y += 1 que es igual a y = y + 1
  11. }
  12.  
  13. std::cout << y;
  14.  
  15.  
  16. std::cin.get();
  17. return 0;
  18. }
Si usas
Código
  1. 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
Código
  1. #include <iostream>
  2.  
  3. int main(){
  4. float x = 12.9, aux;
  5. int y = x;
  6.  
  7. aux = x - y; //aux = 12.9 - 12 = 0.9
  8.  
  9. if (aux >= 0.5){
  10. ++y; // Es igual a y += 1 que es igual a y = y + 1
  11. }
  12.  
  13. std::cout << y;
  14.  
  15.  
  16. std::cin.get();
  17. return 0;
  18. }
Si usas
Código
  1. 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
 ;-)

Código:
n = (n/100 + (n%100>=50)) * 100;

buen uso de la promoción de operandos para este caso

solo para hacerlo modular

Código:
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
Citar
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

En C++ moderno es inmediato, por ejemplo:

Código
  1. #include <cmath>
  2. #include <iostream>
  3.  
  4. long redondear_a_la_centena(int n) {
  5.    return std::lround(n / 100.0) * 100;
  6. }
  7.  
  8. int main()
  9. {
  10.    std::cout << "2362 redondedo a la centena: " << redondear_a_la_centena(2362) << '\n';
  11.    std::cout << "2342 redondedo a la centena: " << redondear_a_la_centena(2342) << '\n';
  12.    std::cout << "2962 redondedo a la centena: " << redondear_a_la_centena(2962) << '\n';
  13. }
  14.  

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)