• Viernes 15 de Noviembre de 2024, 19:51

Autor Tema:  Comparacion De Fracciones  (Leído 4462 veces)

s_burbuja

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Comparacion De Fracciones
« en: Miércoles 2 de Junio de 2004, 20:24 »
0
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.
Si la vida te sonrie,sonriele tu a ella

-SB-

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: Comparacion De Fracciones
« Respuesta #1 en: Viernes 4 de Junio de 2004, 13:32 »
0
Hola!

Ayudaria mucho que pusieras tu codigo, de todas formas puedes hacer algo asi como:
Código: Text
  1.  
  2. if float(n1/n2) < float(n3/n4) then
  3.     -- n1/n2 es mas peke que la otra division
  4. else
  5.     -- pues lo contrario
  6. end if;
  7.  
  8.  

Un saludito!

s_burbuja

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Comparacion De Fracciones
« Respuesta #2 en: Viernes 4 de Junio de 2004, 18:43 »
0
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:
Si la vida te sonrie,sonriele tu a ella

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: Comparacion De Fracciones
« Respuesta #3 en: Sábado 7 de Agosto de 2004, 13:03 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: Comparacion De Fracciones
« Respuesta #4 en: Sábado 7 de Agosto de 2004, 13:20 »
0
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
  1.  
  2. with Ada.Text_IO, Ada.Float_Text_IO;
  3. use  Ada.Text_IO, Ada.Float_Text_IO;
  4.  
  5. procedure Prueba is
  6.    a, b : Integer := 0;
  7. begin
  8.    a := 5;
  9.    b := 6;
  10.    Put (  float(a / b)       );      New_Line;
  11.    Put ( float(a) / float(b) );
  12. end Prueba;
  13.  
  14.  

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:
   

-SB-

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: Comparacion De Fracciones
« Respuesta #5 en: Miércoles 15 de Diciembre de 2004, 20:35 »
0
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!

Gneuromante

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
    • http://www.canalada.org/
Re: Comparacion De Fracciones
« Respuesta #6 en: Miércoles 15 de Diciembre de 2004, 23:34 »
0
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
  1.  
  2.  b : integer := 5;
  3.  c : integer := 3;
  4.  a    : float;
  5. begin
  6.   a := b / c; -- Ilegal, el resultado es entero y la variable real. El compilador da error
  7.   a := float (b) / float (c); -- a es 1.666
  8.   a := float (b / c); -- a es 1.0
  9. end;
  10.  
Gneuromante.
Nos vemos en http].