Ohjelmoinnin peruskurssien laaja oppimäärä

Koko: px
Aloita esitys sivulta:

Download "Ohjelmoinnin peruskurssien laaja oppimäärä"

Transkriptio

1 Ohjelmoinnin peruskurssien laaja oppimäärä Esittelyluento Riku Saikkonen

2 Sisältö 1 Laaja oppimäärä lyhyesti 2 Scheme-kieli ja SICP-kirja 3 Funktionaalinen ohjelmointi 4 Esimerkki rajapintojen analysoinnista 5 Skriptaus 6 Lopuksi

3 Mitä laajassa oppimäärässä on? vaihtoehtoinen suoritustapa ohjelmoinnin peruskursseille käydään läpi enemmän asioita ja mennään usein peruskursseja syvemmälle kokeillaan ohjelmointia ryhmässä syksyllä: peruskurssin tehtävät ja tehtäviä Scheme-kielellä keväällä mm. Python-tehtäviä, ohjelmointiprojekti ryhmässä, ohjelmointikilpailujen tehtäviä tarkemmin kurssiesitteessä:

4 Syksyn kurssin sisältö kurssiesitteestä: T peruskurssin sisältö Erilaisia tapoja tehdä abstraktioita ja ohjelmointirajapintoja Rekursio ongelmanratkaisumenetelmänä Funktionaalisen ohjelmoinnin perusteita Ohjelmointikielten tulkkien toteuttaminen Scheme-ohjelmointikieli käytännössä käydään pienten tehtävien avulla läpi noin 150 sivua kurssikirjasta ja hiukan muuta asiaa kirja löytyy netistä, ks. kohtaa Oppimateriaali kurssin sivuilla

5 Kevään kurssien sisältöä kevään luennoilla ja kotitehtävissä on (tämänhetkisen suunnitelman mukaan) mm: skriptausta olio-ohjelmointia (tapoja käyttää olioita järkevästi) olioiden sisäistä toimintaa oikeiden Python-kirjastojen käyttöä oikeasti käytössä olevien (Python-)ohjelmien muokkaamista kotitehtäviin tulee jonkin verran valinnanvaraa: voi valita mitkä aiheet kiinnostavat lisäksi keväällä: ratkotaan ohjelmointikilpailujen tehtäviä (TRAK-kurssiin liittyen) harjoitellaan realistisia ryhmätyötapoja, (mm. versionhallintaa) vähän isompaa ohjelmaa tehdessä tarkennamme kevään sisältöä vielä syksyn kurssin aikana ja avulla

6 Sisältö 1 Laaja oppimäärä lyhyesti 2 Scheme-kieli ja SICP-kirja 3 Funktionaalinen ohjelmointi 4 Esimerkki rajapintojen analysoinnista 5 Skriptaus 6 Lopuksi

7 Scheme-kielen suunnitteluperiaate Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary. Scheme demonstrates that a very small number of rules for forming expressions, with no restrictions on how they are composed, suce to form a practical and ecient programming language that is exible enough to support most of the major programming paradigms in use today. R 5 RS (Scheme-kielen määrittely)

8 Scheme lyhyesti 1/2 muuttujien tyyppejä ei tarvitse kertoa: Scheme on dynaamisesti tyypitetty, kuten esim. Python ja Ruby tyypit tarkistetaan kun koodia suoritetaan tulkattavissa oleva kieli (myös kääntäjiä on) automaattinen muistinhallinta (roskankeruu) omalaatuinen prex-syntaksi: kielen rakenteet ovat muotoa ( operaattori operandi operandi...) esim. (* 2 (+ 3 4)), vrt. Pythonissa 2 * (3 + 4) vaatii hieman totuttelua ohjelmoijalta helpottaa mm. makrojen tekemistä ja kielen laajentamista koodi on dataa: Scheme-ohjelman käsittely toisella ohjelmalla on helppoa

9 Esimerkkejä syntaksista Scheme-koodinpätkiä (+ 5 (* x 2)) (/ (+ x y) 2) (define (average x y) (/ (+ x y) 2)) (if (< (average x y) 3.0) (display "y") (display "n")) (define (f x y) (let ((avg (average x y)) (sum (+ x y))) (if (and (>= avg 0) (< (* avg avg) sum)) (* sum sum sum) (+ avg sum)) Vastaava Python-koodi 5 + x*2 (x+y) / 2 def average(x, y): return (x+y) / 2 if average(x, y) < 3.0: print "y" else: print "n" def f(x, y): avg = average(x, y) sum = x + y if (avg >= 0 and avg*avg < sum): return sum * sum * sum else: return avg + sum

10 Scheme lyhyesti 2/2 leksikaalinen skooppi (kuten esim. Javassa) paikalliset muuttujat näkyvät sen lohkon sisällä, jossa ne on määritelty ei eroa lauseilla ja lausekkeilla (melkein mitä tahansa voi laittaa minkä tahansa sisälle) jokaisella lausekkeella on (paluu)arvo (ei erillistä returnia) puolifunktionaalinen kieli: tukee funktionaalista ohjelmointityyliä, mutta ei pakota siihen ensimmäisen luokan funktiot Schemessä funktiot ovat kuin mitä tahansa muuttujia esim. funktio voi tehdä ja palauttaa toisen funktion Schemen erikoisuuksia: laiskat arvot, makrot, kontinuaatiot näitä käsitteitä käsitellään kurssilla tarkemmin...

11 Pieni esimerkki Schemen suunnitteluperiaatteesta edeltä: ei eroa lauseilla ja lausekkeilla (melkein mitä tahansa voi laittaa minkä tahansa sisälle) Javassa ja C:ssä on kaksi iä, lause ja lauseke: if (x == 3) b = 5; b = (x == 3)? 5 : 8; else b = 8; samoin Pythonissa (molemmissa on if, mutta eri syntaksi): if x == 3: b = 5 b = 5 if x == 3 else 8 else: b = 8 Schemessä sama if käy molempiin: (if (= x 3) (set! b (if (= x 3) 5 8)) (set! b 5) (set! b 8)) Miksei Javassa tai C:ssä voisi toimia esim: b = ({ if (x == 3) 5; else 8; }); (gcc:ssä melkein toimiikin, sen omalla C:n laajennuksella)

12 Miksi Scheme-kieltä käytetään kurssilla? Scheme on yksinkertainen kieli ja helppo oppia kurssi pyrkii keskittymään periaatteisiin, jotka ovat yhteisiä lähes kaikille kielille, eikä yksittäisten kielten yksityiskohtien opetteluun erilainen kuin Python, jotta saa laajemman kuvan ohjelmoinnista (ei tosin kovin erilainen) minkä tahansa uuden ohjelmointikielen opettelu on helpompaa, jos on nähnyt useita erilaisia kieliä rekursiivinen ajattelutapa ja funktionaalisen ohjelmoinnin perusteet ovat hyödyllisiä muussakin ohjelmoinnissa ohjelmointikielen tulkin tekeminen ja kielen muokkaaminen on helpompaa Schemellä (erityisesti ei tarvitse keskittyä kielen syntaksin käsittelyyn) hyvä kurssikirja

13 Syksyn kurssikirja SICP: alkuosa Abelson, H., Sussman, G. J., Sussman, J.: Structure and Interpretation of Computer Programs, 2nd edition, MIT Press tai McGraw-Hill 1996 käyttää Schemen R 5 RS-versiota ohjelmoinnin perusoppikirja, oli pitkään käytössä MIT:n ensimmäisellä ohjelmointikurssilla esittelee myös lyhyesti tietotekniikan osa-alueita miksi ohjelmointikielet ovat sellaisia kuin ovat? kantava teema: abstraktioiden tekeminen eri tavoilla menee asioihin syvemmälle kuin useimmat muut perusoppikirjat

14 Syksyn kurssikirja SICP: loppuosa kurssikirjan tulkkiosio (luku 4) opettaa: pienen ohjelmointikielen tulkin tekeminen ei ole vaikeaa kokeilemaan ja miettimään mitä tapahtuisi jos kielessä olisi... ja antaa esimerkkejä harvinaisemmista ohjelmointiparadigmoista (esim. logiikkaohjelmointi) kääntäjäosio (luku 5) esittelee pienen assembler-kielen ja kääntäjän perustoiminnot sekä käsittelee muistinhallintaa kurssilla jatketaan tulkeista hieman eri suuntaan kuin kirjassa, mm. katsotaan miten oliot voi toteuttaa ja kokeillaan makroja

15 Miksi tulkkeja? Schemen ja tulkkien avulla on helpompi ymmärtää muiden ohjelmointikielten toimintaa tulkki antaa konkreettisen ja tarkan kuvan siitä, miten ohjelmointikieli toimii (vaikka oikea kielen toteutus tekeekin enemmän optimointeja) Schemessä monien kielten perusominaisuudet ovat mahdollisimman siistissä muodossa yksinkertaistettuna: moni kieli = Scheme + yksityiskohtia + rajoituksia + muutama isompi lisäys kuten oliot lisäksi tulkilla voi kokeilla ohjelmointikielen muokkaamista ja oman kielen suunnittelua tulkin rakennetta voi käyttää pohjana muunlaiseen kielen käsittelyyn, esim. monimutkaisen asetustiedoston lukemiseen

16 Tulkki asetustiedoston lukemisessa monia (varsinkin Unix-)ohjelmia konguroidaan tekstimuotoisilla asetustiedostoilla usein asetuksina on aluksi vain avainarvo -pareja (esim. ikkunan oletusleveys = 500 pikseliä)... kunnes joku kaipaa muuttujia (50 % paperin koosta)... tai haluaa tehdä asetuksen joka on suhteessa johonkin toiseen (keskiarvo kahdesta muusta asetuksesta)... tai uuden toiminnon, joka muuttaa useampaa asetusta väliaikaisesti näin voi päätyä enemmän tai vähemmän ohjelmointikieltä muistuttavaan asetustiedostoon tällaista monimutkaisempaa asetustiedostoa käsittelevä koodi on yleensä rakenteeltaan yksinkertaisen ohjelmointikielen tulkki

17 Ohjelmointikieli asetustiedostossa asetuksiin voidaan käyttää myös oikeaa ohjelmointikieltä, jolloin asetustiedoston ja lisämoduulin raja hämärtyy esimerkki: suuri osa Emacs-tekstieditorista on tehty sitä varten tehdyllä kielellä, Emacs Lispillä Lisp-kielen murre, johon lisätty tekstieditorin erikoisuuksia (esim. buer ja window) samalla kielellä tehdään sekä omia asetuksia että monimutkaista lisätoiminnallisuutta myös graanen asetuskäyttöliittymä yksinkertaisille asetuksille Firefoxin asetukset ovat JavaScript-kieltä niissäkin on graanen editori (Preferences ja about:cong) JavaScriptiä käytetään Webissä, mutta paljon myös Firefoxin sisällä esimerkki lisämoduulista: Gnomen Hearts-korttipelin tietokonepelaajat on tehty Pythonilla (varsinainen peli C:llä)

18 Mihin Schemeä käytetään oikeasti? laajennus- tai skriptikielenä muulla kielellä kirjoitettuun ohjelmaan esim. Gimp-kuvankäsittelyohjelmaa voi laajentaa Schemellä pohjana omalle pienelle (tai isolle) ohjelmointikielelle, koska Scheme on siisti ja helposti laajennettava kieli esim. GNU R -tilasto-ohjelman ohjauskieli perustuu Schemeen esim. JavaScript on ottanut mallia Schemestä ohjelmointikielitutkimuksessa uusien ideoiden kokeilussa opetuskäytössä joskus ohjelmiinkin (mm. SSH on tehnyt tuotteita Schemellä) lisäksi muut Lisp-kielet (mm. Common Lisp ja Emacs Lisp) muistuttavat Schemeä

19 Sisältö 1 Laaja oppimäärä lyhyesti 2 Scheme-kieli ja SICP-kirja 3 Funktionaalinen ohjelmointi 4 Esimerkki rajapintojen analysoinnista 5 Skriptaus 6 Lopuksi

20 Ohjelmointiparadigmat yleisimmät ohjelmointiparadigmat: imperatiivinen eli lausekielinen ohjelmointi (imperatiivinen) olio-ohjelmointi funktionaalinen ohjelmointi logiikkaohjelmointi määritelmät eivät ole kovin tarkkarajaisia, ja muitakin paradigmoja on jotkin ohjelmointikielet tukevat lähinnä yhtä paradigmoista, esim. C, Java, Haskell, Prolog toiset (uudemmat?) tukevat ainakin jonkin verran useampaa, esim. Python, Ruby, Scala, JavaScript paradigmoja käytetään osin myös kielissä, jotka eivät tue niitä kunnolla (esim. olio-ohjelmointia C:ssä)

21 Miksi eri paradigmoja kannattaa opetella? erilaisten paradigmojen tunteminen antaa enemmän vaihtoehtoja ohjelman suunnitteluun vaikkei käyttäisikään erikoista ohjelmointikieltä jokainen paradigma on paras tunnettu työkalu johonkin asiaan uuden kielen opettelu on paljon helpompaa, jos on nähnyt monia erilaisia kieliä varsinkin jos paradigma on tuttu eri ohjelmointikielet lainaavat usein ominaisuuksia toisiltaan auttaa ymmärtämään myös abstraktioita esim. Javan ja Pythonin merkkijonot ovat funktionaalisia: merkkijonoja ei voi muuttaa (eikä niistä siksi tarvitse tehdä kopioita)

22 Funktionaalinen ohjelmointi funktionaalinen ohjelmointi tarjoaa tapoja jakaa ohjelma osiin abstraktioita, joilla ohjelman voi koota pienistä helposti ymmärrettävistä paloista usein pyritään siihen, että lopullinen koodi kertoo, mitä pitää tehdä eikä miten se tehdään (eli deklaratiiviseen ohjelmointiin), ja toteutus piilotetaan abstraktioihin perustuvat usein funktioiden käyttöön argumentteina ja paluuarvoina esim. sen sijaan että laskettaisiin jotain itse tehdyllä while-silmukalla, voidaan käyttää abstraktia funktiota joka on tehty juuri sen muotoisille silmukoille toisaalta funktionaalisuus on erilainen tapa ajatella ohjelman tilaa imperatiivisessa ohjelmoinnissa ohjelman käskyt muuttavat ohjelman senhetkistä tilaa funktionaalisessa useammin luodaan uusi versio tilasta, jolloin sekä vanhaa että uutta voi halutessaan käsitellä

23 Esimerkki funktioiden käytöstä (SICP ) Halutaan arvioida π:n arvoa kaavalla π 8 = Ratkaisu oman summa-abstraktion avulla { b 0, jos a > b f (n) = f (a) + b n=next(a) f (n) muuten. n=a (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 ))

24 Muita funktionaalisia ohjelmointikieliä Schemen lisäksi yleisiä funktionaalisia ohjelmointikieliä ovat mm. Haskell, Ocaml, Standard ML ja Erlang funktionaalinen ohjelmointitapa on viety näissä pidemmälle kuin Schemessä Schemen osaaminen helpottaa näiden kielten opettelua, vaikka kielet sinänsä eivät ole kovin lähellä Schemeä monet uudemmat ei-funktionaaliset kielet tukevat funktionaalista ohjelmointia ainakin jonkin verran: esim. Ruby, JavaScript, Scala, Python

25 Funktionaalista ohjelmointia Pythonilla Esimerkki: parittomien lukujen 199 neliöiden summa 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 ]) esimerkin kummankin version käyttämät listankäsittelyoperaatiot on lainattu Pythoniin funktionaalisesta ohjelmoinnista saman voisi toki tehdä ilmankin (esim. käsin silmukoilla), mutta koodi olisi pidempää ja virhealttiimpaa Python tukee funktionaalista ohjelmointia vain osittain: vain osa tarvittavista ominaisuuksista

26 Sisältö 1 Laaja oppimäärä lyhyesti 2 Scheme-kieli ja SICP-kirja 3 Funktionaalinen ohjelmointi 4 Esimerkki rajapintojen analysoinnista 5 Skriptaus 6 Lopuksi

27 Vähän rajapinnoista ja abstraktioista Ohjelmointirajapintoja voi tutkia eri näkökulmista: Miten käytän olemassaolevaa rajapintaa omasta ohjelmastani? (Esim. Miten käytän tietokantoja Pythonista?) Miten tekisin oman rajapinnan samaan tai saman tapaiseen tehtävään? Voiko tästä rajapinnasta oppia jotain? Sopiiko tämä rajapinta (tai jokin useista olemassaolevista) juuri omaan ohjelmaani? Kannattaisiko jokin asia tehdä muulla tavalla kuin rajapinnan kautta? Onko rajapinta yleisesti ottaen hyvin suunniteltu? Suosittelisinko sitä kaverilleni? Katsotaan muutamaa hyvin erilaista rajapintaa samaan tehtävään: ohjelma tuottaa jotain dataa (esim. taulukko numeroita), ja siitä pitäisi piirtää kuvaaja.

28 Kuvaaja tavallisella kirjastolla: JFreeChart Javalle tehty kuvaajanpiirtokirjasto (paljon muitakin samankaltaisia on sekä Javalle että muille kielille) luokkia datan talletukseen, eri tyyppisten kuvaajien tekemiseen, kuvaajan osien muokkaamiseen,... JFreeChart-koodiesimerkki XYSeries s = new XYSeries("data"); s.add(1.0, 2.8); s.add(2.0, 3.7);... XYDataset d = new XYSeriesCollection(s); JFreeChart c = ChartFactory.createXYLineChart("otsikko", "Aika (s)", "Matka (m)", d, PlotOrientation.VERTICAL, true, true, false); try { ChartUtilities.saveChartAsPNG(new File("kuva.png"), c, 700, 500); } catch (IOException e) {... }

29 Kuvaaja Gnuplot-komentoja kirjoittamalla Gnuplot on komentoriviohjelma, jolle lähetetään tekstinä komentoja, joiden perusteella se piirtää kuvaajan komentoja voi kirjoittaa käsin, mutta toki voi myös tehdä ohjelman, joka tuottaa Gnuplot-komentoja ja käsittelee Gnuplotin tuottamaa kuvaa samalla tavalla voisi käyttää esim. Matlabia Esimerkki Gnuplot-komennoista set xlabel "Aika (s)" set ylabel "Matka (m)" plot '-' with linespoints e

30 Kuvaaja Pythonin Matplotlibillä Python-ohjelmointikielelle tehty kirjasto tarkoitettu sekä ohjelmien käyttöön että interaktiiviseen käyttöön (Gnuplot- tai Matlab-tyyliin, mutta komennot ovat Python-koodia eikä vain tähän tarkoitukseen tehtyä komentokieltä) oliopohjainen kirjasto, jonka käytöstä on pyritty tekemään mahdollisimman yksinkertaista Esimerkki Matplotlibin käytöstä (eräs käyttötapa) import matplotlib.pyplot as plt x = [1.0, 2.0,...]; y = [2.8, 3.7,...] plt.plot(x, y, marker='+', linestyle='-') plt.xlabel('aika (s)') plt.ylabel('matka (m)') plt.show()

31 Kuvaajaesimerkin analysointia edellä oli kolme tapaa: JFreeChart, Gnuplot, Matplotlib neljäs tapa olisi toki piirtää kuvaaja itse ilman näitä aputyökaluja mitä sitten pitäisi käyttää? vaikea kysymys; riippuu siitä mitä ohjelma muuten tekee kaikki vaihtoehdot ovat omalla tavallaan hyviä entä voisiko näistä tavoista oppia jotain? JFreeChart lienee ohjelmoijalle tutumpi tapa kuin muut Gnuplotissa on tehty oma komentokieli ja sille tulkki; Matplotlibissä tältä on vältytty rakentamalla kuvaajanpiirtokomennot Python-kielen sisään yksityiskohtia vertailemalla oppisi lisää kuvaajanpiirtokirjaston suunnittelemisesta

32 Rajapinta on kieli eräs tapa ajatella rajapintoja on, että rajapinta antaa käyttäjälleen uuden kielen, jolla puhua tietokoneelle myös yksinkertaista luokkaa voi ajatella tällaisena useimmiten nämä kielet muistuttavat luonnollisia kieliä (joskus esim. matemaattista notaatiota) niistä voi löytää esim. verbejä, substantiiveja ja adjektiiveja; tai subjektin, objektin, jne. esim. progressbar.update(200, 15.0): subjekti, verbi, tarkentavia sanoja esim. data.saveto("foo.txt"): subjekti, verbi, objekti esim. print("x"): verbi, objekti joskus rajapintakieli toimii paremmin omana pienenä ohjelmointikielenään (vrt. Gnuplot edellä)

33 Sisältö 1 Laaja oppimäärä lyhyesti 2 Scheme-kieli ja SICP-kirja 3 Funktionaalinen ohjelmointi 4 Esimerkki rajapintojen analysoinnista 5 Skriptaus 6 Lopuksi

34 Mikä skriptaus? skripti on lyhyehkö tiettyyn erikoistarkoitukseen tehty ohjelma yleensä nopeasti tehty (minuuteissa, yleensä enintään tunneissa) usein enimmäkseen yhdistelmä valmiita työkaluja ja/tai kirjastoja usein kertakäyttöinen usein vain tekijän omaan käyttöön tarkoitettu (ei esim. käyttöliittymää tai kunnollista dokumentointia) tyypillisesti ei kovin kaunista koodia skripteillä usein: muokataan tai tilastoidaan tekstimuotoista dataa konvertoidaan dataa toiseen muotoon tai automatisoidaan esim. komentorivityökalujen käyttöä esimerkkejä: laske tekstitiedoston yleisimmät sanat nimeä uudelleen kaikki tiedostot, jotka täyttävät tietyt ehdot konvertoi satoja kuvatiedostoja toiseen formaattiin (käyttäen työkalua, joka osaa konvertoida yhden tiedoston kerrallaan)

35 Esimerkki skriptistä: koneen yleisimmät prosessit Osa ps -ef -komennon tulostetta UID PID PPID C STIME TTY TIME CMD root Aug 29? 0:22 screen irssi root Jul 07? 0:00 /usr/lib/ssh/sshd root :57:57? 0:00 /usr/lib/ssh/sshd Python-skripti import sys cmds = dict() hdr = sys.stdin.readline() ind = hdr.rfind(" CMD")+1 for l in sys.stdin: cmd = l[ind:].partition(" ")[0].strip() if cmd in cmds: cmds[cmd] += 1 else: cmds[cmd] = 1 Ajoesimerkki 500x ssh-agent 418x /bin/tcsh 416x screen 308x irssi 307x /usr/lib/ssh/ssh 123x -tcsh 96x ssh 65x /c/bin/zsh 40x pine 17x /c/bin/bash scmds = sorted(cmds.items(), key=lambda x: x[1], reverse=true) for c,v in scmds[:10]: print str(v)+"x "+c

36 Sisältö 1 Laaja oppimäärä lyhyesti 2 Scheme-kieli ja SICP-kirja 3 Funktionaalinen ohjelmointi 4 Esimerkki rajapintojen analysoinnista 5 Skriptaus 6 Lopuksi

37 Lopuksi tässä luennossa näkyi pieni osa Schemestä ja vain muutama esimerkki Scheme-kieltä ehtii opetella rauhassa kurssin aikana samoin muita edellä olevia käsitteitä ja kirjaa käsitellään tarkemmin ja rauhallisemmin kurssilla muutaman sanan yhteenveto: syksyllä Schemeä, tulkkeja ja funktionaalista ohjelmointia; keväällä mm. oikeita ohjelmia ja kirjastoja, skriptausta ja ohjelmointiprojekti

38 Seuraavaksi laajalla kurssilla Laajassa oppimäärässä tulossa: Python-tehtävät tehtynä viimeistään ilmoittautuminen viimeistään laajan ilmoittautuminen on Oodissa (auki asti), ks laajan ensimmäinen (ei-esittely-)luento ensimmäiset Scheme-tehtävät tehtynä viimeistään tulossa kotisivuille ensi viikolla: muiden kolmen Scheme-tehtäväkierrosten deadlinet kahden ensimmäisen kierroksen tehtävät (automaattinen tarkistusjärjestelmä vasta ilmoittautumisten jälkeen)

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ä Esittelyluento 1: Ohjelmointirajapintoja todellisista ohjelmista Riku Saikkonen 28. 9. 2010 Sisältö 1 Laaja oppimäärä lyhyesti 2 Miten piirrän ohjelmassani kuvaajan

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

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

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

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

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

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

1. Olio-ohjelmointi 1.1

1. Olio-ohjelmointi 1.1 1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja

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 9: Suorituskyky, skriptausta, listaoperaatiot Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 28. 3. 2012 Sisältö 1 Suorituskyky

Lisätiedot

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages Tampere University of Technology Department of Pervasive Computing TIE-20306 Principles of Programming Languages Ruby Ryhmä 8 Juho Rintala Sami Paukku Sisällysluettelo 1 Johdanto... 3 2 Paradigma... 3

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

TIE Principles of Programming Languages. Seminaariesityksen essee. Ryhmä 18: Heidi Vulli, Joni Heikkilä

TIE Principles of Programming Languages. Seminaariesityksen essee. Ryhmä 18: Heidi Vulli, Joni Heikkilä TIE-20306 Principles of Programming Languages Seminaariesityksen essee Ryhmä 18: Heidi Vulli, Joni Heikkilä SISÄLLYSLUETTELO 1. Johdanto... 1 2. Ohjelmointikielen perusperiaatteet... 1 2.1 Paradigmat...

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

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

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

Lisätiedot

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

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19 Ohjelmointikieli TIE-20306 Principles of Programming Languages Syksy 2017 Ryhmä 19 Juho Kärnä Ville Mäntysaari 1. Johdanto D on yleiskäyttöinen, strukturoitu, staattisesti tyypitetty, käännettävä ohjelmointikieli

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

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

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

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

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

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

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

Lisätiedot

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

TIE Principles of Programming Languages CEYLON

TIE Principles of Programming Languages CEYLON TIE-20306 Principles of Programming Languages CEYLON SISÄLLYSLUETTELO 1. YLEISTIETOA KIELESTÄ JA SEN KEHITTÄMISESTÄ... 1 2. CEYLONIN OMINAISUUKSIA... 2 2.1 Modulaarisuus... 2 2.2 Tyypit... 2 2.3 Muita

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

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

Ohjelmointi 1 / syksy /20: IDE

Ohjelmointi 1 / syksy /20: IDE Ohjelmointi 1 / syksy 2007 10/20: IDE Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/8 Tämän luennon rakenne

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

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

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli TIE-20306 PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli Seminaariesitelmä ryhmä 24 Markku Ahokas Jani Kuitti i SISÄLLYSLUETTELO 1. YLEISTÄ EIFFELISTÄ... 1 1.1 Historia ja tausta... 1 1.2

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

P e d a c o d e ohjelmointikoulutus verkossa

P e d a c o d e ohjelmointikoulutus verkossa P e d a c o d e ohjelmointikoulutus verkossa Java-kielen perusteet Teoria ja ohjelmointitehtävät Java-kielen perusteet 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN 10 JAVA-KIELEN PERUSTEET 10 OPISKELUN ALOITTAMINEN

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

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

Lisätiedot

GIS-automatisointi ja ohjelmointi/skriptaus. Harri Antikainen

GIS-automatisointi ja ohjelmointi/skriptaus. Harri Antikainen GIS-automatisointi ja ohjelmointi/skriptaus Harri Antikainen Mistä nyt puhutaan? Automatisointi: Mikä tahansa tapa teettää tietokoneella asioita ilman että käyttäjän tarvitsee tehdä muuta kuin laittaa

Lisätiedot

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti C! C-ohjelmoinnin peruskurssi Pasi Sarolahti Mitä haluan oppia C-kurssilla? ja miksi? Tutustu lähimpään naapuriin Keskustelkaa miksi halusitte / jouduitte tulemaan kurssille 3 minuuttia è kootaan vastauksia

Lisätiedot

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet Koka Ryhmä 11 Juuso Tapaninen, Akseli Karvinen 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet 1 1. Taustoja Koka on Daan Leijenin ja Microsoft:n kehittämä

Lisätiedot

Osoitin ja viittaus C++:ssa

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

Lisätiedot

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka

Lisätiedot

17/20: Keittokirja IV

17/20: Keittokirja IV Ohjelmointi 1 / syksy 2007 17/20: Keittokirja IV Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/10 Tavoitteita

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

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010 kielenä 9. joulukuuta 2010 Historia kielenä Historia Sovelluksia kehitettiin vuonna 1972 Kehittäjinä ranskalaiset Pääkehittäjä Alain Colmerauer Philippe Roussel programmation en logique Robert Kowalski

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

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

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

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined Ohjelmointitekniikka Tyyppiturvallisuuden tavoittelua Javascriptissa muuttujat ovat tyypittömiä, mutta arvoilla on tyyppi. Muuttuja esitellään var -avainsanalla ja muuttujan tyypin arvoa ei erikseen määritellä.

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

Ohjelmointi 1. Kumppanit

Ohjelmointi 1. Kumppanit Ohjelmointi 1 Kumppanit November 20, 2012 2 Contents 1 Mitä ohjelmointi on 7 2 Ensimmäinen C#-ohjelma 9 2.1 Ohjelman kirjoittaminen......................... 9 A Liite 11 3 4 CONTENTS Esipuhe Esipuhe 5

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

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen D-OHJELMOINTIKIELI AA-kerho, 33 Antti Uusimäki Arto Savolainen 2 D-OHJELMOINTIKIELI D-kielen historia alkaa vuodesta 1999, kun Walter Bright aloitti uuden ohjelmointikielen kehittämisen. Ensimmäinen versio

Lisätiedot

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena Ohjelmointikielet ja -paradigmat 5op Markus Norrena Ko#tehtävä 4 Viimeistele "alkeellinen kuvagalleria". Käytännössä kaksi sivua Yksi jolla voi ladata kuvia palvelimelle (file upload) Toinen jolla ladattuja

Lisätiedot

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli Dart Ryhmä 38 Ville Tahvanainen Juha Häkli 1.LYHYESTI Dart on luokkapohjainen, yksiperintäinen, puhdas olio-ohjelmointikieli. Dart on dynaamisesti tyypitetty. Sovellukset on organisoitu modulaarisiksi

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

TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011

TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011 TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. helmikuuta 2011 Sisällys Sisällys Ohjelmointikieli? programming language n. a

Lisätiedot

3. Muuttujat ja operaatiot 3.1

3. Muuttujat ja operaatiot 3.1 3. Muuttujat ja operaatiot 3.1 Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit.

Lisätiedot

Matlabin perusteita Grafiikka

Matlabin perusteita Grafiikka BL40A0000 SSKMO KH 1 Seuraavassa esityksessä oletuksena on, että Matlabia käytetään jossakin ikkunoivassa käyttöjärjestelmässä (PC/Win, Mac, X-Window System). Käytettäessä Matlabia verkon yli joko tekstipäätteeltä,

Lisätiedot

Tie Principles of Programming Languages Seminar Essay. Lua. Group 23 Miikka Koskinen Joose Sainio

Tie Principles of Programming Languages Seminar Essay. Lua. Group 23 Miikka Koskinen Joose Sainio Lua Group 23 Miikka Koskinen Joose Sainio Johdanto Lua on kevyt skriptikieli, joka on pääasiallisesti suunniteltu muiden kielien tueksi laitteistoläheiseen ohjelmointiin. Luan kehittäminen aloitettiin

Lisätiedot

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen. historia Imperatiivisten ohjelmien organisointiparadigmojen historia Timo Tapanainen Helsingin yliopisto, tietojenkäsittelytieteen laitos Tietojenkäsittelytieteen historia -seminaari, kevät 2007 Sisältö Paradigma,

Lisätiedot

Imperatiivisten ohjelmien organisointiparadigmojen historia

Imperatiivisten ohjelmien organisointiparadigmojen historia Imperatiivisten ohjelmien organisointiparadigmojen historia Timo Tapanainen Helsingin yliopisto, tietojenkäsittelytieteen laitos Tietojenkäsittelytieteen historia -seminaari, kevät 2007 Sisältö Paradigma,

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

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit. 3. Muuttujat ja operaatiot Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi.. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit. Arvojen

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

ASCII-taidetta. Intro: Python

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

Lisätiedot

DXL Library ja DXL-kielen olemus. Pekka Mäkinen Pekka.Makinen@softqa.fi SoftQA Oy http/www.softqa.fi/

DXL Library ja DXL-kielen olemus. Pekka Mäkinen Pekka.Makinen@softqa.fi SoftQA Oy http/www.softqa.fi/ DXL Library ja DXL-kielen olemus Pekka Mäkinen Pekka.Makinen@softqa.fi SoftQA Oy http/www.softqa.fi/ DOORS extension Language DXL on DOORSin laajennuskieli, jolla voidaan kehittää lisätoiminnallisuutta.

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

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

Tähtitieteen käytännön menetelmiä Kevät 2009

Tähtitieteen käytännön menetelmiä Kevät 2009 Tähtitieteen käytännön menetelmiä Kevät 2009 2009-01-12 Yleistä Luennot Luennoija hannu.p.parviainen@helsinki.fi Aikataulu Observatoriolla Maanantaisin 10.00-12.00 Ohjattua harjoittelua maanantaisin 9.00-10.00

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