Esimerkki: Laskurin ja for-silmukan vertailua



Tutkitaan, mitä eroavuuksia on, kun toisto tehdään laskurin avulla tai for-silmukan avulla. Tehdään ohjelma, joka tulostaa luvut ykkösestä kymmeneen.

Tehdään aluksi ohjelma käyttäen laskuria ja if-lausetta.

SANALLINEN ALGORITMI
  1. Määrittele globaali kokonaislukumuuttuja a ja anna sille alkuarvo 0.
  2. Aseta ikkunan kooksi 400 px vaakaan ja 200 px pystyyn.
  3. Aseta tekstin kooksi 30.
  4. Aseta ikkunan taustaväriksi valkoinen.
  5. Aseta täyttöväriksi musta.
  6. Muuttujan a arvo kasvaa yhdellä.
  7. Jos muuttuja a on pienempi tai yhtä suuri kuin 10, niin
    Tulosta muuttujan a arvo paikkaan (a*30,100). Kun muuttujan a arvot kasvavat (a = 1, 2, 3, 4,..), niin tekstin vaakasuuntainen paikka myös kasvaa (30, 60, 90, 120,...).

// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
int a = 0; void setup () { size(400,200); // ikkunan koko textSize(30); // Tekstin koko 30 background(255); // Tyhjennä tausta fill(0); // Täyttöväri musta } void draw() { a++; // Laskuri 1,2,3,4,5,6,... if (a <= 10) { // Jos laskuri alle tai yhtäsuuri kuin 10, niin text(a,a*30,100); // Tulosta laskuri } }

Tehdään sama ohjelma uudestaan käyttäen for-silmukkaa.

SANALLINEN ALGORITMI
  1. Aseta ikkunan kooksi 400 px vaakaan ja 200 px pystyyn.
  2. Aseta tekstin kooksi 30.
  3. Aseta ikkunan taustaväriksi valkoinen.
  4. Aseta täyttöväriksi musta.
  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 muuttujan a arvo paikkaan (a*30,100). Kun muuttuja a saa arvoja a = 1,2,3,4,5,6,7,8,9,10, niin tekstin vaakasuuntainen koordinaatti saa arvoja: 30,60,90,120,150,180,210,240,270,300.

// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
void setup () { size(400,200); // ikkunan koko textSize(30); // Tekstin koko 30 background(255); // Tyhjennä tausta fill(0); // Täyttöväri musta } void draw() { for (int a = 1; a<=10; a++) { text(a,a*30,100); } }

Eroavuuksia

  • For-silmukassa laskurille alkuarvo annetaan silmukassa, mutta pelkkää laskuria käyttäen alkuarvo on annettava jo heti ohjelman alussa.
  • Pelkkää laskuria käyttäen toistojen määrä voidaan rajoittaa if-lauseella. For-silmukassa toistojen määrä rajoitetaan ehdolla, joka on silmukassa.
  • Pelkkää laskuria käyttäen laskuri (a++) laitetaan void draw ()-lohkoon. Koska void draw ()-lohko on ikuisessa silmukassa, niin siksi laskuri kasvaa. For-silmukassa laskuri on itse lausekkeessa. Jos laitat void setup ()-lohkoon komennon: noLoop(); niin ylemmässä esimerkissä tulostuu vain ensimmäinen numero, mutta alemassa esimerkissä tulostuu kaikki numerot. For-silmukka toimii kuin oma alilohko, joka suoritetaan kerralla loppuun asti.

Tekstiä voi myös liikutella translate(x,y); komennolla. Muuta edellinen ohjelma tällöin muotoon.


// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
void setup () { size(400,200); // ikkunan koko textSize(30); // Tekstin koko 30 background(255); // Tyhjennä tausta fill(0); // Täyttöväri musta } void draw() { for (int a = 1; a<=10; a++) { pushMatrix(); // Koordinaatisto muistiin
translate(a*30,100); // Liikuta koordinaatistoa
text(a,0,0); // Muuttujan a arvo tulostetaan paikkaan (0,0)
popMatrix(); // Palautetaan koordinaatisto muistista } }

Sinulla on vielä kolmaskin vaihtoehto käytettävissä eli while-lause. While-lausetta käytettäessä laskuri on laitettava lauseen sisälle. While-lausetta toistetaan niin kauan kuin ehto on voimassa. Jossain vaiheessa, kun laskurin arvo kasvaa tarpeeksi suureksi, ehto ei enää ole voimassa while-lauseessa ja while-lausetta ei enää suoriteta. Laskuri-muuttuja on ns. globaalimuuttuja ja laskurin alkuarvo on annettava heti ohjelman alussa. Ohjelma, joka tulostaa luvut yhdestä kymmeneen while-lausen avulla on seuraavanlainen.


SANALLINEN ALGORITMI
  1. Määrittele globaali kokonaislukumuuttuja a ja anna sille alkuarvo 1.
  2. Aseta ikkunan kooksi 400 px vaakaan ja 200 px pystyyn.
  3. Aseta tekstin kooksi 30.
  4. Aseta ikkunan taustaväriksi valkoinen.
  5. Aseta täyttöväriksi musta.
  6. Toista silmukkaa niin kauan kun muuttuja a on pienempi tai yhtä suuri kuin 10.
    1. Tulosta muuttujan a arvo paikkaan (a*30,100).
    2. Muuttujan a arvo kasvaa yhdellä.

// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
int a = 1;
void setup () {
size(400,200); // ikkunan koko
textSize(30); // Tekstin koko 30
background(255); // Tyhjennä tausta
fill(0); // Täyttöväri musta
}
void draw() {
while ( a <= 10) {
text(a,a*30,100);
a++;
}
}