idea de ejercicio

L

buenas gente, tan solo era pa ver si podiais ayudarme a ver la idea de como hacer este ejercicio, es que lo hemos visto por encima, pero no me hago a la idea de la parte decimal,como sacar las cifras de la parte decimal etc... ( ya que con el resto % da error no? , thx de antemano. si me he equivocao de subforo sry, lo cambio y punto.

Realizar porgrama EN C , que lea 2 numeros,un numero real y otro entero.El programa devolvera el numero real redondeando a los decimales indicado por el numero entero
EJ: Real:74.5738
Ent:3 devuelve: 74.574

Ej: Real:74.5738
Ent:2
devuelve:74.57

es muy sencillito lo se, pero ya digo q me atasco en esa parte :( ;)

Loa

que triste...

10x i = y edit:[ aki se me fue la pinza... es 10 x 10 tantas veces como el entero, usaese con un for i = 3 y antes de cerrar i - 1 ]

y x real = z

valo absoluto de z

z / i

= lo que tu kieres

1 comentario moderado
Loa

a sido chapucero jejeje que taba hablando por tlf..

la idea a groso modo es ... si tienes 12.345 y solo quieres el primer decimal, multiplicas por 10 = 123.45 , valor absoluto = 123, entre 10 de nuevo = 12.3

multiplicas y divides tantas veces como te dice el entero

L

jaja vale ahora lo veo. digo y este? xD thx loa ;)

1 comentario moderado
A

#1 ¿Lo que estás pidiendo es la secuencia de comandos en C para que el ordena te lo haga solo?

Maldita mierda que solo haya visto basic xD.

LiuM

Loa, eso no es redondear, es truncar.

Con ese metodo a un decimal:

123,468 -> 123,4

Mientras el resultado correcto es:

123,468 -> 123,5

EDITADO:
int x; // variable global
....
....
function redondea (float numero, int decimales)
{
x = pow(10, decimales);
return (round(numero*x)/x);
}


Si por ejemplo el numero es 123,468 y queremos 2 decimales da el resultado correcto, con una sola iteracion.

Saludos

dagavi

No es más facil como se lo han dicho antes? xD

En vez de coger N números que coja N + 1
Con ese 1 de más mira si es mayor o igual a 5 y en función de eso que sume o no.

Si lo hace como tu dices (que no se cual es la necesidad de poner esa X como variable global en vez de local para la función xD) aun tendría que implementar las funciones roud y pow

LiuM

Esas funciones no hay que implementarlas, estan en math.h

Por otra parte, el otro metodo no es mas facil por 2 motivos: uno porque en realidad no redondea, sino que trunca (corta) el numero sin mas.
La segunda porque no tienes que mirar este numero, ver si es mayor que tal, menor que tal....te lo hace todo en una iteraccion, por lo que es mas rapido, mas corto y mas eficaz. Con mas iteracciones, en un numero muy grande, tendria que hacer la misma accion tantas veces como decimales necesite, y eso en un numero de 2 decimales no se nota, pero en numeros long, se notara y en el fondo al programar hay que mirar eso, optimizacion.

Y si puse la X como variable global, es porque yo estoy acostumbrado a trabajar asi, y tener todas las variables controladas, sin que sean efimeras.

Vamos cae de cajon, vale mas operar directamente con 10000 que hacerlo primero con 100 y repetir exactamente lo mismo otra vez con 100.

LOc0

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
char formato[64];

if(argc==3 && atoi(argv[2])>=0)
{
	sprintf(formato, "%s%d%s", "\n%.", atoi(argv[2]), "f\n\n");
	printf(formato, atof(argv[1]));
}
else
	printf("\nUso de esto:\n\n%s [decimal] [entero]\n\n", argv[0]);

return 0;

}
[/i]

De nada.

Salu2 ;)

Usuarios habituales