Attachment '20100108-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.