Advertisement
NelloRizzo

Frazioni Aritmetiche

Nov 30th, 2018
368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.50 KB | None | 0 0
  1. // https://pastebin.com/CJPu9xFY
  2.  
  3. package corso.java;
  4.  
  5. /*
  6. Rappresentiamo una frazione aritmetica.
  7.  
  8. Cosa si intende per Frazione Aritmetica?
  9. Una [frazione] è un numero caratterizzato dalla divisione tra due interi
  10. detti [numeratore] e [denominatore].
  11. Una frazione può <essere rappresentata> come
  12. numeratore/denominatore oppure come un numero reale ottenuto
  13. dalla divisione di numeratore con denominatore
  14.  
  15. +------------------+
  16. +------------------+
  17. | Frazione         |
  18. +------------------+
  19. +--------------+---+
  20. |  numeratore  | N |
  21. |  denominatore| N |
  22. +--------------+---+
  23. | visualizza() |   |
  24. | valore()     | R |
  25. +--------------+---+
  26.  
  27. */
  28. /**
  29.  * Definizione di una frazione aritmetica.
  30.  *
  31.  * @author nello
  32.  *
  33.  */
  34. public class Frazione {
  35.     /**
  36.      * Variabile di stato che rappresenta il numeratore della frazione.
  37.      */
  38.     private int numeratore = 1;
  39.     /**
  40.      * variabile di stato che rappresenta il denominatore della frazione.
  41.      */
  42.     private int denominatore = 1;
  43.     /**
  44.      * Variabile di stato che rappresenta il segno della frazione.
  45.      */
  46.     private int segno = 1;
  47.  
  48.     /**
  49.      * Legge il numeratore.
  50.      *
  51.      * @return il numeratore della frazione.
  52.      */
  53.     public int getNumeratore() {
  54.         return numeratore;
  55.     }
  56.  
  57.     /**
  58.      * Legge il denominatore.
  59.      *
  60.      * @return il denominatore della frazione.
  61.      */
  62.     public int getDenominatore() {
  63.         return denominatore;
  64.     }
  65.  
  66.     /**
  67.      * Legge il segno.
  68.      *
  69.      * @return il segno della frazione.
  70.      */
  71.     public int getSegno() {
  72.         return segno;
  73.     }
  74.  
  75.     /**
  76.      * Restituisce il valore assoluto di un numero.
  77.      *
  78.      * @param a numero di cui calcolare il valore assoluto.
  79.      * @return il valore assoluto del numero.
  80.      */
  81.     private double abs(double a) {
  82.         if (a < 0)
  83.             return -a;
  84.         else
  85.             return a;
  86.     }
  87.  
  88.     /**
  89.      * Calcola il massimo comune divisore tra due numeri.
  90.      *
  91.      * @param a primo numero.
  92.      * @param b secondo numero.
  93.      * @return il m.c.d. tra i numeri.
  94.      */
  95.     private int mcd(int a, int b) {
  96.         a = (int) abs(a);
  97.         b = (int) abs(b);
  98.         if (b == 0)
  99.             return a;
  100.         if (a < b) {
  101.             int t = a;
  102.             a = b;
  103.             b = t;
  104.         }
  105.         return mcd(b, a % b);
  106.     }
  107.  
  108.     /**
  109.      * Semplifica numeratore e denominatore se hanno in comune un MCD.
  110.      */
  111.     private void semplifica() {
  112.         int m = mcd(numeratore, denominatore);
  113.         numeratore /= m;
  114.         denominatore /= m;
  115.     }
  116.  
  117.     /**
  118.      * Imposta il numeratore.
  119.      *
  120.      * @param numero Valore da assegnare al numeratore della frazione.
  121.      */
  122.     public void setNumeratore(int numero) {
  123.         // se il numero da assegnare è negativo
  124.         if (numero < 0) {
  125.             // cambia il valore del segno
  126.             segno *= -1;
  127.             // e mette il numero in positivo
  128.             numero = -numero;
  129.         }
  130.         // assegna il numero passato come parametro
  131.         // alla variabile di stato del numeratore
  132.         numeratore = numero;
  133.         // se c'è da semplificare, semplifica...
  134.         semplifica();
  135.     }
  136.  
  137.     /**
  138.      * Imposta il denominatore.
  139.      *
  140.      * @param numero Valore da assegnare al denominatore della frazione.
  141.      */
  142.     public void setDenominatore(int numero) {
  143.         // TODO: Attenzione, qui va gestito opportunamente l'errore di denominatore = 0
  144.         if (numero == 0)
  145.             // se intendiamo assegnare 0 al denominatore,
  146.             // al momento lo segnaliamo semplicemente e non
  147.             // modifichiamo il valore precedente
  148.             System.err.println("ERRORE: Il denominatore non può essere zero");
  149.         else { // Ok: denominatore diverso da 0
  150.             if (numero < 0) // controllo se il valore da assegnare è negativo
  151.             {
  152.                 // come prima cambio segno a tutta la frazione
  153.                 segno *= -1;
  154.                 // e metto il valore in positivo
  155.                 numero = -numero;
  156.             }
  157.             // assegno il numero al denominatore
  158.             denominatore = numero;
  159.             // se c'è da semplificare, semplifica...
  160.             semplifica();
  161.         }
  162.     }
  163.  
  164.     /**
  165.      * Ottiene la rappresentazione sotto forma di stringa.
  166.      *
  167.      * @return la rappresentazione della frazione sotto forma di stringa.
  168.      */
  169.     public String visualizza() {
  170.         // variabile per costruire il risultato
  171.         String risultato = "";
  172.         // se il segno è negativo
  173.         if (segno < 0)
  174.             // aggiunge il meno
  175.             risultato += "-";
  176.         // aggiunge il numeratore
  177.         risultato += numeratore;
  178.         // se numeratore diverso da 0 e denominatore diverso da 1
  179.         if (numeratore != 0 && denominatore != 1)
  180.             // aggiunge la visualizzazione del denominatore
  181.             risultato += "/" + denominatore;
  182.         // restituisce il risultato
  183.         return risultato;
  184.     }
  185.  
  186.     /**
  187.      * Ottiene il valore numerico.
  188.      *
  189.      * @return il valore numerico (reale) della frazione.
  190.      */
  191.     public double valore() {
  192.         return (double) segno * numeratore / denominatore;
  193.     }
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement