Toinen harjoitustyö. ASCII-grafiikkaa

Samankaltaiset tiedostot
Toinen harjoitustyö. ASCII-grafiikkaa 2017

Harjoitustyö Johdanto Tehtävä

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Harjoitustyö Johdanto Tehtävä

Harjoitus 4 (viikko 47)

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

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

Harjoitus 5 (viikko 48)

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

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

Harjoitus 2 (viikko 45)

Harjoitus 3 (viikko 39)

Harjoitus 6 (viikko 42)

Harjoitus 5 (viikko 41)

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

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

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

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

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

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

Harjoitus 6 (viikko 42)

Harjoitus 5 (viikko 41)

13. Hyvä ohjelmointitapa (osa 1) 13.1

14. Hyvä ohjelmointitapa 14.1

5. HelloWorld-ohjelma 5.1

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

Harjoitus 1 (viikko 44)

Harjoitustyö Johdanto

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

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

2. Merkkijono, osamerkkijono ja osamerkkijonon haku

TL5503 DSK, laboraatiot (1.5 op) Suodatus 2 (ver 1.0) Jyrki Laitinen

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

Kohdissa 2 ja 3 jos lukujen valintaan on useita vaihtoehtoja, valitaan sellaiset luvut, jotka ovat mahdollisimman lähellä listan alkua.

Harjoitustyö Johdanto

TL5503 DSK, laboraatiot (1.5 op) Kuvasignaalit. Jyrki Laitinen

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

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

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

Jypelin käyttöohjeet» Ruutukentän luominen

Testitapaukset - Siirtoprotokolla

Harjoitustyö Johdanto Tehtävä

Mainoksen taittaminen Wordilla

5. HelloWorld-ohjelma 5.1

Python-ohjelmointi Harjoitus 2

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

Mediaanisuodattimet. Tähän asti käsitellyt suodattimet ovat olleet lineaarisia. Niille on tyypillistä, että. niiden ominaisuudet tunnetaan hyvin

4. Lausekielinen ohjelmointi 4.1

Ohjelmoinnin perusteet Y Python

Hämeenlinnan Offset-Kolmio Paino Oy:n aineisto-ohjeet

4. Lausekielinen ohjelmointi 4.1

7.4 Sormenjälkitekniikka

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

Luento 5. Timo Savola. 28. huhtikuuta 2006

KUVAN TUOMINEN, MUOKKAAMINEN, KOON MUUTTAMINEN JA TALLENTAMINEN PAINTISSA

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

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

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

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

Liikennevalot. Arduino toimii laitteen aivoina. Arduinokortti on kuin pieni tietokone, johon voit ohjelmoida toimintoja.

ITKP102 Ohjelmointi 1 (6 op)

FrontPage Näkymät

Viivakoodin viiteopas

Ohjeissa pyydetään toisinaan katsomaan koodia esimerkkiprojekteista (esim. Liikkuva_Tausta1). Saat esimerkkiprojektit opettajalta.

TL5503 DSK, laboraatiot (1.5 op) Suodatus 1 (ver 1.0) Jyrki Laitinen

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Suomi Finland 100 -tunnus. Graafinen ohjeisto Lokakuu 2015

Ohjelmoinnin perusteet Y Python

Harjoitustyö: virtuaalikone

ATK tähtitieteessä. Osa 4 - IDL input/output. 19. syyskuuta 2014

Interaktiivinen tarinankerronta

TAMPEREEN TEKNILLINEN YLIOPISTO

Avaa ohjelma ja tarvittaessa Tiedosto -> Uusi kilpailutiedosto

Ohjelmoinnin perusteet Y Python

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

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

Ohjelmoinnin perusteet Y Python

VERKOSTO GRAAFINEN OHJE

Muistitikun liittäminen tietokoneeseen

811120P Diskreetit rakenteet

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

Ohjelmoinnin perusteet Y Python

Harjoitustehtävät ja ratkaisut viikolle 48

ASCII-taidetta. Intro: Python

15. Ohjelmoinnin tekniikkaa 15.1

Harjoitustyö. 1. Johdanto Tehtävä

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

KUVAMUOKKAUS HARJOITUS

Ohjelmoinnin peruskurssi Y1

2D piirrelaskennan alkeet, osa I

Ohjelmoinnin perusteet Y Python

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

Datatähti 2019 loppu

Harjoitustyö. 1. Johdanto Tehtävä

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

2 Konekieli, aliohjelmat, keskeytykset

811120P Diskreetit rakenteet

Transkriptio:

Toinen harjoitustyö ASCII-grafiikkaa

Yleistä Tehtävä: tee Javalla ASCII-merkkeinä esitettyä grafiikkaa käsittelevä ASCIIArt-ohjelma omia operaatioita ja taulukoita käyttäen. Työ tehdään pääosin itse. Ideoita voi vaihtaa koodia ei. Henkilökohtaista ohjausta mikroluokissa. Ohjaajilta voi kysyä sähköpostilla. Palautus WETOon viimeistään torstaina 15.12.2016 klo 12.00. Testaus julkisilla ja salaisilla testeillä. Tarkka tehtävänanto ensi viikolla. Työ esitellään myös maanantain (21.11.) luennoilla. Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 2

Kuva ASCII-muodossa Ohjelma käsittelee 16-värin harmaasävykuvia. Värit esitetään merkeillä ja jokaiselle merkille (värille on määritelty) lukukoodi. Musta esitetään ristikkomerkillä (koodi 0). Valkoinen esitetään välilyönnillä (koodi 15). # @ & $ % x * o! ; : ',. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Kuva on tietokoneen keskusmuistissa kaksiulotteisessa taulukossa ja massamuistilaitteella tekstitiedostossa. Taulukoita voi olla yksi (lukukoodit) tai kaksi (merkit ja lukukoodit). Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 3

Kuva ASCII-muodossa * * # * * #* ### * * ##### o####o * ######## * o######o ########## o########o ############ o##########o ############## o############o ################ ## :::::::::::::::: Paikka (0, 8) on musta. Tämä väri esitetään ristikkomerkillä, jonka lukukoodi on nolla. 6 15 15 15 15 6 15 15 0 15 15 15 15 15 15 6 15 15 15 6 15 15 15 15 0 6 15 15 15 15 15 15 15 15 15 15 15 15 15 0 0 0 15 15 15 6 15 15 15 6 15 15 15 15 0 0 0 0 0 15 15 15 15 15 15 15 15 15 15 7 0 0 0 0 7 15 15 6 15 15 15 15 15 15 0 0 0 0 0 0 0 0 15 15 15 15 15 15 6 15 7 0 0 0 0 0 0 7 15 15 15 15 15 15 15 0 0 0 0 0 0 0 0 0 0 15 15 15 15 15 15 7 0 0 0 0 0 0 0 0 7 15 15 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 15 15 15 15 7 0 0 0 0 0 0 0 0 0 0 7 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 15 7 0 0 0 0 0 0 0 0 0 0 0 0 7 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 15 15 15 15 15 15 0 0 15 15 15 15 15 15 15 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 4

Kuva ASCII-muodossa Kuva on tiedostossaan merkkeinä. Ohessa ovat 16 16 -kokoisen treekuvan sisältävän file_tree.txt-tiedoston merkit. Tiedostossa ei ole merkkien lisäksi muuta tietoa. Kuvan koko täytyy päätellä ohjelmassa. Kuvan voi olettaa aina olevan kunnossa ja riittävän suuri suodatettavaksi. Huomaa, että kuvan korkeus ja leveys voivat olla erisuuret. * * # * * #* ### * * ##### o####o * ######## * o######o ########## o########o ############ o##########o ############## o############o ################ ## :::::::::::::::: Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 5

Ohjelman toiminnot Ohjelma lataa käynnistyessään merkkimuodossa olevan kuvan tekstitiedostosta. Kuvatiedoston nimi annetaan ohjelmalle komentoikkunassa komentoriviparametrina. Esimerkiksi: java ASCIIArt file_tree.txt Ohjelmaa käytetään antamalla jokin komennoista printa, printi, info, filter, reset ja quit. Ohjelma toimii hieman komentoikkunan tapaan. Oletetaan, että komennot annetaan aina oikein. Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 6

Aloitus ja printa-komento Ohjelma tulostaa käynnistyessään nimensä kehystettynä. Otsikon ja jokaisen komennon jälkeen tulostetaan ohjerivi. Komento printa tulostaa kuvan näytölle merkkimuodossa. Kuva on ladattu ohjelman käynnistyessä file_tree.txttiedostosta. Tiedoston nimi on annettu ohjelmalle komentoriviparamerina. Rivit tulostetaan täysimittaisina, vaikka lopussa olisi vain välilyöntejä (valkoista väriä). ------------------- A S C I I A r t ------------------- printa * * # * * #* ### * * ##### o####o * ######## * o######o ########## o########o ############ o##########o ############## o############o ################ ## :::::::::::::::: Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 7

Printi-komento Komento printi tulostaa kuvan näytölle lukumuodossa. Merkin paikassa on sen lukukoodi. Numerot erotetaan toisistaan välilyönnillä. Yksinumeroisen luvun eteen tulostetaan ylimääräinen välilyönti. Rivien alussa tai lopussa ei ole välilyöntejä. printi 6 15 15 15 15 6 15 15 0 15 15 15 15 15 15 6 15 15 15 6 15 15 15 15 0 6 15 15 15 15 15 15 15 15 15 15 15 15 15 0 0 0 15 15 15 6 15 15 15 6 15 15 15 15 0 0 0 0 0 15 15 15 15 15 15 15 15 15 15 7 0 0 0 0 7 15 15 6 15 15 15 15 15 15 0 0 0 0 0 0 0 0 15 15 15 15 15 15 6 15 7 0 0 0 0 0 0 7 15 15 15 15 15 15 15 0 0 0 0 0 0 0 0 0 0 15 15 15 15 15 15 7 0 0 0 0 0 0 0 0 7 15 15 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 15 15 15 15 7 0 0 0 0 0 0 0 0 0 0 7 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 15 7 0 0 0 0 0 0 0 0 0 0 0 0 7 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 15 15 15 15 15 15 0 0 15 15 15 15 15 15 15 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 8

Info-komento Komento info tulostaa näytölle kuvan koon ja kunkin merkin lukumäärät. Kuvan koko annetaan ensin ja tämän jälkeen merkkien lukumäärät edellä annetun taulukon järjestyksessä (musta alussa, valkea lopussa). Merkki ja sen lukumäärä erotetaan toisistaan välilyönnillä. info 16 x 16 # 112 @ 0 & 0 $ 0 % 0 x 0 * 9 o 10 0! 0 ; 0 : 16 ' 0, 0. 0 109 Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 9

Filter-komento Käsittelee kuvan n n - kokoisella mediaanisuotimella. N on valinnainen parametri. N on aina pariton ja suurempi tai yhtä suuri kuin kolme ja sellainen, että suodin mahtuu kuvaan. Jos parametria n ei anneta, on suotimen koko 3 3. Ohessa komento voisi kuulua esimerkiksi myös: filter 5, jolloin suodin olisi 5 5 - kokoinen. filter printi 6 15 15 15 15 6 15 15 0 15 15 15 15 15 15 6 15 15 15 15 15 15 15 15 0 6 15 15 15 15 15 15 15 15 15 15 15 15 15 0 0 0 15 15 15 15 15 15 15 15 15 15 15 15 0 0 0 0 7 15 15 15 15 15 15 15 15 15 15 0 0 0 0 0 0 15 15 15 15 15 15 15 15 15 7 0 0 0 0 0 0 7 15 15 15 15 15 15 15 7 0 0 0 0 0 0 0 0 15 15 15 15 15 15 15 7 0 0 0 0 0 0 0 0 7 15 15 15 15 15 15 0 0 0 0 0 0 0 0 0 0 15 15 15 15 15 7 0 0 0 0 0 0 0 0 0 0 7 15 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 15 15 15 7 0 0 0 0 0 0 0 0 0 0 0 0 7 15 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 7 0 0 0 0 0 0 0 0 0 0 0 0 7 0 15 11 11 11 11 11 11 0 0 11 11 11 11 11 11 15 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 10

Filter-, reset- ja quit-komennot Suodin poistaa melua, mutta hävittää samalla myös informaatiota. Alkuperäiseen kuvaan voidaan palata reset-komennolla, joka lataa kuvan uudestaan tiedostosta taulukkoon. Ohjelma lopetetaan quitkomennolla. Ennen ohjelman pysähtymistä tulostetaan lyhyet jäähyväiset. printa * * # * #* ### ####o ###### o######o o######## o########o ########## o##########o ############ o############o ############## #o############o# ::::::##:::::: :::::::::::::::: Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 11

Filter-, reset- ja quit-komennot reset printa * * # * * #* ### * * ##### o####o * ######## * o######o ########## o########o ############ o##########o ############## o############o ################ ## :::::::::::::::: quit Bye, see you soon. Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 12

Mediaanisuodin Muodostaa vanhasta kuvasta uuden kuljettamalla suodinikkunaa kuvan päällä. Usein edetään rivi kerrallaan. Ikkunan keskikohta asetetaan käsiteltävän luvun päälle. Reunat ongelmallisia, koska osa ikkunasta menee kuvan ulkopuolelle. Tässä työssä suodin sijoitetaan aina siten, että suodin on kuvan sisällä. Tämän seurauksena yhden tai useamman merkin levyinen reuna jää käsittelemättä. Suodin lajittelee alueellaan olevat lukuarvot ja palauttaa keskimmäisen arvon eli mediaanin. Tässä työssä mediaani aina keskimmäisin arvo, koska ikkunan koko on pariton. Mediaaniarvo sijoitetaan uudessa kuvassa samaan paikkaan kuin vanhan kuvan käsiteltävä luku. Tarvitaan aputaulukko, koska kaikki uudet luvut lasketaan vanhoista luvuista. Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 13

Mediaanisuodin 15 15 15 6 15 15 6 15 15 15 15 15 15 15 15 15 15 15 15 0 15 15 15 7 0 Käsitellään tree-kuvan kohdassa (1, 3) oleva arvo (punainen) 3 3 -kokoisella suotimella (sininen tausta). Ikkunan arvot lajiteltuna: 6, 15, 15, 15, 15, 15, 15, 15, 15. Uuden kuvan paikaan (1, 3) sijoitetaan mediaani (viides luku), joka on 15. Mediaanisuodin poistaa yksityiskohtia. Tämä on sovelluksesta riippuen hyödyllistä tai haitallista. Huomaa, että reunalla oleva yksityiskohdat säilyvät, koska suodinta ei voi asettaa reunamerkkien päälle. Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 14

Mediaanisuodin 15 15 0 15 15 15 15 0 6 15 15 0 0 0 15 0 0 0 0 0 0 0 0 0 7 Käsitellään tree-kuvan kohdan (1, 7) arvo 3 3 kokoisella suotimella. Ikkunan arvot lajiteltuna: 0, 0, 0, 0, 15, 15, 15, 15, 15. Uuden kuvan paikaan (1, 7) sijoitetaan mediaani, joka on 15. 15 15 0 15 15 15 15 0 6 15 15 0 0 0 15 0 0 0 0 0 0 0 0 0 7 Käsitellään seuraavaksi kohdan (1, 8) arvo. Ikkunan arvot lajiteltuna: 0, 0, 0, 0, 0, 6, 15, 15, 15. Uuden kuvan paikaan (1, 8) sijoitetaan mediaani, joka on 0. Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 15

Mediaanisuodin 15 15 0 15 15 15 15 0 6 15 15 0 0 0 15 0 0 0 0 0 0 0 0 0 7 Käsitellään vielä kohdan (1, 9) arvo. Ikkunan arvot lajiteltuna: 0, 0, 0, 0, 6, 15, 15, 15, 15. Uuden kuvaan paikaan (1, 9) sijoitetaan mediaani, joka on 6. Kolmesta edellisestä esimerkistä nähtiin, että on hyvin mahdollista, että arvo on sama vanhassa ja uudessa kuvassa ja että yksityiskohtien säilyminen on mahdollista erikoistilanteissa. Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 16

Koodista Syötteet luetaan In-luokalla. Mediaanin laskemisessa tarvittava lajittelu on toteutettava itse. Myöhemmin annetaan valintalajittelu algoritmi, jota voi halutessaan käyttää. Monimutkaisemman algoritmin toteutus on täysin tekijänsä vastuulla. Arrays-luokan palveluiden tapaiset helpommat tekniikat on kielletty, koska tavoitteena on oppia käsittelemään taulukoita. Kysy, jos ole epävarma mitä saa tehdä ja mitä ei. Attribuuttimuuttujia ei saa käyttää, vakiomuotoisten attribuuttien käyttö on sallittua ja jopa toivottavaa. Kirjoita kaikki koodi yhteen tiedostoon, jotta WETO osaa tarkistaa ohjelmasi. Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala 17