4.1 If-lause ja kokonaisluvut

If-lause

If-lause on valintalause, jonka voisi suomentaa jos-lauseeksi. If-sanan jälkeen tulee ehto sulkuihin kirjoitettuna. Jos ehto on totta, niin siinä tapauksessa suoritetaan kaarisulkeiden sisällä olevat komennot. Mikäli ehto ei ole totta, niin silloin ei tehdä mitään. If-lause on muotoa.

if (ehto) {
komennot; }

Esimerkki: Positiivinen luku, negatiivinen luku

Esimerkki: Tehdään ehto, joka tarkistaa onko luku-muuttuja suurempi kuin nolla. Jos luku on suurempi kuin nolla, niin silloin tulostetaan kommentti: ”Luku on positiivinen”.

if (luku > 0){
     text(”Luku on positiivinen”,10,100);
}


Jos luku-muuttuja on pienempi kuin nolla, niin silloin ei tehdä mitään. Negatiivisen luvun tutkimiseen tarvittaisiin oma ehtonsa, joka näyttää tältä.

if (luku < 0) {
     text(”Luku on negatiivinen”,10,100);
}

If-Else -lause

Toinen vaihtoehto on jatkaa If-lausetta else-määreellä. Else-määreen jälkeiset komennot suoritetaan siinä tapauksessa, että ehto ei ole voimassa. If-lause pidemmässä muodossa on seuraavanlainen.

if (ehto) {
komennot A;
} else {
komennot B; }

Esimerkki: Positiivinen luku ja negatiivinen luku if-else -lauseella

Tehdään ehto, joka tarkistaa onko luku-muuttuja suurempi kuin nolla. Jos luku on suurempi kuin nolla, silloin tulostetaan kommentti: ”Luku on positiivinen”. Jos ehto ei ole voimassa eli luku ei ole suurempi kuin nolla, niin tulostetaan kommentti: ”Luku on negatiivinen".

if (luku > 0) {
     text("Luku on positiivinen",10,100);
} else {
     text("Luku on negatiivinen",10,100);
}


Ohjelman voisi kuvata vuokaaviona seuraavasti.



Tässä ohjelmassa on yksi puute. Jos luku on nolla, luku luokitellaan silloin negatiiviseksi luvuksi.

Ehdot

Ehdoissa voidaan verrata keskenään kahta muuttujan arvoa eli tietoalkiota (kokonaisluku, desimaaliluku, merkkijono, merkki, totuusarvo), kahta eri muuttujaa tai muuttujaa ja tietoalkiota. Vertailussa käytetään seuraavia ehtoja eli vertailuoperaattoreita.

EHTOOHJELMOINTIMATEMATIIKKALUKUSUORA
Suurempi kuin > >
Pienempi kuin < <
Yhtä suuri kuin == =
Suurempi tai yhtä suuri kuin >=
Pienempi tai yhtä suuri kuin <=
Eri suuri kuin !=

Huomio: Sijoituslauseessa käytetään merkkiä =, mutta ehtolauseessa merkkiä ==.

Esimerkki: Ehdot lukusuoralla

Piirretään ehtoja lukusuoran avulla. Suluissa on kerrottu ehto ohjelmointikielellä.

a) x on suurempi kuin neljä eli (x > 4).


b) x on pienempi kuin kuusi eli (x < 6).


c) x on yhtä suuri kuin miinus kolme eli (x == -3).


d) x on suurempi tai yhtä suuri kuin miinus kaksi eli (x >= -2).


e) x on pienempi tai yhtä suuri kuin viisi eli (x <= 5).


f) x on eri suuri kuin kuusi eli (x != 6).

Esimerkki: Lukujen vertailua

Tehdään kokonainen ohjelma, joka tutkii, onko luku muuttuja suurempi kuin nolla, pienempi kuin nolla vai tasan nolla.

Sanallinen algoritmi
  1. Aseta ikkunan kooksi 400 px vaakaan ja 300 px pystyyn.
  2. Aseta ikkunan taustaväriksi valkoinen.
  3. Aseta tekstin väriksi musta.
  4. Aseta tekstin kooksi 32 px.
  5. Määrittele kokonaislukumuuttuja nimeltään: luku ja anna sille arvo: 3.
  6. Jos luku-muuttuja on suurempi kuin nolla, niin
    tulosta kommentti: " Luku on positiivinen" paikkaan (10,100).
  7. Jos luku-muuttuja on pienempi kuin nolla, niin
    tulosta kommentti: " Luku on negatiivinen" paikkaan (10,100).
  8. Jos luku-muuttuja on nolla, niin
    tulosta kommentti: "Luku on nolla" paikkaan (10,100).

// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() { 
     size(400,300); // Ikkunan koko
     background(255); // Taustaväri valkoinen
     fill(0); // Täyttöväri musta
     textSize(32); // Tekstin koko
}
void draw() {
     int luku = 3; 
// Määrittele kokonaislukumuuttuja ja anna sille arvo if (luku > 0) { // Jos luku on suurempi kuin nolla, niin … text("Luku on positiivinen",10,100); } if (luku < 0) { // Jos luku on pienempi kuin nolla, niin … text("Luku on negatiivinen",10,100); } if (luku == 0) { // Jos luku on nolla, niin … text("Luku on nolla",10,100);
} }

Tässä on yksi mahdollinen ratkaisu. Tehdään jokaisesta mahdollisesta vaihtoehdosta oma if-lause. Koska ehtoja on kolme, niin tällöin tarvitaan kolme if-lausetta. Ohjelman suoritus eri luku-muuttujan arvoilla on seuraavanlainen.



Toinen vaihtoehto on käyttää else-määrettä. Koska ehtoja on nyt kolme – eikä kaksi, niin voimme tällöin ketjuttaa if-lauseita seuraavalla tavalla.

if (ehto1) {
komennot A;
} else if (ehto2) {
komennot B;
} else {
komennot C; }


Jos ensimmäinen ehto on voimassa, niin tällöin suoritetaan komennot A. Jos ensimmäinen ehto ei ole voimassa, niin tällöin läpikäydään uusi ehto. Jos toinen ehto on nyt voimassa, niin tällöin suoritetaan komennot B. Jos toinen ehto ei ole voimassa, niin tällöin suoritetaan komennot C. Ketjuttamisessa suoritetaan ne toiminnot, jotka ensimmäinen ehto täyttää. Mikäli mikään ehto ei täyty, niin tällöin suoritetaan komennot C.
Kokonainen ohjelma näyttäisi nyt tältä.

Sanallinen algoritmi
  1. Aseta ikkunan kooksi 400 px vaakaan ja 300 px pystyyn.
  2. Aseta ikkunan taustaväriksi valkoinen.
  3. Aseta tekstin väriksi musta.
  4. Aseta tekstin kooksi 32 px.
  5. Määrittele kokonaislukumuuttuja nimeltään: luku ja anna sille arvo: 3.
  6. Jos luku-muuttuja on suurempi kuin nolla, niin
    tulosta kommentti: " Luku on positiivinen" paikkaan (10,100).
  7. Tai jos luku-muuttuja on pienempi kuin nolla, niin
    tulosta kommentti: " Luku on negatiivinen" paikkaan (10,100).
  8. Tai tulosta kommentti: "Luku on nolla" paikkaan (10,100).

// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() { 
     size(400,300); // Ikkunan koko
     background(255); // Taustaväri valkoinen
     fill(0); // Täyttöväri musta
     textSize(32); // Tekstin koko 32
}
void draw() { int luku = 3; if (luku > 0) {
// Jos luku on suurempi kuin nolla, niin … text("Luku on positiivinen",10,100); } else if (luku < 0) {
// tai jos luku on pienempi kuin nolla text("Luku on negatiivinen",10,100); } else { // tai luku on nolla text("Luku on nolla",10,100);
} }


Ketjuttaminen on hyvä idea, jos vaihtoehtoja on monia. Viimeinen else-määre hoitaa kaikki muut vaihtoehdot, joten ei pääse syntymään sellaista tilannetta, että jokin vaihtoehto jäisi pois. Ketjuttamisen ja kolmen erillisen if-lauseen eroa voi havainnollistaa vuokaavioilla seuraavasti.



Miksi ketjuttaminen on parempi kuin erilliset ehdot? Jos meillä on erillisiä ehtoja, niin kaikki ehdot suoritetaan läpi järjestyksessä. Vaikka jo ensimmäinen ehto on tosi, siitä huolimatta myös muut ehdot käydään läpi. Ketjutuksessa ehtojen suoritus loppuu heti, kun tulee vastaan sellainen ehto, joka on tosi. Ketjuttaminen selvästi tehokkaampi tapa selvittää vaihtoehdot kuin kaikkien ehtojen läpikäyminen.