Programa para comparar dos fracciones

Dadas dos fracciones a/b y c/d, compáralas e imprime la mayor de las dos.

Ejemplos:  

Input: 5/6, 11/45
Output: 5/6

Input: 4/5 and 2/3
Output: 4/5 

Simplemente podemos convertir las fracciones en valores de punto flotante dividiendo el numerador por el denominador. Una vez que tenemos los dos números de coma flotante correspondientes a cada fracción, podemos comparar estos números y determinar qué fracción es mayor.
Sin embargo, la respuesta calculada puede ser incorrecta debido a aproximaciones de punto flotante y truncamientos durante el proceso de división. Para obtener la respuesta más precisa, debemos evitar recurrir a la división de coma flotante.
Para comparar dos fracciones necesitamos hacer que sus denominadores sean iguales. Podemos hacer esto mediante la multiplicación cruzada de numeradores con denominadores. Veamos cómo funciona esto 

We have two fractions a/b and c/d.
Let Y = (a/b - c/d) 
      = (ad - bc)/(bd)
Now,
if Y > 0 then a/b > c/d 
if Y = 0 then a/b = c/d
if Y < o then a/b < c/d

Since bd is always positive, the sign of Y depends only on the
numerator (ad-bc). So we need to compute (ad-bc) only.

Complejidad: 
dado que realizamos dos operaciones de multiplicación y una de resta, la respuesta se calcula en tiempo constante, es decir, O (1)
 

C++

// CPP program to find max between
// two Rational numbers
#include <bits/stdc++.h>
using namespace std;
 
struct Fraction {
    int num, den;
};
 
// Get max of the two fractions
Fraction maxFraction(Fraction first, Fraction sec)
{
    // Declare nume1 and nume2 for get the value of
    // first numerator and second numerator
    int a = first.num;
    int b = first.den;
    int c = sec.num;
    int d = sec.den;
 
    // Compute ad-bc
    int Y = a * d - b * c;
 
    return (Y > 0) ? first : sec;
}
 
// Driver Code
int main()
{
    Fraction first = { 3, 2 };
    Fraction sec = { 3, 4 };
 
    Fraction res = maxFraction(first, sec);
    cout << res.num << "/" << res.den;
    return 0;
}

Java

// Java program to find max between
// two Rational numbers
 
import java.io.*;
import java.util.*;
 
class Fraction {
     
 int num, den;
 
//Constructor
Fraction(int n,int d){
    num=n;
    den=d;
}
 
 // Get max of the two fractions
static Fraction maxFraction(Fraction first, Fraction sec)
{
    // Declare nume1 and nume2 for get the value of
    // first numerator and second numerator
    int a = first.num;
    int b = first.den;
    int c = sec.num;
    int d = sec.den;
  
    // Compute ad-bc
    int Y = a * d - b * c;
  
    return (Y > 0) ? first : sec;
}
 
// Driver function
public static void main (String[] args) {
 
   Fraction first = new Fraction( 3, 2 );
   Fraction sec = new Fraction( 3, 4 );
  
    Fraction res = maxFraction(first, sec);
    System.out.println(res.num +"/"+ res.den);
     
}
}
 
// This code is contributed by Gitanjali.

Python3

# Python3 program to find max
# between two Rational numbers
 
# Get max of the two fractions
def maxFraction(first, sec):
     
    # Declare nume1 and nume2 for get the value
    # of first numerator and second numerator
    a = first[0]; b = first[1]
    c = sec[0]; d = sec[1]
 
    # Compute ad-bc
    Y = a * d - b * c
 
    return first if Y else sec
 
# Driver Code
first = ( 3, 2 )
sec = ( 3, 4 )
res = maxFraction(first, sec)
print(str(res[0]) + "/" + str(res[1]))
 
 
# This code is contributed by Ansu Kumari.

C#

// C# program to find max between
// two Rational numbers
using System;
 
class Fraction {
     
    int num, den;
     
    //Constructor
    Fraction(int n,int d)
    {
        num=n;
        den=d;
    }
     
    // Get max of the two fractions
    static Fraction maxFraction(Fraction first, Fraction sec)
    {
        // Declare nume1 and nume2 for get the value of
        // first numerator and second numerator
        int a = first.num;
        int b = first.den;
        int c = sec.num;
        int d = sec.den;
     
        // Compute ad-bc
        int Y = a * d - b * c;
     
        return (Y > 0) ? first : sec;
    }
     
    // Driver function
    public static void Main ()
    {
     
        Fraction first = new Fraction( 3, 2 );
        Fraction sec = new Fraction( 3, 4 );
         
        Fraction res = maxFraction(first, sec);
        Console.WriteLine(res.num +"/"+ res.den);
         
    }
}
 
// This code is contributed by vt_m.

PHP

<?php
// PHP program to find max
// between two Rational numbers
 
// Get max of the two fractions
function maxFraction($first, $sec)
{
     
    // Declare nume1 and nume2
    // for get the value of
    // first numerator and second
    // numerator
    $a = $first[0];
    $b = $first[1];
    $c = $sec[0];
    $d = $sec[1];
 
    // Compute ad-bc
    $Y = $a * $d - $b * $c;
 
    return ($Y) ? $first : $sec;
}
 
// Driver Code
$first = array( 3, 2 );
$sec = array ( 3, 4 );
$res = maxFraction($first, $sec);
echo $res[0] . "/" . $res[1];
 
// This code is contributed
// by mits.
?>

Javascript

// javascript program to find max
// between two Rational numbers
   
// Get max of the two fractions
function maxFraction(first, sec) {
       
    // Declare nume1 and nume2 for get the value
    // of first numerator and second numerator
    a = first[0]; b = first[1]
    c = sec[0]; d = sec[1]
   
    // Compute ad-bc
    Y = a * d - b * c
   
    return (Y > 0) ? first : sec;
 
}
   
// Driver Code
 
first = [ 3, 2 ];
sec = [ 3, 4 ];
res = maxFraction(first, sec);
 
document.write(res[0] + "/" + res[1]);

Producción :  

3/2

Publicación traducida automáticamente

Artículo escrito por Sayan Mahapatra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *