2. Merkkijono, osamerkkijono ja osamerkkijonon haku

Samankaltaiset tiedostot
Harjoitustyö Johdanto

Harjoitustyö Johdanto

Harjoitustyö Johdanto. 2. Euroseteli

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Harjoitus 5 (viikko 41)

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Harjoitus 6 (viikko 42)

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

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

Harjoitustyö Johdanto Tehtävä

13. Hyvä ohjelmointitapa (osa 1) 13.1

Harjoitustyö Johdanto Tehtävä

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Harjoitus 2 (viikko 45)

Harjoitus 5 (viikko 41)

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

Harjoitus 6 (viikko 42)

Harjoitus 5 (viikko 48)

Harjoitus 4 (viikko 47)

14. Hyvä ohjelmointitapa 14.1

5. HelloWorld-ohjelma 5.1

Toinen harjoitustyö. ASCII-grafiikkaa

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

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

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

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

Harjoitus 3 (viikko 39)

Harjoitus 1 (viikko 44)

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

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

5. HelloWorld-ohjelma 5.1

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

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

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

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

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

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

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

Harjoitustyö Johdanto Tehtävä

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

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

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

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

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

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

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

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

Ohjelmoinnin perusteet Y Python

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

11. Javan toistorakenteet 11.1

12. Javan toistorakenteet 12.1

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

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

Johdatus Ohjelmointiin

12. Javan toistorakenteet 12.1

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

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

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

T harjoitustehtävät, syksy 2011

ITKP102 Ohjelmointi 1 (6 op)

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

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

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

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

ITKP102 Ohjelmointi 1 (6 op)

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

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

7. Näytölle tulostaminen 7.1

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

T harjoitustyö, kevät 2012

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

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

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

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

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

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

Ohjelmoinnin perusteet Y Python

4. Lausekielinen ohjelmointi 4.1

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

Kun tulostuksessa ilmenee muotoiluvirheitä

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

Java-kielen perusteita

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet, 1. välikoe

Tehtävän lisääminen ja tärkeimmät asetukset

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

4. Lausekielinen ohjelmointi 4.1

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

Java-kielen perusteita

Kirjoita, tallenna, käännä ja suorita alla esitelty ohjelma, joka tervehtii käyttäjäänsä.

Markkinoitten mallintaminen ja Internet-markkinat

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

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Used with permission of Microsoft. Kulttuurihistoria Syyskuu 2015

Transkriptio:

. Johdanto Ensimmäisessä harjoitustyössä on tehtävänä toteuttaa Java-ohjelma, joka hakee merkkijonosta osamerkkijonon esiintymiä. Haku voidaan rajoittaa pelkästään merkkijonon alkuun tai sen loppuun. Harjoitustyö on ratkaistavissa tähän mennessä opituilla tiedoilla. Ohjelman rakenteen hahmottelu kannattaa aloittaa heti, koska aikaa on rajallisesti. Tehtävän ratkaisussa ei saa käyttää enemmän ohjelmointia taitavien tuntemia helpompia ohjelmointitekniikoita. Esimerkiksi taulukoiden käyttö on kielletty ja String-luokasta saa käyttää vain muutamaa operaatiota. Kiellon rikkominen johtaa harjoitustyön hylkäämiseen. Ohjelman saa halutessaan jakaa operaatioiksi. Kysy harjoitustyönohjaajalta, mikäli olet epävarma mitä saa tehdä ja mitä ei. Tärkein syy ohjelmointitekniikoiden rajoittamiseen on harjoitustyön oppimistavoite, joka on ohjausrakenteiden käyttö laajemmassa mittakaavassa. Jos kaikki on sallittua, niin on todennäköistä, että aloitteleva ohjelmoija tutustuu, esimerkiksi valmiiksi ohjelmointitaitoisen kaverin avulla, myöhemmin opetettaviin menetelmiin pintapuolisesti. Tällöin on vaarana, että ohjelman kirjoittaja ei täysin ymmärrä ratkaisunsa toimintaa eikä tule oppineeksi kuinka valintaja toistorakenteita käytetään. Rajoitusten seurauksena jo ohjelmointitaitoiset kurssilaiset joutuvat käyttämään työhön hieman enemmän aikaa. Tämä on kuitenkin pienempi paha kuin se, että osa ohjelmointia aloittelevista kurssilaisista ei oppisi kunnolla keskeisimpiä taitoja. Harjoitustyö tehdään itse ja lähinnä omalla ajalla. Kaverien kanssa saa keskustella, mutta suora kopiointi eli plagiointi on kiellettyä. Luonnollisesti myös verkosta löytyneen koodin käyttö katsotaan plagioinniksi. Kurssisivuilla ja WETOssa julkaistu koodi on vapaasti käytettävissä. Harjoitustyö on pakollinen. Ainoa poikkeus tähän sääntöön ovat harjoitustyön korvanneet opiskelijat. Harjoitustyön voi korvata viime vuonna järjestetyn Lausekielinen ohjelmointi II -kurssin hyväksytyllä ensimmäisellä harjoitustyöllä, jos kurssi jäänyt kesken esimerkiksi ase- tai siviilipalveluksen tapaisesta pakottavasta syystä. 2. Merkkijono, osamerkkijono ja osamerkkijonon haku Merkkijono S koostuu peräkkäistä merkeistä s i, jotka yksilöidään indeksiarvolla i (0 i < m), missä m on merkkien lukumäärä. Osamerkkijono [] T koostuu yhdestä tai useammasta merkkijonon S peräkkäisestä merkistä. Tyhjät merkkijonot ja tyhjät osamerkkijonot on rajattu työn ulkopuolelle. Jos S on esimerkiksi aa, ovat sen merkit s 0 = a, s =, s 2 = ja s 3 = a ja osamerkkijonot T 0 = a, T =, T 2 =, T 3 = a, T 4 = s 0 s = a, T 5 = s s 2 =, T 6 = s 2 s 3 = a, T 7 = s 0 s s 2 = a, T 8 = s s 2 s 3 = a ja T 9 = s s 2 s 3 s 4 = aa. Edellisestä esimerkistä nähdään, että osamerkkijonojen merkit voivat olla samoja. Ensimmäisen ja viimeisen merkin muodostamat osamerkkijonot ovat samat (T 0 = T 3 = a) samoin kuin keskimmäisten merkkien muodostamat osamerkkijonot (T = T 2 = ). Merkkijonohaussa halutaan usein löytää kaikki samoista merkeistä koostuvat osamerkkijonot, joita sanotaan tällöin osamerkkijonon T esiintymiksi. Jos edellisessä esimerkissä T = a, T:n esiintymät ovat T 0 ja T 3 ja jos T =, niin esiintymät ovat T ja T 2. Lausekielinen ohjelmointi II Syksy 208 Jorma Laurikkala / 7

Esiintymistä on luontevaa puhua myös, kun osamerkkijonot määritellään siten, että eri paikoissa samoina toistuvia osamerkkijonoja ei tulkita eri osamerkkijonoiksi. Tämän määritelmän mukaan edellisen esimerkin T 0 ja T 3 sekä T ja T 2 katsottaisiin yhdeksi osajonoksi. Harjoitustyössä osamerkkijonon esiintymiä haetaan koko merkkijonosta, merkkijonon alusta tai merkkijonon lopusta. Merkkijonon alusta ja lopusta haettaessa tutkitaan käytännössä alkaako merkkijono osamerkkijonolla tai päättyykö merkkijono osamerkkijonoon. Merkkijono ja siitä haettava merkkijono luetaan käyttäjältä. Haettavaa merkkijonoa kutsutaan tässä työssä osamerkkijonoksi, vaikka onkin mahdollista, että käyttäjä syöttää haettavan merkkijonon siten, että se ei ole mikään merkkijonon osamerkkijonoista. Tässä tapauksessa haku epäonnistuu. Käyttäjä voi rajoittaa haun merkkijonon alkuun tai loppuun lisäämällä vastaavasti osamerkkijonon loppuun tai alkuun tähtimerkin. Jos syötteet ovat esimerkiksi aa ja a*, osamerkkijonon a esiintymää haetaan merkkijonon alusta. Jos jälkimmäinen syöte on *a, osamerkkijonon a esiintymää haetaan merkkijonon lopusta. Molemmat haut onnistuvat, koska merkkijono alkaa a- kirjaimella ja loppuu siihen. Syötteiden voidaan olettaa olevan vähintään yhden merkin mittaisia. Ennen hakua on kuitenkin varmistettava, että rajoittamattomasti hakiessa osamerkkijono on korkeintaan merkkijonon pituinen. Rajoitetussa haussa on tarkistettava, että tähtimerkki on joko syötteen alussa tai lopussa ja että syötteessä ei ole muita tähtimerkkejä ja että syötteeksi ei ole annettu pelkkää tähteä. Jos merkkijono on esimerkiksi aa, on syöte aaa liian pitkä osamerkkijonoksi ja syöte *a* havaitaan virheelliseksi, koska siinä on kaksi tähtimerkkiä, vaikka tähdet ovatkin alussa ja lopussa. Syötteet *aa ja aa* katsotaan virheellisiksi toisteisina, sillä hakua ei ole tarpeen rajoittaa merkkijonon alkuun tai loppuun, kun osamerkkijono on merkkijonon mittainen. Haettavaa merkkijonoa luetaan, kunnes saadaan hyväksyttävä syöte. Harjoitustyössä suositellaan käytettäväksi naiivia raa an voiman hakua [2], koska monimutkaisemmat menetelmät [2] ovat vaikeampia toteuttaa ja saattavat vaatia harjoitustyössä kiellettyjen menetelmien käyttöä. Naiivissa haussa osamerkkijonon esiintymiä haetaan kuljettamalla n merkin pituista osamerkkijonoa T merkkijonon S yli siten, että kunkin vertailun jälkeen osamerkkijono siirtyy merkin verran kohti merkkijonon loppua. Esiintymä löydetään aina, kun T:n kohdalla olevat n merkkijonon S peräkkäistä merkkiä (osamerkkijono s i...s i+n- ) ovat samat kuin T:n merkit eli T = s i...s i+n-. Haku alkaa siten, että haettavaa osamerkkijonoa verrataan ensin n ensimmäiseen merkkiin s 0...s n-. Esiintymä löydetään, jos T = s 0...s n-. Haun toisessa vaiheessa osamerkkijonoa verrataan merkkijonon indeksiarvoihin n liittyviin merkkeihin ja esiintymä löydetään, jos T = s...s n. Tämän jälkeen jatketaan samalla tavalla, kunnes vertailtavana ovat merkkijonon n viimeistä merkkiä s m-n...s m-. Viimeinen esiintymä löytyy, jos T = s m-n...s m-. Merkkijonon alkuun kohdistetussa haussa tehdään vain naiivin haun ensimmäinen vaihe. Loppuun kohdistettu haku vastaa naiivin haun viimeistä vaihetta. Taulukoissa 4 on kuvattu neljä naiivia hakua. Lausekielinen ohjelmointi II Syksy 208 Jorma Laurikkala 2 / 7

Taulukko : Haetaan osajonoa merkkijonosta aa. Vertaillaan ensimmäistä merkkiä ja osajonoa. Esiintymää ei löydetä. 2 3 4 Toinen merkki on osajonon esiintymä. Myös kolmas merkki on osajonon esiintymä. Merkkijonon viimeinen merkki ei ole osajonon esiintymä. Taulukko 2: Haetaan osajonoa aa merkkijonosta aaa. a Osamerkkijonon esiintymä löytyy heti merkkijonon alusta. 2 3 4 a a a Osamerkkijono a ei ole osamerkkijonon aa esiintymä. Osamerkkijono a ei ole osamerkkijonon aa esiintymä. Osamerkkijonon toinen esiintymä löytyy merkkijonon lopusta. Taulukko 3: Käyttäjä rajoittaa haun merkkijonon aa alkuun antamalla syötteeksi a*. Osamerkkijonoa a verrataan merkkijonon kahteen ensimmäiseen merkkiin, jotka a muodostavat esiintymän. Haku päättyy tähän vertailuun. Taulukko 4: Käyttäjä rajoittaa haun merkkijonon aa loppuun antamalla syötteeksi *a *a. Siirrytään suoraan vertailemaan osamerkkijonoa a merkkijonon kahteen viimeiseen a merkkiin, jotka muodostavat esiintymän. Lausekielinen ohjelmointi II Syksy 208 Jorma Laurikkala 3 / 7

3. Ohjelman toiminnot Seuraavassa esitellään ohjelman toiminnallisuutta pienten esimerkkien avulla. Laajempia esimerkkiajoja julkaistaan kurssin kotisivujen Opetus Harjoitustyöt Harjoitustyö -kohdassa. Tietojen lukemiseen näppäimistöltä käytetään In-luokan operaatioita. Myös In-luokka löytyy kurssin sivuilta. Huomaa, että harjoitustyössä syötteiden lukuun ei saa käyttää muita keinoja, jotta töiden automaattinen tarkistus (luku 7) onnistuisi varmemmin. Tehtävän helpottamiseksi oletetaan, että ohjelmalle annetaan aina syöte sitä luettaessa ja että ohjelmalle ei tarjota väärän tyyppisiä syötteitä. Kukin syöte kirjoitetaan näppäimistöltä ja annetaan ohjelman käsiteltäväksi Enternäppäintä painamalla. 3.. Aloitusrivin tulostaminen Ohjelma tulostaa käynnistyessään näytölle tekstin "Hello! I find sustrings." Hello! I find sustrings. Tämä teksti tulostetaan vain kerran. 3.2. Merkkijonon lukeminen Heti aloitusriviä seuraavalle riville tulostetaan "Please, enter a string:". Syötekehotusta seuraavalla rivillä luetaan merkkijono. Ohjelma olettaa, että syötteen pituus on vähintään yksi merkki. Alla käyttäjä antaa syötteeksi "aa". Please, enter a string: aa 3.3. Osamerkkijonon lukeminen Käyttäjää kehotetaan syöttämään osamerkkijono tulostamalla omalle rivilleen teksti "". Osamerkkijono luetaan seuraavalla rivillä. Ohjelma olettaa syötteen mitaksi vähintään yhden merkin. Käyttäjän syöte on alla "". Ohjelma vastaa virheelliseen syötteeseen tulostamalla "" ja lukemalla uuden osamerkkijonon. Tätä toistetaan, kunnes syöte on oikeellinen. Käyttäjä antaa alla syötteiksi "aaa", "*a*", "aa*", "*aa" ja "". aaa *a* aa* *aa Lausekielinen ohjelmointi II Syksy 208 Jorma Laurikkala 4 / 7

3.4. Tulosten esitys Merkkijonon ja osamerkkijonon lukemisen jälkeen kukin löydetty esiintymä tulostetaan omalle rivilleen siten, että esiintymää edeltävät ja seuraavat merkit tulostetaan yhdysviivoina (miinusmerkkeinä). Ohjelma ei tulosta tässä vaiheessa mitään, jos osajonon esiintymiä ei löydetä. Esimerkki ohjelman tulosteista, kun syötteiksi on annettu "aa" ja "": --- --- 3.5. Ohjelman jatkaminen ja lopetus Tietojen tulostuksen jälkeen tiedustellaan omalla rivillään "" ja luetaan käyttäjän syöte välittömästi seuraavalla rivillä. Pieni y-kirjain palauttaa ohjelman merkkijonon lukemiseen. y Please, enter a string: Jos ohjelman esittämään jatkokyselyyn vastataan antamalla syötteenä pieni n- kirjain, niin tulostetaan teksti "See you soon." omalle rivilleen ja ohjelman suoritus lopetetaan. n See you soon. Ohjelma tulostaa omalle rivilleen tekstin "" ja kysyy kysymyksen uudelleen, jos käyttäjä vastaa jatkokysymykseen jollakin muulla merkillä kuin pienellä y- tai n-kirjaimella. Käyttäjän kiusaamista jatketaan kunnes syöte on oikeellinen. Y y 4. Koodista Ohjelman voi kirjoittaa kokonaan main-operaation sisään. Ohjelmaan saa myös kirjoittaa halutessaan omia operaatioita, jos niissä ei toisteta koodia (katso alla). Edistyneempiä tekniikoita, joilla ongelma ratkeaa helpommin, ei saa käyttää. Näihin luetaan esimerkiksi taulukot ja muut tietorakenteet. Javan APIluokkien operaatioiden käyttö on pitkälti kiellettyä. Operaatioista sallittuja ovat vain System.out.println, System.out.print, String-luokan length-, charatja equals-operaatiot. Kiellon rikkominen johtaa harjoitustyön hylkäämiseen. Kysy harjoitustyönohjaajaltasi, mikäli olet epävarma mitä saa tehdä ja mitä ei. Koodisi lukee myös ohjaaja. Noudata siis hyvää ohjelmointitapaa [3]: Sisennä koodia luettavuuden parantamiseksi, kommentoi riittävästi, nimeä muuttujat ymmärrettävästi, käytä vakioita, pidä rivit riittävän lyhyinä sekä käytä välejä lauseiden sisällä ja erota loogiset kokonaisuudet toisistaan väliriveillä. Lausekielinen ohjelmointi II Syksy 208 Jorma Laurikkala 5 / 7

Sisennä koodi välilyönnein, jotta koodisi näkyisi täsmälleen samanlaisena myös ohjaajan editorissa. Erityisen tärkeää on se, että välilyöntejä ja taulaattorimerkkejä ei käytetä sekaisin, koska tällöin on varmaa etteivät sisennykset näy ajatellulla tavalla opettajan koneella. Ohjelmassa tulee välttää koodin toistamista. Toteuta esiintymien haku naiivilla menetelmällä siten, että merkkijonon alkuun ja loppuun rajoitettuun hakuun käytetään samaa silmukkaparia kuin rajoittamattomaan hakuun. Silmukkaparin yleistäminen onnistuu huomaamalla, että alkuun rajoitetun haun voi pysäyttää lipulla ja että loppuun rajoitetun haun voi aloittaa suoraan oikeasta paikasta antamalla laskurille sopivan alkuarvon. Koodia ei saa toistaa myöskään, jos haku on toteutettu tehokkaammin. Syötteet luetaan In-luokan avulla. Älä käytä muita menetelmiä syötteiden lukemiseen. Ohjelman nimen tulee olla SustringFinder ja kaiken lähdekoodin tulee olla SustringFinder.java-nimisessä tekstitiedostossa. Älä kirjoita ohjelmaan ikuisia silmukoita tai käytä reak-lausetta, koska tavoitteena on oppia käyttämään toistorakenteiden ehtolausekkeita sujuvasti. 5. Dokumentointi Harjoitustyöstä kirjoitetaan dokumentti, jonka tulee sisältää seuraavat asiat:. Kansilehdellä tekijän nimi, opiskelijanumero, sähköpostiosoite, tiedekunta ja tutkinto-ohjelma. Sivun keskellä tulisi olla suuremmalla fontilla dokumentin nimi. Kurssin kotisivuilla julkaistaan esimerkinomainen kansilehti. 2. Korkeintaan puolen sivun mittainen kuvaus ohjelman toiminnasta vapaamuotoisena tekstinä. 3. Omia ajatuksia. Esimerkiksi: Oliko työ helppo, sopiva vai vaikea? Jos helppo tai vaikea, niin miksi? Mitä uutta opit? Oliko työstä mitään hyötyä sinulle? Montako tuntia työn tekemiseen meni? Dokumentin leipäteksti kirjoitetaan 2 pisteen fontilla ja yhdellä rivinvälillä. Dokumentin kirjoitus tekstinkäsittelyohjelmalla ja kieliasun tarkistus ohjelman oikolukutoiminnolla on suotavaa. Valmis teksti kannattaa lukea ennen palautusta. Dokumentti on palautettava pdf-muodossa. 6. Ohjaus ja tarkistus Harjoitustöitä ohjataan mikroluokissa. Ohjaukseen voi tulla harjoitusryhmästään riippumatta. Sähköpostilla lähetetyt kysymykset on kuitenkin hyvä laittaa oman ryhmän vetäjälle, jotta kysymykset jakaantuisivat tasaisesti kurssin opettajille. Ohjausajat eivät sulje toisiaan pois. Halutessaan voi osallistua vaikka kaikkiin harjoitustyön ohjauksiin. Huomaa, että ohjauksiin voi tulla ilman, että ohjelmassa on valmiiksi jokin ongelma, koska luokassa voi vain kirjoittaa ohjelmaa ja kysyä tarvittaessa neuvoa ilmenneisiin ongelmiin. Apua saa myös harjoitusten yhteydessä. Tuntiopettajat vastaavat ryhmäläistensä töiden tarkistuksesta. Vastuuopettajan ryhmäläisten harjoitustyöt jaetaan tuntiopettajille tarkistettaviksi. Lausekielinen ohjelmointi II Syksy 208 Jorma Laurikkala 6 / 7

Tehtävänantoon ja Javan piirteiden käyttöön liittyvissä epävarmoissa tilanteissa kannattaa aina kysyä ohjaajalta, koska kysyminen on aina parempi vaihtoehto kuin työn mahdollinen hylkäys. 7. Harjoitustyön palautus Ohjelma ja dokumentti täytyy palauttaa sähköisesti torstaihin 5..208 klo 6.00 mennessä WETO-järjestelmään. Tarkemmat palautusohjeet julkaistaan kurssin verkkosivuilla. Harjoitustöiden toiminnallisuus tarkistetaan WETO-järjestelmällä, joka vertailee automaattisesti mallivastauksen ja opiskelijoiden ratkaisujen tulosteita. Tästä syystä edellä annettuja tulostemäärittelyjä on seurattava merkilleen. Automaattinen vertailu vähentää rutiininomaista testaustyötä, jolloin opettajille jää enemmän aikaa mielekkäämpään työhön eli ohjelman rakenteen ja ohjelmointitavan tutkimiseen. Opiskelijat hyötyvät tästä perusteellisempien kommenttien muodossa. Lisäaikaa työn tekoon voi saada muutaman päivän vain 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 viimeisimpien muutosten jälkeen. 8. Harjoitustyön arvostelu Harjoitustyöt arvostellaan asteikolla hyväksytty/hylätty. Harjoitustyön tarkistanut opettaja ilmoittaa työn kohtalosta sähköpostilla, jossa on myös tarkempia kommentteja ohjelman tyylistä (rakenne ja hyvä ohjelmointitapa). Hylkäyksen perusteena voi olla ohjelman virheellinen toiminta, hyvän ohjelmointitavan noudattamatta jättäminen, harjoitustyön teossa kiellettyjen Javan ominaisuuksien käyttö (esimerkiksi taulukko), huono dokumentti 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. 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 Lähteet [] Wikipedia-yhteisö: Sustring, https://en.wikipedia.org/wiki/sustring. (Luettu viimeksi 29.0.208.) [2] Wikipedia-yhteisö: String-searching algorithm, https://en.wikipedia.org/wiki/string-searching_algorithm. (Luettu viimeksi 29.0.208.) [3] J. Laurikkala: Lausekielinen ohjelmointi -kurssin luentorunko, luku 4, http://www.sis.uta.fi/~laki/luennot/luento08/. (Luettu viimeksi 3.0.208.) Lausekielinen ohjelmointi II Syksy 208 Jorma Laurikkala 7 / 7