OPPITUNTI 18 Säännöllisten lausekkeiden käyttäminen

Koko: px
Aloita esitys sivulta:

Download "OPPITUNTI 18 Säännöllisten lausekkeiden käyttäminen"

Transkriptio

1 18. Säännöllisten lausekkeiden käyttäminen 319 OPPITUNTI 18 Säännöllisten lausekkeiden käyttäminen Säännölliset lausekkeet ovat tehokas keino tutkia ja muokata tekstiä. Ne mahdollistavat kuvioiden etsimisen merkkijonosta ja osaavat erottaa vastaavat kohdat joustavasti ja tarkasti. Ole kuitenkin varovainen, koska tehokkuutensa vuoksi ne ovat samalla myös hitaampia kuin tavalliset merkkijonofunktiot, joita tutkimme luvussa 17, "Merkkijonojen käsittely". Käytä siksi merkkijonofunktioita aina, kun nopeus ja tehokkuus ovat elintärkeitä. PHP tukee kahta säännöllisten lausekkeiden joukkoa. Sillä on joukko funktioita, jotka emuloivat PERL-kielen säännöllisiä lausekkeita ja funktiojoukko, joka tukee rajallisemmin POSIX-järjestelmän mukaisia säännöllisiä lausekkeita. Tutkimme tässä luvussa molempia lausekkeita. Tämän tunnin aiheita ovat seuraavat: Kuinka hakea kuvioita merkkijonoista säännöllisten lausekkeiden avulla Säännöllisten lausekkeiden syntaksin perusteet Kuinka korvata merkkijonojen teksti säännöllisten lausekkeiden avulla Kuinka työskennellä tehokkaammilla, PERL-yhteensopivilla säännöllisillä lausekkeilla

2 Säännöllisten lausekkeiden käyttäminen POSIXin mukaiset säännölliset lausekkeet POSIXin säännöllisten lausekkeiden funktiot mahdollistavat monimutkaistenkin kuvioiden hakemisen merkkijonoista ja kuvioiden korvaamisen. Niitä kutsutaan yleisesti vain säännöllisten lausekkeiden funktioiksi, mutta kutsumme niitä tässä kirjassa POSIXin säännöllisiksi lausekkeiksi erottaaksemme ne samanlaisista, mutta tehokkaammista PERL-yhteensopivista säännöllisistä lausekkeista; lisäksi nämä säännölliset lausekkeet ovat POSIXin laajennettujen säännöllisten lausekkeiden määrittelyn mukaisia. Säännöllinen lauseke on joukko symboleja, jotka vastaavat tekstissä olevaa merkkikuviota. Näiden lausekkeiden käyttämisen oppiminen on paljon enemmän kuin PHP:n säännöllisten lausekkeiden funktioiden argumenttien ja palautustyyppien oppiminen. Aloitamme funktioilla ja käytämme niitä esitelläksemme säännöllisten lausekkeiden syntaksin. Kuvioiden vastineiden hakeminen ereg()-funktiolla Funktio ereg() ottaa argumentikseen merkkijonon, joka edustaa kuviota sekä merkkijonon, joka edustaa tutkittavaa tekstiä ja vielä taulukkomuuttujan, johon haun tulokset laitetaan. Funktio palauttaa kokonaisluvun, joka edustaa vastanneiden merkkien määrää, jos kuvio löytyi merkkijonosta, tai muutoin arvon epätosi. Kokeilkaamme nyt etsiä merkkijonosta "Aardvark advocacy" kirjainyhdistelmää "aa": print ereg("aa","aardvark advocacy",$array); print "<br>$array[0]<br>"; // tulostus: // 2 // aa Kirjaimet "aa" löytyivät merkkijonosta "aardvark", joten ereg() palauttaa arvon 2, joka on vastanneiden merkkien määrä. Myös taulukon $array ensimmäinen alkio täytetään vastanneella merkkijonolla, joka sitten tulostetaan selaimelle. Saattaa näyttää oudolta, että tiedämme jo, että hakemamme kuvio on "aa". Meidän ei kuitenkaan tarvitse hakea pelkästään ennalta määritettyjä merkkejä. Voisimme käyttää yksittäistä pistettä (.), joka vastaa mitä tahansa merkkiä: print ereg("d.","aardvark advocacy",$array); print "<br>$array[0]<br>"; // tulostus: // 2 // dv Nyt d. vastaa kirjainta "d", jonka jälkeen voi olla mikä tahansa merkki. Emme tiedä etukäteen, mikä tuo toinen merkki voi olla, joten nyt alkion $array[0] arvosta on hyötyä.

3 18. Säännöllisten lausekkeiden käyttäminen 321 Määrän ilmaiseminen Kun merkkiä haetaan merkkijonosta, voidaan käyttää apuna määrän ilmaisijaa, joka määrittää, kuinka monta kertaa kyseisen merkin tulee toistua, jotta merkkijoukko vastaa hakua. Esimerkiksi kuvio a+ vastaa vähintään yhtä "a"-kirjainta, jota seuraa nolla tai useampi "a". Kokeilkaamme tätä: if ( ereg("a+","aaaa", $array) ) print $array[0]; // tulostaa "aaaa"; Huomaa, että tämä säännöllinen lauseke vastaa mitä tahansa merkkimäärää. Taulukko 18.1 luettelee määrän ilmaisijat, joita voi siis käyttää toistuvien (peräkkäisten) merkkien hakemisessa. Taulukko 18.1 Määrän ilmaisija toistuvien merkkien haussa Symboli Kuvaus Esimerkki Vastaa Ei vastaa * Nolla tai useampi esiintymä a* xxxx Vastaa kaikkea + Yksi tai useampi esiintymä a+ xaax xxxx? Nolla tai useampi esiintymä a? xaxx xaax {n} n esiintymää a{3} xaaa aaaa {n,} Ainakin n esiintymää a{3,} aaaa aaxx {,n} Enintään n esiintymää a{,2} xaax aaax {n1,n2} Ainakin n1 esiintymää, mutta enintään n2 esiintymää a{1,2} xaax xaaa Taulukossa 18.1 olevien aaltosulkujen sisällä käytettyjä numeroita kutsutaan rajoiksi. Rajoilla voidaan määrittää tarkasti, kuinka monta kertaa merkin tulisi toistua, jotta se vastaisi hakua. Ylä- ja alarajat tulee asettaa aaltosulkuihin kohdemerkin jälkeen (esimerkiksi a{1,2}). Kokeilkaamme nyt esimerkkiä. Kerho on määrittänyt jäsenkoodit jäsenilleen. Sopiva koodi sisältää 1-4 "y"- kirjainta, jota seuraa jokin aakkosnumeerinen merkki ja sen jälkeen luku 99. Kerho on pyytänyt meitä jäsentelemään taustalokia ja ottamaan esille jäsenkoodit aina kun mahdollista. $test = "the code is yyxgdh99 -- have you received my sub?"; if ( ereg( "y{1,4}.*99 ", $test, $array ) ) print "Found membership: $array[0]"; // tulostaa "Found membership: yyxgdh99 " Nyt jäsenkoodi alkaa kahdella "y"-kirjaimella, joita seuraa neljä isoa kirjainta. Lopussa on luku 99. Lauseke y{1,4} vastaa kahta "y"-kirjainta ja lauseke.* vastaa isoja kirjaimia (vastaa mitä tahansa määrää mitä tahansa merkkejä). Olemmeko jo valmiita? No emme suinkaan. Taataksemme, että vastannut kuvio päättyy lukuun 99, olemme vaatineet välilyönnin viimeiseksi merkiksi. Se palautetaan, kun vastine löytyy. Entäpä, jos tutkittava merkkijono on seuraavanlainen?

4 Säännöllisten lausekkeiden käyttäminen "my code is yyxgdh99 did you get my 1999 sub?" Koodimme tuottaisi nyt seuraavan jäsenkoodin "y code is yyxgdh99 did you get my 1999" Mikä meni vikaan? Säännöllinen lausekkeemme vastasi "y"-kirjainta merkkijonossa "my" ja sen jälkeen mitä tahansa määrää merkkejä, kunnes kohdattiin luku 99, jota seurasi välilyönti. Säännölliset lausekkeet ovat ehdottomia. Ne vastaavat kaikkia mahdollisia merkkejä mitä vain voivat. Siitä syystä lausekkeemmekin vastaa kaikkia mahdollisia merkkejä, kunnes eteen tulee vuosiluvusta 1999 irrotettu 99, joka ei kuitenkaan ole osa jäsenkoodia. Voisimme yrittää parantaa tilannetta hieman määrittämällä, että merkkien "y" ja "99" välissä olevien merkkien tulee olla todella aakkosnumeerisia eivätkä ne sisällä välilyöntejä. Itse asiassa voimme toteuttaa sen merkkiluokan avulla. Merkkien määrittäminen merkkiluokilla Toistaiseksi olemme joko hakeneet tiettyjä merkkejä tai mitä tahansa merkkejä. Merkkiluokilla voidaan haku kohdentaa tiettyyn merkkiryhmään. Merkkiluokka määritetään laittamalla halutut vastemerkit hakasulkuihin. Merkintä [ab] vastaa joko merkkiä 'a' tai merkkiä 'b'. Kun olet luonut merkkiluokan, voit käsitellä sitä ikään kuin merkkinä. Niinpä [ab]+ vastaa merkkijonoja "aaa", "bbb" tai "ababab". Voit käyttää myös merkkien sarjaa merkkiluokassa: [a-b] vastaa kaikkia pikkukirjaimia, [A-Z] kaikkia isoja kirjaimia ja [0-9] kaikkia numeroita. Voit yhdistellä arvoalueita ja yksittäisiä merkkejä yhteen merkkiluokkaan, jolloin esimerkiksi [a-z5] vastaa merkkijonoja, jotka alkavat numerolla 5 ja joita seuraa pikkukirjain. Voit myös kääntää merkkiluokan laittamalla hattumerkin (^) heti vasemmanpuoleisen hakasulun jälkeen: [^A- Z] vastaa mitä tahansa muuta paitsi isoja kirjaimia. Katsokaamme nyt esimerkkiä edellisestä jaksosta. Meidän tulee löytää 1-4 kertaa esiintyvä 'y', mikä tahansa aakkosnumeerinen merkki, joka voi esiintyä kuinka monta kertaa tahansa, sekä merkit "99". $test = "my code is yyxgdh99 did you get my 1999 sub?"; if ( ereg( "y{1,4}[a-za-z0-9]*99 ", $test, $array ) ) print "Found membership: $array[0]"; // tulostaa "Found membership: yyxgdh99 " Lähestymme nyt ratkaisua. Merkkiluokka, jonka lisäsimme, ei enää vastaa välilyöntejä, joten jäsenkoodi palautetaan nyt. Jos kuitenkin lisäämme pilkun jäsenkoodin perään tekstiimme, säännöllinen lausekkeemme epäonnistuu jälleen: $test = "my code is yyxgdh99, did you get my 1999 sub?"; if ( ereg( "y{1,4}[a-za-z0-9]*99 ", $test, $array ) )

5 18. Säännöllisten lausekkeiden käyttäminen 323 print "Found membership: $array[0]"; // lauseke ei onnistu tehtävässään Tämä johtuu siitä, että olemme vaatineet välilyönnin kuvion perään varmistaaksemme, että olemme jäsenkoodin lopussa. Niinpä, jos tekstissä on hakasuluissa oleva jäsenkoodi tai koodi on ennen heittomerkkiä tai pilkkua, epäonnistumme jälleen. Voimme muokata lausekettamme, jotta se vastaa kaikkia muita merkkejä paitsi aakkosnumeerisia merkkejä, jolloin pääsemme lähemmäksi ratkaisua: $test = "my code is yyxgdh99, did you get my 1999 sub?"; if ( ereg( "y{1,4}[a-za-z0-9]*99[^a-za-z0-9]", $test, $array ) ) print "Found membership: $array[0]"; // tulostaa "Found membership: yyxgdh99," Olemme nyt lähempänä, mutta ongelmia ilmenee vieläkin. Ensiksikin, olemme lisänneet pilkun palautettuun vastineeseen ja toiseksi vasteen saaminen epäonnistuu, jos jäsenkoodi on testattavan merkkijonon lopussa, koska se vaatii, että jäsenkoodin perään on laitettu merkki. Toisin sanoen meidän on löydettävä luotettava keino testata sanan viereiset merkit. Palaamme tähän ongelmaan myöhemmin. Atomeilla työskentely Atomi on kuvio, joka laitetaan hakasulkuihin (sitä kutsutaan usein myös osakuvioksi). Kun olet määrittänyt atomin, voit käsitellä sitä ikään kuin se olisi merkki tai merkkiluokka. Toisin sanoen voit vastata samaa kuviota niin monta kertaa kuin haluat käyttämällä taulukossa 18.1 esitettyä syntaksia. Seuraava koodi määrittää kuvion, joka sijoitetaan hakasulkuihin ja lisäksi vaaditaan, että atomin tulee esiintyä kaksi kertaan, jotta se vastaisi lauseketta: $test = "abbaxabbaxabbax"; if ( ereg( "([ab]+x){2}", $test, $array ) ) sprint "$array[0]"; // tulostaa "abbaxabbax" Lauseke [ab]+x vastaisi merkkijonoa "abbax", mutta ([ab]+x)2 vastaa merkkijonoa "abbaxabbax". Taulukon, joka viedään ereg()-funktiolle, ensimmäinen alkio sisältää kokonaisen vastemerkkijonon. Peräkkäiset alkiot sisältävät kunkin yksittäisen vasteatomin. Tämä tarkoittaa sitä, että voit päästä käsiksi vastanneen kuvion komponentteihin sekä koko vasteeseen. Seuraavassa koodissa haemme IP-osoitetta ja tulostamme osoitteen eri osat: $test = " "; if ( ereg( "([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)", $test, $array ) )

6 Säännöllisten lausekkeiden käyttäminen { foreach ( $array as $val ) print "$val<br>"; } // Tulostus: // // 158 // 152 // 1 // 58 Huomaa, että olemme käyttäneet escape-merkkiä (kenoviivaa (\)) lausekkeissamme. Sillä tavoin määritämme, että haluamme ohittaa pisteen erikoismerkityksen ja kohdella sitä tavallisena merkkinä. Näin tulee tehdä kaikkien sellaisten merkkien kohdalla, joilla on erikoismerkitys säännöllisissä lausekkeissa, mikäli tuo erikoismerkitys halutaan kiertää. Haarautumat Voit yhdistää kuvioita putkella ( ) luodaksesi haarautumia säännöllisiin lausekkeisiisi. Säännöllinen lauseke, jossa on kaksi haaraa, vastaa joko ensimmäistä tai toista haaraa. Näin saat vielä lisää joustavuutta lausekkeisiisi. Seuraava koodi vastaa joko merkkijonoa ".com" tai merkkijonoa ".co.uk": $test = "www.adomain.com"; if ( ereg( "\.com \.co\.uk", $test, $array ) ) print "it is a $array[0] domain<br>"; // tulostaa "it is.com domain" Säännöllisen lausekkeen ankkurointi Sen lisäksi, että voit määrittää kuvion, jonka haluat löytää merkkijonosta, voit myös päättää, mistä kohtaa merkkijonoa haluat tuon kuvion löytää. Testataksesi, onko kuvio merkkijonon alussa, käytä lausekkeessasi hattumerkkiä (^). Kuvio ^a vastaa merkkijonoa "apple", mutta ei merkkijonoa "banana". Testataksesi, että kuvio on merkkijonon lopussa käytä taalamerkkiä ($) lausekkeesi lopussa. Tällöin kuvio a$ vastaa merkkijonoa "flea", mutta ei merkkijonoa "dear". Jäsenkoodiesimerkkimme uudelleen Meillä on nyt työkaluja jäsenkoodiesimerkkiemme täydentämiseen. Muista, että olemme jäsennelleet sähköposteja erottaaksemme jäsenkoodit, jotka koostuvat 1-4 'y'-kirjaimesta, joita seuraa vaihteleva määrä aakkosnumeerisia merkkejä ja sen jälkeen merkkijono "99". Nykyinen ongelmamme on siinä, kuinka määritämme, milloin vastannut kuvio on sanan alueella. Emme voi käyttää välilyöntiä, koska sanan molemmin puolin voi olla välimerkkejä. Emme voi vaatia, että jokin ei-aakkosnumeerinen merkki olisi sanan erottimena, koska kuviomme voi aloittaa tai päättää merkkijonon.

7 18. Säännöllisten lausekkeiden käyttäminen 325 Nyt kun voimme luoda haaroja ja ankkuroida kuvioita, voimme vaatia, että jäsenkoodin perässä voi olla joko ei-aakkosnumeerinen merkki tai merkkijonon loppu. Voimme käyttää samaa logiikkaa määrittämään sanan, joka esiintyy aluekoodin alussa. Voimme käyttää myös hakasulkuja havaitsemaan jäsenkoodin, jonka perässä on välilyöntejä tai välimerkkejä: $test = "my code is yyxgdh99, did you get my 1999 sub?"; if ( ereg( "(^ [^a-za-z0-9])(y{1,4}[a-za-z0-9]*99)([^a-za-z0-9] $)", $test, A $array ) ) print "Found membership: $array[2]"; // tulostaa "Found membership: yyxgdh99" Kuten voit nähdä, säännölliset lausekkeet ovat vaikeaselkoisia, ainakin ensi silmäyksellä. Kun jaat ne osiin, saat kuitenkin selville niiden salaisuudet. Olemme nyt varmistaneet, että kuviomme on sanan alueella. Tämä tarkoittaa sitä, että sen edellä tulee olla ei-aakkosnumeerinen merkki tai sen tulee olla merkkijonon alku. Sen perässä tulee myös olla aakkosnumeerinen merkki tai merkkijonon loppu. Emme halua tallentaa edellä tai perässä olevia merkkejä, joten laitamme kuviomme hakasulkuihin. Siten voimme olla varmoja siitä, että haluttu kohde on taulukkomme ($array) toisena alkiona. Ereg() erottelee isot ja pienet kirjaimet. Jos et halua niin tapahtuvan, käytä eregi()-funktiota. Se ei erottele isoja ja pieniä kirjaimia, mutta toimii muutoin täysin samalla lailla kuin ereg(). Merkkijonojen korvaaminen egrep_replace()-funktiolla Toistaiseksi olemme etsineet kuvioita merkkijonosta muuttamatta merkkijonoa. Uusi egrep_replace()- funktio mahdollistaa kuvion hakemisen ja korvaamisen uudella osamerkkijonolla. Funktio ottaa kolme argumenttia: säännöllisen ilmauksen, tekstin, joka korvaa löydetyn kuvion ja muunnettavan tekstin. Funktio palauttaa merkkijonon, jos muokkaus on onnistunut. Jos haku ja korvaus eivät onnistu, palautetaan alkuperäinen kohdemerkkijono. Seuraavassa koodissa etsimme kerhon sihteerin nimeä ja korvaamme sen seuraavana olevan jäsenen nimellä: $test = "Our Secretary, Sarah Williams is pleased to welcome you."; print ereg_replace("sarah Williams", "Rev. P.W. Goodchild", $test); // tulostaa "Our Secretary, Rev. P.W. Goodchild is pleased to welcome you." Huomaa, että vaikka ereg() vastaa vain ensimmäistä löytämäänsä kuviota, se korvaa kaikki vastaavat esiintymät.

8 Säännöllisten lausekkeiden käyttäminen Taaksepäin viittaaminen egrep_replace()-funktiolla Taaksepäin viittaaminen mahdollistaa vastatun kuvion osan käyttämisen merkkijonon muuttamiseen. Tätä ominaisuutta käytettäessä tulee käyttää sulkumerkkejä ottamaan esille kaikki ne säännöllisen ilmauksen alkiot, joita halutaan käyttää. Näiden osakuvioiden kautta löydetty teksti on korvaavan merkkijonon käytettävissä, jos viittaat niihin kahdella kenoviivalla ja atomin numerolla (esimerkiksi \\1). Atomit numeroidaan järjestyksessä, ulommista sisään päin, vasemmalta oikealle alkaen arvosta \\1. Merkintä \\0 tallentaa koko vastineen. Seuraava koodi muuntaa päivämäärät, jotka ovat muodossa pp/kk/vv muotoon kk/pp/vv: $test = "25/12/2000"; print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)", "\\2/\\1/\\3", $test); // tulostaa "12/25/2000" Ereg_replace() tunnistaa isot ja pienet kirjaimet. Jos et halua niin tapahtuvan, voit käyttää Eregi_replace()-funktiota, joka ei tunnista isoja ja pieniä kirjaimia, mutta on muutoin samanlainen kuin ereg_replace(). Merkkijonojen pilkkominen split()-funktiolla Luvussa 17 kerrottiin, kuinka merkkijono voitiin jakaa osiin, jotka laitettiin taulukkoon funktiolla explode(). Kyseessä on tehokas menettely, mutta siinä voidaan antaa vain yksi merkkijoukko erottimeksi. PHP4:n split()-funktio mahdollistaa säännöllisten lausekkeiden hyödyntämisen määrittämään joustava erotin. Funktio ottaa argumenteikseen merkkijonon, joka edustaa erotinkuviota, ja lähdemerkkijonon. Se hyväksyy myös valinnaisen kolmannen argumentin, joka edustaa palautettavien alkioiden lukumäärää. Funktio palauttaa taulukon. Seuraava koodi käyttää säännöllistä lauseketta, jossa on kaksi erotinta; erottimena voi olla pilkku tai sana "and", jonka molemmin puolin on välilyönti: $text = "apples, oranges, peaches and grapefruit"; $fruitarray = split( ", and ", $text ); foreach ( $fruitarray as $item ) print "$item<br>"; // tulostus: // apples // oranges // peaches // grapefruit

9 18. Säännöllisten lausekkeiden käyttäminen 327 Perl-yhteensopivat säännölliset lausekkeet Jos siirryt Perl-maailmasta PHP:n käyttämiseen, tuntuvat POSIX-yhteensopivat lausekkeet varmaankin oudoilta. Hyvä uutinen onkin nyt se, että PHP4 tukee Perl-yhteensopivia säännöllisiä ilmauksia. Ne ovat jopa tehokkaampia kuin aiemmin esitetyt menettelyt. Tutkimme nyt näitä eroja. Kuvioiden hakeminen preg_match()-funktiolla Funktio preg_match() ottaa kolme argumenttia: säännöllisen lausekkeen, lähdemerkkijonon ja taulukkomuuttujan, johon vastineet tallennetaan. Funktio palauttaa arvon tosi, jos vastine löytyy, mutta muutoin arvon epätosi. Tämän funktion ja ereg_match()-funktion ero on säännöllisessä lausekkeessa. Perl-yhteensopivat säännölliset lausekkeet tulee laittaa erottimien sisälle. Yleensä nuo erottimet ovat kauttaviivoja, vaikkakin niiden sijaan voidaan käyttää mitä tahansa merkkiä. Seuraava koodi käyttää tätä funktiota hakemaan merkkijonosta merkkiä p, jota voi seurata mikä tahansa merkki, jonka jälkeen seuraa kirjain t: $text = "pepperpot"; if ( preg_match( "/p.t/", $text, $array ) ) print $array[0]; // tulostaa "pot" Perl-lausekkeet käytössä Oletuksena säännölliset ilmaukset koettavat vastata niin montaa merkkiä kuin mahdollista. Niinpä lauseke "/p.*t/" hakee ensimmäistä 'p'-merkkiä merkkijonosta ja vastaa niin montaa merkkiä kuin mahdollista kunnes viimeinen 't'-merkki kohdataan. Niinpä tämä säännöllinen lauseke vastaa koko testimerkkijonoa seuraavassa koodissa: $text = "pot post pat patent"; if ( preg_match( "/p.*t/", $text, $array ) ) print $array[0]; // tulostaa "pot post pat patent" Sijoittamalla kysymysmerkin (?) määrän ilmaisijan jälkeen voidaan Perl-lauseke pakottaa toimimaan kontrolloidummin. Lauseke "p.*t"

10 Säännöllisten lausekkeiden käyttäminen tarkoittaa "p-kirjainta, jota seuraa niin monta merkkiä kuin mahdollista ja sen jälkeen tulee kirjain t". Lauseke "p.*?t" tarkoittaa "p-kirjainta, jota seuraa niin vähän kirjaimia kuin mahdollista ja sen jälkeen tulee kirjain t" Seuraava koodi käyttää tätä tekniikkaa vastaamaan pienintä kirjainmäärää, jossa ensimmäisenä kirjaimena on 'p' ja viimeisenä kirjaimena 't': $text = "pot post pat patent"; if ( preg_match( "/p.*?t/", $text, $array ) ) print $array[0]; // tulostaa "pot" Perl-lausekkeet ja kenoviivalla merkityt merkit Joitakin merkkejä voidaan ohittaa Perl-lausekkeissa samalla lailla kuin merkkijonoissa. Esimerkiksi merkintä \t tarkoittaa tabulaattorimerkkiä ja \n uutta riviä. Myös Perl-lausekkeissa voidaan käyttää escape-merkkiä; tällöin lauseke vastaa kokonaista merkkityyppiä. Taulukko 18.2 luettelee nämä kenoviivamerkit. Taulukko 18.2 Escape-merkit, jotka vastaava merkkityyppejä Merkki Vastaa \d Mikä tahansa numero \D Mikä tahansa muu kuin numero \s Mikä tahansa tyhjä merkki (white space) \S Mikä tahansa muu kuin tyhjä merkki \w Mikä tahansa kirjain (myös alaviiva mukana) \W Mikä tahansa muu kuin kirjain Nämä escape-merkit voivat yksinkertaistaa säännöllisiä lausekkeita suunnattomasti. Ilman niitä joutuisit kirjoittamaan merkkiluokan rajat. Vertaa ereg()- ja preg_match()-funktioiden käyttöä kirjainten hakemisessa: ereg( "p[a-za-z0-9_]+t", $text, $array ); preg_match( "/p\w+t/, $text, $array );

11 18. Säännöllisten lausekkeiden käyttäminen 329 Perl-lausekkeet tukevat myös monia escape-merkkejä, jotka toimivat ankkureina. Ankkurit vastaavat sijainteja merkkijonossa vastaamatta mitään merkkejä. Nämä ankkurit luetellaan taulukossa Taulukko 18.3 Escape-merkit, jotka toimivat ankkureina Merkki Vastaa \A Merkkijonon alku \b Sanan rajat \B Ei sanan rajat \Z Merkkijonon loppu (ennen viimeistä rivinvaihtoa tai loppumerkkiä) \z Merkkijonon loppu (vain merkkijonon lopussa) Muista ongelmat, joita meillä oli sanarajojen hakemisessa jäsenkoodiesimerkissämme. Perlin mukaiset lausekkeet helpottavat tätä työtä. Vertaa ereg()- ja preg_match()-syntakseja, kun haetaan sanan merkkejä ja rajoja: ereg( "(^ [^a-za-z0-9_])(p[a-za-z0-9_]+t)([^a-za-z0-9_] $)", $text, $array ); preg_match( "\bp\w+t\b", $text, $array ); Esimerkkikoodissamme preg_match() vastaa merkkiä "p", mutta vain jos se on sanan rajana, jolloin sitä seuraa merkkejä ja lopuksi kirjain "t", mutta vain silloin, kun "t" on sanan rajamerkkinä. Sanan rajana oleva escape-merkki ei todellisuudessa vastaa kirjainta; se pelkästään vahvistaa, että raja esiintyy. Jos käyttäisit ereg_match()-funktiota, sinun tulisi muodostaa kuvio muille merkeille ja vastattava joko sitä tai merkkijonorajoja. Voit myös ohittaa kirjaimia muuttaaksesi niiden merkityksiä. Vastataksesi esimerkiksi kirjainta "." sinun tulisi lisätä kenoviiva sen eteen. Vasteiden etsiminen globaalisti preg_match_all()-funktiolla Eräs POSIX-mukaisten säännöllisten lausekkeiden ongelma on se, että on vaikeaa vastata jokaista kuvion esiintymää merkkijonossa. Niinpä käytettäessä ereg()-funktiota hakemaan sanoja, jotka alkavat kirjaimella "p" ja päättyvät kirjaimeen "s", löydetään vain ensimmäinen tapaus. Kokeilkaamme: $text = "I sell pots, plants, pistachios, pianos and parrots"; if ( ereg( "(^ [^a-za-z0-9_])(p[a-za-z0-9_]+s)([^a-za-z0-9_] $)", $text, $array ) ) { for ( $x=0; is_string( $array[$x] ); $x++ ) print "\$array[$x]: $array[$x]<br>\n"; } // tulostus:

12 Säännöllisten lausekkeiden käyttäminen // $array[0]: pots, // $array[1]: // $array[2]: pots // $array[3]:, Kuten odotimme, ensimmäinen löytömme "pots" tallennetaan $array-taulukon kolmanteen alkioon. Ensimmäinen alkio sisältää täydellisen vastineen, toinen taas välilyönnin ja neljäs pilkun. Saadaksesi jokaisen kuvion esille, meidän tulisi käyttää ereg_replace()-funktiota silmukassa poistamaan jokainen löydetty vaste ennen seuraavaa hakua. Voimme käyttää preg_match_all()-funktiota jokaisen vastineen löytämiseksi samalla kertaa kohdemerkkijonosta. Funktio ottaa argumenteikseen säännöllisen ilmauksen, lähdemerkkijonon, taulukkomuuttujan ja palauttaa arvon tosi, jos vaste löytyy. Taulukkomuuttuja täytetään moniulotteiseilla taulukolla, jonka ensimmäinen alkio sisältää jokaisen vasteen. Listaus 18.1 testaa merkkijonon käyttämällä preg_match_all()-funktiota; koodissa on kaksi for-silmukkaa, jotka tulostavat tuloksena olevan moniulotteisen taulukon. Listaus 18.1 Kuviovasteen hakeminen globaalisti preg_match_all()-funktiolla 1: <html> 2: <head> 3: <title>using preg_match_all() to match a pattern globally</title> 4: </head> 5: <body> 6: <?php 7: $text = "I sell pots, plants, pistachios, pianos and parrots"; 8: if ( preg_match_all( "/\bp\w+s\b/", $text, $array ) ) 9: { 10: for ( $x=0; $x< count( $array ); $x++ ) 11: { 12: for ( $y=0; $y< count( $array[$x] ); $y++ ) 13: print "\$array[$x][$y]: ".$array[$x][$y]."<br>\n"; 14: } 15: } 16: // Tulostus: 17: // $array[0][0]: pots 18: // $array[0][1]: plants 19: // $array[0][2]: pistachios 20: // $array[0][3]: pianos

13 18. Säännöllisten lausekkeiden käyttäminen : // $array[0][4]: parrots 22:?> 23: </body> 24: </html> Funktiolle preg_match_all() viedään $array-taulukko; siinä on vain yksi alkio, merkkijonotaulukko. Tämä taulukko sisältää testimerkkijonon kaikki sanat, jotka alkavat kirjaimella "p" ja päättyvät kirjaimeen "s". Funktio preg_match_all() täyttää moniulotteisen taulukon osakuvioiden vasteilla. Ensimmäinen alkio sisältää koko säännöllisen lausekkeen jokaisen vasteen. Kukin lisäalkio sisältää osamerkkijonojen vasteet. Niinpä seuraavassa kutsussa preg_match_all() $text = " , , "; preg_match_all( "/(\d+)-(\d+)-(\d+)/", $text, $array ); $array[0] tallentaa täysien vasteiden taulukon: $array[0][0]: $array[0][1]: $array[0][2]: $array[1] tallentaa ensimmäisen osamerkkijonon vastetaulukon: $array[1][0]: 01 $array[1][1]: 01 $array[1][2]: 01 $array[2] tallentaa toisen osamerkkijonon vastetaulukon: $array[2][0]: 05 $array[2][1]: 10 $array[2][2]: 03 ja niin edelleen.

14 Säännöllisten lausekkeiden käyttäminen Kuvioiden korvaaminen preg_replace()-funktiolla Tämä preg_replace()-funktio käyttäytyy täysin samalla tavalla kuin ereg_replace(), paitsi että sen kautta päästään käsiksi Perl-yhteensopivien säännöllisten lausekkeiden lisätoiminnallisuuteen. Funktio ottaa argumenteikseen säännöllisen ilmauksen, korvaavan merkkijonon ja lähdemerkkijonon. Jos vaste löytyy, se palauttaa muunnetun merkkijonon; muutoin se palauttaa lähdemerkkijonon kopion. Seuraava koodi muuntaa merkkijonon päivämäärät muodosta pp/mm/vv muotoon kk/pp/vv: $t = "25/12/99, 14/5/00"; $t = preg_replace( " \b(\d+)/(\d+)/(\d+)\b ", "\\2/\\1/\\3", $t ); print "$t<br>"; // tulostaa "12/25/99, 5/14/00" Huomaa, että käytimme edellä putkisymbolia ( ) erottimena. Sen ansiosta meidän ei tarvitse ohittaa kauttaviivan merkitystä kuviossamme. Funktio tukee viittauksia taaksepäin ssamalla lailla kuin ereg_replace()-funktio. Lähdemerkkijonon sijaan preg_match-funktiolle voidaan viedä merkkijonotaulukko ja se osaa muuntaa taulukon jokaisen merkkijonon. Tässä tapauksessa palautusarvo on muunnetut merkkijonot sisältävä taulukko. Voit viedä preg_match()-funktiolle myös taulukoita, joissa on säännöllisiä lausekkeita ja korvaavia merkkijonoja. Kutakin säännöllistä lauseketta käytetään lähdemerkkijonoon ja suoritetaan sitten vastaava korvaaminen. Seuraava koodi muuntaa päivämäärämuodot samalla lailla kuin ennenkin, mutta muuttaa myös kopio-oikeus-informaation lähdemerkkijonossa: $text = "25/12/99, 14/5/00. Copyright 1999"; $regs = array( " \b(\d+)/(\d+)/(\d+)\b ", "/([Cc]opyright) 1999/" ); $reps = array( "\\2/\\1/\\3", "\\1 2000" ); $text = preg_replace( $regs, $reps, $text ); print "$text<br>"; // tulostaa "12/25/99, 5/14/00. Copyright 2000" Luomme kaksi taulukkoa. Ensimmäinen, $regs, sisältää kaksi säännöllistä lauseketta ja toinen, $reps, sisältää korvaavat merkkijonot. Ensimmäinen $reps-taulukon alkio vastaa ensimmäistä $regs-taulukon alkiota jne. Jos korvaavien merkkijonojen taulukko sisältää vähemmän alkioita kuin säännöllisten lausekkeiden taulukko, tapahtuu vasteiden korvaaminen tyhjillä merkkijonoilla. Jos preg_replace()-funktiolle viedään säännöllisten lausekkeiden taulukko, mutta vain yksi korvaava merkkijono, käytetään tuota yhtä merkkijonoa kaikissa korvaamisissa. Muuntimet Perl-yhteensopivat säännölliset lausekkeet ovat joustavia; kuvioiden käyttötapa on muunneltavissa.

15 18. Säännöllisten lausekkeiden käyttäminen 333 Kuvion muuntaja on kirjain, joka sijoitetaan lopullisen erottimen jälkeen Perl-yhteensopivissa säännöllisissä lausekkeissa. Tuo muunnin muuttaa lausekkeen käyttäytymistä. Taulukko 18.4 luettelee Perl-lausekkeiden kuviomuuntimet. Taulukko 18.4 Perl-yhteensopivien säännöllisten lausekkeiden muuntimet Kuvio Kuvaus /i Isoja ja pieniä kirjaimia ei erotella /e Käsittelee preg_replace()-funktion korvaavaa merkkijonoa PHPkoodina /m Ankkurit $ ja ^vastaavat nykyisen rivin alkua ja loppua /s Vastaa rivinvaihtoja (piste ei normaalisti vastaa rivinvaihtoa) /x Merkkiluokkien ulkopuolella olevaa välilyöntiä ei vastata luettavuuden takia. Jos 'white space'-alueita halutaan vastata, tulee käyttää menettelyjä \s, \t tai \. /A Vastaa kuviota vain merkkijonon alussa (ei mukana Perlissä) /E Vastaa kuviota vain merkkijonon lopussa (ei mukana Perlissä) /U Tarkennus, jossa minimimäärä sallittuja vasteita löydetään (ei mukana Perlissä) Kuviomuuntimia voidaan myös yhdistellä. Saatat esimerkiksi haluta käyttää x-muunninta tekemään lausekkeista helppolukuisempia ja lisätä mukaan i-muuntimen, jolloin haussa ei erotella isoja ja pieniä kirjaimia. Esimerkiksi kuvio / b \S* t /ix vastaa merkkijonoja "bat" ja "BAT", mutta ei merkkijonoa "B AT". Huomaa, että itse kuviossa voi olla luettavuuden takia välilyöntejä; niitä ei oteta haussa huomioon. Muunninta m voidaan käyttää silloin, kun halutaan vastata ankkuroitua kuviota useilla tekstiriveillä. Ankkurikuviot ^ja $ vastaavat oletuksena koko merkkijonon alkua ja loppua. Seuraava koodi käyttää m- muunninta $-ankkurin käyttäytymisen muuttamiseen: $text = "name: matt\noccupation: coder\neyes: blue\n"; preg_match_all( "/^\w+:\s+(.*)$/m", $text, $array ); foreach ( $array[1] as $val ) print "$val<br>"; // tulostus: // matt // coder // blue Luomme säännöllisen lausekkeen, joka vastaa mitä tahansa sanaa, jota seuraa kaksoispiste ja mikä tahansa määrä välilyöntejä. Muunnin s on hyödyllinen, jos halutaan käyttää pistettä (.) vastaamaan merkkejä useilla riveillä. Seuraava koodi koettaa päästä käsiksi merkkijonon ensimmäiseen ja viimeiseen sanaan:

16 Säännöllisten lausekkeiden käyttäminen $text = "start with this line\nand you will reach\na conclusion in the end\n"; preg_match( "/^(\w+).*?(\w+)$/", $text, $array ); print "$array[1] $array[2]<br>"; Tämä koodi ei tulosta mitään. Vaikka säännöllinen lauseke löytää merkit merkkijonon alusta, ei piste (.) kuitenkaan vastaa rivinvaihtomerkkejä, jotka on upotettu tekstiin. Seuraavassa parannamme tilanteen s- muuntimen avulla: $text = "start with this line\nand you will reach\na conclusion in the end\n"; preg_match( "/^(\w+).*?(\w+)$/s", $text, $array ); print "$array[1] $array[2]<br>"; // tulostaa "start end" Muunnin e on erityisen tehokas. Se mahdollistaa preg_replace()-funktiossa olevan korvaavan merkkijonon käsittelyn ikäänkuin se olisi PHP-koodia. Voit viedä funktioille esimerkiksi taaksepäin viittauksia argumentteina tai käsitellä numeroluetteloita. Seuraavassa esimerkissä käytämme e-muunninta viemään päivämääränumerot funktiolle, joka palauttaa päivämäärän uudelleen muotoiltuna. <?php function convdate( $month, $day, $year ) { $year = ($year < 70 )?$year+2000:$year; $time = ( mktime( 0,0,0,$month,$day,$year) ); return date("l F Y", $time); } $dates = "3/18/99<br>\n7/22/00"; $dates = preg_replace( "/([0-9]+)\/([0-9]+)\/([0-9]+)/e", "convdate(\\1,\\2,\\3)", $dates); print $dates; // tulostaa: // Thursday 18 March 1999 // Saturday 22 July 2000?>

17 18. Säännöllisten lausekkeiden käyttäminen 335 Koodi löytää minkä tahansa kolmen numeron joukon, joiden erottimina on kauttaviivat, käyttämällä sulkumerkkejä sieppaamaan vastanneet numerot. Koska käytämme e-muunninta, voimme kutsua käyttäjän määrittelemää convdate()-funktiota korvaavan merkkijonon kautta ja viedä funktiolle kolme taaksepäin viittausta. Tuo convdate() yksinkertaisesti muokkaa numeroarvot luettavampaan päivämäärämuotoon. Yhteenveto Säännölliset lausekkeet ovat hyvin laaja aihe ja olemme todellakin nähneet vain osan niiden tehosta tällä tunnilla. Siitä huolimatta sinun tulisi nyt osata käyttää säännöllisiä lausekkeita hakemaan ja korvaamaan monimutkaisia kuvioita tekstistä. Sinun tulisi osata käyttää ereg()-funktiota hakemaan kuvioita merkkijonoista ja ereg_replace()-funktiota korvaamaan kaikki kuvioesiintymät merkkijonosta. Olemme myös opastaneet sinua hakemaan merkkialueita merkkiluokkien avulla, useita kuvioita määräilmaisimien avulla ja vaihtoehtoisia kuvioita haarautumien avulla. Sinun tulisi nyt osata myös erottaa osamerkkijonot ja viitata niihin taaksepäin viittauksilla. Perlyhteensopivien säännöllisten lausekkeiden avulla sinun tulisi osata käyttää escape-merkkejä ankkuroimaan kuvioita tai vastaamaan merkkityyppejä. Sinun tulisi osata myös käyttää muuntimia muuttamaan tapaa, jolla Perl-yhteensopivat lausekkeet toimivat. K&V K Perl-yhteensopivat säännölliset lausekkeet näyttävät hyvin tehokkailta. Mistä voin saada niistä lisätietoa? V PHP-manuaalista (http://www.php.net) saat lisätietoa. Hyödyllisiä paikkoja voivat olla myös erityisesti ja Tom Christiansenin artikkeli osoitteessa perlfaq6.html. Työpaja Työpaja tarjoaa pikakysymyksiä, joiden avulla voit kerrata läpikäytyä materiaalia. Yritä ymmärtää vastaukset ennen kuin jatkat seuraavaan lukuun. Vastaukset annetaan liitteessä A. Kysymyksiä 1. Mitä POSIX-funktiota käyttäisit vastaamaan kuviota merkkijonossa? 2. Millä säännöllisellä lausekkeella voisit hakea merkkijonosta kirjainta "b", kun kirjain voi esiintyä 1-6 kertaa? 3. Kuinka määrittäisit merkkialueen, joka on väliltä "d" ja "f"? 4. Kuinka tekisit kysymyksen 3 merkkialueesta käänteisen? 5. Millä syntaksilla voisit vastata joko mitä tahansa numeroa tai sanaa "tree"? 6. Mitä POSIX-lauseketta käyttäisit korvaamaan vastanneen kuvion? 7. Säännöllinen lauseke.*bc vastaa pikemminkin merkkijonoa "abc000000bc" kuin merkkijonoa "abc". Kuinka muuttaisit lauseketta niin, että se vastaisi vain ensimmäistä löydettyä esiintymää?

18 Säännöllisten lausekkeiden käyttäminen 8. Millaisella Perl-yhteensopivalla lausekkeella voisit vastata 'white space'.-merkkiä? 9. Millaisella Perl-yhteensopivalla funktiolla voisit vastata kuvion jokaista esiintymää? 10. Mitä muunninta käyttäisit Perl-yhteensopivassa funktiossa voidaksesi ohittaa haussa isojen ja pienten kirjainten erottelun? Toiminta 1. Käytä säännöllisiä lausekkeita erottamaan -osoitteita tiedostosta. Lisää ne taulukkoon ja tulosta selaimelle.

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

3.1 Mitä tarkoittaan heredoc? Milloin sitä kannattaa käyttää? Kirjoita esimerkki sen käyttämisestä.

3.1 Mitä tarkoittaan heredoc? Milloin sitä kannattaa käyttää? Kirjoita esimerkki sen käyttämisestä. PHP-kielen perusteet Käytä lähteenä PHP:n virallista manuaalia http://www.php.net/docs.php tai http://www.hudzilla.org/php (siirry Paul Hudsonin verkkokirjaan). Lisää materiaalia suomeksi esimerkiksi ohjelmointiputkan

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki PERL TIE-20306 Principles of Programming Languages Ryhmä 4: Joonas Lång & Jasmin Laitamäki 1. Johdanto Perl on ohjelmointikielten perhe, johon kuuluu Perl 5 ja Perl 6. Kielet ovat kuitenkin erilliset ohjelmointikielet

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

Johdatus Ohjelmointiin

Johdatus Ohjelmointiin Johdatus Ohjelmointiin Syksy 2006 Viikko 2 13.9. - 14.9. Tällä viikolla käsiteltävät asiat Peruskäsitteitä Kiintoarvot Tiedon tulostus Yksinkertaiset laskutoimitukset Muuttujat Tiedon syöttäminen Hyvin

Lisätiedot

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 5. Timo Savola. 28. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke

Lisätiedot

CLT131 Korpusten käsittely

CLT131 Korpusten käsittely CLT131 Korpusten käsittely Nicholas Volk Yleisen kielitieteen laitos, Helsingin yliopisto CLT131 Korpusten käsittely p.1/16 Syöterivien järjestäminen (sort) sort-komento järjestää syöterivin (aakkosjärjestykseen)

Lisätiedot

Tehtävä 2: Loppuosataulukko

Tehtävä 2: Loppuosataulukko Tehtävä 2: Loppuosataulukko Tutustu tarkoin seuraavaan tekstiin ja vastaa sitä hyväksi käyttäen tehtävän loppuosassa esitettyihin viiteen kysymykseen. Annetun merkkijonon (ns. hahmo) esiintymän haku pidemmästä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 10.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 10.2.2010 1 / 43 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Luonnolliset vs. muodolliset kielet

Luonnolliset vs. muodolliset kielet Luonnolliset vs. muodolliset kielet Luonnollisia kieliä ovat esim. 1. englanti, 2. suomi, 3. ranska. Muodollisia kieliä ovat esim. 1. lauselogiikan kieli (ilmaisut p, p q jne.), 2. C++, FORTRAN, 3. bittijonokokoelma

Lisätiedot

MITÄ JAVASCRIPT ON?...3

MITÄ JAVASCRIPT ON?...3 JavaScript MITÄ JAVASCRIPT ON?...3 YLEISTÄ JAVASCRIPTIN SYNTAKSISTA...3 KÄSKYSANAT JA MUUT VARATUT SANAT...3 MUUTTUJIEN, FUNKTIOIDEN JA LUOKKIEN NIMISSÄ...3 HTML-TAGEIHIN VIITTAAVISSA METODINIMISSÄ...3

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

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

Tehtävä 2: Säännölliset lausekkeet Tehtävä 2: Säännölliset lausekkeet 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

Lisätiedot

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

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.2.2010 1 / 41 Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta

Lisätiedot

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

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

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

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b Pythonin Kertaus Cse-a1130 Tietotekniikka Sovelluksissa Versio 0.01b Listat 1/2 esimerkkejä listan peruskäytöstä. > lista=['kala','kukko','kissa','koira'] ['kala','kukko','kissa','koira'] >lista.append('kana')

Lisätiedot

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

KESKI-SUOMEN MAAKUNNAN JA LÄHIKUNTIEN LUKIOIDEN TIETOTEKNIIKAN II KILPAILU 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ä

Lisätiedot

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

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille: Merkkijonot C-kielessä merkkijono on taulukko, jonka alkiot ovat char -tyyppiä. Taulukon viimeiseksi merkiksi tulee merkki '\0', joka ilmaisee merkkijonon loppumisen. Merkkijono määritellään kuten muutkin

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Merkkijonon tutkiminen matches-metodilla

Merkkijonon tutkiminen matches-metodilla Merkkijonon tutkiminen matches-metodilla String-luokkaan on määritelty seuraava metodi: public boolean matches(string regular_expression) Mihin käytetään String-luokan metodia public boolean matches(string

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 7.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 7.2.2011 1 / 39 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

Lisätiedot

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Tietorakenteet, laskuharjoitus 7, ratkaisuja Tietorakenteet, laskuharjoitus, ratkaisuja. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet ja 5 mahtuvat lehtisolmuihin, joten niiden lisäys ei muuta puun rakennetta. Avain 9

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset 815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include 15: 16: int main() 17: {

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: { Osa I 2. oppitunti C++-ohjelman osat Ennen kuin menemme yksityiskohtaisemmin sisälle C++-luokkiin, -muuttujiin jne, katsokaamme ensin, millaisista osista C++-ohjelma koostuu. Tämän tunnin aikana opit seuraavat

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 3 Supremum ja infimum Tarkastellaan aluksi avointa väliä, ) = { : < < }. Tämä on joukko, johon kuuluvat kaikki reaaliluvut miinus yhdestä yhteen. Kuitenkaan päätepisteet

Lisätiedot

SELECT-lauseen perusmuoto

SELECT-lauseen perusmuoto SQL: Tiedonhaku SELECT-lauseen perusmuoto SELECT FROM WHERE ; määrittää ne sarakkeet, joiden halutaan näkyvän kyselyn vastauksessa sisältää

Lisätiedot

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

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A. Tehtävä. Tämä tehtävä on aineistotehtävä, jossa esitetään ensin tehtävän teoria. Sen jälkeen esitetään neljä kysymystä, joissa tätä teoriaa pitää soveltaa. Mitään aikaisempaa tehtävän aihepiirin tuntemusta

Lisätiedot

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

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Matematiikan tukikurssi, kurssikerta 3

Matematiikan tukikurssi, kurssikerta 3 Matematiikan tukikurssi, kurssikerta 3 1 Epäyhtälöitä Aivan aluksi lienee syytä esittää luvun itseisarvon määritelmä: { x kun x 0 x = x kun x < 0 Siispä esimerkiksi 10 = 10 ja 10 = 10. Seuraavaksi listaus

Lisätiedot

VeRan laboratoriotietojen siirtoformaatti

VeRan laboratoriotietojen siirtoformaatti FCG Finnish Consulting Group Oy VERA TOIMINTAOHJEET Rev./pvm 1.03 Hyväksytty 30.4.2010 Sisältö Käyttö Vastuuhenkilö VeRan tiedonsiirtoformaatti Laboratoriot, jotka toimittavat tulokset suoraan VeRaan.

Lisätiedot

Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä

Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä Hyvä Salis Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä salasana. Jokainen salasanaan lisäämäsi kirjain

Lisätiedot

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

Vektorit. Vektorin luominen... 192 Vektorin tuominen näyttöön... 195 Vektorin koon ja alkioiden muokkaaminen... 195 Vektorin poistaminen... 12 Vektorit Vektorin luominen... 192 Vektorin tuominen näyttöön... 195 Vektorin koon ja alkioiden muokkaaminen... 195 Vektorin poistaminen... 196 TI -86 M1 M2 M3 M4 M5 F1 F2 F3 F4 F5 192 Luku 12: Vektorit

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

Lisätiedot

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus?

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus? Osa III 11. oppitunti Viittaukset Kahdessa viime luvussa opit käyttämään osoittimia kohteiden käsittelyyn vapaalla muistialueella sekä viittaamaan noihin kohteisiin epäsuorasti. Tässä luvussa käsiteltävät

Lisätiedot

VERKKOSOVELLUSTEN OHJELMOINTI, JOHDATUS PHP:HEN

VERKKOSOVELLUSTEN OHJELMOINTI, JOHDATUS PHP:HEN VERKKOSOVELLUSTEN OHJELMOINTI, JOHDATUS PHP:HEN Tämän tehtävän tarkoitus on tutustuttaa ympäristöön sekä tutustuttaa wwwdokumenttien tekoon php:llä. Alkutoimet Varmistetaan, että verkkolevyllä on kansio

Lisätiedot

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2 3

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2 3 PERUSLASKUJA Matemaattisten lausekkeiden syöttäminen: Kirjoita ilman välilyöntejä 3/+^ 3 Kirjoita muuten sama, mutta ota välilyönti :n jälkeen 3/ +^ 3 Liiku matematiikka alueella nuolinäppäimin. Kokeile

Lisätiedot

12.10.2011. Erittäin nopea tapa saada kehitysympäristö php:lle pystyyn Voidaan asentaa muistitikulle

12.10.2011. Erittäin nopea tapa saada kehitysympäristö php:lle pystyyn Voidaan asentaa muistitikulle (Ei yhtään videota tällä kertaa.) X niin kuin Cross-Platform, Apache, MySql, PHP, Perl Kehitysympäristö EI tuotantokäyttöön Monet tärkeät tietoturva-asetukset ovat oletuksena pois päältä Erittäin nopea

Lisätiedot

PHP tehtävä 3 Atte Pekarinen TIKT13A 4.12.2014

PHP tehtävä 3 Atte Pekarinen TIKT13A 4.12.2014 PHP-kielen perusteet 3.1 Mitä tarkoittaan heredoc? Milloin sitä kannattaa käyttää? Kirjoita esimerkki sen käyttämisestä. Heredoc on ominaisuus PHP-koodaamisessa, jolla voidaan kirjoittaa pitkiä tekstejä

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 06.09.2005 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita Käyttäjän kanssa keskusteleva ohjelma 1 Kirjoittaminen konsolinäkymään //Java ohjelma, joka tulostaa konsoli-ikkunaan public class HeiMaailma { public void aja() { // kirjoitus ja

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2011 1 / 46 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

KESKUSTANUORTEN NETTISIVUT- OHJEITA PIIRIYLLÄPITÄJÄLLE 1. KIRJAUTUMINEN

KESKUSTANUORTEN NETTISIVUT- OHJEITA PIIRIYLLÄPITÄJÄLLE 1. KIRJAUTUMINEN KESKUSTANUORTEN NETTISIVUT- OHJEITA PIIRIYLLÄPITÄJÄLLE 1. KIRJAUTUMINEN -Mene osoitteeseen keskustanuoret.fi/user - Kirjoita saamasi käyttäjätunnus ja salasana - Klikkaa yllä olevaa piirisi logoa niin

Lisätiedot

Talousmatematiikan perusteet, L3 Prosentti, yhtälöt Aiheet

Talousmatematiikan perusteet, L3 Prosentti, yhtälöt Aiheet Talousmatematiikan perusteet, L3 Prosentti, t Toisen Prosentti 1 Jos b on p% luvusta a, eli niin b = p 100 a a = perusarvo (Mihin verrataan?) (Minkä sadasosista on kysymys.) p = prosenttiluku (Miten monta

Lisätiedot

5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma

5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma 5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma Every cloud has a silver line. - englantilainen sananlasku Tässä osiossa tärkeää: yksi- ja moniulotteinen taulukko Sisältö Yleistä Yksiulotteinen

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 16.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 16.9.2015 1 / 26 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö Yleistä Tehtävä: Tee Javalla LineBreaker-ohjelma tekstirivin sovittamiseen tekstialueelle riviä katkomalla. Lausekielinen ohjelmointi II -kurssin pakollinen

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin

Lisätiedot

5.2 Ensimmäisen asteen yhtälö

5.2 Ensimmäisen asteen yhtälö 5. Ensimmäisen asteen ytälö 5. Ensimmäisen asteen yhtälö Aloitetaan antamalla nimi yhtälön osille. Nyt annettavat nimet eivät riipu yhtälön tyypistä tai asteesta. Tarkastellaan seuraavaa yhtälöä. Emme

Lisätiedot

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

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

KAAVAT. Sisällysluettelo

KAAVAT. Sisällysluettelo Excel 2013 Kaavat Sisällysluettelo KAAVAT KAAVAT... 1 Kaavan tekeminen... 2 Kaavan tekeminen osoittamalla... 2 Kaavan kopioiminen... 3 Kaavan kirjoittaminen... 3 Summa-funktion lisääminen... 4 Suorat eli

Lisätiedot

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään Ohjelmointi Ohjelmoinnissa koneelle annetaan tarkkoja käskyjä siitä, mitä koneen tulisi tehdä. Ohjelmointikieliä on olemassa useita satoja. Ohjelmoinnissa on oleellista asioiden hyvä suunnittelu etukäteen.

Lisätiedot

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006 TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa

Lisätiedot

Harjoitus 1 -- Ratkaisut

Harjoitus 1 -- Ratkaisut Kun teet harjoitustyöselostuksia Mathematicalla, voit luoda selkkariin otsikon (ja mahdollisia alaotsikoita...) määräämällä soluille erilaisia tyylejä. Uuden solun tyyli määrätään painamalla ALT ja jokin

Lisätiedot

Tietotekniikan valintakoe

Tietotekniikan valintakoe Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan

Lisätiedot

Merkkijono on palindromi, jos se säilyy samana, vaikka sen kääntää väärinpäin.

Merkkijono on palindromi, jos se säilyy samana, vaikka sen kääntää väärinpäin. A Palindromi Sinulle annetaan merkkijono, ja tehtäväsi on poistaa siitä tarkalleen yksi merkki, minkä jälkeen merkkijonon tulisi olla palindromi. Onko tehtäväsi mahdollinen? Merkkijono on palindromi, jos

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 4 Supremum ja inmum Tarkastellaan aluksi avointa väliä, Tämä on joukko, johon kuuluvat kaikki reaaliluvut miinus yhdestä yhteen Kuitenkaan päätepisteet eli luvut ja

Lisätiedot

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014 Yhtälönratkaisusta Johanna Rämö, Helsingin yliopisto 22. syyskuuta 2014 Yhtälönratkaisu on koulusta tuttua, mutta usein sitä tehdään mekaanisesti sen kummempia ajattelematta. Jotta pystytään ratkaisemaan

Lisätiedot

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return

Lisätiedot

CLT131: Tekstityökalut 2010, kolmas luento

CLT131: Tekstityökalut 2010, kolmas luento CLT131: Tekstityökalut 2010, kolmas luento Tommi A Pirinen tommi.pirinen@helsinki.fi Helsingin yliopisto Kieliteknologian oppiaine, Nykykielten laitos 2010-11-19 Asialista Käytännön asiat/kertaus Ongelman

Lisätiedot

Kaulaketju. Syöte. Tuloste. Esimerkki 1. Esimerkki 2

Kaulaketju. Syöte. Tuloste. Esimerkki 1. Esimerkki 2 A Kaulaketju Kaulaketjussa on sinisiä ja punaisia helmiä tietyssä järjestyksessä. Helmien järjestys voidaan esittää merkkijonona, jossa S vastaa sinistä helmeä ja P punaista helmeä. Esimerkiksi ketjussa

Lisätiedot

Ctl160 Tekstikorpusten tietojenkäsittely p.1/15

Ctl160 Tekstikorpusten tietojenkäsittely p.1/15 Ctl160 490160-0 Nicholas Volk Yleisen kielitieteen laitos, Helsingin yliopisto Ctl160 490160-0 p.1/15 Lisää säännöllisistä lausekkeista Aikaisemmin esityt * ja + yrittävät osua mahdollisimman pitkään merkkijonoon

Lisätiedot

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: SICP kohdat 22.2.3 Riku Saikkonen 2. 11. 2010 Sisältö 1 Linkitetyt listat 2 Listaoperaatioita 3 Listarakenteet 4 Gambit-C:n Scheme-debuggeri Linkitetyt

Lisätiedot

SQL Buddy JAMK Labranet Wiki

SQL Buddy JAMK Labranet Wiki Page 1 of 9 SQL Buddy JAMK Labranet Wiki Sisällysluettelo Yleistä SQL Buddy:sta kotisivu :http://sqlbuddy.com/ SQL Buddy on kevyt hallintatyökalu MySQL-tietokannalle. Järjestelmävaatimukset Serverin vaatimukset

Lisätiedot

Tentti erilaiset kysymystyypit

Tentti erilaiset kysymystyypit Tentti erilaiset kysymystyypit Monivalinta Monivalintatehtävässä opiskelija valitsee vastauksen valmiiden vastausvaihtoehtojen joukosta. Tehtävään voi olla yksi tai useampi oikea vastaus. Varmista, että

Lisätiedot

ASCII-taidetta. Intro: Python

ASCII-taidetta. Intro: Python Python 1 ASCII-taidetta All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/18cplpy to find out what to do.

Lisätiedot

Task list Submit code Submissions Messages Scoreboard View queue Edit contest

Task list Submit code Submissions Messages Scoreboard View queue Edit contest Code Submission Evaluation System Logged in: sharph Admin Logout Datatähti 2017 alku Contest start: 2016-10-03 00:00:00 Contest end: 2016-10-17 00:00:00 Task list Submit code Submissions Messages Scoreboard

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

Muuttujien määrittely

Muuttujien määrittely Tarja Heikkilä Muuttujien määrittely Määrittele muuttujat SPSS-ohjelmaan lomakkeen kysymyksistä. Harjoitusta varten lomakkeeseen on muokattu kysymyksiä kahdesta opiskelijoiden tekemästä Joupiskan rinneravintolaa

Lisätiedot

JavaScript alkeet Esimerkkikoodeja moniste 2 (05.10.11 Metropolia)

JavaScript alkeet Esimerkkikoodeja moniste 2 (05.10.11 Metropolia) JavaScript alkeet Esimerkkikoodeja moniste 2 (05.10.11 Metropolia) Esim 5.1 laskujärjestys operaattorit var tulos = 5 + 4 * 12 / 4; document.write("5 + 4 * 12 / 4 laskutoimituksen tulos

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

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

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 14.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 14.2.2011 1 / 55 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 2.5.2017 Timo Männikkö Luento 13 Merkkijonon sovitus Horspoolin algoritmi Laskennallinen vaativuus Päätösongelmat Epädeterministinen algoritmi Vaativuusluokat NP-täydellisyys

Lisätiedot

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Hahmon etsiminen syotteesta (johdatteleva esimerkki) Hahmon etsiminen syotteesta (johdatteleva esimerkki) Unix-komennolla grep hahmo [ tiedosto ] voidaan etsia hahmon esiintymia tiedostosta (tai syotevirrasta): $ grep Kisaveikot SM-tulokset.txt $ ps aux

Lisätiedot

Jukka Larja, Kim Nylund. 15. maaliskuuta 2005

Jukka Larja, Kim Nylund. 15. maaliskuuta 2005 Hirviön käyttöohje Jukka Larja, Kim Nylund 15. maaliskuuta 2005 1 Sisältö 1 Johdanto 3 1.1 Käsitteet...................................... 3 1.1.1 Muistiinpanot................................ 3 1.1.2

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja

Lisätiedot

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

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu Taulukot Taulukon määrittely ja käyttö Taulukko metodin parametrina Taulukon sisällön kopiointi toiseen taulukkoon Taulukon lajittelu esimerkki 2-ulottoisesta taulukosta 1 Mikä on taulukko? Taulukko on

Lisätiedot

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot C! : Moniulotteiset taulukot & Bittioperaatiot 15.3.2016 Agenda Pieni kertausharjoitus Moniulotteiset taulukot Esimerkki taulukoista Tauko (bittitehtävä) Binäärioperaatioista Esimerkki (vilkaistaan IP

Lisätiedot

ICT1TN004. Skriptikielet. Heikki Hietala

ICT1TN004. Skriptikielet. Heikki Hietala Skriptikielet Heikki Hietala Skriptikielet Skriptikielet eli komentosarjakielet ovat ohjelmointikieliä, joilla automatisoidaan tehtäviä Toisaalta niitä käytetään käyttöjärjestelmälle ominaisia tehtäviä

Lisätiedot

kertaa samat järjestykseen lukkarissa.

kertaa samat järjestykseen lukkarissa. Opetuksen toistuva varaus ryhmällee TY10S11 - Tästä tulee pitkä esimerkki, sillä pyrin nyt melko yksityiskohtaisesti kuvaamaan sen osion mikä syntyy tiedon hakemisesta vuosisuunnittelusta, sen tiedon kirjaamiseen

Lisätiedot

Ongelma(t): Miten merkkijonoja voidaan hakea tehokkaasti? Millaisia hakuongelmia liittyy bioinformatiikkaan?

Ongelma(t): Miten merkkijonoja voidaan hakea tehokkaasti? Millaisia hakuongelmia liittyy bioinformatiikkaan? Ongelma(t): Miten merkkijonoja voidaan hakea tehokkaasti? Millaisia hakuongelmia liittyy bioinformatiikkaan? 2012-2013 Lasse Lensu 2 Ihmisen, eläinten ja kasvien hyvinvoinnin kannalta nykyaikaiset mittaus-,

Lisätiedot

Sonera Viestintäpalvelu VIP VIP Laajennettu raportointi Ohje

Sonera Viestintäpalvelu VIP VIP Laajennettu raportointi Ohje Sonera Viestintäpalvelu VIP VIP Laajennettu raportointi Ohje Sisällysluettelo VIP Laajennettu raportointi... 3 Luo raportti Laajennetun raportoinnin työkaluilla... 4 Avaa Laajennettu raportointi... 4 Valitse

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 11.08.2010 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

Lisätiedot

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi

Lisätiedot

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 8. Aluekyselyt. 8.1 Summataulukko Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 21.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 21.1.2009 1 / 32 Tyypeistä Monissa muissa ohjelmointikielissä (esim. Java ja C) muuttujat on määriteltävä ennen

Lisätiedot

Opetustapahtumien hakeminen (Hae - Opetustapahtuma)

Opetustapahtumien hakeminen (Hae - Opetustapahtuma) Helsingin yliopisto WinOodi 1 (5) Opetustapahtumien hakeminen (Hae - Opetustapahtuma) Opetustapahtumien hakua tarvitaan sekä opetustapahtumien käsittelyssä että raporttien tulostamisessa. Ohjeessa käsitellään

Lisätiedot