wiki:s2014/htcsEiPeli
Last modified 3 years ago Last modified on 2014-10-14 12:27:14

Ohj1-harjoitustyö C#, ei peli

Jos et halua tehdä harjoitustyönä peliä, lue tämä.

Katso ennen palautusta ettei työssäsi ole Yleisiä ht:n virheitä

1. Harjoitustyö

1.1 Vaatimukset

  • taulukko/taulukoita/listoja
  • ainakin 2-aliohjelmaa
  • taulukkoja pitää vipeltää läpi
  • jotakin tulostaa (tai piirtää grafiikkaa)
  • kommentoitu JavaDocin mukaisesti
  • aliohjelmien dokumenteissa kuvataan sitä, mitä aliohjelmat tekevät, ensisijaisesti ei sitä miten
  • luokkien nimet aina isolla kirjaimella ja muutenkin järkevästi nimetty, mm. Harkka.java ei ole hyvä nimi
  • aliohjelmilla ja muuttujilla kuvaavat nimet
  • ohjelmassa ei saa olla AINUTTAKAAN globaalia muuttujaa (C#/Javassa: private/public static tyyppi muuttujanNimi;)
  • saa käyttää globaaleja vakioita (Javassa private/public static final tyyppi VAKIONNIMI;)

1.2 Palauttaminen

  • Harjoitustyö palautetaan versionhallintaan ja esitellään vaiheittain ohjaajille kuten pelienkin tapauksessa.
  • Harjoitustyön "päätiedosto" laitetaan myös NettiDemoWWW:hen ht-nimen alle.
  • Palautettaessa pitää muistaa painaa nappia: "Päivitä index.html".
  • Katso että linkistä index.html tulee "kaunis" näkymä harjoitustyöhäsi
  • Java-tiedostot pitää palauttaa AINA .java -tiedostoina
  • .exe, .class tiedostoja ei tarvita.
  • JAVA: jos käytät jotakin muita .jar-tiedostoja kuin ohj1.jar (tai Ali.jar, Graphics.jar, Music.jar jotka ovat kaikki ohj1.jar:in sisällä) , niin palauta nekin
  • jos työsi käyttää jotakin data-tiedostoja, niin palauta nekin
  • Nettiin laittamisen jälkeen näytä työtäsi ohjaajalle pääteohjauksissa tai varaa erikseen palautusaika
  • ohjaajille EI SAA lähettää liitteitä, ainoastaan se linkki, jolla päästään palauttajan demo15-hakemistoon.
  • selostetaan henkilökohtaisesti ohjaajalle, jotta ohjaaja varmistuu tekijän/tekijöiden tehneen työn henkilökohtaisesti.

2. Harjoitustyöaiheita

Harjoitustyöaiheen voi keksiä itse ja hyväksyttää sen ohjaajalla; alla kuitenkin muutamia vaatimukset täyttäviä esimerkki-ideoita.

2.1. Lämpötilamittausdatan tarkastelua

Vuoden jokaisen kuukauden keskilämpötilan ja lämpötilan keskihajonnan laskeminen ja arvojen piirto kuvaajaan, kun data annetaan tiedostona jossa joka rivillä on päivän lämpötila. Tämä tosin vaatisi tiedoston lukemista, mutta sen ei pitäisi olla liian vaikeaa, jos käyttää apuna Ali.jar:ia ja osaa kaivaa tiedon miten BufferedReader toimii Javan dokumentaatiosta. Datana voi käyttää esimerkiksi tiedostoa data.txt.

2.2. Palindromitarkastaja

Ohjelma tarkistaa onko parametrina annettettu merkkijono/taulukollinen merkkijonoja palindromi vai ei ja tulostaa tuloksen esim. muodossa "Merkkijono xyz on/ei ole palindromi." Yksi aliohjelma merkkijonon tarkistamiseen, toinen taulukon tarkistamiseen (luuppaa taulukon yli ja kutsuu aliohjelman merkkijonoversiota). Kirjainten kokoja ei huomioida tarkistuksessa. Ohjelma saa syötteensä komentoriviparametreinä, tarkistettavia sanoja voidaan antaa kerralla useita. Jos merkkijonon halutaan sisältävän välilyöntejä, on se annettava lainausmerkeissä". Esimerkki ohjelman kutsusta komentorivi-ikkunasta:

java Palindromitarkastaja Otto auto saippuakauppias "Innostunut sonni"  // on, ei, on, on palindromi

Tulokset tulostetaan komentorivi-ikkunaan. Edellä mainitun lisäksi ohjelma osaa seuraavan:

java Palindromitarkastaja -t tiedostonimi.txt

eli jos ensimmäinen komentoriviparametri on -t niin luetaan tiedoston tiedostonimi.txt sisältö riveittäin taulukoksi (Ali.jar:n lueTiedosto("tiedostonimi.txt")) ja tarkistetaan näin saadun taulukon jokaisessa solussa olevan merkkijonon "palindromisuus". Tulokset tulostetaan komentorivi-ikkunaan ja tämän lisäksi luodaan toinen tiedosto nimeltä tiedostonimi.tarkistus.txt, johon tallennetaan vastaavat tulokset kuin komentoriviin tulostettiin. Huomaa, että et saa olettaa, että tiedoston pääte on aina .txt.

2.3. Keilaajan päiväkirja

Ohjelma pitää yllä keilasarjojen tuloksia tiedostossa josta ne luetaan taulukkoon. Ohjelma tulostaa sarjojen määrän, keskiarvon, sekä parhaan ja huonoimman sarjan. Tuloksista piirretään graafi taulukkoon jossa on korostettuna paras tulos sekä vaakaviivalla tulosten keskiarvo.

2.4. Oma puhelinmuistio

Tänä päivänä tarpeeton kännyköiden puhelinmuistioiden myötä, mutta ennen vanhaan... Taulukosta löytyy etunimi, sukunimi sekä puhelinnumero josta näitä voidaan hakea nimen perusteella (etunimi tai sukunimi tai molemmat) jolloin nimi ja numero tulostetaan käyttäjälle. Haun tulisi löytää kontakti pelkästään nimien ensimmäisten kirjainten perusteella. Tiedot säilytetään tiedostossa josta ne luetaan taulukkoon.

2.5. Sanojen järjestelyä

Ohjelma lukee parametrina käyttäjän syöttämän listan sanoja ja järjestää ne käyttäjän valinnan mukaan joko pituuden tai aakkosjärjestyksen mukaan tulostusta varten. Ohjelma myös laskee montako merkkiä sanoissa oli yhteensä ja mikä oli yleisin merkki. Tulostuksen tulee olla omassa funktiossaan.

2.6. Kirjainfrekvenssianalysaattori

Tehtävä

Tehtävänäsi on laskea komentoriviltä parametrina annetun tekstimuotoisen tiedoston sisältämien kirjainten frekvenssit ja tulostaa kirjaimet ja frekvenssit (komentorivi-ikkunaan) laskevassa järjestyksessä alla esitetyllä tavalla. Isot ja pienet kirjaimet mielletään samoiksi merkeiksi.

KIRJAINFREKVENSSI%-OSUUS
kirjain1123412,02
kirjain27897,69
kirjain35455,30
.........
.........

Taulukon viivoja ei tarvitse tulostaa, riittää että sisältö on sarakkeittain (System.out.printf(...) auttaa).

Taustaa

Caesarin aikaan käytettiin arkaluonteisen tiedon suojaamiseen yksinkertaista siirtosalausta (Caesar cipher tai Caesar shift). Salauksen idea on hyvin yksinkertainen, esim. sana aamutyö salattuna Caesar-1-siirrolla olisi: bbnvuza, ts. jokaista kirjainta siirretään aakkostossa n askelta (tässä 1 askel) eteenpäin (ja mikäli mennään aakkoston lopusta "yli" aloitetaan aakkoston alusta). Välilyönnit pidetään paikallaan tai voidaan purkamisen vaikeuttamiseksi poistaa kokonaan. Salauksen voisi tässä tapauksessa tietysti purkaa kokeilemalla eri siirron suuruuksia, mutta: jokaisessa kielessä on tietty kirjain esiintyy tietyllä todennäköisyydellä, esim. suomenkielessä kirjain a on kaikista yleisin. Laskemalla salatun tekstin kirjainten suhteellinen osuus, saadaan tällainen Caesar-salaus yleensä purettua. Katso lisätietoja Wikipedia: Breaking the Caesar cipher. Tehtävässä luotavan frekvenssianalysaattorin voisi siis käytännössä jatkaa (suomenkielistä tai muun halutun kielistä), Caesar-siirrolla salattua tekstiä murtavaksi ohjelmaksi.

2.7. Salausohjelma

Tee ohjelma, joka salaa Vigenèren menetelmällä annetun tiedoston sisällön ja tallentaa sen tiedostoon salattu.txt. Ohjelman tulisi toimia komentoriviltä seuraavasti:

Java:

java Salaaja.java -t luettavatiedosto.txt -a avain

C#

Salaaja -t luettavatiedosto.txt -a avain

Tee salauksen lisäksi aliohjelma, joka purkaa salauksen ja tallentaa puretun tekstin tiedostoon purettu.txt. Lisätietoja salauksesta löytyy Wikipedian sivulta Vigenère cipher .

2.8. Datasta histogrammi

Tee ohjelma, joka lukee tiedostosta lukuja ja piirtää annetuista luvuista histogrammin. Histogrammin piirtävää aliohjelmalle tulisi voida halutessaan antaa parametrina lukujen piirtovälin ja pylväiden lukumäärän.

2.9. Yksinkertainen Twitter-asiakasohjelma

Tee komentoriviltä käytettävä, yksinkertainen Twitter-asiakasohjelma, jonka avulla voi esimerkiksi päivittää oman statuksen ja lukea ystävien timelineä. Ohjelman toteutuksessa kannattaa ehdottomasti hyödyntää jotain valmista kirjastoa, esimerkiksi Twitter4J:tä, jonka avulla Twitterin käyttö Javalla on helppoa. Twitter4J-kirjasto lisätään Eclipsen projektiin tai komentoriviltä ohjelmaa ajettaessa CLASSPATHiin samalla tavalla kuin kurssilla käytetyt Ali- ja Graphics-kirjastot. Salasanan voi lukea käyttäjältä tietoturvallisesti käyttäen Console-luokkaa (esimerkki salasanan lukemisesta dokumentaation alussa). Huomaa, että Console-luokka ei toimi oikein Eclipsen Console-ikkunassa (System.console() palauttaa aina null), vaan ohjelmaa on aina ajettava komentoriviltä!

3. Tiedoston lukeminen

  • jos harjoitustyössä tarvitaan tiedoston lukemista tai kirjoittamista, onnistuu se helpoiten
  • tiedoston on oltava "oletushakemistossa". Jos ohjelma käynnistetään komentoriviltä Java-komennolla, niin hakemisto jossa komento annetaan, on oletushakemisto. Jos Eclipse käynnistetään komentoriviltä, niin tämä käynnistyshakemiston on silloin oletushakemisto. Tai sitten oletushakemiston voi Eclipsessä vaihtaa jos ohjelma on kerran ajettu:
    Run Configurations/OhjelmanNimi/Arguments/Working directory:/Other
    

4. Tulostaminen

  • koska aliohjelmien olisi syytä tehdä vain omat tehtävänsä, eivät aliohjelmat saa tulostaa, ellei niiden nimessä ole "tulosta".
  • pääohjelma saa tulostaa