For-silmukka

For-silmukka voidaan määritellä seuraavasti.

for (alkuarvo; ehto; laskuri) {
komennot;
}

Kaaviokuvana silmukan voisi kuvata seuraavasti.


https://peda.net/id/879fe3b6897


Esimerkiksi ohjelma, joka tulostaa kymmenen kertaa hei-sanan, voidaan kirjoittaa muodossa:

SANALLINEN ALGORITMI
  1. Aseta ikkunan kooksi 400 px vaakaan ja 400 px pystyyn.
  2. Aseta ikkunan taustaväriksi keltainen.
  3. Aseta täyttöväriksi musta.
  4. Aseta tekstin kooksi 28.
  5. Määrittele for-silmukka (Määrittele kokonaislukumuuttuja a, joka saa alkuarvon 1. Toista niin kauan kun a on pienempi tai yhtä suuri kuin 10. Kasvata muuttujaa a yhdellä).
    Tulosta teksti: "Hei" paikkaan (100,a*30), missä a saa arvoja a = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.

// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
void setup () {
size(400,400); // Ikkunan koko
background(255,255,0); // Taustaväri keltainen
fill(0); // Tekstin väri musta
textSize(28); // Tekstin koko 28
}

void draw () {
for (int a = 1; a<=10; a++) {
text("Hei",100,a*30);
}
}


Kuten huomataan, for-silmukassa on kokonaislukumuuttujan alkuarvon asettaminen, ehto ja laskuri kaikki samassa lauseessa samalla rivillä. For-lause on tarkoitettu tilanteisiin, jossa toistoja on tietty vakiomäärä. For-silmukan voisi suomentaa: Toista silmukkaa, niin kauan kun a on pienempi tai yhtä suuri kuin kymmenen. Koska a:n alkuarvo on 1, käytännössä a saa arvoja: 1,2,3,4,... Kun a saa arvon 11, ehto ei enää ole voimassa ja toisto loppuu. Ohjelman suoritus näyttää hidastettuna tältä.



For-silmukan toimivuutta voidaan tutkia sijoittamalla taulukkoon a:n arvoja.

a EHTO: (a <= 10) text("Hei",100,a*30);
1 (1 <= 10), tosi text("Hei,100,30);
2 (2 <= 10), tosi text("Hei,100,60);
3 (3 <= 10), tosi text("Hei,100,90);
4 (4 <= 10), tosi text("Hei,100,120);
5 (5 <= 10), tosi text("Hei,100,150);
6 (6 <= 10), tosi text("Hei,100,180);
7 (7 <= 10), tosi text("Hei,100,210);
8 (8 <= 10), tosi text("Hei,100,240);
9 (9 <= 10), tosi text("Hei,100,280);
10 (10 <= 10), tosi text("Hei,100,300);
11 (11 <= 10), epätosi -


Alussa a saa arvon 1, jota kasvatetaan joka kierroksella yhdellä. Kun a saa arvon 11, niin ehto a <= 10 ei enää ole voimassa ja silmukan toisto loppuu. Kun toisto loppuu, niin silloin emme tulosta mitään.

Kuinka for-lause kirjoitetaan, jos haluamme tulostaa tekstin: "Hei" kahdeksan kertaa?

for (int a = 1; a<=8; a++) {
text("Hei",100,a*30);
}


Yksinkertaisesti muutamme ehtoon luvun 8 eli a <=8. Silmukkaan toistetaan niin kauan kunnes a on pienempi tai yhtä suuri kuin kahdeksan. Kun a saa arvon yhdeksän, niin toisto lopetetaan.

Kuinka tehdään for-silmukka, joka tulostaa luvut 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 ja 25 allekkain?

for (int a = 15; a<=25; a++) {
text(a,100,a*30-400);
}


For-silmukassa alkuarvo on 15 ja ehdossa sanotaan, että silmukkaan toistetaan niin kauan, kunnes a on pienempi tai yhtä suuri kuin 25. Toisto siis loppuu, kun a on 26. Huomaa, että tulostuslauseessa y-koordinaatit voidaan tulostaa arvolla: -400+a*30. Pelkkä a*30 vie liian alas, koska 15 * 30 = 450. Teemme siis korjauksen tähän vähentämällä tästä arvosta 400, jolloin y-koordinaatin aloitusarvo on 50. Laskutoimitus a*30 tulostaa y-koordinaatit 30 askeleen välein.