Skip to content

Latest commit

 

History

History
323 lines (273 loc) · 10.4 KB

muuttuja.org

File metadata and controls

323 lines (273 loc) · 10.4 KB

Muuttuja

{{{example}}}

Piirretään piirtoikkunaan mahdollisimman suuri ympyrä. Ympyrän halkaisijan pituus riippuu siitä, kumpi on suurempi: ikkunan leveys vai korkeus. Ensimmäisessä esimerkissä leveys on suurempi, joten ympyrän halkaisija on ikkunan korkeus.

size (300, 200);
<<muuttuja-ympyra-runko>>

Kun ikkunan mittasuhteet muuttuvat, ympyrän halkaisija on ikkunan leveys.

size (300, 400);
<<muuttuja-ympyra-runko>>

Huomataan, että ohjelmaan on kirjoitettu funktion ellipse() kutsu kahdesti, vaikka vain ympyrän halkaisija muuttuu. Voisiko tämän hoitaa fiksummin?

Sama esimerkki muuttujan avulla

Tietokoneohjelmassa muuttuja on nimetty muistipaikka, johon voidaan tallentaa mm. lukuja. Muuttujan arvo voi muuttua ohjelman suorituksen aikana.

Ohjelmoidaan yllä olevan esimerkin mukainen ohjelma käyttämällä muuttujaa halkaisija.

size (400, 300);

float halkaisija; // määritellään muuttuja nimeltä halkaisija, ei arvoa
if (width > height)
  halkaisija = height; // halkaisijan arvo on ikkunan korkeus
else
  halkaisija = width; // halkaisijan arvo on ikkunan leveys

ellipse (width / 2.0, height / 2.0, halkaisija, halkaisija);

Huomaa, että

  • toisin kuin vakiota määritellessä, sanan float edessä ei lue final
  • muuttujalle ei tarvitse antaa arvoa määrittelevällä rivillä
  • muuttujalle asetetaan arvo yhtäsuuruusmerkin = avulla.

Monet ohjelmoijat kirjoittavat muuttujien nimet pienillä kirjaimilla erotellakseen ne vakioista.

{{{example}}}

Piirretään ikkunaan palkki, joka peittää P prosenttia ikkunasta, missä P on vakio. Jos vakion P arvo on alle 90, palkki on sininen. Muussa tapauksessa palkki on vihreä.

Ensimmäisessä tapauksessa vakion P arvo on alle 90.

size (600, 100);
final float P = 65;
<<muuttuja-palkki-runko>>

Kun vakion P arvo kasvaa, palkin väri muuttuu vihreäksi.

size (600, 100);
final float P = 95;
<<muuttuja-palkki-runko>>

{{{example}}}

Piirretään mahdollisimman suuri ellipsi, jonka keskipisteen \(x\)-koordinaatti on vakio X. Korkeussuunnassa ellipsin keskipiste on ikkunan puolivälissä.

Ensimmäisessä tilanteessa keskipisteen etäisyys vasempaan reunaan määrittää ellipsin leveyden.

size (400, 300);
final float X = 100;

<<muuttuja-ellipsi-runko>>

Toisessa tilanteessa vakion X arvo on suurempi, ja ellipsin leveys määräytyy keskipisteen etäisyydestä ikkunan oikeaan reunaan.

size (500, 100);
final float X = 440;

<<muuttuja-ellipsi-runko>>

Alla on vaihtoehtoinen, lyhyempi ratkaisu. Etäisyys ikkunan reunaan voidaan päätellä myös suoraan siitä, sijaitseeko keskipiste ikkunan vasemmassa vai oikeassa puoliskossa.

size (200, 300);
final float X = 150;

float etaisyys; // keskipisteen etäisyys ikkunan reunaan
if (X < width / 2.0)
  etaisyys = X; // keskipiste ikkunan vasemmassa puoliskossa
else
  etaisyys = width - X; 

ellipse (X, height / 2.0, 2 * etaisyys, height);

Tehtäviä

Ratkaise seuraavat tehtävät muuttujien avulla.

  1. Kirjoita ohjelma, joka piirtää \((400 × 400)\)-kokoisen piirtoikkunan keskelle ympyrän. Määrittele ohjelmassasi muuttuja ympyrän halkaisijalle. Halkaisija on 100, jos vakion K arvo on alle 100. Muussa tapauksessa halkaisija on 200. Testaa ohjelmasi toimivuus muuttamalla vakion K arvoa.
  2. Kirjoita ohjelma, joka piirtää \((400 × 400)\)-kokoisen piirtoikkunan vasempaan ylänurkkaan ympyrän. Määrittele ohjelmassasi muuttuja ympyrän halkaisijalle. Halkaisija on 100, jos vakion K arvo on alle 100. Muussa tapauksessa halkaisija on 200. Testaa ohjelmasi toimivuus muuttamalla vakion K arvoa.
  3. Kirjoita ohjelma, joka piirtää piirtoikkunan keskelle mahdollisimman suuren valkoisen neliön. Testaa ohjelmasi toimivuus muuttamalla piirtoikkunan kokoa.
  4. Piirrä piirtoikkunan keskelle mahdollisimman suuri ympyrä, joka toteuttaa seuraavan ehdon: ympyrän ja piirtoikkunan väliin jää joka suunnassa tilaa vähintään ympyrän säteen verran.
  5. Kirjoita ohjelma, jossa määritellään vakiot X1 ja X2, joiden molempien arvo on vähintään 0 ja korkeintaan 300. Ohjelma piirtää \((400 × 400)\)-kokoiseen piirtoikkunan yläreunaan \((100× 100)\)-kokoisen neliön, jonka vasemman yläkulman \(x\)-koordinaatti on pienempi vakioista X1 ja X2 (kumpi tahansa vakioista, jos vakiot ovat yhtä suuret). Testaa ohjelmasi toimivuus muuttamalla vakioiden arvoja.
  6. a) Jaetaan neliön muotoinen piirtoikkuna kahteen osaan alla olevan kuvan mukaisesti.
       size (5cm, 0);
       draw (unitsquare);
       fill (N -- (N + E) -- E -- cycle, red);
	   fill (N -- (0, 0) -- E -- cycle, blue);

Mikä ehto pätee niiden pisteiden \(x\)- ja \(y\)-koordinaateille, jotka sijaitsevat ikkunan punaisessa osassa? b) Kirjoita ohjelma, jossa määritellään vakiot X ja Y, joiden molempien arvo on vähintään 100 ja korkeintaan 300. Ohjelma piirtää \((400× 400)\)-kokoiseen piirtoikkunaan ympyrän, jonka keskipiste on kohdassa (X, Y) ja jonka halkaisija on 10. Ympyrä on punainen, jos sen keskipiste sijaitsee ikkunan “punaisessa” osassa. Muussa tapauksessa ympyrä on sininen.

  1. Kirjoita ohjelma, joka piirtää neliön muotoiseen piirtoikkunaan mahdollisimman suuren ympyrän, joka täyttää seuraavat ehdot.
    • Ohjelman vakio X määrää ympyrän keskipisteen \(x\)-koordinaatin.
    • Ympyrän keskipiste on piirtoikkunan lävistäjällä, jonka toinen pää on origossa.

    Alla on ohjelman piirtämä kuva, kun ikkunan koko on \((400× 400)\) ja vakion X arvo on 370.

Ratkaisuja

  1. size (400, 400);
    final float K = 150;
    
    float h; // halkaisija
    if (K < 100)
      h = 100;
    else
      h = 200;
    
    ellipse (width / 2.0, height / 2.0, h, h);
        
  2. size (400, 400);
    final float K = 150;
    
    float d; // halkaisija
    if (K < 100)
      d = 100;
    else
      d = 200;
    
    float r = d / 2; // ympyrän säde
    ellipse (r, r, d, d);
        
  3.        size (300, 400);
    	noStroke ();
    
           float sivu;
           if (width < height)
             sivu = width;
           else
             sivu = height;
    
           float puolet = sivu / 2; // puolet sivun pituudesta
           rect (width / 2.0 - puolet, height / 2.0 - puolet, sivu, sivu);
        
  4. Valitaan ikkunan leveydestä ja korkeudesta se, joka on pienempi. Ehto toteutuu, kun ympyrän halkaisija on puolet valitusta mitasta.
    size (400, 300);
    
    float pienempi; // pienempi ikkunan mitoista
    if (width < height)
      pienempi = width;
    else
      pienempi = height;
    
    float halkaisija = pienempi / 2;
    
    ellipse (width / 2.0, height / 2.0, halkaisija, halkaisija);
        
  5. size (400, 400);
    final float X1 = 100;
    final float X2 = 300;
    
    float x; // neliön vasemman reunan x-koordinaatti
    if (X1 < X2)
      x = X1;
    else
      x = X2;
    
    rect (x, 0, 100, 100);
        
  6. a) Punaisessa osassa \(y < x.\)

    b)

size (400, 400);
final float X = 200;
final float Y = 100;
colorMode (HSB, 100);
noStroke ();

float savy;
if (Y < X)
  savy = 0;
else
  savy = 65;

fill (savy, 100, 100);
ellipse (X, Y, 10, 10);
  1. <<muuttuja-ympyra-lavistajalla>>