Programación General => Otros Lenguajes de Programación => ADA => Mensaje iniciado por: s_burbuja en Miércoles 2 de Junio de 2004, 20:24
Título: Comparacion De Fracciones
Publicado por: s_burbuja en Miércoles 2 de Junio de 2004, 20:24
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.
Título: Re: Comparacion De Fracciones
Publicado por: -SB- en Viernes 4 de Junio de 2004, 13:32
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 division
else
-- pues lo contrario
end if;
Un saludito!
Título: Re: Comparacion De Fracciones
Publicado por: s_burbuja en Viernes 4 de Junio de 2004, 18:43
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:
Título: Re: Comparacion De Fracciones
Publicado por: Nagisa en Sábado 7 de Agosto de 2004, 13:03
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.
Título: Re: Comparacion De Fracciones
Publicado por: Nagisa en Sábado 7 de Agosto de 2004, 13:20
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:
Título: Re: Comparacion De Fracciones
Publicado por: -SB- en Miércoles 15 de Diciembre de 2004, 20:35
Holas!
Cierto, no me di cuenta cuando escribi ese pequeño codigo, que lo que estaba convirtiendo en float era el resultado de la division :rolleyes:
En cualquier caso supongo que ese programa ira dentro de algun objeto que implemente un tipo de datos abstrabto para trabajar con fracciones y seguramente habra alguna funcion que calcule el denominador comun..
Bueno, saludos!
Título: Re: Comparacion De Fracciones
Publicado por: Gneuromante en Miércoles 15 de Diciembre de 2004, 23:34
Para que se entere todo el mundo de cual es el problema:
En Ada no existe conversión explícita de enteros a reales y viceversa. Esto se hace para evitar sorpresas desagradables y obtener un resultado truncado cuando se esperaba conservar toda la precisión.
Así, el operador / para enteros es la división entera, para dividir dos enteros y que el resultado sea un número real, hay que convertir primero los operadores a un tipo real:
Código: Text
b : integer := 5;
c : integer := 3;
a : float;
begin
a := b / c; -- Ilegal, el resultado es entero y la variable real. El compilador da error