Haluamme tehdä ohjelman, joka tulostaa funktion f(x) = 2x - 3 arvot kun x saa arvoja -10:sta 10:een. Teemme siis ohjelman, jossa laskurimuuttujan x alkuarvo on -10 ja laskuri on muotoa x++. If-lauseen avulla voimme lopettaa tulostuksen, kun laskuri kasvaa yli kymmenen. Lisäksi tarvitsemme toisen muuttujan y, johon lasketaan funktion arvot. Lopuksi lisätään tulostuslause. Tehdään seuraavanlainen ohjelma:
SANALLINEN ALGORITMI
- Määrittele globaali kokonaislukumuuttuja x ja anna sille alkuarvo -10.
- Aseta ikkunan kooksi 400 px vaakaan ja 500 px pystyyn.
- Aseta ikkunan taustaväriksi valkoinen.
- Aseta täyttöväriksi musta.
- Aseta tekstin kooksi 20.
- Määrittele paikallinen kokonaislukumuuttuja y ja sijoita siihen laskutoimituksen 2*x-3 tulos. Kun muuttujan x arvo kasvaa, niin samalla muuttujan y arvo muuttuu.
- Jos muuttujan x arvo on pienempi tai yhtä suuri kuin 10, niin silloin
Tulosta muuttujien x ja y arvot paikkaan (10, 220+20*x). Kun muuttujan x arvo kasvaa (x = -10, -9, -7,..), niin samalla tekstin y-koordinaatti kasvaa (20, 40, 60, 80,...).
- Kasvata muuttujaa x yhdellä.
|
// Ohjelman tehnyt e-Oppi Oy
// 30.9.2017
int x = -10; // Laskurin alkuarvo
void setup () {
size(400,500); // Ikkunan koko
background(255); // Taustaväri valkoinen
fill(0); // Täyttöväri musta
textSize(20); // Tekstin koko 20
}
void draw () {
int y = 2*x -3; // Laske y:n arvo
if (x <= 10) {
text("f("+x+") = 2\u00B7("+x+") -3 = "+y,10,220+20*x);
}
x++; // Laskuri kasvaa yhdellä
}
Ohjelma toimii muuten hyvin, mutta voisiko tulostusta sieventää? Kun x on nolla tai suurempi, niin ohjelma tulostaa sulut vaikka siihen ei ole tarvetta. Ohjelmassa on toinenkin heikkous. Entä jos haluamme tulostaa funktion f(x) = 2x + 3. Joudumme tekemään heti korjauksia tulostuslauseeseen. Olisi parempi määritellä myös omat muuttujat luvuille 2 ja -3, jolloin näitä voisi tarvittaessa vaihtaa. Eräs ongelma on se, että plusmerkki ei tulostu, jos -3 vaihdetaan +3:ksi. Tarvitsemme vielä lisätä kaksi kertaa kaksi sisäkkäistä if-lausetta, ennen kuin kaikki eri variaatiot on huomioitu.
SANALLINEN ALGORITMI
- Määrittele globaali kokonaislukumuuttuja x ja anna sille alkuarvo -10.
- Aseta ikkunan kooksi 400 px vaakaan ja 500 px pystyyn.
- Aseta ikkunan taustaväriksi valkoinen.
- Aseta täyttöväriksi musta.
- Aseta tekstin kooksi 20.
- Määrittele paikallinen kokonaislukumuuttuja k ja sijoita siihen arvo 2.
- Määrittele paikallinen kokonaislukumuuttuja b ja sijoita siihen arvo -3.
- Määrittele paikallinen kokonaislukumuuttuja y ja sijoita siihen laskutoimituksen k*x+b tulos. Kun muuttujan x arvo kasvaa, niin samalla muuttujan y arvo muuttuu.
- Jos muuttujan x arvo on pienempi tai yhtä suuri kuin 10, niin silloin
- Jos muuttujan x arvo on pienempi kuin nolla, niin silloin
- Jos muuttujan b arvo on suurempi kuin nolla, niin silloin
tulosta muuttujien k, x, b ja y arvot paikkaan (10, 220+20*x). Tulosta muuttujan x ympärille sulut ja tulosta muuttujan b eteen plus-merkki.
- Muutoin (Jos muuttujan b arvo on pienempi tai yhtä suuri kuin nolla), niin silloin
tulosta muuttujien k, x, b ja y arvot paikkaan (10, 220+20*x). Tulosta muuttujan x ympärille sulut ja älä tulosta muuttujan b eteen plus-merkkiä.
- Muutoin (jos x on suurempi tai yhtä suuri kuin nolla)
- Jos muuttujan b arvo on suurempi kuin nolla, niin silloin
tulosta muuttujien k, x, b ja y arvot paikkaan (10, 220+20*x). Älä tulosta muuttujan x ympärille sulkuja ja tulosta muuttujan b eteen plus-merkki.
- Muutoin (Jos muuttujan b arvo on pienempi tai yhtäsuuri kuin nolla), niin silloin
tulosta muuttujien k, x, b ja y arvot paikkaan (10, 220+20*x). Älä tulosta muuttujan x ympärille sulkuja ja älä tulosta muuttujan b eteen plus-merkkiä.
- Kasvata muuttujaa x yhdellä.
|
// Ohjelman tehnyt e-Oppi Oy
// 30.9.2017
int x = -10; // Laskurin alkuarvo
void setup () {
size(400,500); // Ikkunan koko
background(255); // Taustaväri valkoinen
fill(0); // Taustaväri musta
textSize(20); // Tekstin koko 20
}
void draw () {
int k = 2;
int b = -3;
int y = k*x + b;
if (x <= 10) {
if ( x < 0) {
if (b > 0) {
text("f("+x+") = "+k+"\u00B7("+x+") +"+b+" = "+y,10,220+20*x);
} else {
text("f("+x+") = "+k+"\u00B7("+x+")"+b+" = "+y,10,220+20*x);
}
} else {
if (b > 0) {
text("f("+x+") = "+k+"\u00B7"+x+" +"+b+" = "+y,10,220+20*x);
} else {
text("f("+x+") = "+k+"\u00B7"+x+""+b+" = "+y,10,220+20*x);
}
}
}
x++; // Laskuri kasvaa yhdellä
}

Kokeile vaihtaa muuttujille k ja b uudet arvot. Huomaat, että laskuri toimii halutulla tavalla.