Ohjelmointi2

Modulus eli jakojäännös

Ohjelmointikielissä on jaollisuuden tutkimista varten modulus- eli jakojäännösoperaattori. Jakojäännös on kokonaisluku, joka jää yli, kun jakolaskun jako ei mene tasan.

Esimerkiksi 17 / 4 = 4, jää 1.

Modulus kertoo siis kahden luvun osamäärästä jakojäännöksen.

Laskutoimitusmerkit Python-kielessä
+  Yhteenlasku (summa)
- Vähennyslasku (erotus)
* Kertolasku (tulo)
/ Jakolasku (osamäärä)
% Jakojäännös

Kun jako menee tasan eli jaettava on jaollinen jakajalla, jakojäännös on nolla. Modulusta käytetään kuten muitakin laskutoimituksia.

Esimerkki 1

Tulosta lukujen 6 ja 2 summa, erotus, tulo ja osamäärä. Tutki, mikä on lukujen 6 ja 2 jakojäännös.

Ratkaisu

muuttuja1 = 6
muuttuja2 = 2
print muuttuja1 + muuttuja2
print muuttuja1 - muuttuja2
print muuttuja1 * muuttuja2
print muuttuja1 / muuttuja2
print muuttuja1 % muuttuja2

Esimerkki 2

Tee ohjelma, jonka avulla voit tutkia, onko luku 28 jaollinen luvulla
a) 2 b) 3.

 Ratkaisu
a) 

tutkittavaLuku = 28
jakaja = 2
jakojaannos = tutkittavaLuku % jakaja
print jakojaannos

Ohjelman tulosteeksi tulee 0. Koska jakojäännös on nolla, on luku 28 jaollinen luvulla 2.

b) vaihdetaan koodissa jakajan arvoksi 3 ja suoritetaan ohjelma.
Tulosteeksi saadaan 1. Koska jakojäännös ei ole nolla, ei luku 28 ole jaollinen luvulla 3.

TEHTÄVÄ 2 (Palautettava tehtävä)

Tavoitteena on harjoitella modulus-operaattorin käyttöä ja tutkia jaollisuutta.

  • Tee ohjelma, jolla voit tulostaa lukujen 48 ja 4 summan, erotuksen, tulon, osamäärän ja jakojäännöksen. Tulosta jokainen omalle rivilleen.
  • Vaihda luvuiksi 52 ja 5. Mikä on jakojäännöksen arvo?
  • Vaihda jakajan arvoksi nolla. Mitä huomaat? Miksi näin tapahtuu?

TEHTÄVÄ 3

Tavoitteena on pilkkoa ongelma osiin ja ratkaista se muuttujien ja apumuuttujien avulla.

Tee ohjelma, jolla saat ratkaistua seuraavan tehtävän: Leikkiautoja on yhteensä 49 kappaletta. Kuusi lasta haluaa leikkiä autoilla yhdessä ja jokaiselle lapselle annetaan aluksi yhtä monta autoa. Kuinka monta autoa kukin lapsi saa? Kuinka monta autoa jää pois leikistä?

  • Määritä muuttujat ja niiden arvot.
  • Tulosta se autojen määrä, jonka jokainen lapsi saa.
  • Tulosta se autojen määrä, joka jää pois leikistä.

Loogiset lausekkeet ja vertailu

Loogisia lausekkeita eli totuusarvoja saadaan, kun tutkitaan, onko tietty ehto voimassa tarkasteluhetkellä. Looginen lauseke tuottaa arvon tosi (True), jos vertailuehto toteutuu ja arvon epätosi (False), jos vertailuehto ei toteudu. Vertailuehdon kirjoittamiseen käytetään vertailuoperaattoreita.

Esimerkki 3

Tee ohjelma, jolla voit tutkia, ovatko väitteet tosia vai epätosia.

  1. a) Luku 3 on pienempi kuin luku 2.
  2. b) Luku 17 on suurempi tai yhtä suuri kuin luku 10.
  3. c) Kirjain a on suurempi kuin b.
  4. d) Luku −3 on pienempi kuin luku 0 ja suurempi kuin luku −9.
Ratkaisu

Looginen lauseke

Koodi

Loogisen lausekkeen arvo

Johtopäätös

a) Luku 3 on pienempi kuin luku 2.

 print 3 < 2 False

Tutkitaan lukujen suuruusjärjestystä. Saadaan epätosi, koska 3 on suurempi kuin 2.

b) Luku 17 on suurempi tai yhtä suuri kuin luku 10.

 print 17 >= 10 True

Saadaan tosi, koska 17 on suurempi kuin 10. Tai-sana ei vaadi yhtäsuuruuden voimassaoloa samanaikaisesti.

c) Kirjain a on suurempi kuin b.

 print 'a' > 'b' False

Tutkitaan kirjainten aakkosjärjestystä. Koska a tulee aakkosissa ensin, on se pienempi kuin b. Siksi vertailuehto tuottaa arvon epätosi.

d) Luku −3 on pienempi kuin luku 0 ja suurempi kuin luku −9.

 print -3 < 0 and -3 > -9 True

Tarkastelu vastaa matematiikan tilannetta −9 < −3 < 0 eli antaa vertailuehdolle arvoksi tosi.



TEHTÄVÄ 4

Tavoitteena on harjoitella vertailuoperaattoreiden käyttämistä ja ymmärtää, miten loogiset lausekkeet toimivat.

Tutki, toteutuvatko seuraavat loogiset lausekkeet. Käytä tulostuskomentoa ja sopivaa vertailuoperaattoria.

  • Onko luku 1 pienempi kuin luku 5?
  • Onko 5 ∙ 5 suurempi kuin 4 ∙ 6?
  • Onko luku −3 yhtä suuri kuin luvun 3 vastaluku?
  • Onko luku 10 pienempi tai yhtä suuri kuin 7?
  • Onko luku 100 suurempi tai yhtä suuri kuin 1 000 / 20?

 

TEHTÄVÄ 5*

Tavoitteena on harjoitella vertailujen käyttämistä merkkijonoihin.

Tutki, toteutuvatko seuraavat loogiset lausekkeet. Käytä tulostuskomentoa ja sopivaa vertailuoperaattoria. Muista kirjoittaa merkkijonot lainausmerkkeihin.

  • Onko kirjain g pienempi kuin kirjain h?
  • Onko kirjain s suurempi kuin kirjain t?
  • Onko sana yhtä suuri kuin Sana?
  • Onko HipHop eri suuri kuin Rap?
  • Onko oma_luokka yhtä suuri kuin oma_luokka?
  • Onko salAs1na yhtä suuri kuin salaS1na?

 

Ehtorakenne JOS

Yksinkertaisin ehtorakenne on jos. Tapahtuma tapahtuu, jos annettu ehto täyttyy.  

Ehtorakenteen jos rakenne:

if  ehto tai vertailu:

 Tapahtuma, joka tapahtuu, kun vertailu on tosi.


Huomaa, että

  • rivi, jossa on if, päättyy kaksoispisteeseen
  • ehtoon liittyvä tapahtumarivi sisennetään.

Esimerkki 4

Tee ohjelma, jolla voit tutkia, onko tarkasteltava luku parillinen vai pariton.

Jos luku on parillinen, ohjelma tulostaa lauseen: Luku ___ on parillinen.

Jos luku ei ole parillinen, ohjelma tulostaa lauseen: Luku ___ ei ole parillinen.

Ratkaisu

Parilliset luvut ovat jaollisia kahdella, joten määritetään ohjelman jakajaksi 2.

Kommentit selittävät tehtyä ohjelmaa. 

tutkittavaLuku = 256
jakaja = 2
jakojaannos = tutkittavaLuku % jakaja
if jakojaannos == 0:
print "Luku", tutkittavaLuku, "on parillinen."
if jakojaannos != 0:
print "Luku", tutkittavaLuku, "on pariton."

Muita lukuja voidaan tutkia, kun vaihdetaan tutkittavan luvun arvo.

TEHTÄVÄ 6 (Palautettava tehtävä)

Tavoitteena on harjoitella ehtolauseita ja käyttää vertailumerkkejä pienempi kuin ja suurempi kuin.

  • Määritä muuttuja ja sille arvoksi jokin kokonaisluku väliltä −10 ja −1 tai väliltä 1 ja 10.
  • Tee ehtolause, joka tulostaa lauseen ”Luku on positiivinen.”, kun luku on suurempi kuin nolla.
  • Tee ehtolause, joka tulostaa lauseen ”Luku on negatiivinen.”, kun luku on pienempi kuin nolla.
  • Testaa ohjelma.
  • Vaihda muuttujan arvoa ja tutki, toimiiko tekemäsi ohjelma edelleen.



Ohjelmalle annettavat syötteet ja tekstin muuttaminen luvuksi

Tähän asti ohjelmalle annettavat syötteet eli erilaiset muuttujan arvot on kirjoitettu osaksi ohjelman koodia. Muuttujalle annettavat arvot voidaan kysyä myös käyttäjältä, jolloin ohjelmaa voi helpommin käyttää erilaisten tilanteiden tutkimiseen. Käyttäjältä kysytään tietoa input()-komennolla.

Näytölle tuleva kysymys

input ( )

Sulkeiden sisään kirjoitetaan näytölle tuleva kysymys.

Esimerkki 5

Tee ohjelma, jossa käyttäjältä kysytään jokin monivalintakysymys. Vastausvaihtoehtojen perusteella tulostuu joko lause ” Vastaus on väärin.” tai ”Hyvin tiedetty.”

Ratkaisu

Määritetään muuttuja, joka saa arvon input()-komennolla. Annettua vastausta verrataan ehtolauseella. Saadun totuusarvon perusteella tulostuu joko ” Vastaus on väärin.” tai ”Hyvin tiedetty!”.


vastaus = input("Valitse oikea vaihtoehto: Prosentti tarkoittaa a) tuhannesosaa, b) sadasosaa vai c) kymmenesosaa.")
if vastaus == "a":
print u"Vastaus on väärin."
if vastaus == "b":
print "Hyvin tiedetty!"
if vastaus == "c":
print u"Vastaus on väärin."

Kun ohjelma suoritetaan, esitettävä kysymys tulee ponnahdusikkunaan. Käyttäjä kirjoittaa ponnahdusikkunaan pyydetyn tiedon. Ohjelma lukee käyttäjän syöttämän tiedon ja käyttää sitä kuten ohjelmaan kirjoitettua muuttujaa.

TEHTÄVÄ 7 (Palautettava tehtävä)

Tavoitteena on harjoitella input()-komennon käyttöä.

Tee ohjelma, joka kysyy käyttäjältä nimen ja tulostaa tervehdyksen: ”Hei _____________! Kaunis päivä tänään.”

  • Määritä muuttuja nimi ja sille input()-komento. Input()-komennon sulkeiden sisään tulee käyttäjälle näkyvä pyyntö kertoa nimi.
  • Tulosta tervehdyslause, joka sisältää käyttäjän antaman nimen.

Tekstin muuttaminen lukumuotoon

Input()-komennolla saadaan käyttäjältä merkkijono eli tekstimuodossa oleva tieto. Jos käyttäjältä halutaan kysyä lukua, pitää se vastauksen saamisen jälkeen muuttaa luvuksi int()-komennolla.

Merkkijonon muuttaminen luvuksi

int ( ) Muuttaa merkkijonon kokonaisluvuksi.

float (  ) Muuttaa merkkijonon liukuluvuksi.

Esimerkki 6

Tee ohjelma, jolla voi tutkia, onko käyttäjän antaman luku jaollinen kolmella.

Ratkaisu

Määritetään muuttuja tutkittavaLuku, joka saa arvon input()-komennolla.

Määritetään muuttuja jakaja ja sen arvoksi 3.

Kun lasketaan jakojäännös, tutkittavaksi saatu luku pitää muuttaa lukumuotoiseksi int()-komennolla.

tutkittavaLuku = input('Anna luku, jonka jaollisuutta tutkitaan.')
jakaja = 3
jakojaannos = int(tutkittavaLuku) % jakaja
print jakojaannos

TEHTÄVÄ 8

Tavoitteena on harjoitella merkkijonon muuttamista desimaaliluvuksi float()-komennolla ja input()-komennon käyttöä.

Tee ohjelma, jolla käyttäjän antama desimaaliluku saadaan muutettua prosenttiluvuksi.

  • Määritä muuttuja alkuperainen. Pyydä käyttäjää antamaan desimaaliluku Python-kielen hyväksymässä muodossa eli käyttämään desimaalierottimena pistettä.
  • Määritä muuttuja prosenttiluvuksi ja sille lausekkeeksi alkuperainen ∙ Muuta käyttäjän antama tieto eli muuttuja alkuperäinen lukumuotoon float()-komennolla.
  • Tulosta muuttuja prosenttiluku muodossa ___%. Viivan tilalle tulee saamasi prosenttiluku.
  • Suorita ohjelma.
  • Kokeile ohjelman toimintaa eri desimaaliluvuilla.

TEHTÄVÄ 9

Tavoitteena on tehdä ohjelma, jota voi käyttää apuna Eratostheneen seulan tekemiseen. Ohjelmalla etsitään alkuluvut väliltä 1–100.

Tee ohjelma, jolla voit tutkia, onko luku jaollinen luvuilla 2, 3, 5 ja 7. Tutki vain lukuja väliltä 1–100.

  • Määritä muuttuja tutkittavaLuku. Pyydä käyttäjää antamaan kokonaisluku väliltä 1–100.
  • Tee tarvittavat ehtolausekkeet jokaiselle jakajalle ja mieti, mitä ehtolauseke tulostaa, kun se on tosi. Muista muuttaa käyttäjän antama tieto lukumuotoon int()-komennolla.
  • Suorita ohjelma.
  • Vaihda tutkittavaa lukua.

TEHTÄVÄ 10*

Tavoitteena on tehdä ohjelma, jolla saadaan laskettua halutun tiedon prosenttiosuus koko joukosta.

 Tee ohjelma, jolla saat ratkaistua seuraavan tehtävän.

  • Määritä muuttuja kysytty_vari ja pyydä käyttäjältä sille arvo.
  • Määritä muuttuja sukkiaYht ja pyydä käyttäjältä sille arvo.
  • Määritä muuttuja prosenttia ja sille lauseke kysytty väri / sukkia yhteensä ∙
  • Tulosta ”Vastaus on ___ %.” Viivan tilalle tulee saamasi prosenttiluku.
  • Testaa ohjelman toimintaa tehtävän eri arvoilla.