Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Toinen harjoitustyö ASCII-grafiikkaa.

Samankaltaiset esitykset


Esitys aiheesta: "Toinen harjoitustyö ASCII-grafiikkaa."— Esityksen transkriptio:

1 Toinen harjoitustyö ASCII-grafiikkaa

2 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 klo 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

3 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). Kuva on tietokoneen keskusmuistissa kaksiulotteisessa taulukossa ja massamuistilaitteella tekstitiedostossa. Taulukoita voi olla yksi (lukukoodit) tai kaksi (merkit ja lukukoodit). # @ & $ % x * o | ! ; : ' , . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Lausekielinen ohjelmointi II | Syksy 2016 | Jorma Laurikkala

4 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. Lausekielinen ohjelmointi II | Syksy 2016 | Jorma Laurikkala

5 Kuva ASCII-muodossa Kuva on tiedostossaan merkkeinä.
Ohessa ovat 16  16 -kokoisen tree-kuvan 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

6 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

7 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.txt-tiedostosta. 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/printi/info/filter [n]/reset/quit? printa * * # * * #* ### * * ##### o####o * ######## * o######o ########## o########o ############ o##########o ############## o############o ################ ## :::::::::::::::: Lausekielinen ohjelmointi II | Syksy 2016 | Jorma Laurikkala

8 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ä. printa/printi/info/filter [n]/reset/quit? printi Lausekielinen ohjelmointi II | Syksy 2016 | Jorma Laurikkala

9 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ä. printa/printi/info/filter [n]/reset/quit? info 16 x 16 # 0 & 0 $ 0 % 0 x 0 * 9 o 10 | 0 ! 0 ; 0 : 16 ' 0 , Lausekielinen ohjelmointi II | Syksy 2016 | Jorma Laurikkala

10 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. printa/printi/info/filter [n]/reset/quit? filter printi Lausekielinen ohjelmointi II | Syksy 2016 | Jorma Laurikkala

11 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 quit-komennolla. Ennen ohjelman pysähtymistä tulostetaan lyhyet jäähyväiset. printa/printi/info/filter [n]/reset/quit? printa * * # * #* ### ####o ###### o######o o######## o########o ########## o##########o ############ o############o ############## #o############o# ::::::##:::::: :::::::::::::::: Lausekielinen ohjelmointi II | Syksy 2016 | Jorma Laurikkala

12 Filter-, reset- ja quit-komennot
printa/printi/info/filter [n]/reset/quit? reset printa * * # * * #* ### * * ##### o####o * ######## * o######o ########## o########o ############ o##########o ############## o############o ################ ## :::::::::::::::: quit Bye, see you soon. Lausekielinen ohjelmointi II | Syksy 2016 | Jorma Laurikkala

13 Mediaanisuodin Muodostaa vanhasta kuvasta uuden kuljettamalla suodin-ikkunaa 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

14 Mediaanisuodin 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. 15 6 7 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. Lausekielinen ohjelmointi II | Syksy 2016 | Jorma Laurikkala

15 Mediaanisuodin Käsitellään seuraavaksi kohdan (1, 8) arvo.
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. 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. 15 6 7 15 6 7 Lausekielinen ohjelmointi II | Syksy 2016 | Jorma Laurikkala

16 Mediaanisuodin 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. 15 6 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. Lausekielinen ohjelmointi II | Syksy 2016 | Jorma Laurikkala

17 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


Lataa ppt "Toinen harjoitustyö ASCII-grafiikkaa."

Samankaltaiset esitykset


Iklan oleh Google