Laskuri

Laskuri tarkoittaa yksinkertaista laskutoimitusta kokonaislukumuuttujilla, jossa muuttujan uusi arvo on sama kuin muuttujan vanha arvo lisättynä muutos. Jos esimerkiksi muutos on 1, niin laskuri voidaan kirjoittaa muodossa:

muuttuja = muuttuja + 1;


Tämä voidaan merkitä ohjelmointikielessä lyhemminkin muodossa:

muuttuja++;


Ennen kuin voit käyttää laskuria, niin se on määriteltävä laskuri joko kokonaisluku tai desimaaliluku muuttujaksi. Samalla kun määrittelet laskuri-muuttujan, niin anna laskurille alkuarvo. Laskurimuuttuja määritellään seuraavasti:

int muuttuja = 0;


Koska a:n alkuarvo on 0, niin tässä muuttuja a saa arvoja: 0, 1, 2, 3, 4, 5, 6,… Laskuri-muuttujan määrittely ja muuttujan alkuarvon asettaminen on tehtävä heti ohjelman alussa eli laskuri-muuttujan pitää olla ns. globaali muuttuja.

Katsotaan yksikertaisella esimerkillä mitä tapahtuu, kun laskuri lisätään void draw () silmukassa olevaan piirtokomentoon.

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 ikkunan taustaväriksi valkoinen.
  4. Aseta täyttöväriksi punainen.
  5. Muuttujan a arvo kasvaa yhdellä.
  6. Piirrä ellipsi, jonka leveys on 100 ja korkeus 100 paikkaan (a,100). Koska muuttuja a on sijoitettu ympyrän vaakasuuntaiseen keskipisteeseen, niin ympyrä piirretään joka kerta eri paikkaan.

// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
int a = 0; // Laskuri-muuttujan alkuarvo void setup () { size(400,200); // Ikkunan koko background(255); // Taustaväri valkoinen fill(255,0,0); // Täyttöväri punainen } void draw () { a = a + 1; // Laskuri kasvaa yhdellä ellipse(a,100,100,100); // Piirretään ellipsi }


Havaitsemme, että punainen ympyrä lähtee liikkumaan oikealle. Kun laskurimuuttuja kasvaa, niin samalla kasvaa ympyrän x-koordinaatti. Kun koodia katsotaan tarkemmin, niin laskuri muuttuja on määritelty heti ohjelman alussa. Miksi sitä ei voi määritellä void draw () – lohkossa? Syy on alkuarvon asettamisessa. Jos laskurimuuttujalle määriteltäisiin alkuarvo void draw ()-lohkossa, niin laskuri nollautuisi koko ajan ja ympyrä ei liikkuisi mihinkään, koska laskeminen lähtisi koko ajan aina alusta.

Itse laskutoimitus: a = a +1; pitää määritellä void draw() – lohkossa, koska void draw ()-lohko on ikuisessa silmukassa. Silmukan ajaminen tarkoittaa laskurin kasvamista. Jos haluat, että ympyrä liikkuu nopeammin, niin voit laittaa muutoksen suuremmaksi kuin 1 eli kirjoittaa laskurin esimerkiksi muodossa: a = a + 2;

Alla on esitetty kuva ohjelman suorituksesta.



Muutetaan koodia. Mitä tapahtuu, jos ympyrä piirretään komennolla: ellipse(200,200,a,a); ?

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


// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
int a = 0; // Laskuri-muuttujan alkuarvo

void setup () {
size(400,200); // Ikkunan koko
background(255); // Taustaväri valkoinen
fill(255,0,0); // Täyttöväri punainen
}

void draw () {
a = a + 1; // Laskuri kasvaa yhdellä
pushMatrix(); // Ota koordinaatisto muistiin
translate(a,100); // Liikuta koordinaatistoa
ellipse(0,0,100,100); // Piirretään ympyrä paikkaan (0,0)
popMatrix(); // Palauta koordinaatisto muistista
}


Kuinka ympyrä saataisiin liikkumaan vasemmalle? Vasemmalle liike onnistuu yksikertaisesti vähentämällä lukuja. Muutetaan koodia ja katsotaan käytännössä.

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 ikkunan taustaväriksi valkoinen.
  4. Aseta täyttöväriksi punainen.
  5. Muuttujan a arvo vähenee yhdellä.
  6. Piirrä ellipsi, jonka leveys on 100 ja korkeus 100 paikkaan (400+a,100). Koska muuttuja a on sijoitettu ympyrän vaakasuuntaiseen keskipisteeseen, niin ympyrä piirretään joka kerta eri paikkaan.

// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
int a = 0; // Laskuri muuttujan alkuarvo void setup () { size(400,200); // Ikkunan koko background(255); // Taustaväri valkoinen fill(255,0,0); // Täyttöväri punainen } void draw () { a = a - 1; // Laskuri pienenee yhdellä ellipse(400+a,100,100,100); // Huomaa: ympyrä alussa oikealla }


Kirjoitamme laskurin nyt muodossa: a = a – 1; Lisäksi ympyrä pitää siirtää alussa oikealle, siksi ympyrän x:n arvoon on lisätty 400. Nyt laskuri a saa arvoja: 0, -1, -2, -3, -4,… ja x:koordinaatti arvoja: 400, 399, 398, 397, 396,…





Muuta koodia. Mitä tapahtuu, jos ympyrä piirretään komennolla: ellipse(200,200-a,100,100); ? Kokeile muuttaa background(255); komento heti void draw ()-lohkon alkuun, mitä tapahtui?

Ohjelmoinnissa on määritelty laskureita seuraavalla tavalla. Esimerkiksi tässä laskurimuuttujana käytetään a-kirjainta, joka on määritelty kokonaisluvuksi.

LaskuriLyhyemminMerkitys
a = a + 1; a++; Kasvattaa laskuria yhdellä
a = a - 1; a--; Vähentää laskuria yhdellä
a = a + 2; a += 2; Kasvattaa laskuria kahdella
a = a - 2; a -= 2; Vähentää laskuria kahdella
a = a*2; a *= 2; Kertoo laskurin kahdella
a = a/2; a /= 2; Jakaa laskurin kahdella

Esimerkki:
a) Jos laskuri on a = a + 3; ja a:n alkuarvo 5, niin a saa tällöin arvoja: 5, 8, 11, 14, 17,...
b) Jos laskuri on a = a - 2; ja a:n alkuarvo on 3, niin a saa tällöin arvoja: 3, 1, -1, -3, -5, -7,...
c) Jos laskuri on a =a*2; ja a:n alkuarvo on 1, niin a saa tällöin arvoja: 1, 2, 4, 8, 16, 32,...
d) Jos laskuri on a=a/2; ja a:n alkuarvo on 4, niin a saa tällöin arvoja: 4, 2, 1, 0.5, 0.25, 0.125,...