]> git.llucax.com Git - z.facultad/75.62/c2tp1.git/blob - src/Fraccion.java
Agrego enunciado.
[z.facultad/75.62/c2tp1.git] / src / Fraccion.java
1
2 class CeroDenExc extends Exception {
3
4     private int num;
5
6     public int getNum() {
7         return num;
8     }
9
10     public void setNum(int n) {
11         num = n;
12     }
13
14     public CeroDenExc(int num) {
15         setNum(num);
16     }
17
18     public String toString() {
19         return "Division por 0 (numerador = " + getNum() + ")";
20     }
21
22 }
23
24 interface OperFrac {
25
26     public Fraccion mas(Fraccion f);
27
28     public Fraccion menos(Fraccion f);
29
30 }
31
32 interface ComparaFrac {
33
34     public int compareTo(Fraccion f);
35
36 }
37
38 class Fraccion implements OperFrac, ComparaFrac {
39
40     private int num;
41     private int den;
42
43     public int getNum() {
44         return num;
45     }
46
47     public int getDen() {
48         return den;
49     }
50
51     public void setNum(int n) {
52         num = n;
53     }
54
55     public void setDen(int d) {
56         den = d;
57     }
58
59     public Fraccion() {
60         setNum(1);
61         setDen(1);
62     }
63
64     public Fraccion(int num, int den) throws CeroDenExc {
65         if (den == 0)
66             throw new CeroDenExc(num);
67         setNum(num);
68         setDen(den);
69         normalizar();
70     }
71
72     public Fraccion(Fraccion f) {
73         setNum(f.num);
74         setDen(f.den);
75     }
76
77     public String toString() {
78         if (getNum() == 0)
79             return "0";
80         if (getDen() == 1)
81             return "" + getNum();
82         else
83             return getNum() + "/" + getDen();
84     }
85
86     public Fraccion mas(Fraccion f) {
87         try {
88             return new Fraccion(getNum() * f.getDen() + f.getNum() * getDen(),
89                     getDen() * f.getDen());
90         } catch (CeroDenExc e) {
91             return new Fraccion(); // Nunca deberia pasar
92         }
93     }
94
95     public Fraccion menos(Fraccion f) {
96         try {
97             return new Fraccion(getNum() * f.getDen() - f.getNum() * getDen(),
98                     getDen() * f.getDen());
99         } catch (CeroDenExc e) {
100             return new Fraccion(); // Nunca deberia pasar
101         }
102     }
103
104     public int compareTo(Fraccion f) {
105         if (getNum() * f.getDen() > getDen() * f.getNum())
106             return 1;
107         if (getNum() * f.getDen() < getDen() * f.getNum())
108             return -1;
109         return 0;
110     }
111
112     private static int mcd(int num, int den) {
113         int max = Math.abs(Math.max(num, den));
114         int min = Math.abs(Math.min(num, den));
115         if (max % min == 0)
116             return min;
117         else
118             return mcd(min, max % min);
119     }
120
121     private void normalizar() {
122         int d = mcd(getNum(), getDen());
123         setNum(getNum() / d);
124         setDen(getDen() / d);
125     }
126
127     // Test
128     public static void main(String args[]) throws CeroDenExc {
129         try {
130             Fraccion f = new Fraccion(10, 0);
131         } catch (CeroDenExc e) {
132             System.out.println("Ahhh! Esta rota la fraccion!" 
133                     + " tiene numerador " + e.getNum() + " y divisor 0");
134         }
135         Fraccion f1 = new Fraccion(2, 10);
136         System.out.println("f1 = " + f1);
137         System.out.println("f1 + f1 = " + f1.mas(f1));
138         Fraccion f3 = f1.menos(new Fraccion(100, 4));
139         System.out.println("f3 = " + f3);
140         System.out.println("f3 comparado a f1 = " + f3.compareTo(f1));
141         //System.out.println("Java esta roto en el manejo de excepciones!!!");
142     }
143
144 }
145
146 // vim: set et sw=4 sts=4 :