On this page:
2.4.1 Syötteen tarkistaminen
2.4.2 Taksimatkalaskut
2.4.3 Kolmiotehtävät A2
2.4.4 Kolmiotehtävät B
2.4.5 Liikennevalot
6.4

2.4 Valintalause ja Boolean operaattorit

Jos koodissa on useita haarautumisvaihtoehtoja (sisäkkäisiä if-lauseita), voi olla selkeämpää käyttää valintalausetta eli cond-lausetta. Siinä voidaan antaa niin monta ehtoa kuin on tarpeen ja lopuksi else-haara, joka palautetaan jos mikään varsinaisista ehdoista ei toteutunut.

Boolean operaattorit (and, or, not), kesto 2:42

Joskus haaran suorittamiseksi pitää useamman ehdon toteutua tai kahdesta ehdosta vain toisen tarvitsee toiteutua. Yksittäisiä ehtoja voidaan yhdistellä monimutkaisemmiksi ehdoiksi Boolean operaattoreilla joita ovat and, or ja not.

Valintalause (cond), kesto 6:08

Voit harjoitella valintalausetta sekä Boolean operaattoreita seuraavien tehtävien avulla.

2.4.1 Syötteen tarkistaminen

Ennen kuin harjoittelet ehto- ja valintalauseita kannattaa harjoitella predikaattien, vertailuoperaattoreiden sekä Boolean operaattoreiden käyttöä syötteen tarkistamiseen. Syötteen tarkistaminen on tärkeää, sillä väärän tyyppisellä syötteellä ohjelma yleensä kaatuu ellei tilannetta ole otettu huomioon ehto- tai valintalauseen avulla. Lataa harjoitustiedosto tästä:

 

Syötteen tarkistaminen (DrRacket)

 

Syötteen tarkistaminen (WeScheme)

Tehtävätiedosto sisältää nämä harjoitustehtävät:

Syötteen tarkistaminen

Ohjelmoi funktio, joka tarkistaa onko annettu syöte halutunlainen. Käytä tarkistamiseen predikaatteja, vertailuoperaattoreita sekä Boolean operaattoreita. Jos syöte on halutunlainen funktio palauttaa #true muuten #false.

a) Syötteen pitää olla positiivinen kokonaisluku.

b) Syötteen pitää olla välillä 0-100 (päätepisteet mukana).

c) Syötteen pitää olla positiivinen parillinen ja pienempi kuin 500.

d) Syötteen pitää olla negatiivinen murtoluku (ei saa olla kokonaisluku).

e) Syötteen pitää olla joko suurempi kuin -10 ja pienempi kuin 10 tai suurempi kuin 50 ja pienempi kuin 100.

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen funktioita:

<

   

>

   

<=

   

>=

   

=

   

number?

   

integer?

and

   

or

   

not

   

rational?

   

even?

   

odd?

   

check-expect

Opettajan diat.

2.4.2 Taksimatkalaskut

Harjoittele ehto- ja valintalauseita seuraavien taksimatkalaskujen avulla. Lataa harjoitustiedosto tästä:

 

Taksimatkalaskut (DrRacket)

 

Taksimatkalaskut (WeScheme)

Tehtävätiedosto sisältää nämä laskutehtävät:

Taksimatkalaskut

Tehtävä 1

Tee funktio, jonka avulla voit laskea taksimatkan suuruuden euroissa, kun tiedetään matkustajien määrä ja kuljetut kilometrit. Tarkista myös funktion saamat arvot, että ne ovat järkeviä ja jos ne eivät ole palauta "tarkista tiedot".

Tehtävä 2

Sinulla on taskussasi x euroa ja teitä on yhteensä y matkustajaa. Tee funktio, joka laskee kuinka kauas (km) pääsette ajelemaan rahoillasi.

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen funktioita:

+

   

-

   

*

   

/

   

if

   

cond

   

and

   

or

   

not

   

number?

   

integer?

   

check-expect

2.4.3 Kolmiotehtävät A2

Harjoittele valintalauseita sekä Boolean operaattoreita seuraavien kolmion geometriaan liittyvien tehtävien avulla. Lataa harjoitustiedosto tästä:

 

Kolmiotehtävät A2 (DrRacket)

 

Kolmiotehtävät A2 (WeScheme)

Jos käytät WeScheme:ä ja haluat tallentaa työsi, tarvitset Google-tunnukset. Kirjaudu ENSIN sisään WeScheme:en, ja tule vasta jälkeen avaamaan tehtävälinkki.

Tehtävätiedosto sisältää nämä laskutehtävät:

Kolmiotehtävät A2

Tehtävä 1

Kirjoita funktio, joka ottaa sisäänsä kolmion kulmat suuruusjärjestyksessä ja palauttaa kolmion tyypin: "teräväkulmainen kolmio", "tylppäkulmainen kolmio", "suorakulmainen kolmio" tai jos tehtävä on mahdoton "ei ole kolmio".

Tehtävä 2

Kirjoita funktio, joka ottaa sisäänsä kolmion sivujen pituudet suuruusjärjestyksessä ja palauttaa kolmion tyypin: "tasasivuinen kolmio", "tasakylkinen kolmio", "kolmio" tai "ei ole kolmio".

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen funktioita:

+

   

-

   

*

   

/

   

if

   

cond

   

and

   

or

   

not

   

check-expect

2.4.4 Kolmiotehtävät B

Harjoittele valintalausetta ja Boolean operaattoreita seuraavien kolmion geometriaan liittyvien tehtävien avulla. Lataa harjoitustiedosto tästä:

 

Kolmiotehtävät B (DrRacket)

 

Kolmiotehtävät B (WeScheme)

Tehtävätiedosto sisältää nämä laskutehtävät:

Kolmiotehtävät B

Neliöjuuren antamat tulokset ovat aina likiarvoja (epätarkkoja). DrRacket varoittaa epätarkoista arvoista lisäämällä luvun eteen #i-merkinnän. Samasta syystä emme voi käyttää check-expect-testiä vaan epätarkoille tuloksille tarkoitettua check-within-testiä.

Tehtävä 1

Kirjoita funktio, joka palauttaa suorakulmaisen kolmion kolmannen sivun pituuden, kun kaksi sivua on annettu. Funktio saa sisäänsä kahden sivun pituudet, sekä tiedon siitä onko toisena annettu luku (y) hypotenuusan pituus. Funktio laskee Pythagoraan lauseen avulla kolmannen sivun pituuden. Jos tehtävä on mahdoton se palauttaa "ei ole kolmio" ja jos sivujen pituudet on annettu niin että niistä ei muodostu suorakulmaista kolmiota se palauttaa "ei ole suorakulmainen kolmio".

Tehtävä 2

Kirjoita funktio, joka tutkii kolmion sivujen pituuksien avulla onko kyseessä suorakulmainen kolmio. Käytä avuksesi Pythagoraan lausetta. Huomaa, että sivujen pituudet saa antaa missä järjestyksessä tahansa ja ohjelman pitää huomata myös se, jos annetut sivut eivät muodosta kolmiota. Palauta tässä tapauksessa "ei ole kolmio".

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen funktioita:

+

   

-

   

*

   

/

   

sqr

   

sqrt

   

if

   

cond

   

and

   

or

   

not

   

check-expect

   

check-within

2.4.5 Liikennevalot

Suunnittele ja koodaa funktio, joka tuottaa liikennevalot. Käytä ehto- tai valintalausetta apunasi.

Liikennevalot

Koodaa funktio, joka palauttaa kuvan mukaisia liikennevaloja (mallikuva on saatu kutsumalla funktiota useita eri kertoja).

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen funktioita:

+

   

-

   

*

   

/

   

square

circle

   

beside

   

above

   

overlay

   

overlay/xy

string=?

   

=

   

if

   

cond

   

check-expect