wiki:k2013/demot/demo4
Last modified 5 years ago Last modified on 2013-05-28 15:19:49

Demot » Demo 4, 4.2.2013 - Kesällä ma 10.6.2013

https://www.mit.jyu.fi/demowww/ohj2/

Tähdellä (*) merkitty ne tehtävät, jotka ehdottomasti kannattaa tehdä.

Viitteissä tyyliin "Luvun 7.5" noudatetaan luentomonisteen numerointia. Demoissa saa käyttää vapaasti aliohjelmapaketteja ohj2/ali. Hakemistossa on kirjaston käyttöohje.

Mitä palautetaan? Itse tehdyt tiedostot. Eli Javasta .java. Jos testit tehdään ComTestillä niin se generoi toisen *Test.java tiedoston joka siis ei ole itse kirjoitettu ja tätä EI palauteta. Mutta jos testit tehdään JUnitilla ja ITSE kirjoitetaan tuo testitiedosto, niin silloin se toki palautetaan. *.class -tiedostoja EI MISSÄÄN NIMESSÄ palauteta.

Pisteytyksestä

Pisteet aina niin, että yksi tehtävä on yksi piste (jos tehty ja ohjelmatehtävä koneella testattu). Jos samassa tehtävässä on kaksi tehtävänumeroa, esim. 2*3, niin silloin siinä on kaksi tehtävää, eli pis­teet 1+1. Jos yhden pisteen tehtävässä on kohdat a ja b, niin vastaavasti yksi kohta on 0.5 pistettä. Jos tehtävässä on vaikka 4 selvästi eri funktiota tai kohtaa, niin silloin tehtävän voi ajatella koostu­van 4 osasta. Syöttöä vaativissa tehtävissä saa käyttää Ali.jar:in funktioita. Ja muistakaa että Java-ohjelmien on käännyttävä ja toimittava kuten pyydettiin sekä sisällettävä Javadoc-tyyliset kommentit, jotta sen saa merkitä täyden veroisena.

Testit

Tehtävissä pyydetyt testit voit kirjoittaa toistaiseksi joko:

Jos testaa GUI-ohjelmia esim Lift-kirjastolla saa merkitä yhden lisäbonuspisteen. NettiDemoWWW:hen tämä "tilitetään" palauttamalla tiedosto guitest.txt, johon kirjoitetaan mitkä tehtävä on testattu ja vähän mielipiteitä testaamisesta.

Ville V1

Tee JAVA Villestä tehtävät 5.1-5.7 Toistolauseet.
1.4 Ville-tehtävien palautus NettiDemoWWW:llä.

Tehtävä 1*. Käyttöliittymä

Kirjoita Java-GUI-ohjelma, joka toimisi seuraavasti:

Kerron sinulle paljonko täytät tänä vuonna!
Syntymävuotesi [1978]
Täytät tänä vuonna 31 vuotta.

Tehtävä 2.* Kolmio

Kirjoita funktio, joka palauttaa suorakulmaisen kolmion hypotenuusan pituuden, kun para­metrina on kateettien pituus. Kirjoita testi. Kirjoita funktio kolmionAla, jo­ka laskee vastaavista tiedoista suorakulmaisen kolmion pinta-alan. Kirjoita testit. Muista, että funktiot eivät tulosta mitään!

Tehtävä 3. Tarkkuus

Kirjoita funktio ja testit: int etumerkki(double x, double eps), joka palauttaa

-1  mikäli x<-eps,   eps on aina >= 0
 0  mikäli -eps<=x<=eps
 1  mikäli x>eps

Tehtävä 4. Demopisteet

Kirjoita funktio demopisteet, jolle viedään opiskelijan tekemien demopisteiden (aka palautettujen tehtävien pisteiden) summa ja de­motehtävien maksimimäärä. Funktio palauttaa sitten Ohjelmointi 2-kurssin taulukon mu­kaiset hyvityspisteet, jotka siis vastaavat demopisteprosenttia. Luonnollisesti myös testit.

Tehtävä 5*. Pöytätesti

Tutki pöytätestin avulla mitä ovat muuttujien arvot seuraavassa ohjelmassa kunkin lauseen suorittamisen jälkeen. Funktiot i ja set käsitellään "atomaarisina", eli niiden sisään ei mennä pöytätestissä. Mitä ohjelma tulostaa?

/**
 * Mitä ohjelma tulostaa?? 
 * @author  Vesa Lappalainen
 * @version 1.0, 19.01.2003
 */
public class Alisotk2 {

  private static int i(StringBuffer s) {
    return Integer.parseInt(s.toString());
  }
  private static void set(StringBuffer s,int i) {
    s.delete(0, s.length()).append(""+i);
  }

/* 01 */ private static StringBuffer b; private static int c;
/* 02 */
/* 03 */ private static void s_1(StringBuffer a, int b)
/* 04 */ {
/* 05 */   int d;
/* 06 */   d  = i(a);
/* 07 */   c  = b + 3;
/* 08 */   b  = d - 1;
/* 09 */   set(a,c - 5);
/* 10 */ }
/* 11 */
/* 12 */ private static void a_2(int a, StringBuffer b)
/* 13 */ {
/* 14 */   c  = a + i(b);
/* 15 */   { int c; c = i(b);
/* 16 */   a = 8 * c; }
/* 17 */   set(b,175);
/* 18 */ }
/* 19 */
/* 20 */ public static void main(String[] args) {
/* 21 */   StringBuffer a = new StringBuffer("4"); int d=9;
/* 22 */   System.out.println("" + a + " " + b + " " + c + " " + d);
/* 23 */   b=new StringBuffer("3"); c=2; d=1;
/* 24 */   s_1(b,c);
/* 25 */   a_2(d,a);
/* 26 */   s_1(a,3+d);
/* 27 */   System.out.println("" + a + " " + b + " " + c + " " + d);
/* 28 */ }
}

Tehtävä 6. if-lauseiden uudelleen järjestely

Mitä ovat muuttujien arvot seuraavien ohjelmanpätkien jälkeen? Sisennä (ja selvennä) ohjel­manpätkät "oikein"! Huomaa että alla on kahdessa sarakkeessa 4 toisistaan riippumatonta koodinpätkää.

/* 1 */ a=4; b=2; c=0;     |    /* 2 */ a=4; b=2; c=0;
if ( a-b != 0 ) c++; a=1;  |    if ( c != 0 ) 
b=3;                       |      c--; else b=1;
                           |    a = b-2;

/* 3 */ a=4; b=2; c=0;     |    /* 4 */ a=4; b=2; c=0;
if ( a > 0 ) if ( b > 1 )  |    if ( c++ != 0 ) if ( a-- != 0);
  c=9;                     |    else b-=3; else c+=8;
else if ( c == 1 ) ;       |
else b = 0;                |
a = 3;                     |

Tehtävä 7-8*. Henkilo-luokka

Malliluokassa Aika kaikki attribuutit olivat int-tyyppisiä. Kissa/ Elain- esimerkissä oli myös String-tyyppisiä attribuutteja.

Kirjoita luokka Henkilo, jossa on (attribuutteina) sukunimi, etunimi ja syntymävuosi. Tee luokka sellaiseksi, että alla olevan kaltainen pääohjelma toimii:

public static void main(String[] args) {
    Henkilo aku = new Henkilo("Aku", "Ankka", 1934);
    System.out.println(aku.getNimi());  // tulostaa Aku Ankka
    System.out.println(aku.getSyntymavuosi());  // tulostaa 1934
    System.out.println(aku.toString()); // tulostaa Aku|Ankka|1934
}

Tehtävä B1. Raajoja heilutteleva ukko

Katso Ohj1-kurssin Wikistä miten käytetään Graphics.jar-kirjastoa.

https://svn.cc.jyu.fi/srv/svn/ohj1/graphics/trunk/sample/UkkoSample.png

Ota malliohjelma UkkoSample.java ja muuta se sellaiseksi, että ainakin yksi ukko pyörittää jokaista jalkaansa ja kättänsä.

Tehtävä B2-3. Äärellinen automaatti 1.

Lue syksyn 2012 pääsykokeen tehtävä 2.

Tee aliohjelma tutkiJono, jolle annetaan merkkijono muodossa "01001" ja aliohjelma palauttaa true niistä jonoista, joita b-kohdan automaatti hyväksyisi, muista palautetaan false. Älä kuitenkaan toteuta tehtävää automaattia tekemällä (se tehdään Guru-tehtävässä}.

Tehtävä G1-4. Virheilmoitukset puuttuvista demoista

Tarkoituksena on tehdä Linux-konetta varten postitustiedosto (=komentojono postita) kaikista niistä, jotka ovat unohtaneet oman nimensä pois demovastauksista, tai demovastauksissa on jotakin muuta "syntaktista" vikaa.

Katso Demo 3:n guru-tehtävässä G1-2 käsiteltyä tiedostoa users.html ja tiedostoa files.txt (ks luku 2.1 alkaen kuvaus). Kirjoita ohjelma, joka tarkistaa jokaiselta henkilöltä, että hänellä on kussakin vastaustiedostossaan ainakin oma nimensä. Jos nimeä ei ole, files.txt:tä ei ole tai files.txt:ssä mainittua tiedostoa ei ole, henkilölle lähetetään sähköposti, jossa maini­taan asiasta. Sähköposti lähetetään tekemällä Unix-konetta varten seuraavanlainen komento­jono postita:

#!/bin/sh
mailx -s Demo1 vesal@jyu.fi <<EOF
Tiedostossa kavely.txt ei ole nimeäsi.
Tiedostoa guru2.cpp ei löydy.
EOF
mailx -s Demo1 mattim@jyu.fi <<EOF
Tiedostoa files.txt ei löydy.
EOF
mailx -s Demo1 teppot@jyu.fi <<EOF
Tiedostoa t9.cpp ei löydy.
EOF

postita ajettaisiin (siis demossa ei tarvitse ajaa) sitten sopivassa Unix/Linux koneessa. Jos Linuxissa ei ole komentoa mailx voidaan vaikka tehdä alias. Myöskään WWW:stä ei tarvitse osata lukea, vaan riittää osata lukea normaalista tiedostojär­jestelmästä. Jos users.html on hakemistossa demo1 (esim. demo11\demo1), niin henkilön files.txt on alihake­mistossa käyttäjänimi (eli esim. demo11\demo1\vesal\files.txt). Vastaavasti vastaustiedostot ovat suhteessa tähän hakemistoon. Oletetaan että jos käyttäjän tunnus on vesal, niin hä­nen sähköpostiosoitteensa on vesal@… (oikeasti koko postiosoite on käytössä ja se ehkä tuleekin users.html :ään) Vinkki: Käytä "hajota ja hallitse" -tekniikkaa. Teet mm. aliohjelmia joita kutsutaan:

kasitteleKaytaja("vesal",virhetiedosto);
if ( onkoTiedostossa("kavely.txt","Vesa Lappalainen") ) ...

Lisäideoita katso Demon 3: mallivastauksesta LueUsers.java.

Tehtävä G5-7. Äärellinen automaatti 2.

Lue syksyn 2012 pääsykokeen tehtävä 2.

Kirjoita luokat Solmu ja Automaatti joiden avulla pääohjelmassa muodostat b-kohdan automaatin. Anna automaatille syötteeksi merkkijonoja tyyliin "01001" ja testeillä kokeile, että automaattisi palauttaa oikean tuloksen.

Tehtävä G8. Äärellinen automaatti 3.

Jatkoa edelliseen. Tee pääohjelma, jolla kokeilet e-kohdan automaatin toimintaa.