All pastes #393612 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-03-13 18:34 UTC
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&#65533;j&#65533;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&#65533;j&#65533; ovat samat.
   */
  public boolean onkoSama(Murtoluku2 toinenLuku) {

    return (this.osoittaja == toinenLuku.kerroOsoittaja() &&
            this.nimittaja == toinenLuku.kerroNimittaja());
  }


  /**
   * Sievent&#65533;&#65533; murtoluvun.
   */
  public void sievenna() {
    int luku1, luku2, syt;

    /* lasketaan osoittajan ja nimitt&#65533;j&#65533;n suurin yhteinen tekij&#65533; */

    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&#65533;&#65533;n */

        this.osoittaja /= syt;
        this.nimittaja /= syt;
    }
  }

  /**
   * Palauttaa merkkijonoesityksen murtoluvusta muodossa 
   * osoittaja/nimitt&#65533;j&#65533;. Esimerkiksi 5/6.
   */
  public String toString() {
    return this.osoittaja + "/" + this.nimittaja;
  }
}