]> git.llucax.com Git - z.facultad/75.62/c2tp1.git/blob - src/Fraccion.java
8bd3ec47325b233e314599087d8ef25211b2fbaf
[z.facultad/75.62/c2tp1.git] / src / Fraccion.java
1
2 public class Fraccion implements OperFrac, ComparaFrac {
3
4     private int num;
5     private int den;
6
7     public int getNum() {
8         return num;
9     }
10
11     public int getDen() {
12         return den;
13     }
14
15     public void setNum(int n) {
16         num = n;
17     }
18
19     public void setDen(int d) {
20         den = d;
21     }
22
23     public Fraccion() {
24         setNum(1);
25         setDen(1);
26     }
27
28     public Fraccion(int num, int den) throws CeroDenExc {
29         if (den == 0)
30             throw new CeroDenExc(num);
31         setNum(num);
32         setDen(den);
33         normalizar();
34     }
35
36     public Fraccion(Fraccion f) {
37         setNum(f.num);
38         setDen(f.den);
39     }
40
41     public String toString() {
42         if (getNum() == 0)
43             return "0";
44         if (getDen() == 1)
45             return "" + getNum();
46         else
47             return getNum() + "/" + getDen();
48     }
49
50     public Fraccion mas(Fraccion f) {
51         try {
52             return new Fraccion(getNum() * f.getDen() + f.getNum() * getDen(),
53                     getDen() * f.getDen());
54         } catch (CeroDenExc e) {
55             return new Fraccion(); // Nunca deberia pasar
56         }
57     }
58
59     public Fraccion menos(Fraccion f) {
60         try {
61             return new Fraccion(getNum() * f.getDen() - f.getNum() * getDen(),
62                     getDen() * f.getDen());
63         } catch (CeroDenExc e) {
64             return new Fraccion(); // Nunca deberia pasar
65         }
66     }
67
68     public int compareTo(Fraccion f) {
69         if (getNum() * f.getDen() > getDen() * f.getNum())
70             return 1;
71         if (getNum() * f.getDen() < getDen() * f.getNum())
72             return -1;
73         return 0;
74     }
75
76     private static int mcd(int num, int den) {
77         int max = Math.abs(Math.max(num, den));
78         int min = Math.abs(Math.min(num, den));
79         if (max % min == 0)
80             return min;
81         else
82             return mcd(min, max % min);
83     }
84
85     private void normalizar() {
86         int d = mcd(getNum(), getDen());
87         setNum(getNum() / d);
88         setDen(getDen() / d);
89     }
90
91 }
92
93 // vim: set et sw=4 sts=4 :