Tehtävät Ohjelmoinnin perusopetuksen työpajaan syksy 2008

Tämän materiaalin www-version on: https://trac.cc.jyu.fi/projects/ohj1/wiki/OhjOpetuksenTyopaja

1. Miten materiaali omaan koneeseen

2. Grafiikan avulla motivoivampia tehtäviä

2.1 Mitä voidaan tehdä

2.2 Yksikertainen piirtotehtävä

  1. tee jollakin tekstieditorilla Graphics-sivun mukainen tiedosto SimpleGraphics.java:
    import fi.jyu.mit.graphics.EasyWindow;
    
    public class SimpleGraphics {
        public static void main(String[] args) {
            EasyWindow window = new EasyWindow();
            window.addLine(0,0,100,100);
            window.addCircle(50,50, 20);
            window.showWindow();
        }
    }
    
  2. käännä em. sivun ohjeiden mukaan ja aja.
  3. muuta esimerkin kuva sellaiseksi, että se piirtää pienimmän mahdollisen ympyrän ympärille mahtuvan neliön

2.3 Aliohjelman motivoiminen

  1. Kirjoita seuraava Lumiukot0.java
    import fi.jyu.mit.graphics.EasyWindow;
    
    /**
     * Piirretään lumiukkoja "tyhmällä" tavalla
     * @author vesal
     * @version 14.9.2008
     */
    public class Lumiukot0 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            EasyWindow window = new EasyWindow();
    
            window.addCircle(20,80-2*15-20-10,10);
            window.addCircle(20,80-15-20,15);
            window.addCircle(20,80,20);
    
            window.addCircle(70,90-2*15-20-10,10);
            window.addCircle(70,90-15-20,15);
            window.addCircle(70,90,20);
    
            window.showWindow();
        }
    
    }
    
    Lumiukot0.javan tuottama kuva
  2. käännä ja aja ohjelma.
  3. kirjoita aliohjelma
     public static void lumiukko(EasyWindow window, double x, double y)
    
    ja muuta pääohjelma kutsumaan lumiukko-aliohjelmaa
    • => parametreista päästään muuttujiin
  4. lisää sopiva määrä lumiukkoja
  5. piirrä lumiukolle silmät

2.4 Samat Eclipsessä

  • käynnistä Eclipse ja tee sivun ohjeiden 1.4 mukaiset asetukset
  • tee uusi projekti ja aja edelliset esimerkit Eclipsessä (ohjeita tarvitaanko???)

2.5 Kuva pyörimään

  • lisää lumiukko-ohjelmaan rivi:
     new Rotator(window,Axis.Y,5,100);
    
  • tai vaihda pyörittimen tilalle:
     window.setTouchPad(true, true);
     window.setControlButtons(true);
    

2.6 Esimerkkejä alkupään demotehtävistä

2.7 Graphicsin dokumentaatio

  • katso graphics/ ja lisää "jotakin kivaa" lumiukko-ohjelmaan

3. Testaaminen helpoksi: ComTest

  • ComTest on työkalu, jonka avulla testaamisen kynnystä on tarkoitus madaltaa
  • samalla se on työkalu jonka ansiosta saadaan Javdoceihin esimerkkejä.
  • ComTest video (koko luentovideo hirsipuusta)
  • lisää projektiin JUnit:
    Projet/Properties/Java Build Path/Add Library/JUnit/JUnit 4 Finish
    

3.1 Yksinkertaisen funktion testaaminen

  1. Luo uusi paketti esimerkit ja siirry sinne
  2. Kirjoita seuraava ohjelma
    public class PieninJakaja {
    //#STATICIMPORT
    
        /**
         * Funktiolla etsitään luvun pienin jakaja
         * @param n tutkittava luku
         * @return luvun pienin jakaja.  1 jos luku on alkuluku
         * @example
         * <pre name="test">
         *   pieninJakaja(1) === 1;
         *   pieninJakaja(2) === 1;
         *   pieninJakaja(3) === 1;
         *   pieninJakaja(4) === 2;
         *   pieninJakaja(5) === 1;
         *   pieninJakaja(6) === 2;
         * </pre>
         */
        public static int pieninJakaja(int n) {
            for (int i=2; i<=n/2; i++)
                if ( n % i == 0 ) return i;
            return 1;
        }
    
        /**
         * @param args ei käytössä
         */
        public static void main(String[] args) {
            int n = 25;
            int jakaja = pieninJakaja(n);
            System.out.println(jakaja);
        }
    
    }
    
  3. Aja ComTest: Hiiren oikea nappi ja ComTest/Generate and Run
  4. Lisää esimerkkiin testejä. Kokeile myös väärää arvoa.
  5. Muokkaa aliohjelmaa niin, että se ei turhaan jaa parillisilla luvuilla
  6. Testaa vieläkö toimii.
  7. Muuta testin ylärajaksi neliöjuuri luvusta (sen isommilla jako ei voi mennä tasan).
  8. Kirjoita seuraava ohjelma
    public class EsimerkkiComT {
    //#STATICIMPORT    
    
        /**
         * Tutkii montako kertaa merkki löytyy sanasta.  Samalla
         * löytyneiden merkkien kohdalle tulos-jonoon merkitään ko. merkki.
         * Jos merkki jo on tulos-jonossa, se tulkitaan vääräksi.
         * @param sana   mistä merkkiä etsitään
         * @param merkki etsittävä kirjain
         * @param tulos  jono johon oikeat merkitään
         * @return oikeiden merkkien määrä
         * @example
         * <pre name="test">
         * String sana = "kissa"; 
         * StringBuilder tulos = new StringBuilder("_____");
         * tutkiOikeat(sana,'z',tulos) === 0; 
         * tutkiOikeat(sana,'k',tulos) === 1; tulos.toString() === "k____";
         * tutkiOikeat(sana,'k',tulos) === 0; tulos.toString() === "k____";
         * tutkiOikeat(sana,'a',tulos) === 1; tulos.toString() === "k___a";
         * </pre>
         */
        public static int tutkiOikeat(String sana, char merkki, StringBuilder tulos) {
            int lkm = 0;
            return lkm;
        }
    
        /**
         * @param args ei käytössä
         */
        public static void main(String[] args) {
            String sana = "kissa";
            StringBuilder tulos = new StringBuilder("_____");
            int lkm = tutkiOikeat(sana,'s',tulos);
            System.out.printf("Lkm = %d, tilanne = %s%n",lkm,tulos);
        }
    
    }
    
  9. Täydennä esimerkit niin että kaikki sanan kirjaimet on kokeiltu.
  10. Kokeile miten ComTest -testi käyttäytyy.
  11. Täydennä aliohjelma toimivaksi.
  12. Lisää uusi funktio suurinLuvuista(int a, int b, int c) aluksi funktio palauttaa 0.
  13. Kirjoita funktiolle "kattavat" ComTest -testit ja aja testi. Pitäisi tulla punaista.
  14. Katso test-hakemistosta minkälaisia JUnit -tiedostoja ComTest on generoinut.
  15. Täydennä funktion koodi toimivaksi ja aja testit.
  16. Katso esimerkki jossa tehdään taulukkomuotoinen testi
  17. Katso taulukkotestiesimerkkejä esim: kurssin Ali-paketista ja erityisesti Mjonot.java.
  18. Katso Ohjelmointi 1-kurssin demojen mallivastukset

4. Marker.exe (vain Windows, Linuxissa toimii kyllä Winen kanssa)

  • marker on ohjelma, jolla voita piirtää minkä tahansa ohjelman päällä (video)
  • soveltuu erinomaisesti esimerkiksi Eclipsen päällä havainnollistamaan esimerkiksi sitä, miten parametrit menevät aliohelmaan
  • hae Marker omaan koneeseesi: Marker.exe ja lue käyttöohjeet
  • käynnistä ja kokeile piirtää näytölle. Katso käyttöohjeista pikakomentoja.

Seminaarin PDF.