Mini examen. - Programación - Ing. Electrónica – 6 de Abril de 2006 SOLUCIÓN 1.- [7 puntos] Escribir una clase Fracción que forme parte de un paquete de nombre racionales para representar fracciones en Java. Una fracción va a quedar representada por dos enteros, el numerador y el denominador. Además de los atributos que se consideren necesarios, la clase debe contener los siguientes métodos: • Una constructora sin parámetros que cree la fracción 1/1. • Una constructora que reciba los valores iniciales del numerador y del denominador. Nota: No es necesario simplificar la fracción; si se llama a la constructora con -4 y -2 se guardarán estos valores como numerador y denominador sin más. • inversa: Devuelve la fracción inversa. La fracción a la que se aplica no queda modificada; por ejemplo la fracción -4/3 se convierte en la 3/-4 • toReal: devuelve el número real representador por la fracción. Por ejemplo para la fracción 1/4 se devolvería el valor 0.25. • suma: recibe como parámetro una fracción f y hace que la fracción se convierta en la suma de su valor actual más f. Nota: Para hacerlo de la forma más sencilla utilizar la fórmula: a/b + c/d = (ad+cb)/bd Por ejemplo si la fracción es la -2/2 y se le suma 1/4 el resultado será -6/8 • toString: Devuelve una representación como String de la fracción. Por ejemplo “1/4” para la fracción ¼. Solución package racionales; public class Fracción { private int numerador, denominador; public Fracción() { numerador=denominador=1;} public Fracción(int numerador,int denominador){ this.numerador = numerador; this.denominador = denominador; } public Fracción(int n) { // calculamos el factorial int f=1; while (n>1) {f*=n;n--;} // damos los valores iniciales a los atributos numerador = 1; denominador=f; } // devuelve la inversa de esta fracción. Esta fracción no queda modificada. public Fracción inversa(){ return new Fracción(this.denominador,this.numerador); } // número real representado por la fracción public double toReal() { return (double)numerador/(double)denominador; } public String toString() {return numerador+"/"+denominador; } // el enunciado era un poco ambigüo: se puede entender que se modifica este objeto // o que se modifica f (¡pero no que ninguno se modifica!) public void suma(Fracción f){ int deno = denominador*f.denominador; this.numerador = this.numerador*f.denominador+f.numerador*this.denominador; this.denominador = deno; } } 2.- [3 puntos] Escribir un programa que le pida al usuario dos enteros, cree una fracción f con los valores leídos como numerador y denominador y: • Obtenga la fracción inversa de la actual, a la que podemos llamar g. • Haga la operación f=f+g • Muestre el resultado de la operación anterior, tanto en forma de fracción como de número real. Ejemplo: Numerador y denominador: 4 -6 Fracción obtenida: 52/-24 Valor como número real: -2.1666666666666665 (los valores 4 y -6 son los introducidos por el usuario y 52/-24=(4/-6)+(-6/4)) Solución import racionales.Fracción; import java.util.Scanner; public class Principal { public static void main(String[] args) { // leemos de teclado los dos valores Scanner sc = new Scanner(System.in); System.out.println("Numerador y denominador: "); int num = sc.nextInt(); int deno = sc.nextInt(); // creamos la fracción Fracción f = new Fracción(num,deno); // creamos la inversa Fracción g = f.inversa(); // hacemos f = f+g f.suma(g); // mostramos el resultado System.out.println("Fracción obtenida: "+f); System.out.println("Valor como número real: "+f.toReal()); } } Al acabar el mini-examen, mandar imprimir, recoger el resultado firmarlo y entregarlo. Tiempo: 50 minutos