rendered paste body/**
* Murtoluku2 kuvaa murtolukua, joka koostuu osoittajasta ja nimitt�j�st�.
*/
public class Murtoluku2 {
private int osoittaja;
private int nimittaja;
/**
* Luo uuden murtoluvun.
*
* @param os Osoittaja
* @param nim Nimitt�j�
*/
public Murtoluku2(int os, int nim) {
if (nim == 0)
nim = 1;
if (nim * os < 0) { // Mahdollinen etumerkki tulee aina osoittajaan
this.osoittaja = - Math.abs(os);
this.nimittaja = Math.abs(nim);
}
else {
this.osoittaja = Math.abs(os);
this.nimittaja = Math.abs(nim);
}
}
/**
* Kertoo murtoluvun osoittajan arvon.
*/
public int kerroOsoittaja() {
return this.osoittaja;
}
/**
* Kertoo murtoluvun nimitt�j�n arvon.
*/
public int kerroNimittaja() {
return this.nimittaja;
}
/**
* Laskee yhteen kaksi murtolukua. Summaa ei supisteta automaattisesti.
*/
public Murtoluku2 summa(Murtoluku2 toinenLuku) {
Murtoluku2 uusiLuku;
int osoittaja1, osoittaja2, nimittaja1, nimittaja2;
osoittaja1 = this.osoittaja;
osoittaja2 = toinenLuku.kerroOsoittaja();
nimittaja1 = this.nimittaja;
nimittaja2 = toinenLuku.kerroNimittaja();
/* Lavennetaan luvut samannimisiksi */
osoittaja1 *= nimittaja2;
osoittaja2 *= nimittaja1;
nimittaja1 *= nimittaja2;
/* Luodaan uusi murtoluku, johon summa tulee */
uusiLuku = new Murtoluku2(osoittaja1 + osoittaja2, nimittaja1);
return uusiLuku;
}
/**
* Laskee kahden murtoluvun tulon.
*/
public Murtoluku2 tulo(Murtoluku2 toinenLuku) {
Murtoluku2 uusiLuku;
uusiLuku = new Murtoluku2(this.osoittaja * toinenLuku.kerroOsoittaja(),
this.nimittaja * toinenLuku.kerroNimittaja());
return uusiLuku;
}
/**
* Vertaa, ovatko kaksi murtolukua samat. Palauttaa toden (true),
* jos osoittaja ja nimitt�j� ovat samat.
*/
public boolean onkoSama(Murtoluku2 toinenLuku) {
return (this.osoittaja == toinenLuku.kerroOsoittaja() &&
this.nimittaja == toinenLuku.kerroNimittaja());
}
/**
* Sievent�� murtoluvun.
*/
public void sievenna() {
int luku1, luku2, syt;
/* lasketaan osoittajan ja nimitt�j�n suurin yhteinen tekij� */
luku1 = Math.abs(this.osoittaja);
luku2 = Math.abs(this.nimittaja);
if (luku1 != 0) {
while (luku1 != luku2)
if (luku1 > luku2)
luku1 = luku1 - luku2;
else
luku2 = luku2 - luku1;
syt = luku1;
/* sievennet��n */
this.osoittaja /= syt;
this.nimittaja /= syt;
}
}
/**
* Palauttaa merkkijonoesityksen murtoluvusta muodossa
* osoittaja/nimitt�j�. Esimerkiksi 5/6.
*/
public String toString() {
return this.osoittaja + "/" + this.nimittaja;
}
}