Close menu
Close menu

Tunnistaudu

Kirjaudu

Etkö ole vielä jäsen?

Liity jäseneksi

Yhteenveto

Palautetaan mieleen edellisen tunnin laskuri, mutta muutetaan koodia siten, että laskurin kasvattaminen laitetaan jos-valintalauseen sisälle eli kasvata laskuri yhdellä jos laskuri on pienempi kuin 10. Kun laskuri saa arvon 10, niin silloin ehto ei ole enää voimassa ja laskuria ei enää kasvateta. Ohjelman alussa laskuri saa arvon 0, mutta aina ennen tulostusta kasvatetaan laskuria yhdellä, jos ehto on voimassa, niin käytännössä ohjelma tulostaa luvut 1,2,3,4,5,6,7,8,9 ja 10 eli laskuria toistetaan vain tietty rajallinen määrä.


Sama ohjelma käyttäen p5.js koodia olisi seuraavanlainen.

var laskuri = 0;           // Aseta laskurille alkuarvo
function setup() {
  createCanvas(400, 400);  // Ikkunan koko
  textSize(50);            // Tekstin koko 50
  fill(0);                 // Tekstin väri musta
  frameRate(1);            // Ikkunan päivitysnopeus 1 ruutu/sekunti
}

function draw() {
  background(255);        // Tyhjennä tausta ja väritä se valkoiseksi
  if (laskuri < 10) {     // Jos laskuri on pienempi kuin 10, niin silloin
    laskuri++;            // kasvata laskuria yhdellä
  }
  text(laskuri,50,100);   // Tulosta laskurin arvo paikkaan 50 px oikealle ja 100 px alas
}

Toisaalta Scratch-ohjelmassa löytyy valmis toistorakenne, joka toistaa 10-kertaa silmukkaa. Se on seuraavanlainen.


Tämä on sama asia kuin käyttäisimme for-silmukkaa P5.js ohjelmassa. For-silmukan yleinen rakenne on seuraava:

for (alkuarvo; ehto; laskuri) {
   toistettavat lauseet;
}

Yllä oleva ohjelma voidaan nyt lyhentää seuraavasti.

function setup() {
  createCanvas(400, 400);            // Ikkunan koko 400 x 400
  textSize(30);                      // Tekstin koko 30
  fill(0);                           // Täyttöväri musta
}

function draw() {
  background(255,255,0);             // Tyhjennä tausta ja väritä se keltaiseksi
  var laskuri = 0;                   // Määrittele laskuri ja anna laskurille alkuarvo 0
  for (var a=0; a<10; a++) {         // 10 toistoa eli a saa arvot 0,1,2,3,4,5,6,7,8,9
    laskuri++;                       // Kasvata laskuria yhdellä
    text(laskuri,50,50+30*laskuri);  // Tulosta laskurin arvot allekkain
  }                                  // Lopeta for-silmukka
}

Jotta luvut eivät tulostu päällekkäin, niin y-koordinaattiin on lisättävä laskuri-muuttuja eli komento: 30*laskuri tulostaa y:n arvot allekkain. Lopputulos näyttää tältä.

Koska for-silmukassa on oma laskuri a, joka saa alkuarvon 0. Sekä silmukkaa kasvatetaan yhdellä laskurin a++ avulla ja silmukaa toistetaan, niin kauan kun a on pienempi kuin 10 eli käytännössä a saa arvoja 0,1,2,3,4,5,6,7,8,9. Kun a saa arvon 10, niin silmukan toisto lopetetaan. Käytännössä tämä tarkoittaa sitä, että erillinen laskuri-muuttuja on tarpeeton. Käytännössä for-silmukan oma laskuri-muuttuja riittää. Edellinen koodi on lyhennettävissä muotoon.

function setup() {
  createCanvas(400, 400);       // Ikkunan koko 400 x 400
  textSize(30);                 // Tekstin koko 30
  fill(0);                      // Tekstin väri musta
}

function draw() {
  background(255,255,0);       // Taustaväri keltainen
  for (var a=0; a<10; a++) {   // For-silmukka, jossa 10 toistoa eli a saa arvot 0,1,2,3,4,5,6,7,8,9
    text(a,50,50+30*a);        // Tulosta a:n arvot
  }
}

Mikäli käytät laskuria, niin laskurin avulla voidaan liikuttaa for-silmukalla luotua merkkijonoa. Kokeile esimerkiksi ajaa seuraava koodi.

var laskuri=0;               // Määrittele laskuri ja anna sille alkuarvo
function setup() {
  createCanvas(400, 400);    // Ikkunan koko 400 x 400
  textSize(30);              // Tekstin koko 30
  fill(0);                   // Täyttöväri musta
}

function draw() {
  background(255,255,0);     // Tyhjennä tausta ja väritä se keltaiseksi
  laskuri++;                 // Kasvata laskuria yhdellä
  for (var a=0; a<10; a++) { // 10 toistoa
    text(a,laskuri,50+30*a); // Tulosta muuttujan a arvot allekkain, liikuta oikealle laskurin avulla
  }                          // Lopeta for-silmukka
  if (laskuri > 400) {       // Jos laskuri on suurempi kuin 400 (oikealla), niin 
    laskuri=0;               // anna laskurille uusi alkuarvo (tällöin vasemalla)
  }                          // Lopeta if-lause
}