/* AUTOR: d3n3k4 (Dnk!)
* WEB: http://d3n3k4.blogspot.com/
* FECHA: 15/DIC/2010
* DESCRIPCION:
* - Nueva actualizacion para trabajar con quebrados (fracciones).
* - Introducido resta,multiplicacion,division de dos quebrados.
* - Con opcion a sumar,restar,multiplicar,dividir un vector de quebrados.
* NOTA: Este codigo es libre y puede ser usado,modificado... siempre y cuando se
* mantenga los creditos y comentarios del autor.
*/
import java.util.Scanner;
public class clsQuebrado {
//Atributos
private int numerador;
private int denominador;
//Contructores
public clsQuebrado(){
this.numerador = 0;
this.denominador = 0;
}
public clsQuebrado(int numerador,int denominador) {
this.numerador = numerador;
this.denominador = denominador;
}
//Setter&Getter
public void setNumerador(int numerador) {
this.numerador = numerador;
}
public void setDenominador(int denominador) {
this.denominador = denominador;
}
public int getNumerador(){
return this.numerador;
}
public int getDenominador(){
return this.denominador;
}
/*
* Calcular Maximo Comun Divisor.
*/
private static int mcd(int a, int b) {
int aux;
if (a < 0)
a = a * -1;
if (b < 0)
b = b * -1;
while (b != 0) {
aux = b;
b = a%b;
a = aux;
}
return a;
}
/*
* Calcular Minimo Comum Multiplo.
*/
private static int mcm(int a, int b) {
int min = (a*b)/mcd(a,b);
return min;
}
/*
* Reducir/simplificar Quebrado.
*/
public clsQuebrado reducir(){
clsQuebrado QuebradoRed = new clsQuebrado();
int max = mcd(this.getNumerador(),this.getDenominador());
QuebradoRed.setDenominador(this.getDenominador()/max);
QuebradoRed.setNumerador(this.getNumerador()/max);
return QuebradoRed;
}
/*
* @see java.lang.Object#toString()
*/
return this.getNumerador()+"/"+this.getDenominador();
}
/*
* Sumar 2 quebrados o vector de quebrados.
*/
public static clsQuebrado sumar(clsQuebrado q1,clsQuebrado q2) {
clsQuebrado QuebradoRes = new clsQuebrado();
int min = mcm(q1.getDenominador(),q2.getDenominador());
QuebradoRes.setDenominador(min);
QuebradoRes.setNumerador(q1.getNumerador()*(min/q1.getDenominador())+q2.getNumerador()*(min/q2.getDenominador()));
return QuebradoRes.reducir();
}
public static clsQuebrado sumar(clsQuebrado[] lista) {
clsQuebrado QuebradoRes = new clsQuebrado();
for (int i = 0; i < lista.length; i++) {
lista[i] = lista[i].reducir();
}
QuebradoRes = sumar(lista[0], lista[1]);
for (int i = 2; i < lista.length; i++) {
QuebradoRes = sumar(QuebradoRes,lista[i]);
}
return QuebradoRes.reducir();
}
/*
* Idem que anterior -> restar.
*/
public static clsQuebrado restar(clsQuebrado q1,clsQuebrado q2) {
clsQuebrado QuebradoRes = new clsQuebrado();
int min = mcm(q1.getDenominador(),q2.getDenominador());
QuebradoRes.setDenominador(min);
QuebradoRes.setNumerador(q1.getNumerador()*(min/q1.getDenominador())-q2.getNumerador()*(min/q2.getDenominador()));
return QuebradoRes.reducir();
}
public static clsQuebrado restar(clsQuebrado[] lista) {
clsQuebrado QuebradoRes = new clsQuebrado();
for (int i = 0; i < lista.length; i++) {
lista[i] = lista[i].reducir();
}
QuebradoRes = restar(lista[0], lista[1]);
for (int i = 2; i < lista.length; i++) {
QuebradoRes = restar(QuebradoRes,lista[i]);
}
return QuebradoRes.reducir();
}
/*
* Idem que anterior -> multiplicar.
*/
public static clsQuebrado multiplicar(clsQuebrado q1,clsQuebrado q2) {
clsQuebrado QuebradoRes = new clsQuebrado(q1.getNumerador()*q2.getNumerador(),q1.getDenominador()*q2.getDenominador());
return QuebradoRes.reducir();
}
public static clsQuebrado multiplicar(clsQuebrado[] lista) {
clsQuebrado QuebradoRes = new clsQuebrado();
for (int i = 0; i < lista.length; i++) {
lista[i] = lista[i].reducir();
}
QuebradoRes = multiplicar(lista[0], lista[1]);
for (int i = 2; i < lista.length; i++) {
QuebradoRes = multiplicar(QuebradoRes,lista[i]);
}
return QuebradoRes.reducir();
}
/*
* Idem que anterior -> dividir.
*/
public static clsQuebrado dividir(clsQuebrado q1,clsQuebrado q2){
clsQuebrado QuebradoRes = new clsQuebrado(q1.getNumerador()*q2.getDenominador(),q1.getDenominador()*q2.getNumerador());
return QuebradoRes.reducir();
}
public static clsQuebrado dividir(clsQuebrado[] lista) {
clsQuebrado QuebradoRes = new clsQuebrado();
for (int i = 0; i < lista.length; i++) {
lista[i] = lista[i].reducir();
}
QuebradoRes = dividir(lista[0], lista[1]);
for (int i = 2; i < lista.length; i++) {
QuebradoRes = dividir(QuebradoRes,lista[i]);
}
return QuebradoRes.reducir();
}
/*
* Lee un quebrado de teclado.
*/
public static clsQuebrado leerQuebrado(){
Scanner entrada
= new Scanner
(System.
in); clsQuebrado QuebradoRes = new clsQuebrado(entrada.nextInt(),entrada.nextInt());
return QuebradoRes.reducir();
}
/*
* Obtienes un string de la operacion total del arreglo.
*/
public static String escribeExpresion
(clsQuebrado
[] lista
) { for (int i = 0; i < lista.length; i++) {
if (i > 0 && lista[i].getNumerador() >= 0)
exp += "+";
exp += lista[i].toString();
}
exp += "=";
return exp;
}
}