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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Opetustapahtumien hakeminen (Hae - Opetustapahtuma)

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

Lisätiedot

9. Vektorit. 9.1 Skalaarit ja vektorit. 9.2 Vektorit tasossa

9. Vektorit. 9.1 Skalaarit ja vektorit. 9.2 Vektorit tasossa 9. Vektorit 9.1 Skalaarit ja vektorit Skalaari on koon tai määrän mitta. Tyypillinen esimerkki skalaarista on massa. Lukumäärä on toinen hyvä esimerkki skalaarista. Vektorilla on taas suuruus ja suunta.

Lisätiedot

Uuden Peda.netin käyttöönotto

Uuden Peda.netin käyttöönotto Sisällysluettelo Uuden Peda.netin käyttöönotto...2 Sisään- ja uloskirjautuminen...2 OmaTila...3 Peda.netin yleisrakenne...4 Työvälineet - Sivut...5 Sivun lisääminen omaan profiiliin:...5 Sivun poistaminen

Lisätiedot

Matematiikan tukikurssi, kurssikerta 2

Matematiikan tukikurssi, kurssikerta 2 Matematiikan tukikurssi kurssikerta 1 Relaatioista Oletetaan kaksi alkiota a ja b. Näistä kumpikin kuuluu johonkin tiettyyn joukkoon mahdollisesti ne kuuluvat eri joukkoihin; merkitään a A ja b B. Voidaan

Lisätiedot

Harjoitus 6 ( )

Harjoitus 6 ( ) Harjoitus 6 (30.4.2014) Tehtävä 1 Määritelmän (ks. luentomoniste s. 109) mukaan yleisen, muotoa min f(x) s.t. g(x) 0 h(x) = 0 x X (1) olevan optimointitehtävän Lagrangen duaali on max θ(u,v) s.t. u 0,

Lisätiedot

Tentti erilaiset kysymystyypit

Tentti erilaiset kysymystyypit Tentti erilaiset kysymystyypit Kysymystyyppien kanssa kannatta huomioida, että ne ovat yhteydessä tentin asetuksiin ja erityisesti Kysymysten toimintatapa-kohtaan, jossa määritellään arvioidaanko kysymykset

Lisätiedot

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys Loogisia operaatioita - esimerkkejä Tänään on lämmin päivä ja perjantai Eilen satoi ja oli keskiviikko tai tänään on tiistai. On perjantai ja kello on yli 13 Ei ole tiistai tai ei sada. Ei pidä paikkaansa,

Lisätiedot

CLT131: Tekstityökalut 2011, seitsemäs luento

CLT131: Tekstityökalut 2011, seitsemäs luento CLT131: Tekstityökalut 2011, seitsemäs luento Tommi A Pirinen tommi.pirinen+clt131@helsinki.fi Helsingin yliopisto Kieliteknologian oppiaine, Nykykielten laitos 14. joulukuuta 2011 tommi.pirinen+clt131@helsinki.fi

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

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...

Lisätiedot

C++ Ohjelmoijan käsikirja. Johdanto

C++ Ohjelmoijan käsikirja. Johdanto Johdanto C++ Ohjelmoijan käsikirja Johdanto Tervetuloa Inside C++-kirjan pariin. Tämä on opaskirja standardi C++:n käyttöön. Käsittelemme kirjassa kaikki syntaksin, kieliopin, olio-ohjelmoinnin ja standardikirjastojen

Lisätiedot

Alkuun HTML5 peliohjelmoinnissa

Alkuun HTML5 peliohjelmoinnissa Paavo Räisänen Alkuun HTML5 peliohjelmoinnissa www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida ja levittää ei kaupallisissa tarkoituksissa. Sisällysluettelo 1: Alkusanat 2: Alkuun 3: Pelinäkymä

Lisätiedot

(d) 29 4 (mod 7) (e) ( ) 49 (mod 10) (f) (mod 9)

(d) 29 4 (mod 7) (e) ( ) 49 (mod 10) (f) (mod 9) 1. Pätevätkö seuraavat kongruenssiyhtälöt? (a) 40 13 (mod 9) (b) 211 12 (mod 2) (c) 126 46 (mod 3) Ratkaisu. (a) Kyllä, sillä 40 = 4 9+4 ja 13 = 9+4. (b) Ei, sillä 211 on pariton ja 12 parillinen. (c)

Lisätiedot

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö Algoritmit 1 Luento 7 Ti 31.1.2017 Timo Männikkö Luento 7 Järjestetty binääripuu Binääripuiden termejä Binääripuiden operaatiot Solmun haku, lisäys, poisto Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017

Lisätiedot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

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

Excel 2010 -funktiot. Sisällys

Excel 2010 -funktiot. Sisällys Excel 2010 -funktiot 5.11.2015 Markku Könkkölä J Y / Tietohallintokeskus Soluihin viittaaminen Sisällys Laskentakaavojen kirjoittaminen, kopiointi ja arvojen vakiointi Funktioiden käyttö: Laskenta Merkkijonot

Lisätiedot

S: siirtää listan ensimmäisen luvun viimeiseksi V: vaihtaa keskenään listan kaksi ensimmäistä lukua

S: siirtää listan ensimmäisen luvun viimeiseksi V: vaihtaa keskenään listan kaksi ensimmäistä lukua A Lista Sinulle on annettu lista, joka sisältää kokonaisluvut 1, 2,, n jossakin järjestyksessä. Tehtäväsi on järjestää luvut pienimmästä suurimpaan käyttäen seuraavia operaatioita: S: siirtää listan ensimmäisen

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

Suvi Junes Tampereen yliopisto / tietohallinto 2013

Suvi Junes Tampereen yliopisto / tietohallinto 2013 Keskustelualue Keskustelualue soveltuu eriaikaisen viestinnän välineeksi. Keskustelualueelle voidaan lähettää viestejä toisten luettavaksi, ja sitä voidaan käyttää alueena myös ryhmätöiden tekemiseen,

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

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

T Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut T-79.1001 Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut Lemma (Säännöllisten kielten pumppauslemma). Olkoon A säännöllinen kieli. Tällöin on olemassa n 1

Lisätiedot

Suoritusten seuranta ja opiskelijan edistyminen

Suoritusten seuranta ja opiskelijan edistyminen Suoritusten seuranta ja opiskelijan edistyminen Opettaja voi halutessaan ottaa käyttöön toiminnon, jossa hän määrittelee etenemispolun opintojaksolle. Hän voi jokaisen aktiviteetin kohdalla määritellä

Lisätiedot

Palaute. Asetukset: Nimeä palaute ja kirjoita kuvaus tai ohjeet.

Palaute. Asetukset: Nimeä palaute ja kirjoita kuvaus tai ohjeet. Palaute Palaute -työkalulla opettaja voi rakentaa kyselyn, johon opiskelijat vastaavat joko anonyymisti tai nimellään. Opettaja voi tarkastella vastauksia koosteena tai yksitellen. Asetukset: Nimeä palaute

Lisätiedot

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet A271117, Tietokannat Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: Leon Atkinson: core MySQL Ari Hovi: SQL-opas TTY:n tietokantojen perusteet-kurssin

Lisätiedot

4.3. Matemaattinen induktio

4.3. Matemaattinen induktio 4.3. Matemaattinen induktio Matemaattinen induktio: Deduktion laji Soveltuu, kun ominaisuus on osoitettava olevan voimassa luonnollisilla luvuilla. Suppea muoto P(n) : Ominaisuus, joka joka riippuu luvusta

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 1 Määrittelyjoukoista Tarkastellaan funktiota, jonka määrittelevä yhtälö on f(x) = x. Jos funktion lähtöjoukoksi määrittelee vaikkapa suljetun välin [0, 1], on funktio

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 23.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 23.2.2009 1 / 44 Debuggeri Tyypillinen tilanne: ohjelma on kirjoitettu, Python-tulkki ei valita virheistä, mutta

Lisätiedot

Ratkaisut Summa on nolla, sillä luvut muodostavat vastalukuparit: ( 10) + 10 = 0, ( 9) + 9 = 0,...

Ratkaisut Summa on nolla, sillä luvut muodostavat vastalukuparit: ( 10) + 10 = 0, ( 9) + 9 = 0,... Ratkaisut 1 1. Summa on nolla, sillä luvut muodostavat vastalukuparit: ( 10) + 10 = 0, ( 9) + 9 = 0,.... Nolla, koska kerrotaan nollalla. 3. 16 15 50 = ( 8) 15 50 = (8 15) ( 50) = 1000 500 = 500 000. 4.

Lisätiedot

Hellä ensikosketus. Tomi Kiviniemi

Hellä ensikosketus. Tomi Kiviniemi Hellä ensikosketus Tomi Kiviniemi Asialista Vähän debuggauksen filosofiaa. GDB:n peruskäyttö Netbeansissä. GDB:n peruskäyttö komentoriviympäristössä. Hieman edistyneempää sähellystä komentoriviympäristössä.

Lisätiedot

Harjoitus 6 ( )

Harjoitus 6 ( ) Harjoitus 6 (21.4.2015) Tehtävä 1 Määritelmän (ks. luentomoniste s. 109) mukaan yleisen, muotoa min f(x) s. t. g(x) 0 h(x) = 0 x X olevan optimointitehtävän Lagrangen duaali on missä max θ(u, v) s. t.

Lisätiedot

Suvi Junes/Pauliina Munter Tampereen yliopisto / tietohallinto 2014

Suvi Junes/Pauliina Munter Tampereen yliopisto / tietohallinto 2014 Keskustelualue Keskustelualue soveltuu eriaikaisen viestinnän välineeksi. Keskustelualueelle voidaan lähettää viestejä toisten luettavaksi, ja sitä voidaan käyttää alueena myös ryhmätöiden tekemiseen,

Lisätiedot

Tietotyypit ja operaattorit

Tietotyypit ja operaattorit Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto

Lisätiedot

MAB3 - Harjoitustehtävien ratkaisut:

MAB3 - Harjoitustehtävien ratkaisut: MAB - Harjoitustehtävien ratkaisut: Funktio. Piirretään koordinaatistoakselit ja sijoitetaan pisteet:. a) Funktioiden nollakohdat löydetään etsimällä kuvaajien ja - akselin leikkauspisteitä. Funktiolla

Lisätiedot

S BAB ABA A aas bba B bbs c

S BAB ABA A aas bba B bbs c T-79.148 Kevät 2003 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut 4. Tehtävä: Laadi algoritmi, joka testaa onko annetun yhteydettömän kieliopin G = V, Σ, P, S) tuottama

Lisätiedot

Harjoitus 10: Mathematica

Harjoitus 10: Mathematica Harjoitus 10: Mathematica Mat-2.2107 Sovelletun matematiikan tietokonetyöt Syksy 2006 Mat-2.2107 Sovelletun matematiikan tietokonetyöt 1 Harjoituksen aiheita Tutustuminen Mathematica-ohjelmistoon Mathematican

Lisätiedot

Opiskelijoiden HOPSit

Opiskelijoiden HOPSit Opiskelijoiden HOPSit Ohje kommentoijalle ja hyväksyjälle/19.3.2014 Täydennetty ohjetta/2.1.2014: Lisätty tietoa opiskelijoiden lisäämisestä Omiin opiskelijoihin, mikä helpottaa HOPSien käsittelyä. Tarvittavat

Lisätiedot

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

Kohdissa 2 ja 3 jos lukujen valintaan on useita vaihtoehtoja, valitaan sellaiset luvut, jotka ovat mahdollisimman lähellä listan alkua. A Lista Aikaraja: 1 s Uolevi sai käsiinsä listan kokonaislukuja. Hän päätti laskea listan luvuista yhden luvun käyttäen seuraavaa algoritmia: 1. Jos listalla on vain yksi luku, pysäytä algoritmi. 2. Jos

Lisätiedot

Matriisit, kertausta. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

Matriisit, kertausta. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi Matriisit, kertausta Merkintöjä 1 Matriisi on suorakulmainen lukukaavio. Matriiseja ovat esimerkiksi: ( 2 0.4 8 0 2 1 ) ( 0, 4 ), ( ) ( 1 4 2, a 11 a 12 a 21 a 22 ) Kaavio kirjoitetaan kaarisulkujen väliin

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

etunimi, sukunimi ja opiskelijanumero ja näillä Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Hieman linkkejä: http://cs.stadia.fi/~kuivanen/linux/kom.php, lyhyt ohje komentoriviohjelmointiin.

Hieman linkkejä: http://cs.stadia.fi/~kuivanen/linux/kom.php, lyhyt ohje komentoriviohjelmointiin. Linux-harjoitus 9 Linuxin mukana tulevat komentotulkit (mm. bash, tcsh, ksh, jne ) sisältävät ohjelmointikielen, joka on varsin tehokas ja ilmaisuvoimainen. Tähän yhdistettynä unix-maailmasta tutut tehokkaat

Lisätiedot

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat. Approbatur 3, demo 1, ratkaisut 1.1. A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat. Käydään kaikki vaihtoehdot läpi. Jos A on rehti, niin B on retku, koska muuten

Lisätiedot

ILO IRTI VALOKUVISTA - Keski-Pohjanmaan ammattikorkeakoulun kuvapankin käyttöopas

ILO IRTI VALOKUVISTA - Keski-Pohjanmaan ammattikorkeakoulun kuvapankin käyttöopas ILO IRTI VALOKUVISTA - Keski-Pohjanmaan ammattikorkeakoulun kuvapankin käyttöopas 1 SISÄLLYS: Sisällyluettelo ja kuvapankin tunnukset 1 Viestintäpäällikö Paula Salosen tervehdys 2 1. UUDEN VALOKUVAN LISÄÄMINEN

Lisätiedot

Matematiikan tukikurssi, kurssikerta 1

Matematiikan tukikurssi, kurssikerta 1 Matematiikan tukikurssi, kurssikerta 1 1 Joukko-oppia Matematiikassa joukko on mikä tahansa kokoelma objekteja. Esimerkiksi joukkoa A, jonka jäseniä ovat numerot 1, 2 ja 5 merkitään A = {1, 2, 5}. Joukon

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 4.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 4.3.2009 1 / 35 Tiedostot Tiedostojen käsittelyä tarvitaan esimerkiksi seuraavissa tilanteissa: Ohjelman käsittelemiä

Lisätiedot

Nettiposti. Nettiposti käyttöohje

Nettiposti. Nettiposti käyttöohje YKSIKÄÄN ASIAKAS EI OLE MEILLE LIIAN PIENI TAI MIKÄÄN HAASTE LIIAN SUURI. Nettiposti Nettiposti käyttöohje Tässä käyttöohjeessa kuvataan selainkäyttöisen Nettiposti sähköpostiohjelman toiminnot. Käyttöohje

Lisätiedot

TIETOKONEEN ÄÄRELLÄ. Kansalaisopistot kotouttamisen tukena hanke/opetushallitus 2007 2008 Kuopion kansalaisopisto

TIETOKONEEN ÄÄRELLÄ. Kansalaisopistot kotouttamisen tukena hanke/opetushallitus 2007 2008 Kuopion kansalaisopisto TIETOKONEEN ÄÄRELLÄ Kansalaisopistot kotouttamisen tukena hanke/opetushallitus 2007 2008 Kuopion kansalaisopisto Materiaalin tekijä: Teksti ja ulkoasu: Sari Pajarinen Piirroskuvat: Renja Perälä TIETOKONEELLA

Lisätiedot

Tarva LC (Level Crossing) pikaohje Harri Peltola & Mikko Virkkunen

Tarva LC (Level Crossing) pikaohje Harri Peltola & Mikko Virkkunen Tarva LC (Level Crossing) pikaohje 17.1. 2014 Harri Peltola & Mikko Virkkunen 2 Kirjautuminen TarvaLC-ohjelmaan kirjaudutaan linkistä: http://tarvalc.myapp.info/tarvadb/tarva/tarva.html henkilökohtaisella

Lisätiedot

Yhtälöryhmät 1/6 Sisältö ESITIEDOT: yhtälöt

Yhtälöryhmät 1/6 Sisältö ESITIEDOT: yhtälöt Yhtälöryhmät 1/6 Sisältö Yhtälöryhmä Yhtälöryhmässä on useita yhtälöitä ja yleensä myös useita tuntemattomia. Tavoitteena on löytää tuntemattomille sellaiset arvot, että kaikki yhtälöt toteutuvat samanaikaisesti.

Lisätiedot

isomeerejä yhteensä yhdeksän kappaletta.

isomeerejä yhteensä yhdeksän kappaletta. Tehtävä 2 : 1 Esitetään aluksi eräitä havaintoja. Jokaisella n Z + symbolilla H (n) merkitään kaikkien niiden verkkojen joukkoa, jotka vastaavat jotakin tehtävänannon ehtojen mukaista alkaanin hiiliketjua

Lisätiedot

Flash ActionScript osa 4

Flash ActionScript osa 4 Flash ActionScript osa 4 Tekstikentät Flash:ssa tekstikenttä voi olla tyypiltään joko TLF Text tai Classic Text. TLF Text on uusi Flash CS5 tullut tyyppi. Sen animointi ja muotoilu ominaisuudet ovat monipuolisemmat

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1 Tietorakenteet ja algoritmit syksy 2012 Laskuharjoitus 1 1. Tietojenkäsittelijä voi ajatella logaritmia usein seuraavasti: a-kantainen logaritmi log a n kertoo, kuinka monta kertaa luku n pitää jakaa a:lla,

Lisätiedot

4 Matemaattinen induktio

4 Matemaattinen induktio 4 Matemaattinen induktio Joidenkin väitteiden todistamiseksi pitää näyttää, että kaikilla luonnollisilla luvuilla on jokin ominaisuus P. Esimerkkejä tällaisista väitteistä ovat vaikkapa seuraavat: kaikilla

Lisätiedot

Kieliteknologian ATK-ympäristö Neljäs luento

Kieliteknologian ATK-ympäristö Neljäs luento Kieliteknologian ATK-ympäristö Neljäs luento Miikka Silfverberg Nykykielten laitos 27. syyskuuta 2010 Miikka Silfverberg (Nykykielten laitos) Kieliteknologian ATK-ympäristö: Luento 3 27. syyskuuta 2010

Lisätiedot

Matemaatiikan tukikurssi

Matemaatiikan tukikurssi Matemaatiikan tukikurssi Kurssikerta 1 1 Funktiot Funktion määritelmä Funktio on sääntö, joka liittää kahden eri joukon alkioita toisiinsa. Ollakseen funktio tämän säännön on liitettävä jokaiseen lähtöjoukon

Lisätiedot

Google Forms / Anna Haapalainen. Google Forms Googlen lomake-työkalu

Google Forms / Anna Haapalainen. Google Forms Googlen lomake-työkalu Google Forms Googlen lomake-työkalu Google Forms / Anna Haapalainen Googlen lomaketyökalulla on helppoa tehdä sähköisiä kyselyitä, tehtäviä tai kokeita. Voidaksesi luoda Googlen lomakkeita, sinulla tulee

Lisätiedot

1. Algoritmi 1.1 Sisällys Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

Lisätiedot

Injektio. Funktiota sanotaan injektioksi, mikäli lähtöjoukon eri alkiot kuvautuvat maalijoukon eri alkioille. Esim.

Injektio. Funktiota sanotaan injektioksi, mikäli lähtöjoukon eri alkiot kuvautuvat maalijoukon eri alkioille. Esim. Injektio Funktiota sanotaan injektioksi, mikäli lähtöjoukon eri alkiot kuvautuvat maalijoukon eri alkioille. Esim. Funktio f on siis injektio mikäli ehdosta f (x 1 ) = f (x 2 ) seuraa, että x 1 = x 2.

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu 1312A Tietorakenteet ja algoritmit, 2016-2017, Harjoitus 5, Ratkaisu Harjoituksen aihe ovat hash-taulukot ja binääriset etsintäpuut Tehtävä 5.1 Tallenna avaimet 10,22,31,4,15,28,17 ja 59 hash-taulukkoon,

Lisätiedot

Informaatiotekniikan kehitysyksikkö

Informaatiotekniikan kehitysyksikkö SAVONIA Savonia RPM Käyttöopas Informaatiotekniikan kehitysyksikkö 18.8.2011 Sisällysluettelo 1. Perusnäkymä... 3 2. Kirjautuminen... 4 3. Rekisteröinti... 5 4. Idean jättäminen... 6 4. Arviointi... 8

Lisätiedot

Task list Submit code Submissions Scoreboard View queue Edit contest

Task list Submit code Submissions Scoreboard View queue Edit contest Code Submission Evaluation System Logged in: sharph Admin Logout Datatähti 2016 alku Contest start: 2015 09 28 00:00:00 Contest end: 2015 10 12 00:00:00 Task list Submit code Submissions Scoreboard View

Lisätiedot

VALIKON LISÄÄMINEN Moduulin lisääminen Valikon nimikkeen lisääminen Moduulien järjestyksen muuttaminen

VALIKON LISÄÄMINEN Moduulin lisääminen Valikon nimikkeen lisääminen Moduulien järjestyksen muuttaminen ETAPPI ry JOOMLA 2.5 VALIKON LISÄÄMINEN Moduulin lisääminen Valikon nimikkeen lisääminen Moduulien järjestyksen muuttaminen ETAPPI ry JOOMLA 2.5 Sivu 1(13) Sisällysluettelo 1. Uuden valikon lisääminen...

Lisätiedot