4.1 If-lause ja kokonaisluvut
Yhteenveto
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.
EHTO | OHJELMOINTI | MATEMATIIKKA | LUKUSUORA |
---|---|---|---|
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
|
// 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ä.
|
// 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.