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 = " 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 ( 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

6. Funktiot 85. Kuinka funktioita määritellään ja kutsutaan. Kuinka funktioille viedään arvoja ja niistä palautetaan arvoja

6. Funktiot 85. Kuinka funktioita määritellään ja kutsutaan. Kuinka funktioille viedään arvoja ja niistä palautetaan arvoja 6. Funktiot 85 OPPITUNTI 6 Funktiot Funktiot ovat hyvin laaditun skriptin perusta. Ne tekevät koodista helppolukuista ja uudelleen käytettävää. Laajoja projekteja on mahdotonta hallita ilman funktioiden

Lisätiedot

OPPITUNTI15 Päivämäärien käsittely

OPPITUNTI15 Päivämäärien käsittely 15. Päivämäärien käsittely 269 OPPITUNTI15 Päivämäärien käsittely Päivämäärät kuuluvat niin usein jokapäiväiseen elämään, että niiden käsittely on rutiininomaista. Kalenterin käsittely ei aina ole kuitenkaan

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

OPPITUNTI 3 Ensimmäinen skripti

OPPITUNTI 3 Ensimmäinen skripti 3. Ensimmäinen skripti 35 OPPITUNTI 3 Ensimmäinen skripti Kun olet asentanut PHP:n ja asettanut sen kokoonpanon, on aika laittaa ohjelmisto testaukseen. Tällä tunnilla luot ensimmäisen skriptisi ja tutkit

Lisätiedot

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

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB Datatähti 2019 alku task type time limit memory limit A Kolikot standard 1.00 s 512 MB B Leimasin standard 1.00 s 512 MB C Taulukko standard 1.00 s 512 MB D Ruudukko standard 1.00 s 512 MB E Sanalista

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

Korpusten käsittely clt131, P Luento 5

Korpusten käsittely clt131, P Luento 5 Korpusten käsittely clt131, P2 2006 Luento 5 Nicholas Volk 1.12.2006 Humanistinen tiedekunta Perl Perl niminen ohjelmointikieli mahdollistaa tekstin monipuolisen muokkaamisen helposti

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

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

OPPITUNTI 17 Merkkijonoilla työskentely

OPPITUNTI 17 Merkkijonoilla työskentely 17. Merkkijonoilla työskentely 301 OPPITUNTI 17 Merkkijonoilla työskentely World Wide Web on paljolti pelkkä tekstiympäristö. Olipa sisältö kuinka monipuolista tahansa, kaiken takana on aina HTML-koodi.

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

Korpusten käsittely clt131, P Luento 3

Korpusten käsittely clt131, P Luento 3 Korpusten käsittely clt131, P2 2006 Luento 3 Nicholas Volk 17.11.2006 Humanistinen tiedekunta Merkkijonon poiminen syötteestä, fgrep Monessa ohjelmassa on etsi/find-toiminto Tätä

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

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

PERUSLASKUJA. Kirjoita muuten sama, mutta ota KAKSI välilyöntiä (SEURAA ALUEMERKINTÄÄ) 4:n jälkeen 3/4 +5^2 PERUSLASKUJA Matemaattisten lausekkeiden syöttäminen: Kirjoita ilman välilyöntejä 3/4+^2 3 4+ 2 Kirjoita muuten sama, mutta ota KAKSI välilyöntiä (SEURAA ALUEMERKINTÄÄ) 4:n jälkeen 3/4 +^2 3 + 4 2 Kopioi

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

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

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

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

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

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

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

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

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

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

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2 PERUSLASKUJA Matemaattisten lausekkeiden syöttäminen: Kirjoita ilman välilyöntejä /+^2 Kirjoita muuten sama, mutta ota välilyönti :n jälkeen / +^2 Kopioi molemmat matematiikka-alueet ja liiku alueen sisällä

Lisätiedot

7. Taulukot 105. Kuinka taulukoiden tietoa käsitellään ja lajitellaan

7. Taulukot 105. Kuinka taulukoiden tietoa käsitellään ja lajitellaan 7. Taulukot 105 OPPITUNTI 7 Taulukot Taulukot ja niiden käsittelyyn liittyvät toiminnot laajentavat suuresti PHP4-skriptien käyttöaluetta ja joustavuutta. Kun tunnet taulukot, voit tallentaa niihin monimutkaisia

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

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

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

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

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

OPPITUNTI 5 Ohjelman kulku

OPPITUNTI 5 Ohjelman kulku 5. Ohjelman kulku 67 OPPITUNTI 5 Ohjelman kulku Viime tunnilla luomamme skriptit olivat suoraviivaisia. Ohjelmalauseet suoritettiin aina samassa järjestyksessä, joten ohjelmissamme ei ollut lainkaan joustavuutta.

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

Python-ohjelmointi Harjoitus 5

Python-ohjelmointi Harjoitus 5 Python-ohjelmointi Harjoitus 5 TAVOITTEET Kerrataan silmukkarakenteen käyttäminen. Kerrataan jos-ehtorakenteen käyttäminen. Opitaan if else- ja if elif else-ehtorakenteet. Matematiikan sisällöt Tehtävät

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

Harjoitus 2 (viikko 45)

Harjoitus 2 (viikko 45) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista lisätä static-määre operaatioidesi otsikoihin, jotta ohjelmasi kääntyvät. Muista noudattaa hyvän

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

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

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

ITKP102 Ohjelmointi 1 (6 op)

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

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

OPPITUNTI 16 Tiedon käsittely

OPPITUNTI 16 Tiedon käsittely 16. Tiedon käsittely 283 OPPITUNTI 16 Tiedon käsittely Tällä tunnilla käsittelemme tarkemmin tiedon testaamista ja muokkaamista. Tutkimme uudelleen tietotyyppejä. PHP käsittelee tietotyyppejä automaattisesti

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

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

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 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

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

Rakenteiset tietotyypit Moniulotteiset taulukot

Rakenteiset tietotyypit Moniulotteiset taulukot C! Rakenteiset tietotyypit Moniulotteiset taulukot 22.2.2018 Agenda Rakenteiset tietotyypit Vilkaisu 6. kierroksen tehtäviin Moniulotteiset taulukot Esimerkki Seuraava luento to 8.3. Ilmoittautuminen ohjelmointikokeeseen

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

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

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

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

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

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

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö Algoritmit 2 Luento 9 Ti 17.4.2018 Timo Männikkö Luento 9 Merkkitiedon tiivistäminen Huffmanin koodi LZW-menetelmä Taulukointi Editointietäisyys Algoritmit 2 Kevät 2018 Luento 9 Ti 17.4.2018 2/29 Merkkitiedon

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

8. Oliot 123. Kuinka luokkia luodaan ja olioita saadaan aikaan. Kuinka luodaan ja käsitellään ominaisuuksia ja metodeja

8. Oliot 123. Kuinka luokkia luodaan ja olioita saadaan aikaan. Kuinka luodaan ja käsitellään ominaisuuksia ja metodeja 8. Oliot 123 OPPITUNTI 8 Oliot Oliopohjainen ohjelmointi on vaarallista. Se muuttaa koodaamista koskevia ajatuksiasi ja kun uudet käsitteet ovat saaneet jalansijaa, ne eivät katoa mitenkään. PHP on Perlin

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

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

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

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

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

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5. 1. Toteuta Pythonilla seuraava ohjelma: Kerta 2 Kerta 3 Kerta 4 Kerta 5 Kerta 2 1. Toteuta Pythonilla seuraava ohjelma: 2. Tulosta Pythonilla seuraavat luvut allekkain a. 0 10 (eli, näyttää tältä: 0 1 2 3 4 5 6 7 8 9 10 b. 0 100 c. 50 100 3.

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

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

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 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 30.4.2019 Timo Männikkö Luento 13 Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Ositus ja rekursio Rekursion toteutus Algoritmit 2 Kevät 2019 Luento 13 Ti 30.4.2019

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

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

Datatähti 2019 loppu

Datatähti 2019 loppu Datatähti 2019 loppu task type time limit memory limit A Summa standard 1.00 s 512 MB B Bittijono standard 1.00 s 512 MB C Auringonlasku standard 1.00 s 512 MB D Binääripuu standard 1.00 s 512 MB E Funktio

Lisätiedot

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Toinen harjoitustyö. ASCII-grafiikkaa 2017 Toinen harjoitustyö ASCII-grafiikkaa 2017 Yleistä Tehtävä: tee Javalla ASCII-merkkeinä esitettyä grafiikkaa käsittelevä ASCIIArt17-ohjelma omia operaatioita ja taulukoita käyttäen. Työ tehdään pääosin

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

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

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

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

Ctl160 Tekstikorpusten tietojenkäsittely p.1/28

Ctl160 Tekstikorpusten tietojenkäsittely p.1/28 Ctl160 490160-0 Nicholas Volk Yleisen kielitieteen laitos, Helsingin yliopisto Ctl160 490160-0 p.1/28 Emacs-editori Ikkunoinnin toimiessa Emacs-editorin käynnistyskäskyn perään kannattaa lisätä &-merkki

Lisätiedot

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

3 Suorat ja tasot. 3.1 Suora. Tässä luvussa käsitellään avaruuksien R 2 ja R 3 suoria ja tasoja vektoreiden näkökulmasta. 3 Suorat ja tasot Tässä luvussa käsitellään avaruuksien R 2 ja R 3 suoria ja tasoja vektoreiden näkökulmasta. 3.1 Suora Havaitsimme skalaarikertolaskun tulkinnan yhteydessä, että jos on mikä tahansa nollasta

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

Wordpress- ohje nettisivujen laadintaan

Wordpress- ohje nettisivujen laadintaan Wordpress- ohje nettisivujen laadintaan Leo Suomela 2 / 13 Sisältö 1 Johdanto... 3 2 Aloitusnäkymä... 3 3 Ohjausnäkymä... 4 4 Sivujen lisäys... 6 5 Etusivun määritys... 9 6 Teeman muokkaus... 13 3 / 13

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

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

Käänteismatriisin. Aiheet. Käänteismatriisin ominaisuuksia. Rivioperaatiot matriisitulona. Matriisin kääntäminen rivioperaatioiden avulla Käänteismatriisi, L5 1 Tässä kalvosarjassa käsittelemme neliömatriiseja. Ilman asian jatkuvaa toistamista oletamme seuraavassa, että kaikki käsittelemämme matriisit ovat neliömatriiseja. Määritelmä. Olkoon

Lisätiedot

Tiedostonhallinta. Yleistä

Tiedostonhallinta. Yleistä Tiedostonhallinta Tiedostonhallinnan kautta voi muokata kaikkia näkymän tiedostoja. Sitä tarvitaan näkymien räätälöintiin ja joidenkin asetusten muuttamiseen. Yleistä Tiedostojen tarkastelu ja muokkaus

Lisätiedot

Asiakirjojen vertailu-kurssi

Asiakirjojen vertailu-kurssi Asiakirjojen vertailu-kurssi Revussa voi verrata keskenään kahta PDF:ää ja automaattisesti näyttää niiden väliset erot. Piirrosten ja kaaviokuvien vertailu sujuu siten helposti ja nopeasti. Kun haluat

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

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

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

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö Algoritmit 2 Luento 6 To 28.3.2019 Timo Männikkö Luento 6 B-puun operaatiot Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 2/30 B-puu 40 60 80 130 90 100

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

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) Toistaiseksi helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Vaikeaa eroavuudet Pythonin ja C:n

Lisätiedot

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014 Työpaja Työpaja on vertaisarviointiin soveltuva työkalu. Työpaja mahdollistaa töiden palautuksen ja niiden jakelun opiskelijoiden arvioitavaksi sekä arvioinnin antamisen. Laita Muokkaustila päälle ja lisää

Lisätiedot