/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Algoritmo redondeo

 
      Índice del Foro elrincondelc.com -> Algoritmos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
paciencia



Registrado: 24 Mar 2007
Mensajes: 18

MensajePublicado: 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!!!!
Rolling Eyes
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7520
Ubicación: Mexico

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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. Smile
Volver arriba
      Índice del Foro elrincondelc.com -> Algoritmos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com