Solución a la práctica de Algoritmos I – Grupo A

Estándar

La práctica tomada por el profesor el día de hoy nos sorprendió un poco con el tiempo dado para resolverla. Aún así, logré ver que la mayoría logró resolverla en una escala media.

El trabajo que ahora tenemos consta en desarrollar la práctica. Y como es una oportunidad para mejorar lo que hicimos durante el tiempo dado, pues aquí expongo la mejora de mi código (el que hice en clase me lo reservo).

Codificación

public class Fraccion {
    
    private int num;
    private int den;
    
    /**
     * Crea una nueva Fraccion.
     */
    public Fraccion() {
        num = 0;
        den = 1;
    }
    
    /**
     * Copia la Fraccion en f a esta Fraccion.
     * @param f Fraccion a copiar
     */
    public Fraccion(Fraccion f) {
        num = f.num;
        den = f.den;
    }
    
    /**
     * Inicializa los valores de esta Fraccion.
     * @param num numerador
     * @param den denominador
     */
    public Fraccion(int num, int den) {
        this.num = num;
        this.den = den;
    }
    
    /**
     * Obtiene el numerador de esta Fraccion.
     * @return numerador
     */
    public int getNum() {
        return num;
    }
    
    /**
     * Obtiene el denominador de esta Fraccion.
     * @return denominador
     */
    public int getDen() {
        return den;
    }
    
    /**
     * Asigna el numerador de esta Fraccion.
     * @param num numerador a asignar
     */
    public void setNum(int num) {
        this.num = num;
    }
    
    /**
     * Asigna el denominador de esta Fraccion.
     * @param den denominador a asignar
     */
    public void setDen(int den) {
        this.den = den;
    }
    
    /**
     * Suma dos Fracciones.
     * @param f segunda Fraccion a sumar
     * @return Fraccion suma
     */
    public Fraccion sumar(Fraccion f) {
        return new Fraccion(num * f.den + f.num * den, den * f.den);
    }
    
    /**
     * Multiplica dos Fracciones.
     * @param f segunda Fraccion a multiplicar
     * @return Fraccion producto
     */
    public Fraccion multiplicar(Fraccion f) {
        return new Fraccion(num * f.num, den * f.den);
    }
    
    /**
     * Simplifica una Fraccion.
     * @return Fraccion simplificada
     */
    public Fraccion simplificar() {
        int n = num;
        int d = den;
        int res;
        // Calculamos el MCD
        while (d != 0) {
            res = n % d;
            n = d;
            d = res;
        }
        return new Fraccion(num / n, den / n);
    }
    
    /**
     * Compara fracciones.
     * @param f Fraccion a comparar
     * @return true si esta Fraccion es mayor a f.
     */
    public boolean esMayor(Fraccion f) {
        if (num * f.den > f.num * den) {
            return true;
        }
        return false;
    }
    
    /**
     * Devuelve la Fraccion como cadena.
     * @return Fraccion como String
     */
    public String toString() {
        return num + "/" + den;
    }
    
}
import java.util.Random;
import java.util.Scanner;

public class PruebaFraccion {
    
    private static void generar(Fraccion[] v) {
        Random r = new Random();
        for (int i = 0; i < v.length; i++) {
            int num = r.nextInt(10);
            int den = r.nextInt(10);
            // El denominador no puede ser 0
            while (den == 0) {
                den = r.nextInt(10);
            }
            v[i] = new Fraccion(num, den);
        }
    }
    
    private static void mostrar(Fraccion[] v) {
        System.out.println();
        for (int i = 0; i < v.length; i++) {
            // No es necesario llamar a toString()
            // pues lo llama de manera automatica
            System.out.println(v[i]);
        }
        System.out.println();
    }
    
    private static Fraccion mayor(Fraccion[] v) {
        Fraccion mayor = new Fraccion(v[0]);
        // i = 1 porque ya asignamos arriba
        // la fraccion mayor a 0
        for (int i = 1; i < v.length; i++) {
            if (v[i].esMayor(mayor)) {
                mayor = new Fraccion(v[i]);
            }
        }
        return mayor;
    }
    
    private static Fraccion suma(Fraccion[] v) {
        Fraccion suma = new Fraccion(v[0]);
        // i = 1 tambien
        for (int i = 1; i < v.length; i++) {
            suma = suma.sumar(v[i]);
        }
        return suma;
    }
    
    private static Fraccion producto(Fraccion[] v) {
        Fraccion producto = new Fraccion(v[0]);
        // i = 1 tambien
        for (int i = 1; i < v.length; i++) {
            producto = producto.multiplicar(v[i]);
        }
        return producto;
    }
    
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        System.out.print("Numero de elementos: ");
        int n = sc.nextInt();
        sc.close();
        
        Fraccion[] v = new Fraccion[n];
        
        generar(v);
        mostrar(v);
        
        // Tener en cuenta que el toString()
        // ya no debe ser llamado porque Java
        // automaticamente sabe llamarlo
        System.out.println("Fraccion mayor: " + mayor(v));
        System.out.println("Suma: " + suma(v).simplificar());
        System.out.println("Producto: " + producto(v).simplificar());
        
    }
    
}

Espero sus comentarios, observaciones, y otros 🙂

Anuncios

¿Y tú qué opinas?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s