wiki:k2013/demot/demo12
Last modified 4 years ago Last modified on 2013-06-25 11:50:55

Demot » Demo 12, 8.4.2013 - Kesällä ma 29.7.2013

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

Testaaminen

Kaikki "Järkevästi" testattavissa olevat ohjelmat testattava automaattitestillä (JUnit tai ComTest). 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.

Taas vähintään kahteen vastaukseen ComTest- tai Junit -testit.

Tehtävä 0. Mitä ohjelmointi on?

Vastaa kurssin jälkeiseen kyselyyn siitä, mitä MIELESTÄSI ohjelmointi on. Kyselyhän on osa pitkää tutkimusta siitä, miten käsitykset ohjelmoinnista muuttuvat opiskelujen aikana. Suurin osahan vastasi tämän kyselyn 2. osaan jo ennen kurssia (1. osa oli ennen Ohj1-kurssia). Pisteiden saamiseksi NettiDemoWWW:hen kirjoita tiedosto kysely.txt, johon kirjoitat pienen "itsearvioinnin" siitä, mitä opit kurssilla ja mitä olisi voinut tehdä toisin.

Tehtävä 1-2. Valuutat puuksi

Muuta ohjelman (ks. demo 11 vastaukset.) ValuuttaMuunnos.java tietorakenne Valuutat TreeMap-rakenteeksi. Toiminta saa hieman muuttua siltä osin, että valuuttojen nimet pitää kirjoittaa kokonaan. Valuutta-luokka voitaisiin lopuksi poistaa kokonaan jos halutaan. Vinkkejä: Valuutat-luokan kommenteissa oleva "yksikkö" tarkoittaa valuutan nimeä. Muista tarkistaa kumminko päin tiedostossa pitää olla yksikkö ja kerroin. Map rakenteista esimerkki: SanatMapGen.java (ks. koodi) Koodissa luettava tiedosto valuutat.dat on muotoa:

1.0 mk
5.7 $
5.9 EUROA
0.6 SKr

Tehtävä 3. Valuutan poisjättäminen

Toimiiko ValuuttaMuunnos.java (ks. demo 11 vastaukset) siten, että sitä voidaan käyttää seuraavasti ja jos voi niin miksi:

Määrä ja valuutta>10 s[RET]
10.00 Skr on 6.00 mk.
Määrä ja valuutta>2[RET]
2.00 Skr on 1.20 mk.
Määrä ja valuutta>[RET]
Kiitos!

Tehtävä 4-6. Komentorivi

Kirjoita ohjelma joka toimisi seuraavasti (kiinnitä huomiota siihen, että komentovalikoimaa voidaan ohjelmaan lisätä "kohtuullisen" helposti.

Anna komento>Ynnää 3 4 5[RET]
Tulos on 12.
Anna komento>Isoksi kana[RET]
kana isona on KANA
Anna komento>palindromiko saippuakivikauppias[RET]
Sana "saippuakivikauppias" on palindromi!
Anna komento>Ynnää 2 1[RET]
Tulos on 3.
Anna komento>Yn 2 1[RET]
Tulos on 3.
Anna komento>Yh 2 1[RET]
En tunne komentoa YH!
Anna komento>[RET]

Mallivastauksen Java-versioon tuli mm.

  public interface KomentoRajapinta {
    String suorita(String parametrit);
  }


  public static class Ynnaa implements KomentoRajapinta { ...
  public static class Apua implements KomentoRajapinta { ...
  public static class Palindromiko implements KomentoRajapinta { ...
  public static class Isoksi implements KomentoRajapinta { ...


... luokkia Komento ja Komennot (sis. mm. metodin: etsi) ...

  public static void main(String[] args)  {
    Komennot komennot = new Komennot();
    Apua apua = new Apua("komento.txt");

    komennot.add(new Komento("?",apua));
    komennot.add(new Komento("apua",apua));
    komennot.add(new Komento("+",new Ynnaa()));
    komennot.add(new Komento("ynnää",new Ynnaa()));
    komennot.add(new Komento("isoksi",new Isoksi()));
    komennot.add(new Komento("palindromiko",new Palindromiko()));

    String s;

    while ( true ) {
      s = Syotto.kysy("Anna komento");
      if ( s.equals("") ) break;
      String tulos = komennot.tulkitse(s);
      System.out.println(tulos);
    }

  }

Vinkki: Ota uusin Ali.jar. Silloin Help-luokan saa tulostamaan merkkijonoon kun tekee:

        private Help help = null;
        private ByteArrayOutputStream bos = new ByteArrayOutputStream();
...
                help = new Help(tiedosto);
                help.setOut(new PrintStream(bos));
...
       return bos.toString();

Tehtävä 7*. Avustus

Vaikket tekisikään tehtävää 4-6, niin lisää siihen Help.javaa käyttäen avustus. Eli jos et ole tehnyt tehtävää 4-6, niin kirjoita pääohjelma joka ? painamisella tulostaa avustuksen käyttäen Help.javan metodeja. Tutki ali-kirjaston Help.javaa. Kirjoita myös alkeellinen avustustiedosto.

Tehtävä 8. Kellon oikeellisuustarkistus

Kirjoita luokka Kello jossa on metodi tarkista(String jono), joka tarkistaa onko parametrina viety merkkijono oikeata muotoa kellonajaksi. Jos on vikaa, niin funktio palauttaa merkkijonona vian, muuten null-viitteen. Aloita testin tekemisellä.

Tehtävä B1-2 Nimet järjestykseen

Kirjoita ohjelma, joka kyselee nimiä kunnes annetaan tyhjä rivi ja tulostaa tämän jälkeen nimet aakkosjärjestyksessä. Nimet syötetään muodossa "Aku Ankka", mutta siitä huolimatta ne lajitellaan siten, että "Iines Ankka" < "Hannu Hanhi", eli sukunimen mukaan.

Tehtävä B3. Graafinen komentotulkki

Tee tehtävästä 4-7 versio graafiselle käyttöliittymälle.

Tehtävä G1-4 Hevosen hyppely

Hevonenhan voi hypätä shakkilaudalla 2 yhteen suuntaan ja yhden toiseen suuntaan. Tee ohjelma joka etsii hevoselle reitin 5x7 laudalla niin, että hevonen käy tasan yhden kerran jokaisessa ruudussa. Lähtöruutuun ei tarvitse palata. Vinkkejä: Lauta-luokka, jossa on "ruutu" jokaiselle paikalle. "Ruutuun" tallennetaan monesko hyppy tulee tähän ruutuun. 0 on vapaa ruutu. "Siirtovektori" hevosen mahdollisille hypyille, eli esim. taulukko tyyliin:

  public static final int SIIRROT[][] = {
    {-2,-1},
    {-1,-2},
    {1,-2},
    {2,-1},
    ...
  };

Tehtävässä etsitään rekursiivista ratkaisua (backtracking, http://en.wikipedia.org/wiki/Backtracking), mutta ongelmalle on myös heuristinen lineaarinen algoritmi, ks. esimerkiksi Warnsdorff's algorithm.

Tehtävä G5. Piirto

Muuta demo 11:n vastaus SinPiirtoGraphics.java JFrame-luokaksi, johon lisää piirtoikkunaksi SpacePanelin ja annat sen nimeksi ikkuna. Lisää frameen ikkuna-paneelin lisäksi paikat johon tulosta kursorin paikasta x, f(x) ja f'(x) sekä 4. asteen polynomin kertoimet. Polynomin kertoimien vaihtaminen muuttuu vastaavasti kuvaa. Malliohjelmaa voit kokeilla Piirto.jar.

https://svn.cc.jyu.fi/srv/svn/ohj2/esimerkit/k2013/demot/tehtavat/piirto.jpg

Tehtävä K1-2 Turhien olioden luomisen poistaminen

Alla pieni pala vanhasta Korpista. Poista turhat olion luonnit. Liittyykö mitenkään varauksiin?

/**
 * Method that is needed when getting reservationids from tables,
 * compressed values (etc. 1,2,3) are separated to different rows in
 * String array
 * @param arrayWithCommaValues array that has ids separated with commas
 * in one row
 * @return String array in which comma separated values are separated
 */
public static String[] getSeparatedArray(String[] arrayWithCommaValues) {
  List resList = new ArrayList();
  String[] reservations2 = new String[0];
  if (arrayWithCommaValues != null) {
    for (int i = 0; i < arrayWithCommaValues.length; i++) {
      String[] tmpReservations = arrayWithCommaValues[i].split(",");
      if (tmpReservations != null) {
        for (int j = 0; j < tmpReservations.length; j++) {
          resList.add(tmpReservations[j]);
        }
      }
    }
    reservations2 = new String[resList.size()];
    for (int i = 0; i < resList.size(); i++) {
      reservations2[i] = (String) resList.get(i);
    }
  }
  return reservations2;
}

GURU -tehtävät

Guruillekin suosittelen tuota 4-7 tehtävää.

Kurssin loppuosa ja jatko

Tämä demo (12) on viimeinen kurssin 8 op:n Java-osuutta koskeva demo. Loput demot (C1 ja C2) ovat 1 op:n C++ "kurssissa" (TIEP112). Lisäksi WWW-osuus (JSP - Java Server Pages) on 1 op:n TIEP113 kurssissa.

Vaiheessa 6 pitää olla tiedostojen lukeminen ja kirjoittaminen sekä luokkien välinen "yhteistyö" käyttöliittymäluokan puolella (esim. osaa tulostaa yhden jäsenen kaikki harrastukset).

Vaiheessa 7. täytyy olla valmiina ainakin (sovittava ohjaajan kanssa henkilökohtaisesti)

  • tiedon lukeminen käyttäjän syötteistä ("lomakkeet") (joillakin oikeellisuustarkistuksilla)
  • jokin etsiminen tai vastaava (esim. valikoiva listaus/tulostus) jossa koko tietorakenne täytyy käydä valikoiden läpi
  • jokin oma (selvästi itse tehty) toiminto malliohjelmaan nähden.
  • KOMMENTIT ainakin jokaisen tiedoston alussa ja kunkin metodin alussa JavaDocin mukaisesti. Laittakaa muuten kunkin tiedoston alkukommentteihin myös tekijöiden email, jos pitää olla yhteydessä.
  • käännöksessä ei saa tulla yhtään virhettä eikä varoitusta
  • tiedostojen alkukommenteissa on lueteltava ne asiat, jotka kustakin tiedostosta on tekemättä. Sen tiedoston alussa, jossa on pääohjelmakin (mallissa esim. KerhoGUI tai KerhoSwing), on kerrottava mitkä ohjelman osat eivät toimi