Simulaatio: Yhtälön ratkaisun etsiminen kokeilemalla

Entä jos haluaisimme etsiä yhtälön ratkaisun kokeilemalla isommalla lukuvälillä. Ongelmaksi voi muodostua se, että luvut eivät mahdu enää ruudulle yhtä aikaa. Sen voi kiertää siten, että luomme simulaation, jossa liukupalkilla muutamme x:n arvoa ja ohjelma laskee yhtälön vasemman ja oikean puolen arvon. Teemme seuraavan ohjelman.

SANALLINEN ALGORITMI
  1. Määrittele globaali kokonaislukumuuttuja a ja anna sille alkuarvo 200.
  2. Aseta ikkunan kooksi 400 px vaakaan ja 300 px pystyyn.
  3. Aseta tekstin kooksi 30.
  4. Aseta ikkunan taustaväriksi valkoinen.
  5. Aseta täyttöväriksi keltainen.
  6. Piirrä keltainen suorakulmio, jonka nurkkapiste on (0,0), leveys 400 ja korkeus 50.
  7. Aseta täyttöväriksi punainen.
  8. Piirrä punainen neliö, jonka nurkkapiste on (a,0), leveys 50 ja korkeus 50. Muuttamalla a:n arvoa, saadaan neliö liikkumaan vaakasuunnassa.
  9. Määrittele kokonaislukumuuttuja x1 ja sijoita siihen hiiren vaakasuuntaisen koordinaatin arvo.
  10. Määrittele kokonaislukumuuttuja y1 ja sijoita siihen hiiren pystysuuntaisen koordinaatin arvo.
  11. Jos hiiren painike on pohjassa, niin
  12. Jos (y1 on suurempi kuin 0) JA (y1 on pienempi kuin 50), niin
  13. Jos (x1 on suurempi kuin muuttuja a) JA (a on pienempi kuin 350), niin silloin kasvata muuttujan a arvoa yhdellä. Tällöin punainen neliö liikkuu oikealle.
  14. Jos (x1 on pienempi kuin muuttuja a) JA (a on suurempi kuin 0), niin silloin pienennä muuttujan a arvoa yhdellä. Tällöin punainen neliö liikkuu vasemmalle.
  15. Aseta täyttöväriksi musta.
  16. Määrittele kokonaislukumuuttuja x. Muuta muuttujan a arvo väliltä [0,350] välille [-20,20]. Sijoita tämä uusi muutettu arvo muuttujalle x.
  17. Määrittele kokonaislukumuuttuja yv ja sijoita siihen laskutoimituksen 3*x+2 tulos.
  18. Määrittele kokonaislukumuuttuja yo ja sijoita siihen laskutoimituksen x+10 tulos.
  19. Tulosta tarkasteltava yhtälö eli teksti: "3x+2=x+10" paikkaan (10,100).
  20. Tulosta muuttujien x ja yv arvot paikkaan (10,150).
  21. Tulosta muuttujien x ja yo avot paikkaan (10,200).

// Ohjelman tehnyt e-Oppi Oy, 30.9.2017
int a = 200; // Laskurin alkuarvo (palkille)
void setup () {
size(400,300); // ikkunan koko
textSize(30); // Tekstin koko 30
}
void draw() {
background(255); // Tyhjennä tausta
fill(255,255,0); // Keltainen täyttöväri
rect(0,0,400,50); // Piirrä keltainen suorakulmio
fill(255,0,0); // Punainen täyttöväri
rect(a,0,50,50); // Piirrä punainen neliä
int x1 = mouseX; // Selvitä hiiren vaakakoordinaatti
int y1 = mouseY; // selvitä hiiren pystykoordinaatti
if (mousePressed == true) {
if ((y1 > 0) && (y1 < 50)) {
if ((x1 > a) && (a < 350)) { // Jos hiiri on oikealla puolen
a++; // niin kasvata laskuria
}
if ((x1 < a) && (a >0)){ // Jos hiiri on vasemmalla puolen
a--; // niin pienennä laskuria
}
}
}
fill(0); // Musta tekstin väri
int x = round(map(a,0,350,-20,20)); // skaalaa arvot välille [-20,20]
int yv = 3*x+2;
int yo = x+10;
text("3x + 2 = x + 10",10,100);
text("f("+x+")= "+yv,10,150);
text("f("+x+")= "+yo,10,200);
}


Kun katsot koodia, niin sinun tarvitsee muuttaa vain kolmea lihavoitua riviä, jos haluat tutkia muiden yhtälöiden ratkaisuja. Kun suoritat ohjelman, niin ohjelman suoritus näyttää tältä.



Ohjelma toimii yksinkertaisesti. Kun pidät hiiren painiketta pohjassa keltaisella alueella, niin punainen neliö tulee kohti hiiren vaakasuuntaista paikkaa. Punaisen neliön liikkuminen loppuu, kun punaisen neliön vasen reuna saavuttaa hiiren vaakasuuntaisen paikan. Tässä neliön paikka vaakasuunnassa on skaalattu map()-funktiolla välille [-20,20]. Liikuta palkkia, kunnes yhtälön vasenpuoli on sama kuin yhtälön oikea puoli. Olet löytänyt yhtälön ratkaisun kokeilemalla.

Simulaatio-ohjelman toimintaperiaate on selostettu tarkemmin kappaleessa 8.3. Sinun ei tarvitse osata tehdä simulaatio-ohjelmaa itse alusta loppuun, sinun tarvitsee ainoastaan osata käyttää valmiita simulaatioita. Tässä esimerkissä muuta lihavoidut kohdat, jos tutkit jotain toista yhtälöä.