/** * 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; }
/** * 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("·"), $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() . " · " . $murto2->get_osoittaja(), $murto1->get_nimittaja() . " · " . $murto2->get_nimittaja()), new Yksirivinen("="), new Yksirivinen($etumerkki_tulos), new Murtolukumuoto($tulos->get_osoittaja(), $tulos->get_nimittaja()))); $vast = $vastausolio->nayta_rivi(); } } return $vast; }