Harjoitustyö Johdanto Tehtävä

Samankaltaiset tiedostot
Toinen harjoitustyö. ASCII-grafiikkaa 2017

Harjoitustyö Johdanto Tehtävä

Toinen harjoitustyö. ASCII-grafiikkaa

2. Merkkijono, osamerkkijono ja osamerkkijonon haku

Harjoitustyö Johdanto

Harjoitustyö Johdanto

Harjoitustyö Johdanto. 2. Euroseteli

Harjoitus 5 (viikko 41)

Harjoitus 5 (viikko 48)

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Harjoitus 2 (viikko 45)

Harjoitus 4 (viikko 47)

Harjoitustyö Johdanto Tehtävä

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

Harjoitus 6 (viikko 42)

Harjoitus 5 (viikko 41)

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Harjoitus 6 (viikko 42)

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

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

13. Hyvä ohjelmointitapa (osa 1) 13.1

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

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.

5. HelloWorld-ohjelma 5.1

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

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

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

Harjoitus 3 (viikko 39)

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

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

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

XX (1, 4) (1, 5) (2, 4) (2, 5)

5. HelloWorld-ohjelma 5.1

ITKP102 Ohjelmointi 1 (6 op)

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

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

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

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet Kevät Olio-ohjelmoinnin perusteet (5 op) Tavoitteena

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

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

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

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

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet Kevät Olio-ohjelmoinnin perusteet (TIEA2.1)

Kurssiesite Olio-ohjelmoinnin perusteet Kevät Jorma Laurikkala Tietojenkäsittelytieteet Luonnontieteiden tiedekunta Tampereen yliopisto

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

Harjoitus 1 (viikko 44)

ITKP102 Ohjelmointi 1 (6 op)

Kurssiesite Olio-ohjelmoinnin perusteet (TIEA2.1) Kevät 2018

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

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet (TIEA2.1) Kevät Olio-ohjelmoinnin perusteet (eli Oope) Laajuus

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

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tentti kestää kolme tuntia.

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

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tentti kestää kolme tuntia. Tehdään sähköisesti mikroluokkien Windows-koneilla.

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

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

Kurssiesite Olio-ohjelmoinnin perusteet Kevät Jorma Laurikkala Tietojenkäsittelytieteet Informaatiotieteiden yksikkö Tampereen yliopisto

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1

Ohjelmoinnin perusteet Y Python

Pedanet oppilaan ohje Aleksanteri Kenan koulu Eija Arvola

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

1. Omat operaatiot 1.1

Vastuuopettaja. Kurssiesite Lausekielinen ohjelmointi Syksy Tavoitteet ja keinot. Lausekielinen ohjelmointi (10 op)

ITKP102 Ohjelmointi 1 (6 op)

Kurssiesite Lausekielinen ohjelmointi I Kesä Jorma Laurikkala Tietojenkäsittelytieteet Luonnontieteiden tiedekunta Tampereen yliopisto

Taulukot. Jukka Harju, Jukka Juslin

Jypelin käyttöohjeet» Ruutukentän luominen

Ohjeita. Datan lukeminen

Harjoitustyö. 1. Johdanto Tehtävä

ASENNUS- JA KÄYTTÖOHJE

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Harjoitustyö: virtuaalikone

Mainoksen taittaminen Wordilla

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

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

Java-kielen perusteita

Datatähti 2000: alkukilpailun ohjelmointitehtävä

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Ohjelmointi 1 Taulukot ja merkkijonot

ITKP102 Ohjelmointi 1 (6 op)

Vastuuopettaja. Kurssiesite Lausekielinen ohjelmointi I Syksy Lausekielinen ohjelmointi I (5 op) Lausekielinen ohjelmointi I (5 op)

Ohjelmoinnin jatkokurssi, kurssikoe

Canva CV NÄIN PÄÄSET ALKUUN CANVA CV:N TEOSSA: Canva on graafisen suunnittelun

Sen jälkeen Microsoft Office ja sen alta löytyy ohjelmat. Ensin käynnistä-valikosta kaikki ohjelmat

Johdatus Ohjelmointiin

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

14. Poikkeukset 14.1

Opiskelijalistojen tulostaminen, opiskelijoiden hallinta ja sähköpostin lähettäminen

KUVAN TUOMINEN, MUOKKAAMINEN, KOON MUUTTAMINEN JA TALLENTAMINEN PAINTISSA

Valitse ruudun yläosassa oleva painike Download Scilab.

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

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

JYVÄSKYLÄN SEUDUN. 1. Sisältö * * Tähdellä merkityt kohdat ovat pakollisia. Sivun oikeassa yläkulmasta löytyy Lisää oma tapahtumasi.

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Ohjelmoinnin perusteet Y Python

Valokuvien matematiikkaa

Transkriptio:

1. Johdanto 1.1. Tehtävä Lausekielinen ohjelmointi II -kurssin toisena harjoitustyönä toteutetaan Javaohjelma ASCII-grafiikkana [1] esitettyjen kuvien käsittelyyn. Ohjelma lataa käynnistyessään kuvan tekstitiedostosta keskusmuistissa olevaan taulukkoon. Taulukkoon ladattua kuvaa voidaan katsella ja muokata. Kuvaa katsotaan tulostamalla taulukon sisältö näytölle. Näytölle voidaan tulostaa myös kuvan tiedot. Tiedot sisältävät kuvan koon ja kuvan eri merkkien lukumäärät. Kuvaan muokataan kääntämällä sitä 90 :tta kerrallaan myötä- tai vastapäivään ja korvaamalla väri toisella värillä. Muokkaus perutaan lataamalla kuva uudelleen tiedostosta. Ohjelma on voitava pysäyttää käyttäjän toimesta. Varaa harjoitustyön tekoon riittävästi aikaa. Kurssin viime vuonna suorittaneet opiskelijat arvioivat käyttäneensä toisen harjoitustyön tekemiseen aikaa kokonaisuudessaan, kaikki työvaiheet huomioiden keskimäärin 21 tuntia (mediaani 18 tuntia). 1.2. Kuva ASCII-muodossa Harjoitustyössä käsitellään kuvia, joissa ajatellaan olevan 16 harmaan värisävyä. Jokaiselle värille on määritelty merkki (taulukko 1). Mustaa väriä vastaa ristikkomerkki ja valkoista väriä välilyönti. Näiden värien välissä on 14 harmaan sävyä siten, että harmaa tummenee kohti mustaa ja vaalenee kohti valkoista. Merkit on pyritty valitsemaan siten, että merkin kuvapisteiden määrä vastaa karkeasti harmaan sävyä. Valkoinen esitetään tästä syystä näkymättömällä merkillä, jossa ei ole ollenkaan kuvapisteitä. Merkeillä on myös lukukoodit. Kuva esitetään ohjelmassa vähintään yhtenä kaksiulotteisena taulukkona, jonka koko on n m alkiota. Oletetaan, että kuvassa on aina vähintään yksi rivi (n 1) ja vähintään yksi sarake (m 1). Taulukon rivien ja sarakkeiden lukumäärät voivat olla samat (n = m) tai poiketa toisistaan (n m). Taulukon alkioiden tyypiksi kannattaa valita char. Kuvassa 1 on esitetty 16 16 -kokoinen jouluisen puun kuva taulukkomuodossa. Tyhjiltä näyttävissä alkioissa on yksi välilyönti. Kuvan paikkoihin viitataan jatkossa taulukon alkioiden tapaan kahdella nollasta alkavalla indeksiarvolla. Kuvan ensimmäinen paikka (0, 0) on vasemmassa yläkulmassa. Viimeinen paikka (n - 1, m - 1) on puolestaan oikeassa alakulmassa. Kuva on myös tekstitiedostossa, josta se ladataan tietokoneen keskusmuistissa olevaan taulukkoon. Tekstitiedostossa oleva kuva koostuu samoista merkeistä kuin taulukossa oleva kuva. Kaikki tiedoston rivit ovat aina samanmittaisia. Rivi päättyy viimeiseen näkyvään merkkiin vain, jos merkki on rivin viimeinen merkki. Näin rivin alun lisäksi myös rivin lopussa voi olla välilyöntejä. Kuvan koko täytyy päätellä latauksen yhteydessä, koska tiedostossa ei ole kuvan merkkien lisäksi muita tietoja. Kuvan sisältävän tiedoston voi olettaa olevan aina kunnossa. Kuvissa ei ole esimerkiksi muita kuin taulukossa 1 esitettyjä merkkejä. Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 1 / 13

Kuvassa 2 on esitetty tiedoston file_tree.tt sisältö. Testeissä käytettävät kuvat julkaistaan kurssin kotisivuilla. Kuvia voi piirtää myös itse tekstieditorissa, josta kuvan voi tallentaa tekstitiedostoon ohjelmaan ladattavaksi. Taulukko 1: Värejä vastaavat merkit ja merkkien lukukoodit. # @ & $ % * o! ; : ',. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 * * # * * # * # # # * * # # # # # o # # # # o * # # # # # # # # * o # # # # # # o # # # # # # # # # # o # # # # # # # # o # # # # # # # # # # # # o # # # # # # # # # # o # # # # # # # # # # # # # # o # # # # # # # # # # # # o # # # # # # # # # # # # # # # # # # : : : : : : : : : : : : : : : : Kuva 1: Tree-kuva 16 16 -kokoisessa taulukossa. Kuva 2: Tiedoston file_tree.tt merkit. Jokaisella rivillä on 16 merkkiä. Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 2 / 13

1.3. Kuvan kääntö Kuvan kääntö (kierto, rotatointi) tapahtuu normaalissa tietokonegrafiikassa rotaatiomatriisien avulla [2]. Harjoitustyössä käytettävässä kaksiulotteisessa ASCIIgrafiikassa rotaatio olisi luontevaan tehdä kaksiulotteisessa vasenkätisessä karteesisessa koordinaatistossa, koska kaksiulotteisen taulukon origo on sen vasemmassa yläkulmassa ja y-akseli suuntautuu alas. Teknisiä ongelmia laskentaan aiheuttaa vaatimus taulukon indeksien positiivisuudesta ( 0) ja se, että taulukossa paikat määritellään antamalla ensin rivi-indeksi (y) ja sitten sarakeindeksi (), jolloin indekseillä määritellyt koodinaattiparit ovat muotoa (y, ). Nämä ongelmat voi ratkaista sopivilla muunnoksilla, mutta helpompaa on hypätä suoraan 90 :n käännöksen lopputulokseen eli taulukon rivien vaihtamiseen sarakkeiksi ja päinvastoin. Kuvan käännöksen tulos kannattaa sijoittaa uuteen taulukkoon. On selkeintä toimia siten, että kun käännettävän kuvan sisältävä vanha taulukko on n m - kokoinen, on käännetyn kuvan sisältävä uusi taulukko m n -kokoinen. Näin kuvaa käännettäessä kuvataulukon koko vaihtelee vuorotellen kokojen n m ja m n välillä. Kuvaa suuremmista taulukoista olisi lähinnä hyötyä, jos uusi taulukko on aputaulukko, josta käännetty kuva kopioidaan takaisin vanhaan taulukkoon. Tällaista ratkaisua ei suositella, koska ohjelman toteutus vaikeutuu huomattavasti muun muassa siten, että kuvan kokoa ei voi päätellä enää suoraan taulukon koosta ja muistia varataan enemmän kuin on tarpeen. Jatkossa oletetaan, että taulukko on aina samankokoinen kuin kuva. Myötäpäivään tapahtuvan käännöksen voi tehdä suoraan ilman rotaatiomatriisia esimerkiksi siten, että vanhan taulukon ensimmäisen rivin sisältö kopioidaan uuden taulukon viimeisen sarakkeen sisällöksi, toisen rivin sisältö kopioidaan toiseksi viimeisen sarakkeen sisällöksi ja niin edelleen. Lopuksi kopioidaan vanhasta taulukosta viimeisen rivin merkit uuden taulukon ensimmäiseen sarakkeeseen. Vastapäivään tapahtuvan käännön voi puolestaan toteuttaa suoraan esimerkiksi siten, että vanhan taulukon ensimmäisen sarakkeen sisältö kopioidaan uuden taulukon viimeisen rivin sisällöksi, toisen sarakkeen sisältö kopioidaan toiseksi viimeisen rivin sisällöksi ja niin edelleen, kunnes vanhan taulukon viimeisen sarakkeen sisältö on kopioitu uuden taulukon ensimmäisen rivin sisällöksi. Vanhan taulukon voi korvata uudella taulukolla liittämällä sijoitusoperaattorilla vanhaan taulukko-olioon liittyvän viitteen uuteen taulukko-olioon. Kuvassa 1 on esitetty suuren l-kirjaimen muotoisen kuva käännös myötäpäivään ja vastapäivään. Neljän samansuuntaisen käännöksen jälkeen kuva on alkuperäisessä muodossaan 5 4 -kokoisessa taulukossa. Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 3 / 13

(a) Neljä käännöstä myötäpäivään. (b) Neljä käännöstä vastapäivään. Kuva 3: L-kuvan kääntöjä (a) myötä- ja (b) vastapäivään. Myötäpäivään käännettäessä nuolet osoittavat mihin uuden taulukon sarakkeeseen vanhan taulukon ensimmäisen rivin merkit kopioidaan. Vastapäivään käännettäessä nuolet osoittavat mille uuden taulukon riville vanhan taulukon ensimmäisen sarakkeen merkit kopioidaan. 1.4. Valmiin koodin käytöstä Harjoitustyön teossa saa käyttää kurssin verkkosivuilla julkaistuja mallivastauksia joko sellaisenaan tai muokattuna. Osa viikkoharjoituksen tehtävistä on tarkoitettu avuksi harjoitustyön teossa. Harjoitusyö valmistuu helpoimmin viimeisen harjoituskertojen tehtäviä ratkaisemalla. Esimerkiksi tehtävät 4.7, 5.4, 5.5 ja 5.6 liittyvät suoraan harjoitustyöhön. Javan API:n tietorakenneluokkia ei saa käyttää; ainoa sallittu tietorakenne on taulukko. Javan API:n taulukkojen käsittelyyn liittyvät operaatiot on myös kielletty. Esimerkiksi Arrays-luokan palvelut ovat kieltolistalla. Merkkijonoihin on jo tutustuttu ensimmäisessä harjoitustyössä ja siksi String-luokan kaikkia operaatioita saa käyttää. Tiedustele harjoitustyön ohjaajaan mielipidettä, jos Javan API:sta sattuu löytymään palvelu, jolla harjoitustyö ratkeaa kovin helposti. Harjoitustyön ohjaajaan kannattaa ottaa yhteyttä muutenkin, mikäli on epävarma siitä mitä saa tehdä ja mitä ei. Harjoitustyö tehdään itse ja pääosin omalla ajalla. Kaverien kanssa saa keskustella, mutta suora kopiointi eli plagiointi on kiellettyä. Verkosta löytyviä ja harjoitustyötä muistuttavia ohjelmia saa ajaa, mutta niiden koodia ei saa kopioida. Muualta kuin kurssisivuilta poimitun koodin käyttö katsotaan plagioinniksi. Kurssisivuilla mahdollisesti julkaistavan mallivastauksen tavukoodin purkaminen lähdekoodiksi on plagiointia. Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 4 / 13

1.5. Pakollisuus ja korvaavuudet Harjoitustyö on pakollinen. Ainoa poikkeus tähän sääntöön ovat harjoitustyön korvanneet opiskelijat. Harjoitustyön voi korvata: A) Muiden oppilaitosten opinnoilla. B) Syksyllä 2016 luennoidun Lausekielinen ohjelmointi II -kurssin hyväksytyllä toisella harjoitustyöllä, jos kurssi jäänyt kesken esimerkiksi ase- tai siviilipalveluksen tapaisesta pakottavasta syystä. Kurssin kotisivuilla on annettu tarkempia tietoja osasuorituksista. C) Edellisten kohtien tapaisella painavalla syyllä. Kohdan A perusteella on annettu kaikki opintokoordinaattorin (Heli Rikala) kurssin vastuuopettajalle (Jorma Laurikkala) esittämät korvaavuudet. B ja C-kohtien osalta on tärkeintä muistaa, että harjoitustyö korvautuu vain, jos ottaa yhteyttä kurssin vastuuopettajaan. Tähän mennessä tulleet yhteydenotot ja sopimukset on kirjattu ylös eikä uusia yhteydenottoja näiltä osin tarvita. 2. Ohjelman toiminnot Seuraavassa esitellään ohjelman toiminnallisuutta pienten esimerkkien avulla. Laajempia esimerkkiajoja julkaistaan kurssin kotisivujen Opetus Harjoitustyöt Harjoitustyö 2 -kohdassa. Ohjelmassa on komennot kuvan tulostamiseen näytölle (luku 2.4), kuvan tietojen tulostamiseen (luku 2.5), kuvan kääntämiseen myötäpäivään (luku 2.6), kuvan kääntämiseen vastapäivään (luku 2.7), värin korvaamiseen toisella (luku 2.8), kuvan lataamiseen uudelleen (luku 2.9) ja ohjelman lopettamiseen (luku 2.10). Ainoastaan uudelleen lataava komento lataa tiedoston. Esimerkiksi kuvan tulostava komento tulostaa taulukon sisällön kuvaa lataamatta. 2.1. Ohjelman käynnistys Ohjelma lataa käynnistyessään tekstitiedostossa olevan ASCII-grafiikkakuvan taulukkoon. Tiedoston nimi välitetään ohjelmalle komentoriviparametrina. Ohjelma käynnistetään seuraavalla komennolla: java ASCIIArt17 file_l.tt kun halutaan ladata tiedoston file_l.tt merkit keskusmuistiin. Uudelleenohjausta käytettäessä komento voi olla esimerkiksi: java ASCIIArt17 file_l.tt < input_l.tt > out.tt Ohjelman tulostaa tervehdyksen (luku 2.2) jälkeen virheilmoituksen "Invalid command-line argument!" ja jäähyväiset (luku 2.10), jos komentoriviparametreja ei ole annettu, komentoriviparametreja on enemmän kuin yksi tai jos tiedostoa ei löydetä. Jos ohjelmaa pyydetään esimerkiksi lataamaan hukassa oleva file-.tttiedosto: java ASCIIArt17 file-.tt niin tulostetaan: Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 5 / 13

----------------------- A S C I I A r t 1 7 ----------------------- Invalid command-line argument! Bye, see you soon. 2.2. Tervehdystekstin tulostaminen Ohjelma tulostaa käynnistyessään näytölle miinusmerkeillä ('-') ja kahdella putkimerkillä (' ') kehystetyn viestin: ----------------------- A S C I I A r t 1 7 ----------------------- Tämä teksti tulostetaan vain kerran. 2.3. Komennon lukeminen Heti tervehdysrivien jälkeen tulostetaan omalle rivilleen kehote "Please, enter a command:" ja jäädään odottamaan käyttäjän komentoa seuraavalla rivillä. Ohjerivi tulostetaan uudelleen kaikkien komentojen paitsi lopetuskomennon jälkeen. ----------------------- A S C I I A r t 1 7 ----------------------- Tehtävän helpottamiseksi oletetaan, että ohjelmalle annettu komento on aina oikeellinen. 2.4. Kuvan tulostaminen Ohjelma tulostaa kuvan näytölle -komennolla. Rivit tulostetaan täysimittaisina, vaikka lopussa olisi vain välilyöntejä (valkoista väriä). Näytölle tulostetut välilyönnit on korostettu ohessa. Tulostetaan tiedostosta file_l.tt ladattu kuva näytölle: 2.5. Kuvan tietojen tulostaminen Komento info tulostaa näytölle kuvan koon ja värejä symboloivien merkkien lukumäärät. Ensin tulostetaan kuvan koko muodossa "n m", missä n on kuvan rivien lukumäärä (korkeus) ja m on sarakkeiden lukumäärä (leveys). Sitten tulostetaan kukin merkeistä lukumääränsä kanssa omalle rivilleen taulukon 1 järjestyksessä (musta alussa, valkea lopussa). Merkki ja lukumäärä erotetaan yhdellä välilyönnillä. Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 6 / 13

L-kuvassa nähdään olevan viisi riviä ja neljä saraketta. Kuvassa on vain kahta väriä. Harmaata väriä vastaavia -kirjaimia on kahdeksan kappaletta, kun taas valkoista väriä vastaavia välilyöntejä on 12 kappaletta. info 5 4 # 0 @ 0 & 0 $ 0 % 0 8 * 0 o 0 0! 0 ; 0 : 0 ' 0, 0. 0 12 2.6. Kuvan kääntäminen myötäpäivään Kuvaa käännetään 90 :tta myötäpäivään komento rotater. Alla kuva käännetään neljästi ja alkuperäistä kuvaa ja käännettyjä kuvia tarkastellaan ne tulostamalla. rotater rotater rotater Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 7 / 13

rotater 2.7. Kuvan kääntäminen vastapäivään Kuvaa käännetään 90 :tta vastapäivään komento rotatel. Alla kuva käännetään taas neljästi ja alkuperäistä kuvaa ja käännettyjä kuvia tarkastellaan ne tulostamalla. rotatel rotatel rotatel rotatel Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 8 / 13

2.8. Värin korvaamiseen toisella Komento recolour muuttaa valitun värin toiseksi. Muutettavan värin ja sen korvaavan värin merkit annetaan komennolle parametreina. Myös tämä komento oletetaan aina oikein annetuksi. Parametreja on aina kaksi, parametrit on erotettu toisistaan ja komennosta yhdellä välilyönnillä ja parametrit ovat yksittäisiä merkkejä. Huomaa, että välilyönti itsessään voi olla parametri, jolloin on oltava tarkkana, jos komento ositetaan String-luokan split-operaatiota käyttäen. Alla valkoinen väri (välilyönnit) korvataan harmaan sävyllä (pisteillä). Komennolle parametrina annettu välilyönti on korostettu. recolour o o o o o oooo recolour. oooo 2.9. Kuvan lataaminen uudelleen Alkuperäinen kuva saadaan käyttöön reset-komennolla, joka lataa kuvan uudelleen tiedostosta keskusmuistissa olevaan taulukkoon. Mikään muu komento ei lataa kuvaa levyltä. Ladataan kuva uudestaan ja katsotaan sitä -komennolla: Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 9 / 13

oooo reset 2.10. Ohjelman lopettaminen Ohjelman lopetetaan quit-komennolla. Ohjelma tulostaa ennen pysähtymistään lyhyet jäähyväiset "Bye, see you soon." quit Bye, see you soon. 3. Koodista Ohjelma kirjoitetaan tuttuun tapaan main-operaation sisältävään luokkaan. Ensimmäisestä harjoitustyöstä poiketen ohjelma on kuitenkin jaettava operaatioihin. Operaatioiden lukumäärä riippuu paljon ohjelmoijasta. Operaatiot eivät kuitenkaan saa olla liian pitkiä. Erityisesti main-operaatio on usein vaarassa venyä liian pitkäksi. Ohjelmassa on vältettävä saman koodin kopioimista eri paikkoihin, koska koodista voi kirjoittaa asianomaisista paikoista kutsuttavan operaation. Muista noudattaa hyvää ohjelmointitapaa: sisennä koodia johdonmukaisesti luettavuuden parantamiseksi, kommentoi riittävästi ja oikeissa paikoissa, liitä jokaiseen operaatioon yleisluonteinen kommentti, nimeä vakiot, muuttujat ja operaatiot järkevästi, käytä vakioita, pidä rivit riittävän lyhyinä, käytä välejä lauseiden sisällä ja erota loogiset kokonaisuudet toisistaan väliriveillä, pidä operaatiot järkevän mittaisia operaation tulisi mahtua yhdelle A4-kokoiselle sivulle ja tarkista operaatioiden parametrit erityisesti, kun operaatiolle välitetään taulukko, jolloin parametri on tarkistettava null-arvon varalta. Voit kerrata hyvän ohjelmointitavan lukemalla Lausekielinen ohjelmointi I - kurssin luentorungon 14. luvun [3] ja Lausekielinen ohjelmointi II -kurssin luentomateriaalin seitsemännen luvun [4]. Harjoitustyössä ei saa käyttää normaaleja, muuttuvia attribuutteja. Harjoitustyössä on tavoitteena jakaa ohjelma helposti hallittaviksi operaatioiksi, jotka kommunikoivat ympäristönsä kanssa parametrilistan ja paluuarvon kautta. Attribuutit näkyvät kaikkiin operaatioihin, jolloin ohjelman tietoja voidaan muuttaa missä tahansa. Paljon attribuutteja sisältävät ohjelmat ovat huonoja muun muassa Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 10 / 13

siksi, että tällaisen ohjelman toimintaa on hyvin vaikea hahmottaa. Vakioituja attribuutteja saa käyttää vapaasti, koska vakion arvoa ei voi muuttaa operaatioissa. Älä käytä muita tietorakenteita kuin taulukkoja. Esimerkiksi listaa ei saa käyttää oli kyseessä Javan API:n valmis luokka tai itse toteutettu koodi. Älä käytä Arrays-luokkaa tai vastaavia luokkia, joilla taulukoiden käsittelyn salat on helppo ulkoistaa Javan omille palveluille. Kaikkia String-luokan operaatioita saa käyttää. Sisennä koodi välilyönnein. WETO ei hyväksy muilla tavoilla sisennettyä lähdekoodia, jotta koodi näkyisi opettajan editorissa täsmälleen opiskelijan aikomalla tavalla. Lue tiedot näppäimistöltä In-luokalla. Harjoitustyössä käyttäjän syötteiden lukuun ei saa käyttää Scanner-luokan tapaisia vaihtoehtoisia menetelmiä, jotta töiden automaattinen tarkistus (luku 6) onnistuisi paremmin. In-luokka löytyy kurssin sivuilta. Kirjoita kaikki koodi yhteen tiedostoon äläkä tee omia pakkauksia, jotta WETO osaa tarkistaa ohjelmasi. 4. Dokumentointi Harjoitustyöstä kirjoitetaan dokumentti, jonka tulee sisältää seuraavat asiat: Kansilehdellä tekijän nimi, opiskelijanumero, sähköpostiosoite, yksikkö ja tutkinto-ohjelma. Avoimen yliopiston opiskelijat voivat merkitä yksikön ja tutkinto-ohjelman sijasta organisaatiokseen pelkästään avoimen yliopiston. Sivun keskellä tulisi olla suuremmalla fontilla dokumentin nimi. Kurssin kotisivuilla julkaistaan esimerkinomainen kansilehti. Ohjelman rakenteen ja toiminnan kuvaus korkeintaan puolen sivun mittaisena vapaamuotoisena tekstinä. Omia ajatuksia. Esimerkiksi: Oliko työ helppo, sopiva vai vaikea? Jos helppo tai vaikea, niin miksi? Mitä uutta opittiin? Oliko työstä mitään hyötyä tekijälleen? Montako tuntia työn tekemiseen meni? Dokumentin leipäteksti kirjoitetaan 12 pisteen fontilla ja yhdellä rivinvälillä. Valmiin tekstin lukeminen pariin otteeseen on suotavaa. Tekstinkäsittelyohjelma on oikea työväline dokumentin tuottamiseen, koska esimerkiksi kielentarkistus oikolukutoiminnolla on tällaisessa ohjelmassa vaivatonta. Dokumentti on palautettava PDF-muodossa. Muut tiedostomuodot eivät kelpaa. Luvussa 6 ja kurssin verkkosivuilla kerrotaan tarkemmin dokumentin ja koodin palauttamisesta. Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 11 / 13

5. Harjoitustyön ohjaus Apua saa sekä henkilökohtaisesti että sähköpostitse. Kurssin opettajat ovat tavattavissa yliopistolla kurssin verkkosivuilla myöhemmin julkaistavina aikoina. Harjoitusryhmien vetäjät vastaavat pääsääntöisesti ryhmäläistensä töiden sähköpostilla tapahtuvasta ohjauksesta ja tarkistuksesta. Tuntiopettajat tarkistavat kurssin vastuuopettajan ryhmäläisten harjoitustyöt. Kurssin vastuuopettaja auttaa harjoitustyöongelmissa myös muitakin kuin oman ryhmänsä opiskelijoita. Pyri kuitenkin ottamaan ongelmatilanteissa yhteys ensin harjoitusryhmäsi vetäjään, koska vastuuopettajalla on toisinaan kiire. Muista myös, että tehtävänantoon ja Javan piirteiden käyttöön liittyvissä epävarmoissa tilanteissa kannattaa aina kysyä ohjaajalta. 6. Harjoitustyön palautus Ohjelma ja dokumentti täytyy palauttaa viimeistään 21.12.2017 klo 12.00 (keskipäivä) WETO-järjestelmään. Tarkemmat palautusohjeet julkaistaan myöhemmin kurssin verkkosivuilla. Harjoitustöiden toiminnallisuuden tarkistamiseen käytetään WETO-järjestelmää, joka vertailee automaattisesti mallivastauksen ja opiskelijoiden ratkaisujen tulosteita. Tästä syystä edellä annettuja tulostemäärittelyjä on seurattava merkilleen. Automaattinen vertailu vähentää testaustyötä, jolloin opettajille jää enemmän aikaa mielekkäämpään työhön eli ohjelman rakenteen ja tyylin tutkimiseen. Opiskelijat hyötyvät tästä perusteellisempien kommenttien muodossa. Lisäaikaa työn tekoon voi saada hyvästä syystä. Lisäajasta on sovittava harjoitusryhmän vetäjän kanssa ajoissa eli viimeistään päivää tai paria ennen palautuksen takarajaa. Ennen palautusta on syytä varmistaa, että dokumentissa on mukana kaikki edellä mainitut kohdat. Lisäksi kannattaa tarkistaa, että ohjelma toimii varmasti oikein viimeisten muutosten jälkeen. 7. Harjoitustyön arvostelu Harjoitustyö arvostellaan asteikolla hyväksytty/hylätty. Hylkäyksen perusteena voi olla esimerkiksi ohjelman virheellinen toiminta, hyvän ohjelmointitavan noudattamatta jättäminen, ohjelman rakenne (erityisesti koodin monistaminen ja liian pitkät operaatiot), huono dokumentti ja/tai plagiointi. Plagiointiin liittyy sanktio, joka koskee molempia opiskelijoita. Toiselta opiskelijalta tämän tietämättä kopioidun koodin käyttö johtaa kopioijan koko kurssisuorituksen hylkäämiseen. Suurempia korjauksia vaativa hylätty työ on korjattava pääsääntöisesti viikon sisällä hylkäyksestä. Työn voi palauttaa opettajan tarkistettavaksi korkeintaan neljä kertaa ilman pakottavaa syytä lisäpalautuksiin Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 12 / 13

Lähteet [1] Wikipedia-yhteisö: ASCII art, https://en.wikipedia.org/wiki/ascii_art (Luettu viimeksi 30.11.2017.) [2] Wikipedia-yhteisö: Rotation matri, https://en.wikipedia.org/wiki/rotation_matri (Luettu viimeksi 30.11.2017.) [3] J. Laurikkala: Lausekelinen ohjelmointi I -kurssin luentorunko, luku 14, http://www.sis.uta.fi/~laki1/luennot/luento08/ (Luettu viimeksi 30.11.2017.) [4] J. Laurikkala: Lausekelinen ohjelmointi II -kurssin luentorunko, luku 7, http://www.sis.uta.fi/~laki2/luennot/luento06/ (Luettu viimeksi 30.11.2017.) Lausekielinen ohjelmointi II Syksy 2017 Jorma Laurikkala 13 / 13