welcome: please sign in
location: attachment:05-Classi-Numeri-razionali.txt of InformaticaCDLmatematica

Attachment '05-Classi-Numeri-razionali.txt'

Download

   1 // ATTENZIONE: si noti che il testo riportato qui sotto e' in realta' 
   2 // la concatenazione di DUE FILE diversi: Razionale.java ed Esempio1.java
   3 // La classe eseguibile e' ovviamente Esempio1, contenuta in Esempio1.java
   4 
   5 // ESERCIZIO: provare a leggere in input una sequenza di numeri razionali 
   6 // e calcolarne la media espressa come numero reale.
   7 
   8 
   9 /////////////////////////////////////////////////////////////////////////
  10 
  11 // FILE Razionale.java
  12 
  13 import java.util.Scanner;
  14 
  15 public class Razionale {
  16     private int numeratore;
  17     private int denominatore;
  18 
  19     public Razionale(int numeratore, int denominatore) {
  20 		this.numeratore = numeratore;
  21 		this.setDenominatore(denominatore);
  22     }
  23 
  24     public Razionale(int numeratore) {
  25 		this.numeratore = numeratore;
  26 		this.denominatore = 1;
  27     }
  28     
  29     public Razionale() {
  30 		this.numeratore = 0;
  31 		this.denominatore = 1;
  32     }
  33     
  34     public Razionale(Razionale r) {
  35     	this.set(r);
  36     }
  37     
  38     public String toString() {
  39     	return this.numeratore + "/" + this.denominatore;
  40     }
  41     
  42     public double toDouble() {
  43     	return this.numeratore / (double) this.denominatore;
  44     }
  45     
  46     public int getNumeratore() {
  47         return numeratore;
  48     }
  49     
  50     public void setNumeratore(int numeratore) {
  51         this.numeratore = numeratore;
  52         this.semplifica();
  53     }
  54     
  55     public int getDenominatore() {
  56         return denominatore;
  57     }
  58     
  59     public void setDenominatore(int denominatore) {
  60 		if(denominatore != 0) {
  61 		    this.denominatore = denominatore;
  62 		    this.semplifica();
  63 		}
  64 		else  // se denominatore e' 0 lo settiamo a 1 per evitare una divisione per zero 
  65 		      // (ma l'utente dovrebbe evitare di settare il denominatore a zero)
  66 		    this.denominatore = 1;
  67     }
  68     
  69     public void set(Razionale r) {
  70 		this.numeratore = r.numeratore;
  71 		this.denominatore = r.denominatore;
  72 	    }
  73 	    
  74 	    private void semplifica() {
  75 		if(this.denominatore < 0) {
  76 		    this.numeratore *= -1;
  77 		    this.denominatore *= -1;
  78 		}
  79 		
  80 		int d = Razionale.mcd(Math.abs(this.numeratore), denominatore);
  81 		this.numeratore /= d;
  82 		this.denominatore /= d;
  83     }
  84     
  85     private static int mcd(int a, int b) {
  86 		while(true) {
  87 		    if(a == 0)
  88 			return b;
  89 		    if(b == 0)
  90 			return a;
  91 		    
  92 		    if(a > b)
  93 			a -= b;
  94 		    else
  95 			b -= a;
  96 		}
  97     }
  98 
  99     public boolean ugualeA(Razionale r) {
 100     	return this.toDouble() == r.toDouble();
 101     }
 102     
 103     public boolean diversoDa(Razionale r) {
 104     	return !this.ugualeA(r);
 105     }
 106     
 107     public boolean minoreDi(Razionale r) {
 108     	return this.toDouble() < r.toDouble();
 109     }
 110     
 111     public boolean minoreDiOUgualeA(Razionale r) {
 112     	return this.toDouble() <= r.toDouble();
 113     }
 114     
 115     public boolean maggioreDi(Razionale r) {
 116     	return this.toDouble() > r.toDouble();
 117     }
 118     
 119     public boolean maggioreDiOUgualeA(Razionale r) {
 120     	return this.toDouble() >= r.toDouble();
 121     }
 122     
 123     public void moltiplica(Razionale r) {
 124 		this.numeratore *= r.numeratore;
 125 		this.denominatore *= r.denominatore;
 126 		this.semplifica();
 127     }
 128     
 129     public void dividi(Razionale r) {
 130 		Razionale tmp = new Razionale(r);
 131 		tmp.inverti();
 132 		this.moltiplica(tmp);
 133     }
 134     
 135     public void inverti() {
 136 		if(this.numeratore != 0) {
 137 		    int tmp = this.numeratore;
 138 		    this.numeratore = this.denominatore;
 139 		    this.denominatore = tmp;
 140 		    this.semplifica();
 141 		}
 142     }
 143 
 144     public void somma(Razionale r) {
 145 		this.numeratore = this.numeratore * r.denominatore + r.numeratore * this.denominatore;
 146 		this.denominatore *= r.denominatore;
 147 		this.semplifica();
 148     }
 149     
 150     public void sottrai(Razionale r) {
 151 		Razionale tmp = new Razionale(r);
 152 		tmp.moltiplica(new Razionale(-1));
 153 		this.somma(tmp);
 154     }
 155     
 156     public static Razionale leggi(Scanner input) {
 157 		System.out.print("Numeratore: ");
 158 		int n = input.nextInt();
 159 		System.out.print("Denominatore: ");
 160 		int d = input.nextInt();
 161 		System.out.println();
 162 		return new Razionale(n, d);
 163     }
 164 }
 165 
 166 
 167 /////////////////////////////////////////////////////////////////////////
 168 
 169 
 170 // FILE Esempio1.java
 171 
 172 /*
 173  * Verificare che l'output di questo programma sia corretto.
 174  */
 175 
 176 public class Esempio1 {
 177     
 178     public static void main(String[] args) {
 179 		Razionale r1 = new Razionale(1,2);
 180 		System.out.println(r1 + " = " + r1.toDouble());
 181 		
 182 		Razionale r2 = new Razionale(4,5);
 183 		System.out.println(r2 + " = " + r2.toDouble());
 184 		
 185 		Razionale r3 = new Razionale(r1);
 186 		r3.moltiplica(r2);
 187 		System.out.println(r3 + " = " + r3.toDouble());
 188 		
 189 		r3.somma(r2);
 190 		System.out.println(r3 + " = " + r3.toDouble());
 191 		
 192 		r3.sottrai(r2);
 193 		System.out.println(r3 + " = " + r3.toDouble());
 194 		
 195 		r3.dividi(r2);
 196 		System.out.println(r3 + " = " + r3.toDouble());
 197 		
 198 		System.out.println(r3.ugualeA(r1));
 199     }
 200     
 201 }

Attached Files

You are not allowed to attach a file to this page.