solución

Anuncio
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
Descargar