public class Fraccion{ /* Los atributos de la clase Fraccion son el numerador y el denominador que por definicion son numeros enteros */ int num; int denom; //Metodos Constructores //Constructor simple public Fraccion(){ num = 0; denom = 1; } //Constructor para fracciones enteras public Fraccion(int num) { this.num = num; denom = 1; } //Constructor general public Fraccion(int num, int denom){ this.num = num; this.denom = denom; } /*Funcion para entrada de datos por teclado */ public static Fraccion datos(){ String numc =""; String denomc =""; Fraccion f=new Fraccion(); String fraccionDato = Terminal.leeCadena("\nIntroduce una fraccion: "); /* Buscamos el lugar que ocupa en la cadena el simbolo "/" */ int pos = fraccionDato.indexOf('/'); /* Si es un numero entero no se encuentra "/" y asigna a "pos" un -1 */ if(pos==-1) { int num1 = Integer.valueOf(fraccionDato.trim()).intValue(); f= new Fraccion(num1); } else { for(int i=0;i=0) return new Fraccion(a.denom,a.num); else return new Fraccion(-a.denom,-a.num); } public static Fraccion cociente(Fraccion a, Fraccion b){ /* Para calcular el cociente se obtiene la fraccion producto de la primera fraccion, por la inversa de la segunda fraccion */ return producto(a,inversa(b)); } public static Fraccion potencia(Fraccion a) { Fraccion c = new Fraccion(); double exponente = Terminal.leeReal("Exponente al que se eleva: "); c.num = (int) Math.pow((double)a.num,Math.abs(exponente)); c.denom = (int) Math.pow((double)a.denom,Math.abs(exponente)); if(exponente<0) c=Fraccion.inversa(c); return c; } public String toString(){ /* Se devuelve una cadena con el numerador y denominador y en medio el signo "/" de division */ if(denom==1) return " "+num; else return num+"/"+denom; } private int mcd(){ /* El mcd de numerador y denominador es una funcion privada de la clase fraccion que se obtiene por el metodo de Euler y que nos sirve para la simplificacion de fracciones */ int u = Math.abs(num); //Se usa valor absoluto por si hay negativos int v = Math.abs(denom); if(v==0) return u; int r; /* "r" va a ser el resto de cada division */ while(v!=0){ r = u%v; u = v; v = r; } return u; } public Fraccion simplificar(){ /* Se devuelve una nueva fraccion con sus terminos divididos por el mcd de numerador y denominador */ return new Fraccion(num/mcd(),denom/mcd()); } }