Programación General > ADA

 Comparacion De Fracciones

(1/2) > >>

s_burbuja:
Hola a todos!A ver...mi problema es que me han mandao una practica de ada y una de las partes es comparar 2 fracciones he indicar cual es la menor y cual es la mayor. El caso es que nosotros en el ejercio hemos definido el numerador y el denominador como nº enteros y claro no podemos hacer la division de ambas fracciones para averiguar cual es el resultado mayor porque nos puede devolver un real y nos da error.Queria preguntar de que forma se podria realizar ese apartado.Nosotros lo hemos intentado con if pero salen muchisimosssssss o lo hemos hecho mal que seria otra opcion.muchas gracias de antemano.

-SB-:
Hola!

Ayudaria mucho que pusieras tu codigo, de todas formas puedes hacer algo asi como:

--- Código: Text --- if float(n1/n2) < float(n3/n4) then    -- n1/n2 es mas peke que la otra divisionelse     -- pues lo contrarioend if;  
Un saludito!

s_burbuja:
Muchas gracias SB, al final consegui hacerlo, no cai q podia asignar 2 vbles de tipo float independientes de las vbls integer  :nosweat: Muchisimas gracias de todas formas.Es q a mi hasta q se me ocurren la ideas felices jeje  :P .Bsots
 :gracias:

Nagisa:
hi!! Aunque la solucion que te han dado funciona, yo creo que lo que se espera que hagas es reducir ambas fracciones a comun denominador y comparar los numeradores. Parece complicado, pero so observas un poco es mas sencillo de lo que parece, por que podrias reducirlo a un simple producto en cruz:

Comparamos a/b y c/d:

a/b == (a*d)/(b*d)
c/d == (b*c)/(b*d)

Y ahora solo comparariamos los numeradores: a*d con b*c

Como digo, lo otro tambien vale.

Nagisa:
De todos modos, ten cuidado por que la respuesta anterior es incorrecta (la mia no <_< ).

La comparacion deberias hacerla convirtiendo numerador y denominador a Float antes de dividir, no despues. Te dejo un pequeño programita para que veas la diferencia:


--- Código: Text --- with Ada.Text_IO, Ada.Float_Text_IO;use  Ada.Text_IO, Ada.Float_Text_IO; procedure Prueba is   a, b : Integer := 0;begin   a := 5;   b := 6;   Put (  float(a / b)       );      New_Line;   Put ( float(a) / float(b) );end Prueba;  
Eso te llevaria a hacer cuatro conversiones y dos divisiones entre Floats y luego una comparacion entre dos floats... Mientras que de mi forma solo haces dos multiplicaciones entre enteros y una comparacion entre enteros...   :smartass:

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa