Ohjelmoinnin peruskurssien laaja oppimäärä

Koko: px
Aloita esitys sivulta:

Download "Ohjelmoinnin peruskurssien laaja oppimäärä"

Transkriptio

1 Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: Funktioiden käyttöä, lisää Schemestä, listat (mm. SICP , osin ) Riku Saikkonen

2 Sisältö 1 Scheme-ohjelmointikäytäntöjä 2 Funktiot argumentteina ja paluuarvoina 3 Funktio vai olio? 4 Gambit-C:n Scheme-debuggeri 5 Linkitetyt listat 6 Listarakenteet

3 Miten Schemeä käytännössä koodataan? pienten ohjelmien tekemiseen on kolme perustapaa: (näistä tarkemmin kurssisivulla Scheme-ohjeita) 1 pelkän Scheme-tulkin käyttäminen lähinnä kokeiluun (yksirivisille ohjelmille) 2 koodi tiedostossa editorissa ja erillinen Scheme-tulkki (esim. omassa ikkunassa) ohjelman kokeiluun tyypillinen tapa muissa kielissä, erityisesti käännetyissä kielissä samoin monimutkaisemmissa ohjelmissa varsinkin jos ohjelmalla on oma käyttöliittymä sen sijaan että vain kokeillaan proseduureja käsin tulkissa 3 Scheme-tulkki editorin sisällä tulkkiin voi helposti ladata editoitavana olevan koodin yleinen tapa Schemessä pienten ohjelmien ja apuproseduurien tekemisessä joskus käytetään muissakin kielissä (esim. Python-tulkin saa mm. Emacsin sisään)

4 Miten tulostetaan? jos haluaa tehdä itsenäisiä ohjelmia tai kokeilla niitä ilman että syöttää lausekkeita tulkkiin, ohjelman itsensä pitää tulostaa jotain Schemen tulostusprimitiivit: (display x ) tulostaa lausekkeen x arvon (osaa tulostaa melkein kaikkea paitsi proseduureja) (write x ) samoin, mutta koneluettavassa muodossa (jota read-primitiivi osaa lukea) vrt. Pythonin repr() (newline) tulostaa rivinvaihdon Gambit-C:ssä on myös mm. print ja println tulostaessa tarvitsee lisäksi usein merkkijonoja: "foo" on merkkijonovakio (esim. (display "foo") tulostaa foo) (string-append x y ) yhdistää kaksi merkkijonoa peräkkäin (number->string x ) muuttaa numeron merkkijonoksi muitakin on (ks. R 5 RS-standardin kohta 6.3.5), mutta niitä ei juuri kokeiluissa tarvitse

5 Esimerkki koodia testaavasta pääohjelmasta Kokonainen ohjelma ;; Testattava koodi (define (fact n) (if (= n 1) ; bugi! 1 (* n (fact (- n 1))))) fact.scm ;; Pääohjelma (nimi main voisi olla joku muukin) (define (main) (define (test i) (display "fact ") (display i) (display " => ") (display (fact i)) (newline)) (test 1) (test 10) (test 5) (test 0)) ;; Ajetaan pääohjelma tiedostoa ladattaessa (main)

6 Esimerkki tulostamisesta Edellisen luennon robottiesimerkki tulostuksella robotpaths-show.scm (define (numpaths-show f n show-all) ; muutokset punaisella (define (paths-from x y prefix) (cond ((or (>= x n) (>= y n) (= (f x y) 1)) (if show-all (begin (display prefix) (display "#") (newline))) 0) ((= x y (- n 1)) (display prefix) (display "!") (newline) 1) (else (+ (paths-from (+ x 1) y (string-append prefix ">")) (paths-from x (+ y 1) (string-append prefix "v")))))) (paths-from 0 0 "")) cond:ssa voi siis ehdon jälkeen olla monta lauseketta if:n haarassa tarvitaan begin: (begin x 1 x 2 x n ) ajaa kaikki lausekkeet ja palauttaa viimeisen arvon

7 Sisältö 1 Scheme-ohjelmointikäytäntöjä 2 Funktiot argumentteina ja paluuarvoina 3 Funktio vai olio? 4 Gambit-C:n Scheme-debuggeri 5 Linkitetyt listat 6 Listarakenteet

8 Esimerkki funktioargumenteista (SICP ) Halutaan arvioida π:n arvoa kaavalla π 8 = Ratkaisu oman summa-abstraktion avulla { b f (n) = f (a) + b n=next(a) f (n) n=a 0, jos a > b muuten. (define (sum f a next b) def sum(f, a, next, b): (if (> a b) if a > b: 0 return 0 (+ (f a) else: (sum f (next a) next b)))) return f(a) + sum(f, next(a), next, b) (define (pi-f x) def pi_f(x): (/ 1.0 (* x (+ x 2)))) return 1.0 / (x*(x+2)) (define (pi-next x) def pi_next(x): (+ x 4)) return x + 4 (define (pi-sum a b) def pi_sum(a, b): (sum pi-f a pi-next b)) return sum(pi_f, a, pi_next, b) Testiajo: (* 8 (pi-sum ))

9 Lambda on tapa tehdä nimettömiä funktioita Edelliseltä kalvolta (define (pi-f x) (/ 1.0 (* x (+ x 2)))) (define (pi-next x) (+ x 4)) (define (pi-sum a b) (sum pi-f a pi-next b)) lambdan avulla (define (pi-sum a b) (sum (lambda (x) (/ 1.0 (* x (+ x 2)))) a (lambda (x) (+ x 4)) b)) apuproseduureja voi tehdä lambdalla keksimättä niille nimiä lambda on historiallinen nimi: loogisempi olisi ehkä make-procedure tms. lambdan vastine löytyy esim. Scalasta, Rubysta, Perlistä, JavaScriptistä, Luasta ja Pythonista tosin Pythonissa lambdan sisältöä on rajoitettu: vain yksi lauseke, jonka eteen tulee automaattisesti return Schemessä lambda on myös primitiivisin tapa tehdä paikallisia muuttujia (ks. SICP 1.3.2)

10 Esimerkki funktiosta paluuarvona (SICP 1.3.4) Yksinkertaista numeerista derivointia (define dx ) (define (deriv g) (lambda (x) (/ (- (g (+ x dx)) (g x)) dx))) Ajoesimerkki (define (cube x) (* x x x)) ; Dg(x) = (g(x + dx) g(x))/dx (define dcube (deriv cube)) ; tai seuraava rivi: (define (dcube x) ((deriv cube) x)) (dcube 5) ((deriv cube) 5)

11 Esimerkki abstrahoinnista funktioargumenteilla Abstraktimpi versio robottiesimerkistä robotpaths-abs.scm (define (search-right-and-down start-x start-y invalid-position? at-wall? at-goal?) (define (paths-from x y) (cond ((invalid-position? x y) 0) ((at-wall? x y) 0) ((at-goal? x y) 1) (else (+ (paths-from (+ x 1) y) (paths-from x (+ y 1)))))) (paths-from start-x start-y)) (define (numpaths f n) (search-right-and-down 0 0 (lambda (x y) (or (>= x n) (>= y n))) (lambda (x y) (= (f x y) 1)) (lambda (x y) (= x y (- n 1))))) (listojen avulla voisi abstrahoida myös robotin liikevaihtoehdot) mitä etua tästä abstraktiosta on? entä haittaa?

12 Sisältö 1 Scheme-ohjelmointikäytäntöjä 2 Funktiot argumentteina ja paluuarvoina 3 Funktio vai olio? 4 Gambit-C:n Scheme-debuggeri 5 Linkitetyt listat 6 Listarakenteet

13 Funktioargumentti vs. olio ja metodi 1/2 eräs funktionaalisen ja olio-ohjelmoinnin paradigmojen ero liittyy siihen, mitä asioita pidetään koodissa yhdessä olio-ohjelmoinnissa on tyypillistä yhdistää olion datan rakenne (esim. luokan kentät) ja olioon liittyvät toiminnot esim. uuteen luokkaan tehdään metodi, joka kertoo miten sen luokan alkioita verrataan (Pythonissa esim. lt -metodi, Javassa Comparable-rajapinnan compare-metodi) funktionaalisessa ohjelmoinnissa on tyypillisempää yhdistää toiminto ja sen osatoiminnot esim. järjestämisfunktio ottaa argumentiksi funktion, jolla järjestettäviä alkioita verrataan etu: samat alkiot voi järjestää useaan eri järjestykseen (esim. eri kentän mukaan) antamalla eri funktioargumentin haitta: funktioargumentti tarvitsee tietoa järjestettävien alkioiden sisäisestä rakenteesta

14 Funktioargumentti vs. olio ja metodi 2/2 siis kaksi tapaa: liitetään toiminto (esim. alkioiden vertailu) dataan (olion metodi) tai operaatioon jossa sitä tarvitaan (järjestämisfunktion funktioargumentti) tapojen ero ei ole aina kovin selkeä, ja esim. jokin rajapinta voi tukea kumpaakin tapaa Javan Collections.sort-metodille voi antaa erillisen Comparator-olion Pythonin sorted()-funktio käyttää lt -metodia, tai sille voi antaa funktioargumentin, joka muuntaa olion toiseksi vertailua varten, tai vertailufunktion nämä kaksi ovat hiukan erilaisia tapoja abstrahoida koodia toinen vain sopii luontevammin yhteen funktionaalisen, toinen olio-ohjelmoinnin kanssa

15 Funktioiden käyttämisestä paluuarvoina funktioiden käyttö paluuarvoina on hieman harvinaisempaa kuin argumentteina käyttökohteita esimerkiksi: toisia funktioita muokkaavat funktiot (kuten deriv edellä) laskennan viivästäminen: jätetään jokin (mahdollisesti tarpeeton) toiminto kesken ja palautetaan funktio, jolla voi tarvittaessa tehdä sen loppuun teoreettisempi esimerkki: currying on tekniikka, jolla moniargumenttiset funktiot saa tehtyä yksiargumenttisten avulla ideaa käytetään mm. Haskell-kielessä: jos funktiolle antaa vähemmän argumentteja kuin sen pitäisi saada, kutsu palauttaa funktion, joka ottaa loput argumentit ja kutsuu alkuperäistä esim. (< 0) olisi sama kuin (lambda (x) (< 0 x)), jos Scheme käyttäisi tätä ideaa argumentin ja paluuarvon lisäksi kolmas tapa kuljettaa funktioita on tallettaa niitä tietorakenteisiin myöhempää käyttöä varten

16 Funktiot Javassa Java-kieli ei suoraan tue funktioiden (tai metodien) tallentamista muuttujiin, palauttamista tai antamista argumentiksi moni Javan rajapinta kiertää tätä rajoitusta yksimetodisilla rajapinnoilla; esimerkkejä: GUI-kirjastojen ActionListener (metodi actionperformed) järjestämisfunktioiden Comparator (metodi compare) monisäikeisyyden Runnable-rajapinta (metodi run) etu: luokan ja metodin nimestä saattaa nähdä, mihin tätä argumenttia tullaan käyttämään haittoja: argumenttina annettavan funktion koodi päätyy usein kauas kohdasta, jossa sitä käytetään tälle funktiolle on hankala antaa käyttöön paikallisia muuttujia siitä kohdasta, jossa se annettiin argumentiksi Schemessä ja Pythonissa nämä voisivat olla tavallisia funktioargumentteja

17 Funktiot C:ssä ja Javassa C-kieli tukee funktioargumentteja ja -paluuarvoja rajoituksin: C:ssä funktio on vain sen koodi; Schemessä ja Pythonissa siihen kuuluvat myös määrittelykohdan paikallisten muuttujien arvot joten C:ssä funktio ei voi aina käyttää ulompana olevia paikallisia muuttujia (itse asiassa standardi-c ei edes tue sisäkkäisiä funktiomäärittelyjä) Javassa funktioargumenttia ja -paluuarvoa vastaa yksimetodinen sisäluokka, mutta siinäkin on rajoituksia ympäröivän koodin paikallisia muuttujia ei voi kaikissa tilanteissa käyttää molempien rajoitusten syynä on muistinhallinta: C ja Java tallettavat paikalliset muuttujat kutsupinoon, josta ne katoavat kun funktio palaa tästä lisää myöhemmin tulkkien yhteydessä...

18 Sisältö 1 Scheme-ohjelmointikäytäntöjä 2 Funktiot argumentteina ja paluuarvoina 3 Funktio vai olio? 4 Gambit-C:n Scheme-debuggeri 5 Linkitetyt listat 6 Listarakenteet

19 Debuggeriin pääseminen Scheme-tulkista Scheme-lauseke (begin (step) (foo)) pysähtyy debuggeriin juuri ennen lausekkeen (foo) suoritusta Ctrl-C (Emacs: C-c C-c) kesken pitkän suorituksen pysähtyy myös debuggeriin samoin virheilmoitus, esim. (/ 1 0) keskellä koodia (break foo) muokkaa päätason proseduuria foo niin että juuri ennen sen kutsua pysähdytään debuggeriin; (unbreak foo) kumoaa debuggeritilan tunnistaa tulkin kehotteesta: > ei debuggeria, 1>, 2> jne. debuggerissa numero kertoo monennessako sisäkkäisessä (!) debuggerissa ollaan

20 Debuggerikomentoja Ctrl-D tai,d poistuu päällimmäisestä debuggerista,t poistuu kokonaan debuggerista takaisin tulkkiin,? näyttää komentolistauksen,b näyttää kutsupinon,be näyttää kutsupinon muuttujineen, numero menee kutsupinon tiettyyn kohtaan,c jatkaa suoritusta normaalisti,(c x ) jatkaa suoritusta virheen jälkeen: virheen aiheuttanut lauseke palauttaa x,s jatkaa lyhyen askelen eteenpäin,l tekee funktiokutsun ja pysähtyy debuggeriin sen palattua ja debuggerissa voi suorittaa Scheme-lausekkeita normaalisti (esim. katsoa muuttujan arvoa kirjoittamalla sen nimi)

21 Sisältö 1 Scheme-ohjelmointikäytäntöjä 2 Funktiot argumentteina ja paluuarvoina 3 Funktio vai olio? 4 Gambit-C:n Scheme-debuggeri 5 Linkitetyt listat 6 Listarakenteet

22 Linkitetyt listat (SICP 2.1.1, 2.2.1) funktionaalinen ohjelmointitapa perustuu usein laskemiseen linkitettyjen listojen käsittelyfunktioilla Schemessä (cons a b) tekee parin, josta muodostetaan listoja (car p) palauttaa parin ensimmäisen alkion (cdr p) toisen (eli listan sen osan, jossa on loput alkiot) nämä nimet ovat historiallisia; esim. make-pair, first ja rest olisivat varmaankin loogisempia linkitetty lista (list) on jono pareja, joka cdr:iä seuraten päättyy tyhjään listaan nil (tai '()): (cons 1 (cons 2 (cons 3 nil))) lista (1 2 3) listoja voi tuottaa myös näin: (list 1 2 3) ja '(1 2 3) huomaa, että (1 2 3) on tapa, jolla listat tulostetaan, mutta koodina se yrittäisi kutsua 1-nimistä proseduuria

23 Schemen ja muiden kielten listat monissa muissakin kielissä on sisäänrakennetut linkitettyjen listojen vastineet (esim. Javan List-luokka; Pythonin listat on rakennettu hieman eri tavalla taulukkoina) Schemen listat ovat rakenteeltaan mahdollisimman yksinkertaisia jotta niitä voisi käyttää kätevästi esim. rekursiivisesti niiden päälle voi rakentaa monimutkaisempia tietorakenteita esimerkiksi lista on vain yhteen suuntaan linkitetty, jotta osalistoja voisi antaa eteenpäin muille funktioille samanlaiset listat (ja samat listankäsittelyoperaatiot) on muissakin funktionaalisissa kielissä Schemen listoja on tapana käyttää enimmäkseen funktionaalisesti (tehdään uusi lista eikä muuteta olemassaolevaa)

24 Esimerkki listojen käytöstä Muutama listaoperaatio lists.scm (define (sum-list l) (if (null? l) 0 (+ (car l) (sum-list (cdr l))))) (define (square-list l) (define (square x) (* x x)) (if (null? l) nil ; tai '() (cons (square (car l)) (square-list (cdr l))))) Testiajoja: (sum-list (cons 1 (cons 2 nil))) 3 (sum-list (list )) 26 (square-list (list )) ( ) nämä voisi tehdä kätevämmin Schemessä valmiina olevilla listankäsittelyproseduureilla, joista lisää seuraavalla luennolla

25 Teoriassa listoja ei tarvittaisi (SICP 2.1.3) periaatteessa listoja ei tarvittaisi kieleen sisäänrakennettuna ominaisuutena, vaan ne voisi rakentaa funktioista (samoin muutkin tietorakenteet kuin listat, kunhan niitä ei voi muuttaa) toteutukseksi käyvät mitkä tahansa proseduurit cons, car ja cdr, jotka toteuttavat alla olevat ehdot (sekä tyhjä lista ja null?) käytännössä tämä ei toki olisi kovin tehokasta... Listojen toteutus proseduureina (SICP tehtävästä 2.4) (define (cons x y) ; x ja y jäävät talteen palautettuun proseduuriin (lambda (m) (m x y))) (define (car z) ; toteuttaa ehdon (car (cons a b)) = a (z (lambda (p q) p))) (define (cdr z) ; toteuttaa ehdon (cdr (cons a b)) = b (z (lambda (p q) q))) (define nil 999) ; mikä tahansa tunnistettava vakioalkio käy Testiajo: (car (cdr (cons 1 (cons 2 (cons 3 nil))))) 2

26 Sisältö 1 Scheme-ohjelmointikäytäntöjä 2 Funktiot argumentteina ja paluuarvoina 3 Funktio vai olio? 4 Gambit-C:n Scheme-debuggeri 5 Linkitetyt listat 6 Listarakenteet

27 Listarakenteet (SICP 2.2.1, 2.2.2) sisäkkäiset listat sekä listat, jotka eivät pääty nil-alkioon, muodostavat listarakenteen (list structure) lista on listarakenne, joka päättyy tyhjään listaan sisäkkäiset listat toimivat luontevasti: (list (list 1 2 3) (list 4 5) (list 6)) ((1 2 3) (4 5) (6)) listarakenne, joka ei pääty tyhjään listaan, näytetään näin: (cons 1 (cons 2 3)) (1 2. 3) siis pisteen. jälkeen tulostetaan yksi alkio eli viimeisen parin cdr toinen selitys tulostamiselle: (cons a b) tulostetaan (a. b), paitsi (cons a nil) tulostetaan (a) (cons a lista ) tulostetaan (a lista tulostettuna ) ilman näitä lyhennysmerkintöjä (cons 1 (cons 2 nil)) olisi (1. (2. ())) eikä (1 2)

28 Listarakenteen tulostus koodina Listarakenteen tulostava Scheme-koodi (define (print-contents l) ; apufunktio (print-list-structure (car l)) (cond ((null? (cdr l)) 'done) ((not (pair? (cdr l))) (display ". ") (print-list-structure (cdr l))) (else (display " ") (print-contents (cdr l))))) print-list.scm (define (print-list-structure l) (cond ((null? l) (display "()")) ((not (pair? l)) (display l)) (else (display "(") (print-contents l) (display ")")))) Tulostusesimerkkejä: (list (list 1 2) (list 3 4)) ((1 2) (3 4)) (cons (list 1 2) (list 3 4)) ((1 2) 3 4) (list (cons 1 2) (cons 3 4)) ((1. 2) (3. 4)) (cons (cons 1 2) (cons 3 4)) ((1. 2) 3. 4)

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 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 2: Funktioiden käyttöä, lisää Schemestä (mm. SICP 1.31.3.4) Riku Saikkonen 18. 10. 2012 Sisältö 1 Lukuohjeita SICP-kirjaan 2 Scheme-ohjelmointikäytäntöjä

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 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 1: SICP luku 1 Riku Saikkonen 1. 11. 2010 Sisältö 1 Kurssijärjestelyitä 2 SICP-kirjasta 3 Häntärekursio 4 Rekursio 5 Funktiot argumentteina 6 Funktiot

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

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

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

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

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

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 1: Rekursiivinen ajattelutapa, Scheme-kielen perusteita (mm. SICP 11.2.4) Riku Saikkonen 16. 10. 2012 Sisältö 1 Kurssijärjestelyitä 2 Perusteita Scheme-kielestä,

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

Scheme-kesäkurssi luento 1

Scheme-kesäkurssi luento 1 Scheme-kesäkurssi luento 1 Riku Saikkonen 24. 6. 2009 Sisältö 1 Kurssi 2 Scheme-kieli 3 SICP luku 1 4 SICP luku 2 Kurssijärjestelyt T-106.6200 Ohjelmistotekniikan erikoiskurssi, 68 op Kurssikirja: Abelson,

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 1: Rekursiivinen ajattelutapa, Scheme-kielen perusteita (mm. SICP 11.2.4) Riku Saikkonen 10. 10. 2011 Sisältö 1 Kurssijärjestelyitä 2 Perusteita Scheme-kielestä,

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 6: Funktionaalista ohjelmointia: todistamisesta, virrat ja I/O, hahmonsovitus (mm. SICP 3.5) Riku Saikkonen 8. 11. 2011 Sisältö 1 Vähän funktionaalisten

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Esittelyluento 2: Scheme-ohjelmointikieli ja mihin se on hyvä Riku Saikkonen 5. 10. 2010 Sisältö 1 Scheme-kielen pikaesittely 2 Kurssin käyttämästä kielestä 3

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

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 6: Rajoite-esimerkki, funktionaalista ohjelmointia (mm. SICP 3.3.5, 3.5) Riku Saikkonen 8. 11. 2012 Sisältö 1 SICP 3.3.5 esimerkki: rajoitteiden vyörytysjärjestelmä

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

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 9: cond, paikalliset muuttujat, kirjan tulkki kokonaisuutena (mm. SICP 3.2, 4.1.24.1.6) Riku Saikkonen 21. 11. 2011 Sisältö 1 Syntaksimuunnos: cond->if

Lisätiedot

Scheme-kesäkurssi luento 3

Scheme-kesäkurssi luento 3 Scheme-kesäkurssi luento 3 Riku Saikkonen 6. 7. 2009 Sisältö 1 Nelilaskin 2 Muuttujat 3 Ympäristöt 4 Scheme-tulkki 5 Kontinuaatiot 6 CPS Miksi SICP-kirjassa on Scheme-tulkkeja? tulkin näkeminen auttaa

Lisätiedot

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

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

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

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

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 28.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 28.9.2015 1 / 16 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

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

Scheme-kesäkurssi luento 5

Scheme-kesäkurssi luento 5 Scheme-kesäkurssi luento 5 Timo Lilja 29. 7. 2009 Sisältö 1 Rekisterikonekielen simulaattori 2 Muistinhallinta 3 Rekisterikonekielinen Scheme-tulkki 4 Kääntäjä Rekisterikonekielen simulaattori (SICP 5.2)

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

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

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

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Olioiden toteuttaminen, abstraktit luokat yms. Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä) 27. 1. 2011 Sisältö 1 Kertausta Scheme-tulkista

Lisätiedot

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

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 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

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

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

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

Lisätiedot

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

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

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

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

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

Scheme-kesäkurssi luento 2

Scheme-kesäkurssi luento 2 Scheme-kesäkurssi luento 2 Timo Lilja 1. 7. 2009 Sisältö 1 SICP luku 3 2 Makrot 3 Gambit Sijoitus ja tila SICP 3.1 olioilla on paikallinen tila, jota mallinnetaan tilamuuttujilla Scheme-kielessä on sijoitusoperaattori

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

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

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2009 1 / 33 Valintakäsky if syote = raw_input("kerro tenttipisteesi.\n") pisteet = int(syote) if pisteet >=

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

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Esittelyluento Riku Saikkonen 28. 9. 2012 Sisältö 1 Laaja oppimäärä lyhyesti 2 Scheme-kieli ja SICP-kirja 3 Funktionaalinen ohjelmointi 4 Esimerkki rajapintojen

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 perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 24.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 24.1.2011 1 / 36 Luentopalaute kännykällä alkaa tänään! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

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

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.2.2009 1 / 43 Funktiot Tähän asti esitetyt ohjelmat ovat oleet hyvin lyhyitä. Todellisessa elämässä tarvitaan kuitenkin

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 CSE-A1111 21.9.2016 CSE-A1111 Ohjelmoinnin peruskurssi Y1 21.9.2016 1 / 22 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Bootstrap / HTDP2 / Realm of Racket. Vertailu

Bootstrap / HTDP2 / Realm of Racket. Vertailu Bootstrap / HTDP2 / Realm of Racket Vertailu Bootstrap http://www.bootstrapworld.org/ Tarkoitettu yläkoululaisille (12-15v) Ohjelmointi on integroitu matematiikan opetukseen Materiaalina tuntisuunnitelmat

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

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

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

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

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

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

Lisätiedot

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 perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 1.2.2010 1 / 47 Sijoituksen arvokehitys, koodi def main(): print "Ohjelma laskee sijoituksen arvon kehittymisen."

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

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

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016 ICS-C2000 Tietojenkäsittelyteoria Kevät 206 Kierros 0, 2. 24. maaliskuuta Huom! Perjantaina 25. maaliskuuta ei ole laskareita (pitkäperjantai), käykää vapaasti valitsemassanne ryhmässä aiemmin viikolla.

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

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

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 31.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 31.1.2011 1 / 41 Luentopalaute kännykällä käynnissä! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

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

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

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

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

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

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