Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // https://pastebin.com/CJPu9xFY
- package corso.java;
- /*
- Rappresentiamo una frazione aritmetica.
- Cosa si intende per Frazione Aritmetica?
- Una [frazione] è un numero caratterizzato dalla divisione tra due interi
- detti [numeratore] e [denominatore].
- Una frazione può <essere rappresentata> come
- numeratore/denominatore oppure come un numero reale ottenuto
- dalla divisione di numeratore con denominatore
- +------------------+
- +------------------+
- | Frazione |
- +------------------+
- +--------------+---+
- | numeratore | N |
- | denominatore| N |
- +--------------+---+
- | visualizza() | |
- | valore() | R |
- +--------------+---+
- */
- /**
- * Definizione di una frazione aritmetica.
- *
- * @author nello
- *
- */
- public class Frazione {
- /**
- * Variabile di stato che rappresenta il numeratore della frazione.
- */
- private int numeratore = 1;
- /**
- * variabile di stato che rappresenta il denominatore della frazione.
- */
- private int denominatore = 1;
- /**
- * Variabile di stato che rappresenta il segno della frazione.
- */
- private int segno = 1;
- /**
- * Legge il numeratore.
- *
- * @return il numeratore della frazione.
- */
- public int getNumeratore() {
- return numeratore;
- }
- /**
- * Legge il denominatore.
- *
- * @return il denominatore della frazione.
- */
- public int getDenominatore() {
- return denominatore;
- }
- /**
- * Legge il segno.
- *
- * @return il segno della frazione.
- */
- public int getSegno() {
- return segno;
- }
- /**
- * Restituisce il valore assoluto di un numero.
- *
- * @param a numero di cui calcolare il valore assoluto.
- * @return il valore assoluto del numero.
- */
- private double abs(double a) {
- if (a < 0)
- return -a;
- else
- return a;
- }
- /**
- * Calcola il massimo comune divisore tra due numeri.
- *
- * @param a primo numero.
- * @param b secondo numero.
- * @return il m.c.d. tra i numeri.
- */
- private int mcd(int a, int b) {
- a = (int) abs(a);
- b = (int) abs(b);
- if (b == 0)
- return a;
- if (a < b) {
- int t = a;
- a = b;
- b = t;
- }
- return mcd(b, a % b);
- }
- /**
- * Semplifica numeratore e denominatore se hanno in comune un MCD.
- */
- private void semplifica() {
- int m = mcd(numeratore, denominatore);
- numeratore /= m;
- denominatore /= m;
- }
- /**
- * Imposta il numeratore.
- *
- * @param numero Valore da assegnare al numeratore della frazione.
- */
- public void setNumeratore(int numero) {
- // se il numero da assegnare è negativo
- if (numero < 0) {
- // cambia il valore del segno
- segno *= -1;
- // e mette il numero in positivo
- numero = -numero;
- }
- // assegna il numero passato come parametro
- // alla variabile di stato del numeratore
- numeratore = numero;
- // se c'è da semplificare, semplifica...
- semplifica();
- }
- /**
- * Imposta il denominatore.
- *
- * @param numero Valore da assegnare al denominatore della frazione.
- */
- public void setDenominatore(int numero) {
- // TODO: Attenzione, qui va gestito opportunamente l'errore di denominatore = 0
- if (numero == 0)
- // se intendiamo assegnare 0 al denominatore,
- // al momento lo segnaliamo semplicemente e non
- // modifichiamo il valore precedente
- System.err.println("ERRORE: Il denominatore non può essere zero");
- else { // Ok: denominatore diverso da 0
- if (numero < 0) // controllo se il valore da assegnare è negativo
- {
- // come prima cambio segno a tutta la frazione
- segno *= -1;
- // e metto il valore in positivo
- numero = -numero;
- }
- // assegno il numero al denominatore
- denominatore = numero;
- // se c'è da semplificare, semplifica...
- semplifica();
- }
- }
- /**
- * Ottiene la rappresentazione sotto forma di stringa.
- *
- * @return la rappresentazione della frazione sotto forma di stringa.
- */
- public String visualizza() {
- // variabile per costruire il risultato
- String risultato = "";
- // se il segno è negativo
- if (segno < 0)
- // aggiunge il meno
- risultato += "-";
- // aggiunge il numeratore
- risultato += numeratore;
- // se numeratore diverso da 0 e denominatore diverso da 1
- if (numeratore != 0 && denominatore != 1)
- // aggiunge la visualizzazione del denominatore
- risultato += "/" + denominatore;
- // restituisce il risultato
- return risultato;
- }
- /**
- * Ottiene il valore numerico.
- *
- * @return il valore numerico (reale) della frazione.
- */
- public double valore() {
- return (double) segno * numeratore / denominatore;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement