Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista lisätä static-määre operaatioidesi otsikoihin, jotta ohjelmasi kääntyvät. Muista noudattaa hyvän ohjelmointitavan perusteita (Lausekielinen ohjelmointi I -kurssin luentomateriaalin 14. luku) ja uusia hyviä tapoja, joihin kuuluu operaation otsikkoon liittyvä yleisluonteinen kommentti operaation tarkoituksesta sekä operaation mahdollisesti saamista ja palauttamista tiedoista. WETOon (https://wetodev.sis.uta.fi/weto5/) palautetaan vain ratkaisun lähdekoodi eli java-päätteinen tiedosto. In-luokkaa (katso alla) ei tarvitse eikä tule palauttaa. Lisätietoja ratkaisujen palautuksesta ja tarkistuksesta on annettu kurssisivujen Harjoitukset -kohdassa. Ensi viikolla pidettävissä mikroharjoituksissa saa apua ongelmakohtiin. Keskiviikon klo 12 14 - ryhmässä avustetaan hieman enemmän kuin muissa ryhmissä. Palauta vastauksesi WETO-järjestelmään viimeistään ensi viikon torstaina 9.11. klo 12.00 (keskipäivä). Syötteiden lukemiseen tarvittava In-luokka löytyy kurssin kotisivuilta Koodit-kohdasta. Java-kääntäjä ja -tulkki löytyvät yliopiston mikroluokkien koneilta. Nämä ohjelmat voi asentaa myös omalle koneelle. Lisätietoja osoitteesta: http://www.uta.fi/sis/tie/laki1/ohjelmointivalineita/java_jdk.html. Ota yhteyttä kurssin vastuuopettajaan, jos Java ei suostu asentumaan koneellesi. 1. Osoitteessa http://www.sis.uta.fi/~laki2/harjoitukset/harjoitus02/ on annettu Diceohjelma. Ohjelman yrittää heittää kuusisivuista noppaa tasan yhden kerran. Ohjelma kuitenkin innostuu pelistä ja heittelee noppaa, kunnes resurssit loppuvat. Kerro kommenteissa miksi. Älä muuta main-operaatiota millään tavalla, koska ongelma piilee muualla. Palauta WETOon toimivaksi korjattu Dice-ohjelma. Esimerkki ohjelman oikeellisesta toiminnasta: Hello! I roll a dice once. Rolled: 2. Toinen esimerkki ohjelman oikeellisesta toiminnasta: Hello! I roll a dice once. Rolled: 5. 2. Kirjoita Javalla String-tyyppinen operaatio, joka palauttaa kymmenestä miinusmerkistä koostuvan merkkijonon. Kutsu kirjoittamaasi operaatiota main-operaatiosta. Tulosta main-operaatiossa näytölle tervehdys ja operaation paluuarvo alla annetun esimerkin mukaisesti. Merkkijonon palauttavassa ohjelmassa ei tulosteta näytölle mitään. Ainoa ohjelman toiminnasta: Hello! I print a separating line. ---------- 3. Muokkaa 1. harjoituksen 4. tehtävässä tehtyä operaatiota siten, että operaatio palauttaa String-tyyppisenä paluuarvona kuukauden järjestyslukua vastaavan kuukauden nimen. Lue järjestysnumero käyttäjältä main-operaatiossa ja kutsu operaatiotasi antaen käyttäjän syöte operaation parametrin arvoksi. Sijoita operaation palauttama arvo muuttujaan ja tulosta muuttujan arvo näytölle kuten esimerkeissä. Huomaa, että oma operaatiosi ei lue tai tulosta mitään, vaan kaikki vuorovaikutus tapahtuu main-operaatiossa. Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 1 / 5
Anna ohjelman nimeksi Month. Hello! I verbalise your input. Please, enter a number: 1 It is January. Hello! I verbalise your input. Please, enter a number: 3 It is March. 4. Muokkaa 1. harjoituksen 6. tehtävässä tehtyä operaatiota siten, että operaatio palauttaa int-tyyppisen arvon, joka ilmaisee merkkijonojen keskinäisten pituuksien suhteen. Paluuarvo on -1, kun ensimmäinen merkkijono on toista lyhempi, 0, kun merkkijonot ovat samanmittaiset ja 1, kun ensimmäinen jono on toista pitempi. Lue syötteet käyttäjältä main-operaatiossa ja kutsu operaatiotasi antaen käyttäjän syötteet operaation parametrien arvoiksi. Sijoita operaation palauttama arvo muuttujaan ja esitä tulos näytöllä muuttujan arvon mukaisesti. Varmista, että oma operaatiosi ei lue tai tulosta mitään, vaan kaikki vuorovaikutus tapahtuu main-operaatiossa. Anna ohjelman nimeksi StringLengthComparator. Esimerkki ohjelman toiminnasta, kun syötteet ovat "summer" ja "you think": summer you think "summer" is shorter than "you think". Esimerkki ohjelman toiminnasta, kun syötteet ovat "pain" ja "life": pain life "pain" is as long as "life". Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 2 / 5
Esimerkki ohjelman toiminnasta, kun syötteet ovat "metre" ja "yard": metre yard "metre" is longer than "yard". 5. Oheisessa taulukossa on annettu XNOR-operaattorin (poissulkeva ei-tai) totuustaulu. Tee Javalla boolean-tyyppinen operaatio, joka saa parametrinaan kaksi boolean-tyyppistä arvoa ja palauttaa totuustaulun mukaisen tuloksen. A B A B true true true true true true Lue totuusarvot käyttäjältä main-operaatiossa ja kutsu operaatiotasi antaen käyttäjän syötteet operaation parametrien arvoksi. Sijoita operaation palauttama arvo muuttujaan ja tulosta muuttujan arvo esimerkkien mukaisesti näytölle. Oma operaatiosi ei lue tai tulosta mitään, vaan kaikki vuorovaikutus tapahtuu main-operaatiossa. Voit muuntaa merkkijonona luetun totuusarvon ("true" tai "") totuusarvoksi Booleanluokan parseboolean-operaatiolla. Esimerkki: boolean totuus1 = Boolean.parseBoolean(syote1); Esimerkki ohjelman toiminnasta, kun syötteet ovat "" ja "": Hello! I am XNOR. Please, enter the first truth value: Please, enter the second truth value: The result is true. Esimerkki ohjelman toiminnasta, kun syötteet ovat "" ja "true": Hello! I am XNOR. Please, enter the first truth value: Please, enter the second truth value: true The result is. Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 3 / 5
6. Tee Javalla boolean-tyyppinen operaatio, joka tarkistaa kellonajan, jossa tunnit ovat välillä 0 23, minuutit välillä 0 ja sekunnit välillä 0. Operaatiolla on kolme parametria: tunnit, minuutit ja sekunnit välitetään operaatiolle int-tyyppisinä parametreina. Paluuarvo on true, jos kellonaika on laillinen. Lue tunnit, minuutit ja sekunnit käyttäjältä main-operaatiossa. Kutsu operaatiota mainoperaatiosta ja anna syötteet operaatiosi parametrien arvoiksi kutsussa. Sijoita operaation palauttama arvo muuttujaan. Tulosta päättelyn tulos näytölle muuttujan arvon avulla main-operaatiossa. Oma operaatiosi ei lue tai tulosta mitään, vaan kaikki vuorovaikutus tapahtuu main-operaatiossa. Ohjelman nimi on TimeInspector. Hello! I inspect a 24-hour time. Please, enter hours: 23 Please, enter minutes: Please, enter seconds: 60 Time is invalid. Toinen esimerkki ohjelman toiminnasta: Hello! I inspect a 24-hour time. Please, enter hours: 23 Please, enter minutes: Please, enter seconds: Time is valid. 7. Kirjoita Javalla String-tyyppinen operaatio, joka muodostaa parametrinaan samastaan merkkijonosta (String) uuden merkkijonon, jossa alkuperäinen merkkijono toistuu siten, että toistot on erotettu toisistaan pilkulla ja yhdellä välilyönnillä. Myös toistojen lukumäärä (int) välitetään operaatiolle parametrina. Operaatio palauttaa tyhjän merkkijonon "", jos toistojen lukumäärä on kahta pienempi. Lue toistettava merkkijono ja toistojen lukumäärä käyttäjältä main-operaatiossa. Kutsu operaatiota main-operaatiosta ja anna syötteet operaatiosi parametrien arvoiksi kutsussa. Sijoita operaation palauttama arvo muuttujaan. Tulosta main-operaatiossa näytölle muuttujan arvon mukaan avulla joko muuttujan arvo tai virheilmoitus. Huomaa, että oma operaatiosi ei lue tai tulosta mitään, vaan kaikki vuorovaikutus tapahtuu main-operaatiossa. Ohjelman nimi on Replicator. Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 4 / 5
Tämä tehtävä tarkistetaan automaattisesti toiminnallisuuden osalta ja lisäksi opettajan toimesta hyvän ohjelmointitavan osalta. Näin esimerkiksi huono sisennys tai puutteellinen kommentointi voi tuottaa nollan, vaikka ohjelma läpäisee WETOn testit. Muista noudattaa hyvän ohjelmointitavan perusteita (Lausekielinen ohjelmointi I -kurssin luentomateriaalin 14. luku) ja uusia hyviä tapoja, joihin kuuluu operaation otsikkoon liittyvä yleisluonteinen kommentti operaation tarkoituksesta sekä operaation mahdollisesti saamista ja palauttamista tiedoista. Varmista, että ohjelmasi toimii esimerkkien mukaisesti. Huomaa, että rivien alkuun tai loppuun ei tulosteta välilyöntejä ja että kaikki tulostettavat rivit viimeinen rivi mukaan lukien päätetään rivinvaihtoon. Esimerkki ohjelman toiminnasta, kun syötteet ovat "na" ja 6: Hello! I replicate strings. Please, enter a string: na Please, enter the number of replications: 6 na, na, na, na, na, na Esimerkki ohjelman toiminnasta, kun syötteet ovat "" ja "true": Hello! I replicate strings. Please, enter a string: ni Please, enter the number of replications: 1 Error! Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 5 / 5