Ohjelmoinnin peruskurssien laaja oppimäärä

Koko: px
Aloita esitys sivulta:

Download "Ohjelmoinnin peruskurssien laaja oppimäärä"

Transkriptio

1 Ohjelmoinnin peruskurssien laaja oppimäärä Luento 10: Skriptausta, aliohjelmat, foreign function interface, Pythonin ominaisuuksia Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista)

2 Sisältö 1 Säännölliset lausekkeet 2 Aliohjelmien käyttäminen 3 Kielten sekoittaminen: foreign function interface 4 Pythonin propertyt ja dekoraattorit 5 Pythonin listaoperaatiot ja list comprehension -syntaksi

3 Säännölliset lausekkeet säännöllinen lauseke (regular expression) on tapa kuvata hahmo, joka sopii tietynlaisiin merkkijonoihin esim. ab*c sopii merkkijonoihin ac, abc, abbc, jne. näitä käytetään tekstimuotoisen datan käsittelyssä esim. tunnistamaan tietynlaisia rivejä tai jakamaan rivi osiin niille on tukea melkein kaikissa ohjelmointikielissä skriptikielissä (varsinkin Perl) niille on lyhyempi syntaksi ja niitä käytetään enemmän valitettavasti lausekkeiden syntaksi vaihtelee hieman eri kielissä samoin monissa (ohjelmointi-)editoreissa sekä ohjelmien konguraatiotiedostoissa ja mm. grep-komentorivityökalussa editoreissa haku- ja korvaustoimintojen lisäksi mm. syntaksin väritys tehdään useimmiten säännöllisillä lausekkeilla säännöllisillä lausekkeilla ei voi tunnistaa kaikkea yleensä ei rekursiivisia rakenteita esim. ohjelmointikielistä avainsanoja mutta ei sisäkkäisyyttä

4 Säännöllisten lausekkeiden syntaksi useimmiten säännöllisiä lausekkeita käytetään hakemiseen lauseke kuvaa osaa etsittävästä tekstistä (usein rivistä) kirjaimet jne. tavalliset merkit sopivat itseensä esim. ab sopii vain merkkijonoon ab Yleisimmät erikoismerkinnät. mikä tahansa yksi merkki [a-f] yksi kirjaimista a,b,c,d,e,f [^a-f] mikä tahansa paitsi a,b,c,d,e,f * edellinen lausekkeen osa 0 kertaa + edellinen lausekkeen osa 1 kertaa? edellinen lausekkeen osa 0 tai 1 kertaa \? merkki? (samoin \*, \. jne.) ^ tämä kohta on rivin alussa $ tämä kohta on rivin lopussa {2,4} edellinen lausekkeen osa 24 kertaa (foo bar) joko hahmo foo tai bar (tämän syntaksi vaihtelee hieman)

5 Esimerkkejä syntaksista Esimerkkilausekkeita [a-z]*=[0-9]* sopii esim. width=42 ^[a-za-z]+ *= *[0-9]+$ myös width = 42 ^def *[a-za-z]+\(object\): def Box(object): (data/)?[a-z]+\.txt data/koe.txt ja koe.txt syntaksi vaihtelee hieman eri toteutuksissa huom. säännöllinen lauseke on eri asia kuin komentotulkin tiedostonimihahmot! (eli ns. glob-hahmot) siellä? = mikä tahansa merkki, * = 0 mitä tahansa merkkiä esim. foo/*.txt eikä foo/.*\.txt

6 Tekstin korvaaminen skripteissä säännöllisiä lausekkeita käytetään usein tekstin korvaamiseen tai osien irrottamiseen korvaavassa tekstissä voi viitata suluilla merkittyihin säännöllisen lausekkeen osiin (usein \1 on ensimmäinen osa jne.) esim. hahmossa ^([a-za-z]+) *= *([0-9]+)$ ja tekstissä width = 42 ensimmäinen osa on width ja toinen 42 esim. Perlissä width = 42:n voisi muuttaa muotoon set width to 42 Perl-lausekkeella s/^([a-za-z]+) *= *([0-9]+)$/set \1 to \2/ (syntaksi on s/ säännöllinen lauseke / korvaava teksti /) korvaamisen sijaan suluilla merkityt osat voi ottaa talteen muuttujiin

7 Säännölliset lausekkeet Pythonissa Pythonin re-paketissa on säännöllisten lausekkeiden käsittelyä: säännöllisiä lausekkeita voi hakea merkkijonoista funktioilla re.match (sopiiko alkuun), re.search (etsii mistä tahansa), re.findall ja re.finditer (löytävät kaikki esiintymät) re.split jakaa merkkijonon osiin, re.sub korvaa tekstiä toisella jos käyttää saamaa säännöllistä lauseketta paljon, re.compile:lla voi kääntää sen tehokkaampaan muotoon ohje: Esimerkkejä Python-tulkissa >>> import re >>> re.search("[a-z]*=[0-9]*", "abcde") # palauttaa None >>> re.search("[a-z]*=[0-9]*", " width=42asdf").group() 'width=42' >>> re.search("([a-z]*)=([0-9]*)", "width=42").group(2) '42' >>> re.split("[,.]? *", "Foo, bar ja baz.") ['Foo', 'bar', 'ja', 'baz', ''] >>> re.sub("^([a-za-z]+) *= *([0-9]+)$", "set \\1 to \\2", "width =42") 'set width to 42'

8 Sisältö 1 Säännölliset lausekkeet 2 Aliohjelmien käyttäminen 3 Kielten sekoittaminen: foreign function interface 4 Pythonin propertyt ja dekoraattorit 5 Pythonin listaoperaatiot ja list comprehension -syntaksi

9 Aliohjelmat jotkut ohjelmat käynnistävät toisia ohjelmia aliohjelminaan syitä aliohjelmien käyttämiseen: valmiissa ohjelmassa on jo haluttu toiminto (joskus tosin olisi myös vastaava kirjasto) aliohjelmaa voi testata kokonaan erillään pääohjelmasta helppo tapa käyttää eri ohjelmointikieliä yhdessä helppo tapa tehdä rinnakkaisuutta aliohjelman voi hajauttaa eri koneelle (toisin kuin säikeen) useimmiten aliohjelma tekee jonkin selkeästi rajatun toiminnon tarkemmin rajatun kuin useimmmat kirjastot pää- ja aliohjelman välisen kommunikoinnin kannattaa olla yksinkertaista esimerkkejä: kuvatiedostoja voi skaalata ja konvertoida eri formaattiin ImageMagick-komentorivityökaluilla (tähän olisi kirjastojakin) jotkut selaimet tekevät nimipalvelukyselyt aliohjelmalla monet WWW-palvelimet ajavat sivuja tuottavaa koodia omissa aliohjelmissaan

10 Aliohjelman käynnistäminen Pythonissa aja komento ja odota että se loppuu: subprocess.call(['lp', 'foo.pdf']) aja komento taustalla: p = subprocess.popen(['sleep', '10'])... p.wait() aja komento ja lue sen syöte: out = subprocess.popen(['ls', '-l'], stdout=subprocess.pipe).communicate() aja komento ja kirjoita sille syötettä: p = subprocess.popen('gzip -c >x.txt.gz', stdin=subprocess.pipe, shell=true) p.communicate(inputstr) todellisuudessa pitää myös mm. tarkistaa paluuarvo ohje: muissa kielissä nämä ovat usein nimellä system ja popen C:stä ja Unixin toiminnoista ks. software/libc/manual/html_node/processes.html

11 (Ali)ohjelman kommunikointitavat 1/2 kaikilla käynnistetyillä ohjelmilla eli prosesseilla on: syötevirta (standard input, stdin = 0) tulostevirta (standard output, stdout = 1) virhetulostevirta (standard error, stderr = 2) paluuarvo lopettaessa (exit code, kokonaisluku 0127) prosessille voi lähettää signaalin (kokonaisluku noin 131) virtoja voi olla enemmänkin alla oleva toteutus: jätetään tiedostoja auki kun pääohjelma jakautuu pää- ja aliohjelmaksi useimmiten aliohjelman kanssa kommunikoidaan syöte- ja tulostevirroilla sekä paluuarvolla hyvin käyttäytyvä (ali)ohjelma kirjoittaa virheilmoituksensa stderr:iin eikä stdout:iin paluuarvo on yleensä 0 jos kaikki sujui hyvin virroilla voi tehdä kaksisuuntaista interaktiivisessa kommunikointia, mutta pitää muistaa puskurointi

12 (Ali)ohjelman kommunikointitavat 2/2 aliohjelman käynnistänyt ohjelma saa tiedon aliohjelman loppumisesta toteutettu signaalilla sekä wait-kutsulla joka saa paluuarvon Pythonissa subprocess.popen:n palauttaman olion wait-metodi odottaa aliohjelman loppumista poll-metodi kertoo, onko aliohjelma vielä hengissä send_signal-metodi lähettää aliohjelmalle signaalin Pythonin signal-moduulilla voi käsitellä saatuja signaaleja esimerkkejä aliohjelmien käytöstä: inkscape /share/extensions/perspective.py epydoc-3.0.1/epydoc/cli.py ja util.py

13 Erilliset ohjelmat joskus ohjelmat kommunikoivat keskenään ilman että pääohjelma on käynnistänyt aliohjelman erona edelliseen pitää löytää toinen ohjelma ja muodostaa yhteys kommunikointia varten usein käytetään joko verkkoyhteyksiä tai koneen sisäisiä yhteyksiä (esim. Unix domain socket) tai esim. käyttöliittymäkirjaston/työpöytäympäristön palveluita joskus myös käynnistää toinen ohjelma tarvittaessa käyttöjärjestelmissä on palveluita, jotka käynnistävät sellaisia pyydettäessä (Linuxissa esim. inetd ja D-Bus)

14 Sisältö 1 Säännölliset lausekkeet 2 Aliohjelmien käyttäminen 3 Kielten sekoittaminen: foreign function interface 4 Pythonin propertyt ja dekoraattorit 5 Pythonin listaoperaatiot ja list comprehension -syntaksi

15 Foreign function interface melkein kaikissa ohjelmointikielissä on tapa liittää samaan ohjelmaan toisen kielen koodia melkein aina C/C++-kielien kautta esim. Python-ohjelma kutsuu C-funktiota tai C-funktio kutsuu Python-koodia myös esim. käyttöjärjestelmän C:llä tehtyjä kirjastoja kutsutaan samaan tapaan kuin omaa C-koodia useimmiten esim. Pythonilla tehty pääohjelma kutsuu yksittäisiä C-funktioita toisen kielen rajapinta C:n käyttöön on nimeltään foreign function interface (FFI) poikkeus: muutamat kielet sopivat yhteen suoremmin esim. C ja C++ sekä Java ja muut Javan virtuaalikonetta käyttävät kielet

16 Argumentit ja paluuarvot 1/2 suurin vaikeus kielten yhteiskäytössä on argumenttien välitys esim. toisen kielen merkkijono ei ole sama kuin C:n merkkijono samoin paluuarvot tapa 1: C:n tyypit toisessa kielessä natiivien arvojen lisäksi kielessä voi tehdä C-kielisiä arvoja yleensä niillä voi tehdä paljon vähemmän kuin natiiveilla arvoilla: tarkoitettu lähinnä C-funktioiden käyttöön esim. Pythonin ctypes-moduulin ctypes.c_int(42) tekee C-kokonaisluvun tapa 2: toisen kielen tyypit C:ssä C-kielinen koodi näkee toisen kielen arvoja (yleensä osoittimia, joita käsitellään tietyillä C-funktioilla) tässä mitä tahansa C-koodia ei voi kutsua suoraan: vain sellaista, joka ymmärtää näitä toisen kielen tyyppejä useimmiten kutsuttavat C-funktiot tekevät tyyppimuunnoksia ja lopulta kutsuvat tavallisia C-funktioita

17 Argumentit ja paluuarvot 2/2 tapa 3: automaattiset tyyppikonversiot kuten tapa 1, mutta C-kielen arvoja ei käsitellä erikseen, vaan kerrotaan vain C-funktioiden tyypit ja toisen kielen toteutus tekee konversiot taustalla tätä on usein helppo käyttää ongelmia: osaa yleensä konvertoida vain tiettyjä tyyppejä; joskus tekee turhaa konversiotyötä yleensä kielissä on ainakin tapa 1, usein kaikki kolmekin esimerkkejä FFI:n käytöstä Pythonissa: tapa 1: python /lib/uuid.py tapa 2: pygame-1.8.1release/src/key.c

18 Kielten yhteiskäytön hankaluuksia useimmiten kielten tyyppien väliset muunnokset aiheuttavat kopiointia esim. taulukosta joudutaan usein tekemään kopio monimutkaisten tyyppien muuntaminen on hankalaa mm. oliot, funktiot ja kokoelmatyypit (esim. dict) yleensä joko muunnos pitää tehdä käsin tai automaattisessa muunnoksessa ei näy kaikkea (esim. metodeja) tai toimii vain tietynlaisille arvoille (esim. taulukko jonka kaikki alkiot ovat samantyyppisiä) muistinhallinta pitää yleensä tehdä käsin eli C-koodin pitää itse vapauttaa varaamansa muisti paitsi jos tekee toisen kielen arvoja (tapa 2 edellä) rinnakkaisuus on hankalaa tai huonosti määritelty ei kannata muuttaa samaa dataa eri säikeestä ja eri kielestä

19 Käytännön ohjeita koska argumentit yleensä kopioidaan, kannattaa tarkistaa että niissä on vain tarvittava data funktioargumentteja kannattanee välttää, vaikka ne useimmiten periaatteessa toimivat kannattaa pitää kielten välinen rajapinta mahdollisimman selkeänä ja yksinkertaisena jos tekee C-koodin itse, koodista tulee selkeämpää jos pyrkii tekemään yleiskäyttöisen C-kirjaston eikä tee C-koodia tarkasti toisen kielen koodin ehdoilla tyypillisimmin FFI:tä käytetään kutsumaan jo olemassaolevaa C:llä tehtyä kirjastoa kannattaa pyrkiä yhdistämään toinen kieli C:hen ei siis esim. yhdistää Pythonia ja Schemeä samaan ohjelmaan sillä se on hankalampaa (vaikka periaatteessa mahdollista) varsinkin tähän aliohjelmien käyttäminen on helpompi ratkaisu

20 Toinen tapa: sulautettu tulkki toinen tapa FFI:n sijaan: esim. C:llä tehty ohjelma voi sisältää Python-tulkin, jolla se ajaa Python-koodia eli toisen kielen tulkki on sulautettuna (embedded) ohjelmaan näin päin tehdään yleensä jos toista kieltä käytetään ohjelman laajentamiseen tai kongurointiin yleisimpiä sulautettavia kieliä: Scheme (osa toteutuksista toimii paremmin), Python ja Perl peleissä Lua (helppo sulauttaa) selaimissa JavaScript (tarvitaan muutenkin) joskus sovelluksen oma kieli (esim. Emacs Lisp) käytetään esim. tukemaan toisilla kielillä tehtyjä plugineja selaimia voi usein laajentaa JavaScriptilla Gimp-kuvankäsittelyohjelmaa voi laajentaa Schemellä, Pythonilla tai Perlillä Gnomen Hearts-pelin teköälyjä voi tehdä Pythonilla (ennen Lua)

21 Sisältö 1 Säännölliset lausekkeet 2 Aliohjelmien käyttäminen 3 Kielten sekoittaminen: foreign function interface 4 Pythonin propertyt ja dekoraattorit 5 Pythonin listaoperaatiot ja list comprehension -syntaksi

22 (ei-laajan kurssin kalvo: luento 13 sivu 9) property Eli miten saada olion muuttujien käsittely saadaan näyttämään siltä, että niitä käytetään suoraan ilman metodeja. Käsiteltävä muuttuja class C(object): def init (self): self._x = None def getx(self): return self._x def setx(self, value): self._x = value def delx(self): Property:n docstring del self._x x = property(getx, setx, delx, "I'm the 'x' property.") new_object = C() new_object.x = 3 print new_object.x Varsinainen muuttuja kannattaa suojata _:lla Metodit arvon hakuun, asettamiseen ja poistoon. Järjestys on aina: haku, asetus, poisto. Muuttujan sijainti lauseessa määrää, mitä funktiota tulkki käyttää 14:45

23 (ei-laajan kurssin kalvo: luento 5 sivu 25) Propertyn avulla koodia voi yksinkertaistaa Metodeja kutsutaan kuin muuttujia Käsitellään muuttujaa x Kerrotaan property-funktiolle sen metodin nimi, jolla x:n arvo haetaan(get) ja sen, jolla asetetaan x:n arvo(set) Tulkki päättelee x sijainnin perusteella pitääkö käyttää asetus- vai hakumetodia =:n vasemmalla puolella tarvitaan tietenkin sijoitus Tulostuksessa haku Jne. class Example(object): def init (self): self._x = None def get_x(self): return self._x def set_x(self, value): self._x = value x = property(get_x, set_x) some = Example() some.x = 5 print some.x 14:58

24 (ei-laajan kurssin kalvo: luento 13 sivu 15) decorator Decorator Pythonissa tarkoittaa lyhyempää tapaa esittää tilanne, jossa muutetaan funktion toimintaa (eli periaatteessa sitä mitä decorator-malli tarkoittaa). def decorator_function(called): called.message = 'Change in the functionality' return def adding(a,b): return a + b print adding(1, 2), print adding_copy.message def adding(a,b): return a + b target = decorator_function(adding) print target(1, 2), print jälkeen tulee funktion nimi. Tämä funktio saa alapuolella olevalta riviltä alkavan funktion olion, jonka toimintaa se sitten muuttaa 14:45

25 (ei-laajan kurssin kalvo: luento 13 sivu 16) decorator Pythonissa on kaksi valmista funktiota, joita voi käyttää decorator-rakenteen yhteydessä. * staticmethod muuttaa metodin toimintaa niin, että sitä voi kutsun jo ennen kuin sen luokasta on luotu oliota. * classmethod taas tekee metodista luokkametodin, eli metodin, joka on yhteinen kaikille luokasta luoduille ## we can now call this method without an instance def column_char_to_integer(column): ''' Converts the letters a,b,c,d,e,f,g,h to positions row the character representation of a the integer representation. ''' return ord(column) - ord('a') 14:45

26 (ei-laajan kurssin kalvo: luento 3 sivu 19) Regexp Aliohjelmat FFI Dekoraattorit Listaoperaatiot Abstrakti luokka (esimerkki) LibraryItem abstraktina luokkana Kaikissa siitä periytyvissä luokissa oltava metodit init ja is_available() Lehdet taas eivät kaikki ole lainattavissa, joten DailyPaper abstraktiksi import abc class LibraryItem(object): metaclass = def init (self, author_list,...):... class DailyPaper(LibraryItem): metaclass = def init (self, name, year,...): LibraryItem. init (self,...)... def get_number(self): return self.number def is_available(self): pass class Book(LibraryItem): def get_authors(self): return def is_available(self): '''Method docstring. ''' def init (self, author_list,...): LibraryItem. init (self,...)... def is_available(self): if self.due_date: return False else: return True 10:31

27 Property-dekoraattorit Toinen versio aiemmasta esimerkistä class Example(object): def init (self): self._x = def x(self): return def x(self, value): self._x = value siis property toimii dekoraattorina, joka tekee getter-metodin x.setter on dekoraattori, joka vaihtaa x:n setter-metodin dekoraattoreita voi tehdä melko helposti itsekin muuhunkin käyttöön kuin getter- ja setter-metodeihin esimerkkejä: muissa kielissä samantapaisia rakenteita ovat Emacs Lispin defadvice ja Common Lispin oliojärjestelmän around-metodit

28 Sisältö 1 Säännölliset lausekkeet 2 Aliohjelmien käyttäminen 3 Kielten sekoittaminen: foreign function interface 4 Pythonin propertyt ja dekoraattorit 5 Pythonin listaoperaatiot ja list comprehension -syntaksi

29 (ei-laajan kurssin kalvo: luento 13 sivu 10) map def increment(value): return value + 1 def decrement(value): return value - 1 test_list = [1,2,3,4,5] print map(increment, test_list) print map(decrement, test_list) Soveltaa annettua funktiota jokaiseen läpikäytävän olion alkioon ja palauttaa tuloksena listan [2, 3, 4, 5, 6] Parametrina voi antaa useammankin läpikäytävän, jolloin funktion pitää hyväksyä yhtä monta parametria ja jokaisesta läpikäytävästä otetaan vastaava alkio. zip liittää yhteen parametrina saamiensa sarja- tai iteroitavatyyppisten läpikäytävien alkiot monikoiksi listaan l1 = [1, 2, 3] l2 = [4, 5, 6] print zip(l1, l2) [(1, 4), (2, 5), (3, 6)] def fahrenheit(t): return ((float(9) / 5) * T + 32) def celsius(t): return (float(5) / 9) * (T - 32) temp = (36.5, 37, 37.5,39) F = map(fahrenheit, temp) C = map(celsius, F) for f, c in zip(f, C): print f, c 14:45

30 (ei-laajan kurssin kalvo: luento 13 sivu 11) filter Nimensä mukaisesti suodatin. Annettua funktiota sovelletaan jokaiseen annetun läpikäytävän alkioon alkio päätyy tuloslistaan, jos funktio palauttaa True. limit = 20 def is_prime(number): if number in [0, 1]: return False if number == 2: return True for divider in range(2, number): if number % divider == 0: return False return True primes = filter(is_prime, range(limit)) print primes [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,..., 19] [2, 3, 5, 7, 11, 13, 17, 19] False False True True 14:45

31 (ei-laajan kurssin kalvo: luento 13 sivu 12) reduce Supistaa läpikäytävän yhdeksi arvoksi soveltamalla annettua funktiota jokaiseen alkion. Funktion täytyy ottaa 2 parametria. Hakee suurimman: f = lambda a,b: a if (a > b) else b print reduce(f, [47,11,42,102,13]) 102 Ehdollinen lauseke print reduce(lambda a,d: 10*a+d, [1,2,3,4,5,6,7,8]) * * * * :45 10*

32 (ei-laajan kurssin kalvo: luento 13 sivu 4) List comprehension Luo listan annettua sääntöä noudattaen result_list = [x**2 for x in range(10)] print result_list Tuottaa listan, jossa on lukujen neliöitä. Luvut saadaan forsilmukassa käymällä läpi range:n tuottama lista [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] result_list = [(x, y) for x in [1,2,3] for y in [3,1,4] if x!= y] print result_list [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)] Sama kuin: result_list = [] for x in [1,2,3]: for y in [3,1,4]: if x!= y: result_list.append((x, y)) 14:45

33 Muistutus: accumulate:n variaatiot (syksyn luennolta 3) accumulate:sta eli fold-right:sta on peilikuva fold-left: (fold-right + 0 (list )) (+ 1 (+ 2 (+ 3 (+ 4 0)))) 10 (fold-left + 0 (list )) (+ (+ (+ (+ 0 1) 2) 3) 4) 10 ks. SICP-kirjan tehtävä 2.38 molemmista on vielä versiot, joissa ei ole init -alkiota, vaan sellaisena käytetään listan ensimmäistä tai viimeistä alkiota (reduce-right + (list )) (+ 1 (+ 2 (+ 3 4))) 10 (reduce-left + (list )) (+ (+ (+ 1 2) 3) 4) 10 Pythonin reduce on reduce-left

34 List comprehension -esimerkki Esimerkki: parittomien lukujen neliöiden summa (accumulate + 0 (map (lambda (x) (* x x)) (filter odd? (enumerate-interval 1 100)))) ;; Sama Pythonilla: reduce(lambda x,y: x+y, map(lambda x: x*x, filter(lambda x: x%2==1, range(1, 100)))) sum([ x*x for x in range(1, 100) if x%2==1 ]) list comprehension on lyhennysmerkintä useimmille map- ja filter-ketjuille Pythonin lisäksi esim. Haskell- ja Scala-kielissä, ei Schemessä lyhennysmerkintä ei auta reduce:en; yllä käytetty sum on vain Pythonin valmis funktio joka tekee saman kuin juuri tämä reduce

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 10: Aliohjelmat, foreign function interface Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 25. 3. 2013 Sisältö 1 Aliohjelmien käyttäminen

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Dekoraattorit Listaoperaatiot Prolointi Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Suorituskyvyn mittaaminen, Pythonin ominaisuuksia Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 9: Suorituskyky, skriptausta, listaoperaatiot Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 28. 3. 2012 Sisältö 1 Suorituskyky

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 8: Lisää suunnittelumalleja, laadusta, säännölliset lausekkeet Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 11. 3. 2013 Sisältö

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 3: Funktionaalinen listankäsittely ja listankäsittelyoperaatiot (mm. SICP 22.2.3) Riku Saikkonen 31. 10. 2011 Sisältö 1 Linkitetyt listat 2 Listarakenteet

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 4: Perinnän käyttäminen Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 4. 2. 2012 Sisältö 1 Yksinkertainen esimerkki perinnästä

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 8: Pienen ohjelmointikielen tulkki (ohjelmoitava laskin) (mm. SICP 4-4.1.5 osin) Riku Saikkonen 15. 11. 2012 Sisältö 1 Nelilaskintulkki, globaalit muuttujat

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Keskeneräinen luento 3: Listat (mm. SICP 22.2.3) Riku Saikkonen 31. 10. 2011 Sisältö 1 Linkitetyt listat 2 Linkitetyt listat (SICP 2.1.1, 2.2.1) funktionaalinen

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 4: Symbolit, derivojaesimerkki, kierroksen 1 ratkaisut (mm. SICP 2.32.3.2) Riku Saikkonen 1. 11. 2011 Sisältö 1 Symbolit ja sulkulausekkeet 2 Lisää Schemestä:

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Olioiden toteuttaminen Riku Saikkonen 28. 11. 2011 Sisältö 1 Miten oliot ja metodikutsut toimivat? 2 Oliot Minkä luokan metodia kutsutaan? Python-esimerkki

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 5: Sijoituslause, SICP-oliot, tietorakenteen muuttaminen (mm. SICP 33.1.3, 3.33.3.2) Riku Saikkonen 6. 11. 2012 Sisältö 1 Muuttujan arvon muuttaminen:

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

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

815338A Ohjelmointikielten periaatteet 2014-2015

815338A Ohjelmointikielten periaatteet 2014-2015 815338A Ohjelmointikielten periaatteet 2014-2015 X Skriptiohjelmointi Sisältö 1. Johdanto 2. Skriptikielten yleispiirteitä 3. Python 815338A Ohjelmointikielten periaatteet, Skriptiohjelmointi 2 X.1 Johdanto

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Tulkin muokkaaminen, sisäiset määrittelyt, makrot (mm. SICP 3.2.4, 4-4.1.6) Riku Saikkonen 29. 11. 2012 Sisältö 1 Kirjan tulkin muokkaaminen 2 Yksityiskohta:

Lisätiedot

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 3: SICP kohdat 2.22.3, 33.1 ja 3.33.3.2 Riku Saikkonen 8. 11. 2010 Sisältö 1 Lisää listoista 2 Symbolit ja sulkulausekkeet 3 Derivoijaesimerkki 4 Muuttujan

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 7: Funktionaalista ohjelmointia (mm. SICP 3.5) Riku Saikkonen 13. 11. 2012 Sisältö 1 Laiskaa laskentaa: delay ja force 2 Funktionaalinen I/O 3 Funktionaalista

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 8: Tulkki: proseduurit, abstrakti syntaksi, quote ja cond (mm. SICP 44.1.5 osin) Riku Saikkonen 15. 11. 2011 Sisältö 1 Argumentittomat proseduurit ja käyttöliittymä

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 12: Ohjelmamuunnokset, dynaaminen sidonta, Lisp-kielistä Riku Saikkonen 4. 12. 2012 Sisältö 1 Ohjelmia muokkaavat ohjelmat 2 Dynaaminen sidonta 3 Lisp-kielistä

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

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus Luento 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 5: Sijoituslause, SICP-oliot, todistamisesta (mm. SICP 33.1.3, 3.33.3.2) Riku Saikkonen 7. 11. 2011 Sisältö 1 Muuttujan arvon muuttaminen: set! 2 SICP-oliot

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

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

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 10: Paikalliset muuttujat, kirjan tulkki kokonaisuutena (mm. SICP 3.2, 4.1.24.1.6) Riku Saikkonen 22. 11. 2012 Sisältö 1 Ympäristöt: miten paikalliset

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

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

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

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 9: Makrot ja dynaaminen sidonta Riku Saikkonen 7. 12. 2010 Sisältö 1 Makrot 2 Pieni esimerkki abstraktion tekemisestä 3 Dynaaminen sidonta Mikä on makro?

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 18.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 18.3.2009 1 / 51 Olioista (kertausta) Olioiden avulla voidaan kuvata useammasta arvosta koostuvaa kokonaisuutta

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 peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: Funktioiden käyttöä, lisää Schemestä (mm. SICP 1.31.3.4) Riku Saikkonen 17. 10. 2011 Sisältö 1 Scheme-ohjelmointikäytäntöjä 2 Funktiot argumentteina

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 21.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 21.3.2011 1 / 42 Listan alkiona viiteitä olioihin Halutaan tehdä ohjelma ohjelmointikurssien opiskelijoiden käsittelyyn.

Lisätiedot

Groovy. Samuli Haverinen, Aki Hänninen. 19. marraskuuta 2015

Groovy. Samuli Haverinen, Aki Hänninen. 19. marraskuuta 2015 Groovy Samuli Haverinen, Aki Hänninen 19. marraskuuta 2015 Groovy on oliokieli Java-alustalle (käännetään/tulkataan Java-tavukoodiksi), jonka syntaksi on hyvin Java-ystävällinen ja jota voidaan käyttää

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 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Tutoriaaliläsnäoloista

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

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 12.9.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 12.9.2018 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 10: Tulkin muokkaus, makrot, ohjelmia muokkaavat ohjelmat (mm. SICP 3.2.4, 4-4.1.6) Riku Saikkonen 22. 11. 2011 Sisältö 1 Kirjan tulkin muokkaaminen 2

Lisätiedot

Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

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

Perintä (inheritance)

Perintä (inheritance) Perintä (inheritance) Perintä on menetelmä, jonka avulla jostakin olemassaolevasta luokasta voidaan johtaa uusi luokka, joka saa automaattisesti käyttöönsä perimänsä luokan ominaisuuksia. Perittävää luokkaa

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: Perinnän käyttäminen Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 1. 2. 2012 Sisältö 1 Esimerkki perinnästä 2 Pohdintaa perinnän

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 13: Scheme-tulkki Pythonilla, datan serialisointi, keväästä Riku Saikkonen 11. 12. 2012 Sisältö 1 Scheme-tulkki Pythonilla 2 Datan serialisointi 3 Suunnitelmia

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python 7. helmikuuta 2009 Ohjelmoinnista Ohjelman peruselementtejä Koodin kommentointi Lohkorakenne Ohjausrakenteet If For While Try Funktiot Käyttö

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 11.9.2019 CS-A1111 Ohjelmoinnin peruskurssi Y1 11.9.2019 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

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

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 10.10.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 10.10.2018 1 / 20 Oppimistavoitteet: tämän luennon jälkeen Tiedät, miten ohjelman toimintaa voi tutkia ja ohjelmassa

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 4: SICP kohta 3.3.5 ja funktionaalista ohjelmointia Riku Saikkonen 15. 11. 2010 Sisältö 1 Ensimmäisen kierroksen tehtävistä 2 SICP 3.3.5: rajoitteiden

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 12: Dynaaminen sidonta, Lisp-kielistä, delay Riku Saikkonen 29. 11. 2011 Sisältö 1 Dynaaminen sidonta 2 Lisp-kielistä 3 DSL-kieli: Emacs Lisp 4 Laiskaa

Lisätiedot

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 9: Miten oliot toteutetaan, skriptausta Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 18. 3. 2013 Sisältö 1 Oliot Scheme-tulkkiin

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 14.9.2016 CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Rinnakkaisuus Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 25. 4. 2012 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2

Lisätiedot

2 Konekieli, aliohjelmat, keskeytykset

2 Konekieli, aliohjelmat, keskeytykset ITK145 Käyttöjärjestelmät, kesä 2005 Tenttitärppejä Tässä on lueteltu suurin piirtein kaikki vuosina 2003-2005 kurssin tenteissä kysytyt kysymykset, ja mukana on myös muutama uusi. Jokaisessa kysymyksessä

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

C++11 lambdat: [](){} Matti Rintala

C++11 lambdat: [](){} Matti Rintala C++11 lambdat: [](){} Matti Rintala bool(*)(int) Tarve Tarve välittää kirjastolle/funktiolle toiminnallisuutta Callback-funktiot Virhekäsittely Käyttöliittymät Geneeristen kirjastojen räätälöinti STL:n

Lisätiedot

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

Hakemistojen sisällöt säilötään linkitetyille listalle. Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi Java-kielellä komentoikkunaa (komentotulkkia, komentoriviä) simuloiva olioperustainen ohjelma. Hakemistojen sisällöt säilötään linkitetyille listalle. Työ

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 4.10.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 4.10.2017 1 / 23 Mahdollisuus antaa luentopalautetta Luennon aikana voit kirjoittaa kommentteja ja kysymyksiä sivulle

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

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

Ohjelmointi 1 C#, kevät 2013, 2. tentti ITKP102 Ohjelmointi 1 C# 15.5.2013 1 / 6 Ohjelmointi 1 C#, kevät 2013, 2. tentti Tentaattori Antti-Jussi Lakanen Tässä tentissä saa olla mukana omia muistiinpanoja yhden arkin verran. Tentin valvojalla

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 13.9.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 13.9.2017 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

linux linux: käyttäjän oikeudet + lisää ja - poistaa oikeuksia

linux linux: käyttäjän oikeudet + lisää ja - poistaa oikeuksia L6: linux linux linux: käyttäjän oikeudet Käyttäjällä, username, on käyttöoikeus rajattuun levytilaan du -h /home/username/ tulostaa käytetyn levytilan. Yhteenvedon antaa du -h /home/jetsu/ - -summarize

Lisätiedot

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

Tieto- ja tallennusrakenteet

Tieto- ja tallennusrakenteet Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 26.10.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 26.10.2015 1 / 28 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta

Lisätiedot

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 22.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 22.3.2010 1 / 49 Lista luokan kenttänä Luokan kenttä voi olla myös esimerkiksi lista, sanakirja tai oliomuuttuja.

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Muistutus aikatauluista

Muistutus aikatauluista Muistutus aikatauluista (Nämä eivät välttämättä koske avoimen yo:n opiskelijoita Erkki Kailan rinnakkaisella kurssilla) Luento 1: kotitehtävät sulkeutuvat 20.9 12:00, ennen tutoriaalia Tutoriaali 1 sulkeutuu

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 3.10.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 3.10.2018 1 / 27 Oppimistavoitteet: tämän luennon jälkeen Tiedät, miten ohjelma voidaan jakaa pienempiin osiin käyttämällä

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 16.3.2009 1 / 40 Kertausta: tiedostosta lukeminen Aluksi käsiteltävä tiedosto pitää avata: tiedostomuuttuja = open("teksti.txt","r")

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 6: Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 6: Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 6: Python 15. helmikuuta 2009 Merkkijonot Yleistä Käsittely Muotoiltu tulostus Tiedostot Käsittely Lukeminen Kirjoittaminen Modulit Käyttö Seuraava luento

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.3.2010 1 / 49 Olioista (kertausta) Olioiden avulla voidaan kuvata useammasta arvosta koostuvaa kokonaisuutta

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 3.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 3.2.2010 1 / 36 Esimerkki: asunnon välityspalkkio Kirjoitetaan ohjelma, joka laskee kiinteistönvälittäjän asunnon

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät Ohjelmoinnin peruskurssien laaja oppimäärä, kevät Luento 2: Ohjelman suunnittelua, miten oliot toimivat Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 21. 1. 2013 Sisältö 1 Suunnittelua:

Lisätiedot

Korpusten käsittely clt131, P Luento 4

Korpusten käsittely clt131, P Luento 4 Korpusten käsittely clt131, P2 2006 Luento 4 Nicholas Volk 24.11.2006 Humanistinen tiedekunta Säännölliset lausekkeet: ryhmittely Sulkujen avulla voidaan osoittaa määrällistäjille

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: Funktioiden käyttöä, lisää Schemestä, listat (mm. SICP 1.31.3.4, osin 22.2.3) Riku Saikkonen 17. 10. 2011 Sisältö 1 Scheme-ohjelmointikäytäntöjä 2 Funktiot

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 1.3.2010 1 / 36 Monikko Monikko (engl. tuple) muistuttaa listaa, mutta monikon sisältöä ei voi muuttaa sen jälkeen,

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

7. Oliot ja viitteet 7.1

7. Oliot ja viitteet 7.1 7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin

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