Harjoitus 5 (viikko 48)

Samankaltaiset tiedostot
Harjoitus 2 (viikko 45)

Harjoitus 4 (viikko 47)

Harjoitus 6 (viikko 42)

Harjoitus 1 (viikko 44)

Harjoitus 6. Käytä String-luokasta vain charat- ja length-operaatioita.

Harjoitus 6 (viikko 42)

Harjoitus 5 (viikko 41)

Harjoitus 5 (viikko 41)

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Harjoitus 3 (viikko 39)

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Toinen harjoitustyö. ASCII-grafiikkaa 2017

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Toinen harjoitustyö. ASCII-grafiikkaa

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

5. HelloWorld-ohjelma 5.1

14. Hyvä ohjelmointitapa 14.1

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

13. Hyvä ohjelmointitapa (osa 1) 13.1

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Sisältö. 2. Taulukot. Yleistä. Yleistä

5. HelloWorld-ohjelma 5.1

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

1. Omat operaatiot 1.1

4. Luokan testaus ja käyttö olion kautta 4.1

Sisältö. 22. Taulukot. Yleistä. Yleistä

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Hakemistojen sisällöt säilötään linkitetyille listalle.

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

7. Näytölle tulostaminen 7.1

Ohjelmoinnin perusteet Y Python

15. Ohjelmoinnin tekniikkaa 15.1

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

8. Näppäimistöltä lukeminen 8.1

ITKP102 Ohjelmointi 1 (6 op)

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

8. Näppäimistöltä lukeminen 8.1

15. Ohjelmoinnin tekniikkaa 15.1

12. Näppäimistöltä lukeminen 12.1

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Ohjelmoinnin perusteet Y Python

Java-kielen perusteet

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Ohjelmoinnin perusteet, syksy 2006

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Ohjelmoinnin jatkokurssi, kurssikoe

14. Poikkeukset 14.1

Ohjelmoinnin perusteet Y Python

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

16. Javan omat luokat 16.1

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Harjoitustyö Johdanto Tehtävä

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Ohjelmointi 1 Taulukot ja merkkijonot

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

2. Merkkijono, osamerkkijono ja osamerkkijonon haku

Java-kielen perusteet

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Ohjelmointi 2 / 2010 Välikoe / 26.3

19. Olio-ohjelmointia Javalla 19.1

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Harjoitustyö Johdanto Tehtävä

Harjoitustyö Johdanto

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

14. Poikkeukset 14.1

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Olio-ohjelmointi Javalla

Ohjelmoinnin perusteet Y Python

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

20. Javan omat luokat 20.1

Ohjelmoinnin perusteet Y Python

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

7. Oliot ja viitteet 7.1

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

12. Javan toistorakenteet 12.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Kurssiesite Lausekielinen ohjelmointi II Syksy Jorma Laurikkala Tietojenkäsittelytieteet Informaatiotieteiden yksikkö Tampereen yliopisto

Java-kielen perusteita

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Harjoitustyö: virtuaalikone

17. Javan omat luokat 17.1

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

17. Javan omat luokat 17.1

Transkriptio:

Moni tämän harjoituksen tehtävistä liittyy joko suoraan tai epäsuorasti kurssin toiseen harjoitustyöhön. Harjoitustyö edistyy sitä paremmin, mitä enemmän tehtäviä ratkaiset. 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ä. Palauksen takarajaa on jatkettu. Palauta vastauksesi WETO-järjestelmään viimeistään ensi viikon sunnuntaina 3.12. klo 23.55. 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/harjoitus05/ on annettu Charactersohjelma, joka on toteutettu erittäin huonosti, koska parametreihin ja paluuarvoihin perustuva tiedonvälitys on korvattu attribuuteilla. Attribuutit on tarkoitettu käsitettä mallintavan luokan keskeisimpien tietojen säilömiseen olio-ohjelmoinnissa. Pelkästään tiedonvälitykseen käytettynä attribuuteista on lähinnä haittaa, koska modulaarisuusperiaatetta rikkovat ohjelmat ovat vaikeaselkoisia. Huomaa, että tällä kurssilla ei saa käyttää attribuutteja elleivät ne ole vakiomuotoisia (final-määreellä määriteltyjä). Poista attribuutit ja kirjoita ohjelmasta versio, jossa tiedot välitetään operaatioiden välillä parametreja ja paluuarvoja käyttäen. Älä poista tai lisää operaatioita. Korjatun ohjelman pitää toimia ulkoisesti tulosteita vertaillen samalla tavalla kuin alkuperäinen ohjelma. Esimerkki ohjelman toiminnasta, kun syöte on '': Hello! I eamine characters. Character '': - is not a number, - is a lowercase letter, - is not an uppercase letter and - is a letter. Esimerkki ohjelman toiminnasta, kun syöte on '1': Hello! I eamine characters. 1 Character '1': - is a number, - is not a lowercase letter, - is not an uppercase letter and - is not a letter. Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 1 / 6

2. Kirjoita Javalla Indenter-ohjelma, joka tulostaa komentoriviparametreina saamansa merkkijonot riveittäin siten, että ne on sisennetty välilyönneillä. Sisennyksen syvyys määritellään viimeisenä komentoriviparametrina. Ohjelma tulostaa merkkijonot vain, jos komentoriviparametreja on vähintään kaksi, sisennyksen syvyys voidaan muuntaa kokonaisluvuksi ja sisennyksen syvyys on positiivinen ( 0). Muissa tapauksissa tulostetaan virheilmoitus. Voit kirjoittaa kaiken koodisi main-operaatioon. Muunna sisennyksen koko merkkijonosta kokonaisluvuksi Integer-luokan parseintoperaatiolla, joka heittää NumberFormatEception-poikkeuksen. Käsittele mahdollinen poikkeus try-catch-lauseella. Esimerkki: try {... // Yritetään muuntaa viimeinen komentoriviparametri luvuksi. int syvyys = Integer.parseInt(args[args.length - 1]);... } catch (NumberFormatEception e) {... } Yllä tarkoittaa esimerkistä pois jätettyjä osuuksia. mukaisesti. Huomaa, että rivien loppuun ei tulosteta välilyöntejä ja että kaikki tulostettavat rivit päätetään rivinvaihtoon. Rivien alkuun tulostetaan poikkeuksellisesti välilyöntejä. see you later kun ohjelma ajetaan komennolla: java Indenter see you later 7 kun ohjelma ajetaan komennolla: java Indenter this is a test Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 2 / 6

3. Kirjoita Javalla Array2DFiller-ohjelma, jolla on char[][]-tyyppinen operaatio, jossa luodaan kaksiulotteinen char-tyyppisen alkioiden taulukko ja täytetään se käyttäjän antamilla merkeillä. Yksittäisen rivin merkit luetaan merkkijonona. Voit olettaa, että merkkijono on aina taulukon rivin pituinen. Taulukon rivien ja sarakkeiden lukumäärä välitetään operaatiolle int-tyyppisinä parametreina. Operaatiolla ei ole muita parametreja. Operaatio palauttaa viitteen käyttäjän antamat merkit sisältävään taulukkoon, jos molemmat parametrit ovat nollaa suurempia. Paluuarvo on muussa tapauksessa null. Kopioi 4. harjoituksen 7. tehtävän tulostusoperaatio joko omasta tai malliratkaisusta oman operaation seuraksi tämän tehtävän ohjelmaan. Lue taulukon rivien ja sarakkeiden lukumäärät käyttäjältä main-operaatiossa ja kutsu operaatiotasi antamalla käyttäjän syötteet operaatiosi parametriksi. Sijoita operaation palauttama arvo muuttujaan. Anna paluuarvon sisältämä muuttuja tulostusoperaation parametriksi main-operaatiossa, jos muuttujan arvo ei ole null. Tulosta muussa tapauksessa virheilmoitus. Esimerkki ohjelman toiminnasta, kun syötteet ovat 1, 1 ja "". Operaation osa vuorovaikutuksesta on korostettu: Hello! I am an array filler. 1 1 Esimerkki ohjelman toiminnasta, kun syötteet ovat 2, 3, "abc" ja "def". Operaation osa vuorovaikutuksesta on korostettu: Hello! I am an array filler. 2 3 abc Please, enter row 2: def abc def Esimerkki ohjelman toiminnasta, kun syötteet ovat 0 ja 5: Hello! I am an array filler. 0 5 Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 3 / 6

4. Kirjoita Javalla boolean-tyyppisen operaatio, joka saa parametrina kaksiulotteisen chartyyppisen alkioiden muodostaman taulukon sekä kaksi merkkiä ja korvaa kaikki ensimmäisen merkin esiintymät toisella merkillä. Muita parametreja ei ole. Paluuarvo on true tai false sen mukaan onko taulukkoparametrille varattu muistia vai ei. Huomaa, että oma operaatiosi ei lue tai tulosta mitään; vuorovaikutus käyttäjän kanssa tapahtuu muualla. Lue taulukon rivien ja sarakkeiden lukumäärät käyttäjältä main-operaatiossa ja täytä taulukko 3. tehtävän operaatiolla. Sijoita täyttöoperaation palauttama arvo muuttujaan. Tulosta virheilmoitus, jos taulukon täyttö epäonnistui. Jatka muussa tapauksessa siten, että a) luet käyttäjältä korvattavan ja korvaavan merkin, b) kutsut omaa operaatiotasi antamalla täyttöoperaation paluuarvon sisältämän muuttujan ja merkit oman operaatiosi parametreiksi ja c) tulostat muutetun taulukon näytölle 4. harjoituksen 7. tehtävän operaatiolla. Ohjelman nimi on CharacterReplacer. 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. Esimerkki ohjelman toiminnasta, kun syötteet ovat 2, 3, "o", "oo", '' ja '.': Hello! I am a character replacer. 2 3 o Please, enter row 2: oo Please, enter the first character: Please, enter the second character:..o. o.o Esimerkki ohjelman toiminnasta, kun syötteet ovat 0 ja 5: Hello! I am a character replacer. 0 5 Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 4 / 6

5. Tee Javalla int[]-tyyppinen operaatio, joka laskee montako esiintymää kullakin yksiulotteisessa taulukossa olevalla merkillä (char) on kaksiulotteisessa merkkien (char) taulukossa. Operaatio luo ja palauttaa yksiulotteisen taulukon, joka sisältää laskettavien merkkien lukumäärät (int) samassa järjestyksessä kuin merkit ovat parametrina saadussa yksiulotteisessa merkkien taulukossa. Paluuarvo on null, jos jommallekummalle taulukolle tai molemmille taulukoille ei ole varattu muistia. Jos laskettavat merkit sisältävän taulukon sisältö on esimerkiksi { '', 'o' } ja kaksiulotteisessa taulukossa on yksi -merkin esiintymä ja kolme o-merkin esiintymää, operaatio palauttaa taulukon, jonka sisältö on { 1, 3 }. Lue taulukon rivien ja sarakkeiden lukumäärät käyttäjältä CharacterCounter-ohjelman main-operaatiossa ja täytä taulukko 3. tehtävän operaatiolla. Sijoita täyttöoperaation palauttama arvo muuttujaan. Tulosta virheilmoitus, jos taulukon täyttö epäonnistui. Jatka muussa tapauksessa siten, että a) luet laskettavat merkit käyttäjältä merkkijonona, b) muunnat merkkijonon yksiulotteiseksi merkkien taulukoksi (käytä joko 4. harjoituksen 3. tehtävän operaatiota tai String-luokan tochararray-operaatiota), c) kutsut operaatiotasi antamalla kaksi- ja yksiulotteiset merkkien taulukot operaation parametreiksi, d) sijoitat operaation palauttaman arvon muuttujaan ja e) tulostat muuttujaan liittyvän taulukon luvut näytölle (katso 4. harjoituksen 6. tehtävä). Esimerkki ohjelman toiminnasta, kun syötteet ovat 2, 3, "o", "o.o" ja "o": Hello! I am a character counter. 2 3 :o Please, enter row 2: oo. Please, enter characters to be counted: o { 1 3 } Esimerkki ohjelman toiminnasta, kun syötteet ovat 0 ja 5: Hello! I am a character counter. 0 5 Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 5 / 6

6. Kirjoita Javalla int-tyyppinen operaatio, joka laskee kuinka monta riviä tekstitiedostossa on. Tiedoston nimi (String) annetaan operaatiolle parametrina. Operaation paluuarvo on negatiivinen, jos operaatiossa tapahtuu poikkeus. Huomaa, että oma operaatiosi ei lue tai tulosta mitään; vuorovaikutus käyttäjän kanssa tapahtuu muualla. Välitä tiedoston nimi LineCounter-ohjelmalle komentoriviparametrina. Kutsu operaatiotasi main-operaatiossa antamalla komentoriviparametri operaatiosi parametriarvoksi, jos komentoriviparametreja on yksi kappale. Sijoita operaatiosi palauttama arvo muuttujaan. Kerro tämän muuttujan arvon avulla main-operaatiossa laskennan tulos. Ohjelma tulostaa saman virheilmoituksen, kun komentoriviparametreja on väärä määrä tai omassa operaatiossa tapahtuu virhe. Hello! I count lines. There are 203 lines. kun hakemistossa on In.java-tiedosto ja ohjelma ajetaan komennolla: java LineCounter In.java Hello! I count lines. I could not count. kun ohjelmalle annetaan väärä määrä komentoriviparametreja: java LineCounter Hello! I count lines. I could not count. kun hakemistossa ei ole tiedostoa -files.tt ja ohjelma ajetaan komennolla: java LineCounter -files.tt Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 6 / 6