Nämä ovat kurssin viimeiset harjoitukset. Hyväksytyistä ratkaisuista ja läsnäoloista kerättyjen pisteiden summan tulee olla vähintään 40 % ( pistettä) tehtävien ja läsnäolopisteiden kokonaislukumäärien summasta (45 + 6 = 5). Hyvityspisteiden rajat: 60 % ( pistettä), 70 % (6 pistettä) ja 80 % (4 pistettä). Voit tehdä lisätehtäviä (korkeintaan 8 kpl), jos aiot suorittaa kurssin, mutta pisteesi ovat alle 40 % -rajan tämän harjoituksen jälkeen. Kurssin vastuuopettaja ottaa yhteyttä opiskelijoihin, jotka voivat saavuttaa 40 %:n rajan lisätehtäviä tekemällä. Tentti ja Lausekielinen ohjelmointi II -kurssin ensimmäisen harjoitustyön ohjelmointi sujuvat todennäköisesti paremmin, jos ratkaiset tämän harjoituskerran tehtäviä. Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Vältä liian pitkiä rivejä, käytä yksittäisiä välirivejä erottamaan ohjelman teemoja toisistaan ja erota lauseiden osat toisistaan välilyönneillä. Vakioi muuttujia tarvittaessa. Hyvät ohjelmointitavat on vedetty yhteen luentorungon 4. luvussa. 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. Ensi viikolla pidettävissä mikroharjoituksissa saa apua ongelmakohtiin. Keskiviikon klo 4 - ryhmässä avustetaan hieman enemmän kuin muissa ryhmissä. Palauta vastauksesi WETO-järjestelmään viimeistään ensi viikon torstaina 9.0. klo.00 (keskipäivä). WETO tarkistaa lähdekoodia automaattisesti. Lisätietoja: https://coursepages.uta.fi/tiep/syksy- 07/harjoitukset/ratkaisujen-tarkistus/#automaattinen_tarkistus. 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: https://coursepages.uta.fi/tiep/syksy-07/ohjelmointivalineita/java-jdk/. Ota yhteyttä kurssin vastuuopettajaan, jos Java ei suostu asentumaan koneellesi.. Osoitteessa: http://www.sis.uta.fi/~laki/harjoitukset/harjoitus06/ on annettu sisentämätön TwoUp-ohjelma. Sisennä ohjelma. Kerro kommenteissa mitä sisennystyyliä käytät ja anna viite (esimerkiksi verkko-osoite) dokumenttiin, jossa tyylisi on määritelty, jos käytät sisentämiseen tyyliä, joka poikkeaa selvästi kurssilla opetetusta tyylistä. Ohjelma on englanninkielinen, koska kurssilla on ulkomaalaisia opiskelijoita. Palauta WETOon sisennetty ohjelma TwoUp.java-tiedostossa.. Kirjoita Javalla StringBeginner-ohjelma merkkijonon alun tulostamiseen. Käyttäjältä luetaan merkkijono ja sen alusta tulostettavien merkkien lukumäärä. Ohjelma tulostaa merkkien asemasta virheilmoituksen, jos merkkien lukumäärä on pienempi tai yhtä suuri kuin nolla tai suurempi kuin merkkijonon pituus. Esimerkki ohjelman toiminnasta, kun syötteet ovat "Trying is the first step towards failure." ja : Hello! I print the beginning of a string. Trying is the first step towards failure. Try Lausekielinen ohjelmointi I Syksy 07 Jorma Laurikkala / 6
Esimerkki ohjelman toiminnasta, kun syötteet ovat "Vacuuming sucks." ja 0: Hello! I print the beginning of a string. Vacuuming sucks. 0. Kirjoita Javalla StringStripper-ohjelma, joka lukee käyttäjältä merkkijonon ja kokonaisluvun, joka kertoo montako merkkiä merkkijonon alusta ja lopusta poistetaan. Ohjelma tulostaa typistetyn merkkijonon näytölle. Ohjelma tulostaa virheilmoituksen, jos poistettavien merkkien lukumäärä on pienempi tai yhtä suuri kuin nolla tai jos kahdella kerrottu lukumäärä on yhtä suuri tai suurempi kuin merkkijonon pituus. Jos syötteet ovat esimerkiksi "abc" ja, tulostaa ohjelma näytölle merkkijonon "b", koska alkuperäisen merkkijonon ensimmäinen ja viimeinen merkki poistetaan. Esimerkki ohjelman toiminnasta, kun syötteet ovat "abc" ja : Hello! I strip characters from a string. abc b Esimerkki ohjelman toiminnasta, kun syötteet ovat "abcd" ja : Hello! I strip characters from a string. abcd Esimerkki ohjelman toiminnasta, kun syötteet ovat "abcdef" ja : Hello! I strip characters from a string. abcdef cd Lausekielinen ohjelmointi I Syksy 07 Jorma Laurikkala / 6
4. Tee Javalla CharacterMultiplier-ohjelma, joka lukee käyttäjältä merkkijonon, merkin paikan määrittävän indeksiarvon ja luvun, joka ilmaisee montako kertaa paikassa oleva merkki tulee toistaa uudessa merkkijonossa. Jos syötteet ovat esimerkiksi "Aargh!", 4 ja, niin ohjelma lisää pienen h-kirjaimen perään kolme kappaletta samaa merkkiä, jolloin uusi merkkijono on "Aarghhhh!" Ohjelma tulostaa virheilmoituksen, jos indeksiarvo on virheellinen tai jos merkin kertautumisen ilmaiseva luku on yhtä pienempi. Esimerkki ohjelman toiminnasta, kun syötteet ovat "abc", ja 0: Hello! I multiply characters. abc Please, enter location: Please, enter multiplier: 0 Esimerkki ohjelman toiminnasta, kun syötteet ovat "Java", ja : Hello! I multiply characters. Java Please, enter location: Please, enter multiplier: Jaava Esimerkki ohjelman toiminnasta, kun syötteet ovat "Aargh!", 4 ja : Hello! I multiply characters. Aargh! Please, enter location: 4 Please, enter multiplier: Aarghhhh! Lausekielinen ohjelmointi I Syksy 07 Jorma Laurikkala / 6
5. Tee Javalla AlternationCounter-ohjelma, jossa luetaan merkkijono ja lasketaan montako kertaa merkki vaihtuu toiseksi. Jos merkkijono on esimerkiksi "tintti", on merkin vaihtoja neljä: t i, i n, n t ja t i. Vinkki: käy merkit läpi ensimmäisestä merkistä toiseksi viimeiseen merkkiin saakka ja tutki kunkin merkin kohdalla mikä seuraava merkki on. Esimerkki ohjelman toiminnasta, kun syöte on "abba": Hello! I count character alternations. abba There were alternations. Esimerkki ohjelman toiminnasta, kun syöte on "tintti": Hello! I count character alternations. tintti There were 4 alternations. Esimerkki ohjelman toiminnasta, kun syöte on "aaa": Hello! I count character alternations. aaa There were 0 alternations. 6. Tee Javalla Interrogator-ohjelma, joka esittää käyttäjälle kysymyksen ja hyväksyy vastaukseksi vain jommankumman kahdesta vastauksia vastaavasta merkistä. Käyttäjälle tulostetaan virheilmoitus ja kysymys esitetään uudestaan niin pitkään kuin käyttäjä antaa vastaukseksi jonkin muun kuin ohjelman tunnistaman merkin. Kysymys ja vastauksina käytettävät merkit luetaan käyttäjältä ennen kysymyksen esittämistä. Oletetaan, että käyttäjän vastauksiksi määrittelemät merkit eivät ole samoja. Lausekielinen ohjelmointi I Syksy 07 Jorma Laurikkala 4 / 6
Esimerkki ohjelman toiminnasta, kun syötteet ovat "Are you Sarah Connor?", 'y' ja 'n': Hello! I ask a mandatory question. Please, enter the question: Are you Sarah Connor? Please, enter the first answer: y Please, enter the second answer: n Are you Sarah Connor? N Are you Sarah Connor? n See you soon. Esimerkki ohjelman toiminnasta, kun syötteet ovat "To (b)e or (n)ot to be?", 'b' ja 'n': Hello! I ask a mandatory question. Please, enter the question: To (b)e or (n)ot to be? Please, enter the first answer: b Please, enter the second answer: n To (b)e or (n)ot to be? b See you soon. 7. Tee Javalla SmallestInteger-ohjema, joka päättelee kokonaislukujen jonon pienimmän luvun arvon. Jonon lukujen lukumäärä ja luvut luetaan käyttäjältä. Ohjelma tulostaa pienimmän luvun näytölle. Ohjelma tulostaa virheilmoituksen, jos lukumäärä on nolla tai pienempi. Vinkki: Säilö pienin lukuarvo apumuuttujaan ja päivitä muuttujan arvo aina, kun löydät muuttujan nykyistä arvoa pienemmän luvun. Alusta muuttuja joko jonon ensimmäisellä luvulla tai muuttujan tyypin arvoalueen suurimmalla mahdollisella arvolla. Esimerkiksi int-tyypin suurin mahdollinen arvo on tallennettu Integer.MAX_VALUE-vakioon. Esimerkki ohjelman toiminnasta, kun syötteet ovat, 0, -, : Hello! I determine the smallest integer. Please, enter the number of integers: 0 - The smallest integer is -. Lausekielinen ohjelmointi I Syksy 07 Jorma Laurikkala 5 / 6
Esimerkki ohjelman toiminnasta, kun syötteet ovat 5,,,, 0, 4: Hello! I determine the smallest integer. Please, enter the number of integers: 5 0 4 The smallest integer is 0. Esimerkki ohjelman toiminnasta, kun syöte on 0: Hello! I determine the smallest integer. Please, enter the number of integers: 0 Lausekielinen ohjelmointi I Syksy 07 Jorma Laurikkala 6 / 6