KESKI-SUOMEN MAAKUNNAN JA LÄHIKUNTIEN LUKIOIDEN TIETOTEKNIIKAN II KILPAILU



Samankaltaiset tiedostot
Tehtävä 2: Säännölliset lausekkeet

Tehtävä 1: Tietoturva

Tietotekniikan valintakoe

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB

ITKP102 Ohjelmointi 1 (6 op)

Luonnolliset vs. muodolliset kielet

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

Harjoitustyön testaus. Juha Taina

Ohjelmoinnin perusteet Y Python

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Yhteydettömän kieliopin jäsennysongelma

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

11.4. Context-free kielet 1 / 17

Säännöllisten kielten sulkeumaominaisuudet

Ohjelmoinnin peruskurssi Y1

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 19. syyskuuta 2016

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmointi 1 C#, kevät 2014, 2. uusintatentti NIMI:

c) 22a 21b x + a 2 3a x 1 = a,

Lukion matematiikkakilpailun alkukilpailu 2015

Ohjelmoinnin perusteet Y Python

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

joissa on 0 4 oikeata vastausta. Laskimet eivät ole sallittuja.

Luento 5. Timo Savola. 28. huhtikuuta 2006

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3

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

Ohjelmoinnin perusteet, 1. välikoe

Lukumäärän laskeminen 1/7 Sisältö ESITIEDOT:

M =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e)

Ohjelmoinnin perusteet Y Python

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

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna

Käänteismatriisin. Aiheet. Käänteismatriisin ominaisuuksia. Rivioperaatiot matriisitulona. Matriisin kääntäminen rivioperaatioiden avulla

Ohjelmoinnin perusteet Y Python

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5 Kerta 6 Kerta Toteuta Pythonilla seuraava ohjelma:

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on

Vaihtoehtoinen tapa määritellä funktioita f : N R on

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

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


Automaatit. Muodolliset kielet

1. Logiikan ja joukko-opin alkeet

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

Kaikkiin tehtäviin laskuja, kuvia tai muita perusteluja näkyviin.

Diskreetin matematiikan perusteet Laskuharjoitus 1 / vko 8

Tietorakenteet (syksy 2013)

Metodien tekeminen Javalla

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Zeon PDF Driver Trial

Matemaatiikan tukikurssi

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

Täydentäviä muistiinpanoja laskennan rajoista

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

811120P Diskreetit rakenteet

2 Raja-arvo ja jatkuvuus

4. Tehtävässä halutaan todistaa seuraava ongelma ratkeamattomaksi:

Matematiikan ja tilastotieteen laitos Algebra I - Kesä 2009 Ratkaisuehdoituksia harjoituksiin 8 -Tehtävät sivua Heikki Koivupalo ja Rami Luisto

Chomskyn hierarkia ja yhteysherkät kieliopit

Matematiikan peruskurssi 2

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

(a) Kyllä. Jokainen lähtöjoukon alkio kuvautuu täsmälleen yhteen maalijoukon alkioon.

Analyysi 1. Harjoituksia lukuihin 1 3 / Syksy Osoita täsmällisesti perustellen, että joukko A = x 4 ei ole ylhäältä rajoitettu.

Tehtäväsarja I Seuraavissa tehtävissä harjoitellaan erilaisia todistustekniikoita. Luentokalvoista 11, sekä voi olla apua.

Ratkaisu: a) Kahden joukon yhdisteseen poimitaan kaikki alkiot jotka ovat jommassakummassa joukossa (eikä mitään muuta).

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen.

T Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut

Johdatus matematiikkaan

b) Määritä myös seuraavat joukot ja anna kussakin tapauksessa lyhyt sanallinen perustelu.

13. Loogiset operaatiot 13.1

Matematiikan tukikurssi, kurssikerta 1

uv n, v 1, ja uv i w A kaikilla

Vektorit. Vektorin luominen Vektorin tuominen näyttöön Vektorin koon ja alkioiden muokkaaminen Vektorin poistaminen...

Python-ohjelmointi Harjoitus 2

FORMAALI SYSTEEMI (in Nutshell): aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmointi 1 C#, kevät 2013, 2. tentti

7.4 Sormenjälkitekniikka

Ohjelmoinnin perusteet Y Python

1 Lukujen jaollisuudesta

Sinulle on annettu bittijono, ja tehtäväsi on muuttaa jonoa niin, että jokainen bitti on 0.

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

3 Suorat ja tasot. 3.1 Suora. Tässä luvussa käsitellään avaruuksien R 2 ja R 3 suoria ja tasoja vektoreiden näkökulmasta.

Matematiikan johdantokurssi, syksy 2016 Harjoitus 11, ratkaisuista

Muodolliset kieliopit

8. Kieliopit ja kielet

1. Otetaan perusjoukoksi X := {0, 1, 2, 3, 4, 5, 6, 7}. Piirrä seuraaville kolmelle joukolle Venn-diagrammi ja asettele alkiot siihen.

13. Loogiset operaatiot 13.1

Ohjelmoinnin perusteet Y Python

Transkriptio:

KESKI-SUOMEN MAAKUNNAN JA LÄHIKUNTIEN LUKIOIDEN TIETOTEKNIIKAN II KILPAILU KESKI-SUOMEN MAAKUNNAN JA LÄHIKUNTIEN LUKIOIDEN FYSIIKAN, KEMIAN JA MATEMATIIKAN XXIII KILPAILUN OSANA 23.1.2014 Huom: Tehtävä 2 (ohjelmointitehtävä) pohjautuu Tehtävän 1 kysymykseen 6. Kannattaa arvioida mihin kysymyksiin ehtii vastaamaan rajoitetun kilpailuajan puitteissa. Tehtävä 1: Säännölliset lausekkeet Teoriaa Kun tietokoneohjelmalla luetaan käyttäjän syötettä, olisi syöte aina syytä tarkistaa. Syötteessä voi olla vääriä merkkejä tai merkkejä väärillä paikoilla (syntaktinen vika), tai se voi olla sisällöllisesti mieletön (semanttisesti väärin, esim. päivämäärä 32.2.2013). Merkkijonon (jatkossa käytetään pelkkää sana jono) syntaktisessa oikeellisuustarkistuksessa voidaan käyttää säännöllisiä lausekkeita (englanniksi regular expression). Säännöllisissä lausekkeissa tietyllä merkinnällä voidaan mm. sanoa, että joku merkki toistuu nolla tai useampia kertoja. Esimerkiksi tarkastellaan säännöllistä lauseketta ja kahta tutkittavaa jonoa: Säännöllinen lauseke: a b* c Tutkittava jono: a bbb c Hyväksytään a b* c? a bbb Hylätään Hyväksytään-esimerkissä säännöllisen lausekkeen alusta löytyy a, joka vastaa jonon a:ta. Lausekkeen b* vastaa jonoa bbb, koska * monistaa edellisen merkin 0-n kertaa. Lopussa molemmissa on c. Kaikille jonon merkeille löytyy siis vastine säännöllisestä lausekkeesta. Esimerkin säännöllinen lauseke hyväksyisi myös jonot ac, abc, abbc ja vaikkapa abbbbbbbbbbbbbc. Hylätään-esimerkissä on muuten samat vastaavuudet, mutta lausekkeen c ei vastaa mitään tutkittavan jonon merkkiä, jolloin lauseke ei siis hyväksy jonoa. Jos lauseke olisi ab*, tutkittavaa jonoa abbbc ei hyväksyttäisi, koska tällöin jonon c:lle ei olisi vastaava merkkiä lausekkeessa. Useimmissa ohjelmointikielissä on valmiit kirjastot säännöllisiä lausekkeita varten. Oletetaan, että käyttäjän syöte (esimerkiksi WWW-lomakkeelta) olisi luettu merkkijonomuuttujaan jono. Kellonajan tarkistaminen muotoon hh:mm voitaisiin tehdä esimerkiksi eräällä ohjelmointikielellä seuraavalla ohjelmakoodilla: if ( Pattern.matches("[0-2][0-9]:[0-5][0-9]", jono) )... jono oikein... Tämä tarkistus jättää vielä toki paljon mahdollisuuksia syötön sisällöllisille virheille. Palataan niihin myöhemmin. 1/7

Taulukossa 1 annetaan osajoukko eräistä säännöllisten lausekkeiden merkinnöistä. Esimerkkilausekkeen jälkeen on esimerkkejä jonoista, jotka lauseke hyväksyy ja esimerkkejä jonoista, jotka hylätään. Merkintä Selitys ja esimerkki Hyväksyy mm. jonot. Mikä tahansa merkki. ki.a kiva, kisa kuva Hylkää mm. jonot * Edellinen 0 kertaa tai miten monta kertaa tahansa. ab*a aa, aba, abba abca, abc k.*a kissa, koira, kuva kettu + Edellinen vähintään yhden kerran. ab+a aba, abba, abbba aca, aa? Edellinen 0 tai 1 kertaa. ab?a aa, aba abba [lista] {n} Hakasuluissa voidaan antaa lista merkeistä, joista vain yksi käytetään. Tässä lista tai sen osa voidaan ilmoittaa myös muodossa alkumerkki-loppumerkki. a[bf]a aba, afa abfa, ada a[a-ek]a aba, aea, aka afa, aeka a[a-e]*a aa, aaa, aea, aaba, abbbeba afa Aaltosuluilla voidaan määrittää kerroin, jolla edellinen tulee tasan n kertaa. ab{2}a abba aba (ryhmä) Kaarisuluilla voidaan yhdistää merkkejä ryhmäksi, johon mm. *, + tai kerroin vaikuttaa. a(ab)*c ac, aabc, aababc aac, adc, abac a(ab)+c aabc, aababc ac, aac, adc, abac a(ab){2}c aababc ac, aabc, ababac Jompi kumpi vaihtoehdoista. a(bb k)a abba, aka akka, abka Taulukko 1: Säännöllisten lauseiden merkintöjä ja esimerkkejä. 2/7

Esimerkiksi 2000-luvulla syntyneen suomalaisen henkilötunnuksen merkkien oikeellisuus voitaisiin tarkistaa lausekkeella [0-9]{6}A[0-9]{3}[0-9A-FHJ-NPR-Y] Kyseisen säännöllisen lausekkeen toiminta voidaan selittää tarkastelemalla sen osien toimintaa seuraavasti: [0-9]{6} Numeroita väliltä 09 kuusi kappaletta, A merkki A (koska 2000-luvulla syntyneillä erotinmerkki on A), [0-9]{3} numeroita väliltä 09 kolme kappaletta, [0-9A-FHJ-NPR-Y] ja lopuksi hetun tarkistusmerkiksi jokin numeroista 0 9 tai kirjaimista AY, paitsi ei G, I, O tai Q (koska olisivat käsin kirjoitettuna sotkettavissa numeroihin 6, 1 tai 0). Esimerkki hyväksyttävästä jonosta voisi olla 230506A123B. Toisaalta jono 230506-123B hylättäisiin, koska 6. numeron jälkeen ei ole A-kirjainta. Jono 230506A123 hylättäisiin, koska kolmen loppunumeron jälkeen ei ole vaadittua tarkistusmerkkiä. Vastaavasti 230506A123I hylättäisiin, koska kirjain I ei ole sallittujen tarkistusmerkkien joukossa. Tämän syntaktisen tarkistuksen lisäksi on toki ohjelmallisesti tarkistettava, että päiväysosan kuusi numeroa muodostavat semanttisesti järkevän päiväyksen sekä tarkistusmerkki noudattaa sovittua muista merkeistä laskettavaa sääntöä. Tähän emme kuitenkaan puutu enempää tehtävässä. Kyseinen tarkistaminen olisi kuitenkin helppoa, koska em. syntaktisen tarkistuksen jälkeen voidaan luottaa siihen, että kaikki numerot ovat oikeassa paikassa. Joskus voidaan hyväksyä myös tyhjä jono. Esimerkiksi lauseke a*b* hyväksyy mm. jonot a, b, aa, ab, aaaaaabbbbbb. Toisaalta a voi olla nolla kertaa ja b voi olla nolla kertaa, joten lauseke hyväksyy myös tyhjän jonon eli jonon, jossa ei ole yhtään merkkiä (merkkien määrä on nolla; katso * taulukossa 1). 3/7

Kysymys 1. Vastaa kohtiin (a) ja (b) täyttämällä vastauspaperille kysymyksessä (a) oleva mallitaulukko ruksaamalla kunkin jonon osalta oikea vastaus. (a) Olkoon säännöllinen lauseke muotoa a.(t mu)*e Huomaa, että mu muodostaa tässä kokonaisuuden. Mitkä seuraavista jonoista lauseke hyväksyy ja mitkä hylkää? Jono Hyväksyy Hylkää ate aate atue aatutue aamute atmut (b) Mitkä kohdan (a) jonoista hyväksytään ja mitkä hylätään, jos lauseke on muotoa a.((t m)u)*e Kysymys 2. (a) Kellonajan tarkistava säännöllinen lauseke voisi olla seuraavaa muotoa: [0-2]?[0-9]:[0-5][0-9] Anna yksi esimerkki kellonajasta, jonka lauseke hyväksyy, muttei ole todellisuudessa kelvollinen kellonaika. (b) Miksi seuraava lauseke korjaisi (a)-kohdan ongelmia? (([01]?[0-9]) (2[0-3])):[0-5][0-9] Kysymys 3. Olkoon säännöllinen lauseke muotoa ((1*0){3})*1* (a) Anna kolme jonoa pituudeltaan kymmenen merkkiä, jotka lauseke hyväksyy. (b) Anna kolme jonoa pituudeltaan korkeintaan kymmenen merkkiä, joissa on joko merkkejä 0 tai merkkejä 1 (ei molempia) ja jotka lauseke hylkää. (c) Hylkääkö vai hyväksyykö lauseke tyhjän jonon (ei yhtään merkkiä)? Perustele. 4/7

Kysymys 4. (a) Kirjoita viisi jonoa, joissa on vain merkkejä 0 ja 1 sekä jonoista löytyy osajono 00. (b) Kirjoita viisi jonoa, joissa on vain merkkejä 0 ja 1, mutta joista ei löydy osajonoa 00. Vinkki seuraaviin kysymyksiin Seuraavissa tehtävissä pyydetään säännöllistä lauseketta, joka hyväksyy vain sellaiset jonot, joissa kysymyksessä annetut ehdot täyttyvät, eli se hylkää kaikki muut. Merkkijonojen tapauksessa termi osajono tarkoittaa jonon sellaista osaa, jonka merkit löytyvät samassa järjestyksessä peräkkäin itse jonosta. Esimerkiksi ab on jonojen saab, abba ja ab osajono, mutta ab ei ole jonon samba osajono. Selventääksesi tehtävää itsellesi, kirjoita aina ensin itsellesi muutamia erilaisia esimerkkijonoja, jotka kysymyksen asettelun mukaan pitää hyväksyä, ja muutamia, jotka pitää hylätä. Muista sitten verrata vastauksiasi niihin. Muista silti, että kaikki muutkin säännön täyttävät jonot pitää hyväksyä. 5/7

Kysymys 5. Valitse alla olevista viidestä säännöllisestä lausekkeesta yksi, joka hyväksyy vain jonot, joissa kaikki seuraavat on vain merkkejä 0 tai 1, jonosta löytyy osajono 00. Lauseke 0*1* [01]+ [01]*00[01]* 00[01]* [01]+00[01]+ Hyväksyy Kysymys 6. Kirjoita säännöllinen lauseke, joka hyväksyy vain jonot, joissa kaikki seuraavat on vain merkkejä 0 tai 1, löytyy ensin jostakin kohdasta osajono 00 ja sitten heti tai myöhemmin osajono 11. Huomautus: Jonon ei tarvitse alkaa osajonolla 00 eikä loppua osajonoon 11. Kysymys 7. Kirjoita säännöllinen lauseke, joka hyväksyy vain jonot, joissa kaikki seuraavat on vain merkkejä 0 tai 1, löytyy jostakin kohdasta osajono 00 tai osajono 11 (tai molemmat). Kysymys 8. Kirjoita säännöllinen lauseke, joka hyväksyy vain jonot, joissa kaikki seuraavat on vain merkkejä 0 tai 1 tai jono on tyhjä, ei ole kahta peräkkäistä merkkiä 0 (eli ei osajonoa 00). Kysymys 9. Kirjoita säännöllinen lauseke, joka hyväksyy vain jonot, joissa kaikki seuraavat on vain merkkejä 0 tai 1 tai jono on tyhjä, ei ole osajonoa 00, eikä osajonoa 11. (maksimipistemäärä 3) 6/7

Tehtävä 2: Ohjelmointitehtävä Kysymys 10. Alla on saman toiminnallisuuden sisältävä esimerkkialiohjelma kahdella eri ohjelmointikielellä tukemaan näiden kielien syntaksin muistamista. Voit myös käyttää jotain muuta ohjelmointikieltä seuraavan kysymyksen vastauksessasi. Mitkä ohjelmointikielet ovat kyseessä? (2 pistettä) Esimerkki 1. public static int summaapositiiviset(int[] taulu){ int summa = 0; for (int i = 0; i < taulu.length; i++) { if ( taulu[i] > 0 ) { summa = summa + taulu[i]; } } return summa; } Esimerkki 2. def summaa_positiiviset(taulu): summa = 0 for alkio in taulu: if alkio>0: summa = summa + alkio return summa Kysymys 11. Tee valitsemallasi ohjelmointikielellä aliohjelma (rutiini, proseduuri, funktio tai metodi), joka hyväksyy samat jonot kuin edellisen tehtävän kysymyksessä 6. Aliohjelma ottaa syötteenä olevan tarkastettavan jonon parametrinaan joko kokonaislukutaulukko tai merkkijono. Aliohjelman tulee palauttaa boolean-arvo tosi jos parametrina tuotu syöte hyväksytään tai muuten epätosi. (20 pistettä) 7/7