| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
paciencia
Registrado: 24 Mar 2007 Mensajes: 18
| Publicado: 24/03/2007 10:51 am | | | Título: Algoritmo redondeo |
| Hola a tod@s!!
Soy nueva por aquí y necesito que me echéis una mano con un algoritmo, por favor. Me piden que defina una acción, que dado un número positivo, lo redondea a un único decimal y que diseñe esa acción.
Lo que me piden es redondear un decimal teniendo en cuenta el segundo, del tercero en adelante no hace falta mirar nada.
Es decir, si la cifra es 23.24 redondear a 23.2, si la cifra es 23.66 redondear a 23.7 y en el caso de más decimales como 23.245 redondear a 23.24. La verdad es que estoy muy perdida y os agradecería ideas.
Muchas gracias!!!!
 |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 7520 Ubicación: Mexico
| Publicado: 24/03/2007 11:17 am | | | Título: |
| El problema con los numeros de punto flotante es que son aproximaciones, tomando eso en cuenta tal vez funcione:
1) Sumale 0.05 al numero (por ejemplo 23.66 + 0.05 == 23.71) 2) Multiplica el numero por dies y descarta la parte decimal (23.71 * 10.0 == 237.1 ==> 237). 3) Divide el numero por dies (237 / 10.0 == 23.7)
Un saludo _________________ C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language |
|
| Volver arriba | |
 |
paciencia
Registrado: 24 Mar 2007 Mensajes: 18
| Publicado: 24/03/2007 11:52 am | | | Título: |
| Gracias por tu rápida respuesta!!
El algoritmo que me indicas funciona correctamente para un número de 1 o 2 decimales, pero el problema que tengo ahora es con un número de 3 decimales. No se como indicar que si el número tiene esos 3 decimales descarte el último y haga las operaciones de redondeo para los dos decimales restantes. Es decir, tomando el número 23.245, debe descartar el 5 y realizar los pasos que me has descrito para dejar el número final en 23.2. Alguna idea para esto?
Gracias!!! |
|
| Volver arriba | |
 |
|
paciencia
Registrado: 24 Mar 2007 Mensajes: 18
| Publicado: 24/03/2007 12:21 pm | | | Título: |
| Por si os sirve de guía para resolver esto os dejo lo que tengo hecho hasta ahora y me decís que os parece:
accion Redondeo (entsal num: real);
{Pre: num = NUM}
num := num + 0.05; num := num * 10; num := realAEntero (num); num := enteroAReal (num div 10);
{Pos: num = NUM } faccion
Sigo con el problema de que no se como indicar que si tiene tres decimales el número introducido descarte el último y sólo se fije en dos. Me echáis una mano, por favor ??? |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 7520 Ubicación: Mexico
| Publicado: 24/03/2007 2:45 pm | | | Título: |
| Un problema es que estos foros son sobre C y/o C++. Si estas estudiando un lenguaje tipo Pascal/Ada/etc. tal vez sea mejor mover este tema al foro correspondiente pero hay que tener en cuenta que esos foros tienen un trafico muy pequeño ...
El numero de decimales no importa ya que estos se descartan al multiplicar por dies y eliminar la parte decimal:
1) 23.245 2) 23.245 + 0.05 == 23.295 3) 23.295 * 10 == 232.95 4) 232.95 ==> 232.0 5) 232.0 / 10 == 23.2
Un saludo _________________ C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language |
|
| Volver arriba | |
 |
paciencia
Registrado: 24 Mar 2007 Mensajes: 18
| Publicado: 24/03/2007 3:23 pm | | | Título: |
| Gracias por tu respuesta. Yo estoy estudiando C pero pensé que no valía para 3 decimales.
Gracias |
|
| Volver arriba | |
 |
|
Cinemp3
Registrado: 18 Mar 2012 Mensajes: 1
| Publicado: 18/03/2012 11:54 pm | | | Título: el mismo problema de redondeo |
| | rir3760 escribió: | Un problema es que estos foros son sobre C y/o C++. Si estas estudiando un lenguaje tipo Pascal/Ada/etc. tal vez sea mejor mover este tema al foro correspondiente pero hay que tener en cuenta que esos foros tienen un trafico muy pequeño ...
El numero de decimales no importa ya que estos se descartan al multiplicar por dies y eliminar la parte decimal:
1) 23.245 2) 23.245 + 0.05 == 23.295 3) 23.295 * 10 == 232.95 4) 232.95 ==> 232.0 5) 232.0 / 10 == 23.2
Un saludo |
hola que tal, yo tambien tengo este programa en c, que recibo un numero real y un entero y si debe hacer tambien de tres cifras y dos cifras tambien pero, disculpen no entiendo que se esta haciendo ahi me podrian explicar por favor, con peras y manzanas de preferencia.  |
|
| Volver arriba | |
 |
|
|