4.2 If-lause ja eri tietotyypit
Yhteenveto
- Desimaalilukuja (float) vertaillaan aivan samalla tavalla kuin kokonaislukuja. Desimaaliluku kirjoitetaan pisteen avulla.
- Merkkijonoja (String) vertaillessa merkkijono kirjoitetaan lainausmerkkien väliin(" "), niin kuin muuttujien sijoituslauseessa,
- Merkkejä (char) vertaillessa merkki, kirjoitetaan heittomerkkien (' ') väliin, niin kuin muuttujien sijoituslauseessa.
- Totuusarvoa (boolean) vertaillessa käytetään joko sanaa: true tai false.

|
// Ohjelman tehnyt: e-Oppi Oy
// 29.1.2017
void setup () {
size(500,300); // Ikkunan koko
background(255); // Taustaväri valkoinen
fill(0); // Täyttöväri musta
textSize(25); // Tekstin koko 25
}
void draw () {
float luku = -5.0; // Desimaaliluku
if (luku > -5.1) {
text("Luku "+luku+" on suurempi kuin -5.1",10,100);
} else {
text("Luku "+luku+" on pienempi kuin -5.1",10,100);
}
String kaupunki = "Joensuu"; // Merkkijono
if (kaupunki=="Helsinki") {
text(kaupunki+" on Suomen pääkaupunki",10,150);
} else {
text(kaupunki+" ei ole Suomen pääkaupunki",10,150);
}
char merkki = char(64); // Merkki
if (merkki == '@') {
text(merkki+" on ät-merkki",10,200);
} else {
text(merkki+" ei ole ät-merkki",10,200);
}
}
Esimerkki: Desimaaliluvut
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(600,300); // Määritellään ikkunan koko
background(255); // Asetetaan taustaväriksi valkoinen
fill(0); // Asetetaan täyttöväriksi musta
textSize(32); // Asetetaan tekstin kooksi 32
}
void draw() {
float luku1 = 12.2; // Määrittele luku1
float luku2 = 12.1; // Määrittele luku2
if (luku1 > luku2) { // Jos luku1 on suurempi kuin luku2
text("Luku "+luku1+" on suurempi kuin "+luku2,10,100);
}
if (luku1 < luku2) { // Jos luku1 on pienempi kuin luku2
text("Luku "+luku2+" on suurempi kuin "+luku1,10,100);
}
if (luku1 == luku2) { // Jos luvut ovat yhtäsuuret
text("Luvut ovat yhtä suuria",10,100);
}
}
Desimaalilukuja verrataan ehtolauseissa aivan samalla tavalla kuin kokonaislukujakin. Desimaaliluvut sijoitetaan ilman lainausmerkkiä. Desimaaliluvuissa käytetään pistettä. Ohjelman esimerkki tulostus eri muuttujien arvoilla on seuraava.

Esimerkki: Merkkijono
VIIKONPÄIVÄ | TULOSTUS |
---|---|
maanantai | Maanantaina makkaraa |
tiistai | Tiistaina tikkaria |
keskiviikko | Keskiviikkona keksejä |
torstai | Torstaina torttuja |
perjantai | Perjantaina pekonia |
lauantai | Lauantaina lakritsia |
sunnuntai | Sunnuntaina suklaata |
Ohjelman koodi on seuraavanlainen.
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(600,300); // Asetetaan ikkunan koko
background(255); // Asetetaan valkea taustanväri
fill(0); // Asetetaan musta tekstin väri
textSize(32); // Asetetaan tekstin kooksi 32
}
void draw() {
String paiva = "lauantai"; // Muuta tähän eri viikonpäivä
if (paiva == "maanantai") {
text("Maanantaina makkaraa",10,100);
} else if (paiva == "tiistai") {
text("Tiistaina tikkaria",10,100);
} else if (paiva == "keskiviikko") {
text("keskiviikkona keksejä",10,100);
} else if (paiva == "torstai") {
text("Torstaina torttuja",10,100);
} else if (paiva == "perjantai") {
text("Perjantaina pekonia",10,100);
} else if (paiva == "lauantai") {
text("Lauantaina lakritsia",10,100);
} else if (paiva == "sunnuntai") {
text("Sunnuntaina suklaata",10,100);
} else {
text("Ei ole viikonpäivä",10,100);
}
}
Kuten huomataan, vertailu tehdään samalla tavalla kuin merkkijonon sijoituslauseessa. Vertailtava sana on laitettava lainausmerkkien (" ") sisälle. Kun vertaat muuttujaa merkkijonoihin, nyt huomataan, miksi on erittäin hyödyllistä ketjuttaa if-lauseet. Viimeinen else-vaihtoehto kuittaa kaikki muut sanat kuin viikonpäivät. Hyvin suunniteltu ohjelma huomioi myös tyhmät syötteet.
Koska if-lauseessa on vain yksi merkkijono, johon verrataan, niin myös sillä on merkitystä, onko muuttujan arvo kirjoitettu isolla vai pienellä. Oheinen esimerkkiajo havainnollistaa asiaa. Isolla etukirjaimella kirjoittaminen johtaa viimeiseen vaihtoehtoon eli muut sanat kuin viikonpäivät. Ongelman voisi korjata TAI-lauseella. Palataan tähän myöhemmin.

Esimerkki: Merkki
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
int numero = 97+round(random(3)); // Arvotaan luku väliltä 97…100
void setup() {
size(600,300); // Asetetaan ikkunan koko
background(255); // Asetetaan taustaväriksi valkoinen
fill(0); // Asetetaan tekstin väriksi musta
textSize(32); // Asetetaan teksin kooksi 32
}
void draw() {
char merkki = char(numero); // Muutetaan arvottu numero merkiksi a,b,c tai d
if (merkki == 'a') { // Jos merkki on a-kirjain
text("Arvottu merkki on a",10,100);
}
if (merkki == 'b') { // Jos merkki on b-kirjain
text("Arvottu merkki on b",10,100);
}
if (merkki == 'c') { // Jos merkki on c-kirjain
text("Arvottu merkki on c",10,100);
}
if (merkki == 'd') { // Jos merkki on d-kirjain
text("Arvottu merkki on d",10,100);
}
}
Kun teet vertailulauseita, niin vertailtavat merkit on laitettava heittomerkkien väliin (' '). Arpominen on suoritettava heti ohjelman alussa, koska haluamme arpoa luvun vain kerran. Jos arpominen suoritettaisiin void draw () -lohkossa, niin silloin arpominen tapahtuisi jatkuvasti. Tässä numero-muuttuja on ns. globaalimuuttuja eli on voimassa kaikissa lohkoissa. Komento random(3) arpoo luvun väliltä 0..3. Kun tähän arvottuun lukuun lisäämme luvun 97, niin saamme välin 97..100. Koska numero muuttuja on kokonaislukumuuttuja, niin arvontakomennossa on lisäksi käytettävä pyöristyskomentoa round( ).
Komennolla: char(kokonaisluku); voimme muuttaa kokonaisluvun sitä vastaavaksi merkiksi. Kokonaisluvun ja merkin vastaavuus selviää ASCII-taulukosta, joka on kuvattu alla.
33 | ! | 52 | 4 | 71 | G | 90 | Z | 109 | m |
34 | " | 53 | 5 | 72 | H | 91 | [ | 110 | n |
35 | # | 54 | 6 | 73 | I | 92 | \ | 111 | o |
36 | $ | 55 | 7 | 74 | J | 93 | ] | 112 | p |
37 | % | 56 | 8 | 75 | K | 94 | ^ | 113 | q |
38 | & | 57 | 9 | 76 | L | 95 | _ | 114 | r |
39 | ' | 58 | : | 77 | M | 96 | ` | 115 | s |
40 | ( | 59 | ; | 78 | N | 97 | a | 116 | t |
41 | ) | 60 | < | 79 | O | 98 | b | 117 | u |
42 | * | 61 | = | 80 | P | 99 | c | 118 | v |
43 | + | 62 | > | 81 | Q | 100 | d | 119 | w |
44 | , | 63 | ? | 82 | R | 101 | e | 120 | x |
45 | - | 64 | @ | 83 | S | 102 | f | 121 | y |
46 | . | 65 | A | 84 | T | 103 | g | 122 | z |
47 | / | 66 | B | 85 | U | 104 | h | 123 | { |
48 | 0 | 67 | C | 86 | V | 105 | i | 124 | | |
49 | 1 | 68 | D | 87 | W | 106 | j | 125 | } |
50 | 2 | 69 | E | 88 | X | 107 | k | 126 | ~ |
51 | 3 | 70 | F | 89 | Y | 108 | l | 127 |
Vastaavasti komennolla: int('merkki'); voidaan merkki muuttaa sitä vastaavaksi kokonaisluvuksi. Kun teet if-lauseen, niin merkkejä on vertailtava siten, että merkki kirjoitetaan heittomerkkien (' ') väliin.
Kokeile ajaa ohjelma useamman kertaa. Joka kerralla pitäisi tulostua satunnaisesti eri teksti. Alla on esitetty kaksi ohjelman esimerkkiajoa.
Esimerkki: Totuusarvo
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(400,200); // Asetetaan ikkunan koko
background(255); // Valkea taustan väri
fill(0); // Musta tekstin väri
textSize(32); // Tekstin koko on 32
}
void draw() {
boolean totuus = true; // Mahdolliset arvot ovat true tai false
if (totuus == true) {
text("Tämä on totta",10,100);
} else {
text("Tämä ei ole totta",10,100);
}
}
Alla on kuvattu ohjelman esimerkkiajo eri muuttujan arvoilla.
