Example #1
0
 /**
  * Palauttaa murtoluvun sievennettynä sekaluku-, murtoluku- tai
  * kokonaislukumuodossa. Vastaus supistetaan yksinkertaisimpaan muotoonsa.
  *
  * Jos murtoluvun osoittaja on nimittäjää pienempi, palautetaan
  * murtoluku tai kokonaisluku, jos jako menee tasan.
  *
  * Jos murtoluvun voi muuttaa kokonaisluvuksi, palautetaan sellainen.
  *
  * @return Sekaluku Palauttaa Sekaluku-, Murtoluku- tai Kokonaisluku-luokan
  * olion, joka on yhtä suuri kuin alkuperäinen murtoluku (this).
  * @author Jukka-Pekka Kerkkänen, 28.9.09
  *
  */
 public function sievenna()
 {
     $vast = 0;
     // Jos sekaluvussa ei ole ideaa:
     if ($this->osoittaja < $this->nimittaja) {
         $vast = $this->supista_yksinkert_muot();
     } else {
         // Jos murtoluvusta saa kokonaisluvun:
         $jakojaannos = $this->osoittaja % $this->nimittaja;
         if ($jakojaannos == 0) {
             $vast = new Kokonaisluku($this->get_etumerkki(), $this->osoittaja / $this->nimittaja);
         } else {
             $kokonaiset = floor($this->osoittaja / $this->nimittaja);
             //$murto_osa = new Murtoluku()
             $vast = new Sekaluku($this->get_etumerkki(), $kokonaiset, $jakojaannos, $this->get_nimittaja());
             //Nimittäjä
             // Supistetaan murto-osa:
             $vast->set_murto_osa($vast->get_murto_osa()->supista_yksinkert_muot());
         }
     }
     return $vast;
 }
Example #2
0
 /**
  * Palauttaa murtoluvun sievennettynä sekaluku-, murtoluku- tai
  * kokonaislukumuodossa. Vastaus supistetaan yksinkertaisimpaan muotoonsa.
  *
  * Jos murtoluvun osoittaja on nimittäjää pienempi, palautetaan
  * murtoluku tai sitten kokonaisluku, jos jako menee tasan.
  *
  * Jos murtoluvun voi muuttaa kokonaisluvuksi, palautetaan sellainen.
  *
  * @param Murtoluku $mluku sievennettänä murtoluku
  * @param bool $nayta_lasku totuusarvo: jos true, niin palautetaan
  * laskun html-esitys, muuten pelkkä vastausmurtoluku.
  * @param bool $etuplussa_nakyviin totuusarvo: true->etuplussa kirjoitetaan
  * näkyviin silloin, kun $nayta_lasku = true.
  * @return Sekaluku Palauttaa Sekaluku-, Murtoluku- tai Kokonaisluku-luokan
  * olion, joka on yhtä suuri kuin alkuperäinen murtoluku (this).
  * @author Jukka-Pekka Kerkkänen, 28.9.09
  */
 public function sievenna_murtoluku($mluku, $nayta_lasku, $etuplussa_nakyviin)
 {
     $vast = 0;
     if ($mluku instanceof Murtoluku) {
         // Jos sekaluvussa ei ole ideaa:
         if ($this->osoittaja < $this->nimittaja) {
             $vast = $this->supista_yksinkert_muot($mluku, false);
         } else {
             // Jos murtoluvusta saa kokonaisluvun:
             $jakojaannos = $this->osoittaja % $this->nimittaja;
             if ($jakojaannos == 0) {
                 $vast = new Kokonaisluku($this->get_etumerkki(), $this->osoittaja / $this->nimittaja);
             } else {
                 $kokonaiset = floor($this->osoittaja / $this->nimittaja);
                 //$murto_osa = new Murtoluku()
                 $vast = new Sekaluku($this->get_etumerkki(), $kokonaiset, $jakojaannos, $this->get_nimittaja());
                 //Nimittäjä
                 // Supistetaan murto-osa:
                 $vast->set_murto_osa($vast->get_murto_osa()->supista_yksinkert_muot());
             }
         }
         if ($nayta_lasku) {
             // Määritellään ensimmäinen etumerkki, joka joskus plussana
             // jätetään pois:
             if ($mluku->on_negatiivinen()) {
                 $ekaetumerkki = $mluku->get_miinusmerkki();
             } else {
                 if ($etuplussa_nakyviin) {
                     $ekaetumerkki = "+";
                 } else {
                     $ekaetumerkki = "";
                 }
             }
             //Supistetaan:
             $supistaja = $this->etsi_syt($os, $nim);
             $uusi_os = $os / $supistaja;
             $uusi_nim = $nim / $supistaja;
             /**************************************************************/
             // Tapaus 1: Ei voi supistaa:
             if ($supistaja == 1) {
                 // Ei voi muuttaa seka- eikä
                 // kokonaisluvuksi eli palautetaan murtoluku:
                 if ($os < $nim) {
                     $vastausolio = new Kaava(array(new Murtolukumuoto($os, $nim), new Yksirivinen(" Murtolukua ei\n                                                        voi supistaa.")));
                     $vastaus = $vastausolio->nayta_rivi();
                 } else {
                     if ($os % $nim == 0) {
                         $tulos = $os / $nim;
                         $vastausolio = new Kaava(array(new Murtolukumuoto($os, $nim), new Yksirivinen("=" . $tulos)));
                         $vastaus = $vastausolio->nayta_rivi();
                     } else {
                         $vastausolio = new Kaava(array(new Murtolukumuoto($os, $nim), new Supistaja($supistaja), new Yksirivinen("="), new Murtolukumuoto($uusi_os, $uusi_nim)));
                         $vastaus = $vastausolio->nayta_rivi();
                     }
                 }
             } else {
             }
             $vastausolio = new Kaava(array(new Yksirivinen($ekaetumerkki), new Murtolukumuoto($mluku->get_osoittaja(), $mluku->get_nimittaja()), new Yksirivinen("&middot;"), $this->piirra_tarv_vasen_sulku($murto2), new Yksirivinen($etumerkki2), new Murtolukumuoto($murto2->get_osoittaja(), $murto2->get_nimittaja()), $this->piirra_tarv_oikea_sulku($murto2), new Yksirivinen("="), new Yksirivinen($tulos->get_etumerkki()), new Murtolukumuoto($murto1->get_osoittaja() . " &middot; " . $murto2->get_osoittaja(), $murto1->get_nimittaja() . " &middot; " . $murto2->get_nimittaja()), new Yksirivinen("="), new Yksirivinen($etumerkki_tulos), new Murtolukumuoto($tulos->get_osoittaja(), $tulos->get_nimittaja())));
             $vast = $vastausolio->nayta_rivi();
         }
     }
     return $vast;
 }