Nämä ovat kurssin viimeiset harjoitukset. Hyväksytyistä ratkaisuista ja läsnäoloista kerättyjen pisteiden summan tulee olla vähintään 4 % (2 pistettä) tehtävien ja läsnäolopisteiden kokonaislukumäärien summasta (45 + 6 = 5). Hyvityspisteiden rajat: 6 % ( pistettä), 7 % (6 pistettä) ja 8 % (4 pistettä). Voit tehdä lisätehtäviä (korkeintaan 8 kpl), jos aiot suorittaa kurssin, mutta pisteesi ovat alle 4 % -rajan tämän harjoituksen jälkeen. Kurssin vastuuopettaja ottaa yhteyttä opiskelijoihin, jotka voivat saavuttaa 4 %: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. Ohjelmointitehtävien osalta palautetaan vain ratkaisun lähdekoodi (java-päätteinen tiedosto) kurssin kotisivuilta Koodit-kohdasta löytyvää In-luokkaa ei tarvitse eikä tule palauttaa. Ensi viikolla pidettävissä mikroharjoituksissa saa apua ongelmakohtiin. Keskiviikon klo 2 4 - ryhmässä avustetaan hieman enemmän kuin muissa ryhmissä. Palauta vastauksesi WETO-järjestelmään (https://wetodev.sis.uta.fi/) viimeistään ensi viikon perjantaina 9.. klo 2. (keskipäivä). WETO tarkistaa kaikki tämän harjoituskerran tehtävät automaattisesti. 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. Lisätietoja tarkistuksesta: https://coursepages.uta.fi/tiep/syksy-28/harjoitukset/ratkaisujen-tarkistus/automaattinen/. Ota yhteyttä harjoitusryhmäsi vetäjään, jos et keksi järjellisessä ajassa miksi WETO hylkää palautuksesi.. Osoitteessa: https://coursepages.uta.fi/tiep/syksy-28/harjoitukset/tehtavat/ 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ä. Palauta WETOon sisennetty ohjelma TwoUp.java-tiedostossa. Huomaa, että WETOn hyväksymä palautus ei ole välttämättä sisennetty oikein, koska WETO testaa vain, että uudelleen muotoiltu ja alkuperäinen ohjelma vaikuttavat toimivan samalla tavalla. Esimerkki alkuperäisen ohjelman toiminnasta: Hello! I shall gamble on your behalf. Please enter the number of turns (>): - Please enter the number of turns (>): Please enter the number of turns (>): - Turn --- New toss. Loss! - Turn 2 --- Loss! - Turn --- New toss. Win! There were wins and 2 losses. Lausekielinen ohjelmointi I Syksy 28 Jorma Laurikkala / 6
2. Kirjoita Javalla StringBeginner-ohjelma merkkijonon alun tulostamiseen. Käyttäjältä luetaan merkkijono (String) 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. Please, enter the number of characters: Try Esimerkki ohjelman toiminnasta, kun syötteet ovat "Vacuuming sucks." ja : Hello! I print the beginning of a string. Vacuuming sucks. Please, enter the number of characters:. Kirjoita Javalla EndsChopper-ohjelma, joka lukee käyttäjältä merkkijonon (String) ja poistaa siitä käyttäjän valinnan mukaan joko ensimmäisen tai viimeisen merkin. Merkkijonosta poistetaan sen ainoa merkki, jos merkkijonon pituus on yksi. Ohjelma tulostaa typistetyn merkkijonon näytölle lainausmerkkien välissä, jos käyttäjä valitsi poistettavan merkin pienellä f- tai l-kirjaimella. Muussa tapauksessa tulostetaan virheviesti "". Voit välttää kaksi sisällöltään lähes samaa silmukkaa esimerkiksi a) esittelemällä muuttujat laskurin alkuarvolle ja laskuria rajoittavalle arvolle ennen silmukkaa ja päättelemällä arvot muuttujille tai b) käyttämällä valintarakennetta silmukan sisässä. Voit tulostaa lainausmerkit tuloksen ympärille esimerkiksi näin: System.out.println("The chopped string is \"" + jaannos + "\"."); Esimerkki ohjelman toiminnasta, kun syötteet ovat "hei" ja 'f': hei f The chopped string is "ei". Lausekielinen ohjelmointi I Syksy 28 Jorma Laurikkala 2 / 6
Esimerkki ohjelman toiminnasta, kun syötteet ovat "hei" ja 'l': hei l The chopped string is "he". Esimerkki ohjelman toiminnasta, kun syötteet ovat "x" ja 'f': x f The chopped string is "". Esimerkki ohjelman toiminnasta, kun syötteet ovat "x" ja 'l': x l The chopped string is "". Esimerkki ohjelman toiminnasta, kun syötteet ovat " Saved by the bell!" ja 'F': Saved by the bell! F 4. Tee Javalla CharacterMultiplier-ohjelma, joka lukee käyttäjältä merkkijonon (String), 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 : Hello! I multiply characters. abc Please, enter location: Please, enter multiplier: Lausekielinen ohjelmointi I Syksy 28 Jorma Laurikkala / 6
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! 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. Vaihtoja ei ole, jos merkkijonossa on vain yksi merkki. Vinkki: Käy merkit läpi ensimmäisestä (viimeisestä) merkistä toiseksi viimeiseen (toiseen) merkkiin saakka ja tutki kunkin merkin kohdalla mikä seuraava (edeltävä) merkki on. Esimerkki ohjelman toiminnasta, kun syöte on "abba": abba There were 2 alternations. Esimerkki ohjelman toiminnasta, kun syöte on "tintti": tintti There were 4 alternations. Esimerkki ohjelman toiminnasta, kun syöte on "aaa": aaa There were alternations. Lausekielinen ohjelmointi I Syksy 28 Jorma Laurikkala 4 / 6
Esimerkki ohjelman toiminnasta, kun syöte on "aaa": a There were 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. Tämä tehtävä tarkistetaan 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, jotka on vedetty yhteen kurssin luentomateriaalin 4. luvussa. 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. 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. Lausekielinen ohjelmointi I Syksy 28 Jorma Laurikkala 5 / 6
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,, -2, 2: Hello! I determine the smallest integer. Please, enter the number of integers: -2 2 The smallest integer is -2. Esimerkki ohjelman toiminnasta, kun syötteet ovat 5, 2,,,, 4: Hello! I determine the smallest integer. Please, enter the number of integers: 5 2 4 The smallest integer is. Esimerkki ohjelman toiminnasta, kun syöte on : Hello! I determine the smallest integer. Please, enter the number of integers: Lausekielinen ohjelmointi I Syksy 28 Jorma Laurikkala 6 / 6