Ohjelmointi 1 / 2008

Demo 2 / 22.9

Tehtävät

1.
Tiedon esittäminen tietokoneessa: Binäärilukujärjestelmässä on kaksi numeroa, nolla ja yksi. Tätä sanotaan bitiksi (binary digit). Vähiten merkitsevä eli viimeisimmäksi kirjoitettu bitti tarkoittaa lukumäärää yksi, toiseksi vähiten merkitsevä bitti lukumäärää kaksi, kolmanneksi vähiten merkitsevä lukumäärää neljä ja niin edelleen aina kakkosen potensseja jatkaen (8, 16, 32, 64, ...). Kokonaisen binääriluvun ilmoittama lukumäärä saadaan kun summataan nämä yksittäisten bittien ilmoittamat lukumäärät toisiinsa. Esimerkiksi binääriluku 1000101 olisi kymmenjärjestelmässä:
1*64 + 0*32 + 0*16 + 0*8 + 1*4 + 0*2 + 1*1 == 69
Muunna seuraavat binääriluvut ihmiselle tutumpaan 10-järjestelmään:
10010 
1001110001 
1000000000000000 
1010101010101011 
10000000000000001 
10000000000000010 
10000000000000011 
Nykytietokoneissa on tyypillistä jakaa muisti kahdeksan bitin mittaisiin tallennuspaikkoihin eli tavuihin (byte). Mikä on suurin kokonaisluku, jonka voit tallentaa kahden tavun(eli 16 bitin) kokoiseen tilaan (oletetaan että negatiivisia lukuja ei tarvitse esittää)? Entäpä jos pitää voida esittää positiivisia ja negatiivisia lukuja: mikä silloin on toisaalta pienin ja toisaalta suurin luku, joka kahden tavun kokoiseen tilaan mahtuu?
2.
Algoritmi: Kirjoita suomenkielinen (ei Java) algoritmi eli toimintaohje, jolla kuvaat, miten puhelinluettelosta etsitään tietyn henkilön nimi. Entä millaisella algoritmilla puhelinluettelosta löytyy tietyn numeron omistaja? Kumpi algoritmeista on nopeampi ja miksi? (Lue: http://users.jyu.fi/~vesal/kurssit/ohj2/moniste/html/m.htm luku 4).
3.
Algoritmi: Pitäydy tässä tehtävässä vielä irti Javasta ja muista ohjelmointikielestä. Kuvaile suomen kielellä tai korkeintaan ''pseudokoodilla'', miten jakaisit seuraavat tehtävät yhtä pykälää tarkemmiksi osatehtäviksi. Jaa sitten vielä kukin osatehtävä seuraavalle tasolle pienemmiksi osatehtäviksi. Käytä jotakin luonnollisia ilmauksia toistolle ja päätöstilanteille ("jos ... niin ... mutta muussa tapauksessa ..."):
a) Tiskaaminen 
b) Kahvin keittäminen
c) Ohjeet tämän demotehtävän palauttamiseksi
4.
Aliohjelmat: Täydennä alla oleva ohjelma Portaat.java toimimaan kuten kommenteissa on sanottu:
 import fi.jyu.mit.graphics.EasyWindow;

/**
 * Ohjelma piirtää viisi porrasta alkaen origosta päättyen
 * pisteesen (5,5)
 * @author // Täydennä
 * @version // Täydennä
 */
public class Portaat {

    /**
     * Aliohjelma piirtää ikkunaan yhden nousevan portaan
     * alkaen pisteestä (x,y) ja päättyen pisteeseen (x+1,y+1)
     * <pre>
     *    |-------(x+1,y+1)
     *    |
     *    |
     *    |
     *   (x,y) 
     * </pre>
     * @param window
     * @param x portaan alkupisteen x
     * @param y portaan alkupisteen y
     */
    public static void porras(EasyWindow window,double x,double y) {
        // Täydennä tähän
    }
    
    /**
     * @param args ei käytössä
     */
    public static void main(String[] args) {
        EasyWindow window = new EasyWindow();
        window.scale(0,0,10,10);
        porras(window,0,0);
        porras(window,1,1);
        // Täydennä tähän
        window.showWindow();
    }

}
5.
Aliohjelmat: Lisää edelliseen ohjelmaan aliohjelma porrasAlas, ja sen kutsut, niin, että voi hyvällä omalla tunnolla lisätä alkukommentteihin tekstin:

 * Sitten piirretään laskevat portaat alkaen pisteestä (4,5)
 * ja päättyen pisteeseen (9,0)

Syntyvä kuva on seuraavan näköinen:
     
          _ (5,5)
        _| |_
      _|     |_
    _|         |_
  _|             |_
 |                 |
(0,0)            (9,0)


6.
Aliohjelmat: Tee ohjelma, joka piirtää ikkunaan 4 kappaletta tasakylkisiä kolmioita, joiden korkeus on yksi yksikkö ja leveys kaksi yksikköä. Tee avuksi aliohjelma kolmio, jolle viet parametrina ”sopivat” tiedot.
B1.
Aloita avaamalla Alicen luisteluesimerkki. Eli aloita luistelu-tutorial ja poistu siitä saman tien. Taustalla on puita. Laita kaksi niistä saapumaan luistelijan luo niin, että ensimmäinen saapuu 2 sekunnin aikana ja ”kaatuu” 45 astetta vasemmalle toisen saapumisen jälkeen ja toinen kaatuu sitten 45 astetta oikealle. Tehtävän vastauksena palauta lisäämäsi ”ohjelmarivit” tekstiksi kopioituna tyyliin
IceSkater.do simple spin

GURU-tehtävät

G1-2
Tutustu http://users.jyu.fi/~vesal/kurssit/ohj1/graphics/ kirjaston malliohjelmaan CarSample.java. Tee tehtävät 4,5 ja 6 niin, että teetkin luokat Porras, PorrasAlas ja Kolmio, joiden avulla piirrät ikkunaan portaat (nyt luonnollisesti for-silmukalla) ja 4 kolmiota. Tee yhdestä kolmiosta pyöriteltävä.