[JAVA] NEW Operaciones con quebrados ~ ver.2

Iniciado por Dnk!, 15 Diciembre 2010, 01:29 AM

0 Miembros y 1 Visitante están viendo este tema.

Dnk!

Aqui os dejo este codigo que hice de tarea. Asi que mejor que me digan que les parece, y me den muchas criticas, porque herrar es umano.  :-*

Código (java) [Seleccionar]

/* 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()
*/
public String 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) {
String exp = "";
for (int i = 0; i < lista.length; i++) {
if (i > 0 && lista[i].getNumerador() >= 0)
exp += "+";
exp += lista[i].toString();
}
exp += "=";
return exp;
}
}


Ejemplo de uso:
Código (java) [Seleccionar]

public class ProgramaQuebrados {

public static void main(String[] args) {
Quebrado q1,q2,res;
System.out.println("Introduce primer quebrado:");
q1 = Quebrado.leerQuebrado();
System.out.println("Introduce primer quebrado:");
q2 = Quebrado.leerQuebrado();
System.out.println("Pruebas Operaciones");
res = Quebrado.sumar(q1, q2);
System.out.println(q1+" + "+q2+" = "+res);
res = Quebrado.restar(q1, q2);
System.out.println(q1+" - "+q2+" = "+res);
res = Quebrado.multiplicar(q1, q2);
System.out.println(q1+" * "+q2+" = "+res);
res = Quebrado.dividir(q1, q2);
System.out.println(q1+" / "+q2+" = "+res);
System.out.println("Prueba sumaQuebrados y escribeExpresion");
Quebrado[] lista = new Quebrado[5];
lista[0] =  new Quebrado(10,20);
lista[1] =  new Quebrado(10,30);
lista[2] =  new Quebrado(-10,10);
lista[3] =  new Quebrado(30,20);
lista[4] =  new Quebrado(-10,20);
res = Quebrado.sumaQuebrados(lista);
System.out.print(Quebrado.escribeExpresion(lista));
System.out.println(res);
}
}


xDnk!




Comentar es agradecer.
Visita Mi Blob

sapito169

la primera letra de una clase no comiensa con mayuscula las clases no comiensan con cls los metodos mcd y mcm no tienen nada que ver deverian estar en otra clase
borra la importacion a scaner mejor crea otra clases para hacer las operaciones de lectura
aparte de eso es buen codigo es realmente extraordinario es decir que es algo que casi nunca pasa encontrar codigo que se entienda y menos a la primera  ;-)  ;-)

Dnk!

#2
UPs gran fallo el de las mayus, se me paso, justo al final lo cambie sin coprobar. Las funciones de lectura tienes razon, lo pense asi pero como era tarde se me paso. XD.

Pero no veo porque tengo k sacar de la clase el maximo comun divisor y el minimo comun multiplo?.

Saludos!




Comentar es agradecer.
Visita Mi Blob

sapito169

si un metodo de una clase usa variables pasadas como parametro y no usa ninguna de las globalas te esta gritando que deberia estar en otra clase asi puedes reusar esa funcion en cualquier parte que quieras

Dnk!

Tienes razon, pero la logica del objeto necesita de esas funciones internas para poder realizar el proceso. No se si me entiendes, yo a ti si pero difiero en esa parte.

La clase necesita trabajar con esos metodos para realizarlo, no lo veo logico fuera.

EDITO: Una posible solucion, seria crear otra clase, y desde la clase Quebrado llamar a estos metodos no?




Comentar es agradecer.
Visita Mi Blob