Luento 7. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Koko: px
Aloita esitys sivulta:

Download "Luento 7. T-106.1240 Ohjelmoinnin jatkokurssi T1 & T-106.1243 Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä"

Transkriptio

1 Luento 7 T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1 Luennoitsija: Otto Seppälä Kurssin WWW:

2 Suunnitelmista Yleistaso oli tänä vuonna alustavien tietojen perusteella varsin hyvä. Monesta suunnitelmapalautuksesta oli unohtunut kuvat. Omatkin algoritmit ovat toki algoritmeja Ohjelmani ei käytä algoritmeja tai tietorakenteita Lähdeluettelo kannattaa tehdä viimeistään dokumenttiin kunnolla Hyvää harjoitusta diplomi- ja kandityötä varten Erilaisia lähdeviittausoppaita löytyy webistä: lib.hut.fi/opetus/informatiikka/tietoiskut/lahde-tietoisku.html Google: Reference guide IEEE Style Google: Reference guide Harvard style

3 CVS-demo CVS:n käyttöä demottiin kurssisivuston ohjeita noudattaen

4 Tehokkuusnäkökohtia

5 Ohjelmien tehokkuus Millainen on tehokas ohjelma Nopeus Muistinkäyttö Vasteaika (reagoi aina nopeasti käyttäjän toimiin) Kuinka näitä voidaan mitata? Profilointi Koodin ja algoritmien analyysi notaatiot : Iso-O, iso-theta, iso-omega Kuinka niihin voidaan vaikuttaa? Hyvät algoritmit ja tietorakenteet Koodin optimointi

6 Optimoi vasta lopuksi Donald Knuth: Premature optimization is the root of all evil Optimointi monimutkaistaa koodia Luo ehkä uusia virheitä Vaikeuttaa koodin ylläpidettävyyttä Vaikeuttaa jatkokehitystä / perintää Kaikki optimoinnit eivät ole optimaalisia Hyvä kääntäjä osaa tehdä joitakin optimointeja paremmin kuin ohjelmoija: esim. pipelining Aina ei kannata optimoida Jos voitot ovat pieniä, ylläpidettävyys on tärkeämpää Tee ensin toimiva ohjelma; vasta sitten optimointi

7 Suunnittelu Ohjelman jako metodeihin, luokkiin ja moduuleihin Osa ohjelman pullonkauloista syntyy jo tässä vaiheessa Suunnittele hyvin Kuinka tieto siirtyy moduleiden välillä? Esim tehtävän 2.1 käyttämä BreakIterator palauttaa tavutuskohdat, ei pilkottuja String-olioita Pilkotut String-oliot pitäisi monesti koota takaisin sopivan levyisiksi riveiksi joka aiheuttaisi vain turhaa lisätyötä Tavutuskohdista voidaan laskea kohdat joista rivi voidaan katkaista ja jakaa merkkijono osiin vain näistä kohdista.

8 Tietorakenteet ja algoritmit Oikeiden tietorakenteiden ja algoritmien valinta on äärimmäisen tärkeää Suurilla tietomäärillä eri algoritmien nopeuserot voivat olla valtavia Helposti yli tuhatkertaisia nopeuseroja

9 Koodi Erilaisilla koodirakenteilla ja käskyillä on nopeuseroja Riippuvat monesti ajoympäristöstä Koodin optimointi kannattaa keskittää vain keskeisiin osiin koodista Pienillä nopeuseduilla on merkitystä vain jos tehostunutta kohtaa käytetään usein 90/10 sääntö : 90% suoritusajasta kuluu 10%:ssa koodia.

10 Järjestelmä Laitteiston vaikutus Eri laitteiden ominaisuudet vaikuttavat siihen minkätyyppiset ongelmat ratkeavat parhaiten Optimoiva kääntäjä Hyvä kääntäjä tekee tietyt optimoinnit puolestasi Nopeuserot parhaimmillaan kymmenkertaisia Mutta käytännössä harvoin

11 Nopeuden mittaus ja arviointi

12 Profilointi Ohjelman suoritusta voidaan tutkia profilointityökaluilla Ohjelmien muistinkäyttö Tehdyt aliohjelmakutsut (metodikutsut) Metodeissa käytetty aika Java SDK:ssa kaksi profilointityökalua java -X:prof java -X:runhprof Eclipse IDE:en on olemassa TPTP-niminen lisäosa Todella kätevä (mutta haastava asentaa toimivasti) laskee myös koodikattavuudet jne.

13 F:\tehokkuus\code>java -Xprof:help Matrix Flat profile of secs (1063 total ticks): main Interpreted + native Method 0.3% java.io.winntfilesystem.getbooleanattributes 0.1% Matrix.kerroMatriisitJIK_NonOp % java.io.fileinputstream.close0 1.8% Total interpreted Compiled + native Method 11.0% Matrix.kerroMatriisitJKI_NonOp 10.9% Matrix.kerroMatriisitKJI_NonOp % Matrix.kerroMatriisitKIJ 0.2% Matrix.doIt 97.6% Total compiled Thread-local ticks: 0.3% 3 Class loader 0.3% 3 Compilation Flat profile of 0.00 secs (1 total ticks): DestroyJavaVM Thread-local ticks: 100.0% 1 Blocked (of total) Global summary of seconds: 100.0% 1117 Received ticks 0.4% 4 Received GC ticks 0.3% 3 Compilation 0.1% 1 Other VM operations 0.3% 3 Class loader

14 Koodin analysointi Koodin voidaan nähdä koostuvan kolmesta rakenteesta Sekvenssi koodilauseiden sarja, jotka suoritetaan peräkkäin ei sisällä haarautumista (ehtolauseet) muiden metodien kutsut käsitellään osana sekvenssiä ehtolauseet if-else switch silmukat for, while, do-while

15 Koodin analysointi Suoritusaika ilmoitetaan yleensä syötteen funktiona syötteen määrää merkitään muuttujalla N Lasketaan suoritettuja operaatioita perusoperaatiot : =, +, -, taulu[i], jne. Sekvenssissä lasketaan sen sisältämien lauseiden sisältämien operaatioiden määrät yhteen Silmukassa sen sisältämä sekvenssi voidaan suorittaa useita kertoja (mahdollisesti eri N:n arvoilla)

16 Esimerkki public int laskeyhteen(int[] taulu){ int summa = 0; for (int i=0; i<taulu.length; i++){ summa += taulu[i]; return summa;

17 Esimerkki public int laskeyhteen(int[] taulu){ int summa = 0; for (int i=0; i<taulu.length; i++){ summa += taulu[i]; return summa; 1 kerta N kertaa N+1 kertaa (N+1) + 3*N + 1 = 4N + 4 -> O(N) N f(n)

18 Asymptoottinen kompleksisuus Mikä osa funktiosta on olennaista kun N kasvaa? pienempien termien merkitys vähenee Myöskään N:n edessä olevalla kertoimella ei ole merkitystä eri lauseet vievät eri ajan (sijoitus, return, yhteenlasku, vertailu) kertoimia ei siis voisi kuitenkaan vertailla Olennaista on siis vain kertaluokka Asymptoottinen kompleksisuus Otetaan vain suurimmat vaikuttavat termit Poistetaan termin vakiokerroin

19 Asymptoottinen kompleksisuus Kun algoritmien tehokkutta toisiinsa verrataan suuremmalla syötekoolla ei esimerkkimme kaavan 4N+4 kaikilla termeillä ja kertoimilla ole suurta merkitystä Suurilla N:n arvoilla termi 4N dominoi tulosta. Käytännössä tämä olisi kuitenkin jo jäänyt kakkoseksi 4.01N:lle. Verrattaessa minkä tahansa muun kertaluvun funktioon (esim 15N 2 ) myöskään kertoimella 4.01 ei olisi ollut väliä. Vaikka lauseke olisi ollut 15000N niin jo tuhannen paikkeilla 15N 2 olisi ohittanut sen. Tuntuisi siis riittävältä huomata että suurilla arvoilla lausekkeen dominoiva termi on k*n jossa k on vain jokin vakio (yksinkertaistus)

20 Asymptoottinen kompleksisuus Formaalimmin voidaan sanoa että lausekkeelle voidaan määritellä asymptoottinen yläraja M g(n) joka on aina suurempi kuin meitä kiinnostava funktio f, kunhan vain N on riittävän suuri (yli n 0 ). f(n) O(g(n)) M on jokin vakio n 0 on jokin piste jota suuremmilla arvoilla aina pätee M > 0, n 0 >0 s.e. f(n) M(g(n)), n>n 0 Esimerkiksi kaavalle 4N+4 arvot olisivat voineet olla M=5 ja n 0 = 10 kun g(n) = N Tällöin voitaisiin Iso-O notaatiolla merkitä (4N + 4) O(N)

21 Asymptoottinen kompleksisuus M*g(n) f(n) f(n) = O(g(n)) n 0

22 Analyysi Iso-O notaatiolla Koodiesimerkki

23 public int dosomething(int[] taulu){ int muuttuja = 0; for (int i=0; i<taulu.length; i++) for (int j=i; j<taulu.length; j++){ muuttuja += taulu[i]*taulu[j]; for (int i=0; i<5; i++){ muuttuja -= apumetodi(taulu, i); return muuttuja; public int apumetodi(int[] summattavat, int kerroin){ int summa = 0; for (int i=0; i<summattavat.length; i++) summa+=summattavat[i]*kerroin; return summa;

24 public int dosomething(int[] taulu){ int muuttuja = 0; for (int i=0; i<taulu.length; i++) for (int j=i; j<taulu.length; j++){ muuttuja += taulu[i]*taulu[j]; for (int i=0; i<5; i++){ muuttuja -= apumetodi(taulu, i); return muuttuja; public int apumetodi(int[] summattavat, int kerroin){ int summa = 0; for (int i=0; i<summattavat.length; i++) summa+=summattavat[i]*kerroin; return summa;

25 public int dosomething(int[] taulu){ int muuttuja = 0; for (int i=0; i<taulu.length; i++) for (int j=i; j<taulu.length; j++){ muuttuja += taulu[i]*taulu[j]; for (int i=0; i<5; i++){ muuttuja -= apumetodi(taulu, i); return muuttuja; O(N) public int apumetodi(int[] summattavat, int kerroin){ int summa = 0; for (int i=0; i<summattavat.length; i++) summa+=summattavat[i]*kerroin; O(N) return summa;

26 public int dosomething(int[] taulu){ int muuttuja = 0; for (int i=0; i<taulu.length; i++) for (int j=i; j<taulu.length; j++){ muuttuja += taulu[i]*taulu[j]; for (int i=0; i<5; i++){ muuttuja -= apumetodi(taulu, i); return muuttuja; O(N) O(N) O(N 2 ) public int apumetodi(int[] summattavat, int kerroin){ int summa = 0; for (int i=0; i<summattavat.length; i++) summa+=summattavat[i]*kerroin; O(N) return summa; O(N)

27 public int dosomething(int[] taulu){ int muuttuja = 0; for (int i=0; i<taulu.length; i++) for (int j=i; j<taulu.length; j++){ muuttuja += taulu[i]*taulu[j]; for (int i=0; i<5; i++){ muuttuja -= apumetodi(taulu, i); return muuttuja; O(N) O(N) O(N 2 ) O(N) public int apumetodi(int[] summattavat, int kerroin){ int summa = 0; for (int i=0; i<summattavat.length; i++) summa+=summattavat[i]*kerroin; O(N) return summa; O(N)

28 public int dosomething(int[] taulu){ int muuttuja = 0; O(N 2 ) for (int i=0; i<taulu.length; i++) for (int j=i; j<taulu.length; j++){ muuttuja += taulu[i]*taulu[j]; for (int i=0; i<5; i++){ muuttuja -= apumetodi(taulu, i); return muuttuja; O(N 2 ) O(N) public int apumetodi(int[] summattavat, int kerroin){ int summa = 0; for (int i=0; i<summattavat.length; i++) summa+=summattavat[i]*kerroin; O(N) return summa; O(N)

29 Laitteiston vaikutus

30 Laitteiston vaikutus Laitteiston tuntemuksesta on hyötyä, jos halutaan kirjoittaa tehokasta koodia Monesti kääntäjä suorittaa nämä optimoinnit Tällöin on olennaista, ettei koodin rakenne estä kääntäjän toimintaa Javan tapauksessa virtuaalikone on pyritty optimoimaan käytettävälle alustalle.

31 Välimuisti Välimuisti toimii selvästi tavallista muistia nopeammin Välimuistissa säilytetään usein käytettyjä / juuri käytettyjä muistialkioita Usein käytettyjä alkioita ei tarvitse aina hakea tavallisesta muistista Välimuistin tehokkuuteen vaikuttaa useampi tekijä Kuinka hajallaan käytetyt muistialueet ovat? Käyttävätkö algoritmit peräkkäisiä muistipaikkoja? Kuinka suurta määrää muuttujia ohjelma käyttää kerrallaan? Mahtuvatko usein käytetyt muuttujat välimuistiin?

32 Muisti pullonkaulana Prosessori toimii huomattavasti muistia nopeammin Rekisterit toimivat prosessorin nopeudella Välimuistit toimivat muistia nopeammin Välimuistin koko on kuitenkin rajallinen Lisäksi ohjelmat käyttävät virtuaalimuistia Sopeuttamalla ohjelman ja eri muistien toiminta yhteen voidaan saavuttaa tehokkuusetuja

33 Virtuaalimuisti Ohjelmille voidaan virtuaalimuistin avulla tarjota paljon todellista enemmän muistia Muistin laajennus toteutetaan käyttämällä kiintolevyä muistin säilytykseen Harvemmin käytetyt muistisivut tallennetaan levylle Usein käytetyt muistisivut pysyvät muistissa Kun jotakin levyllä olevaa sivua tarvitaan, se tuodaan muistiin

34 Muistinkäytöstä Erilaiset muistinkäyttöstrategiat voivat vaikuttaa paljon ohjelman suorituskykyyn Suuresta datamäärästä kannattaa käsitellä yhtenäisiä osia pidempiä aikoja kerrallaan eikä yksittäisiä alkioita sieltä täältä jotta välimuisti ja virtuaalimuisti toimisivat tehokkaasti

35 Blocking Kun ohjelma käyttää jotakin I/O-laitetta, voi metodikutsu joutua odottamaan laitteen vastausta Kyseessä on ns. blokkaava metodikutsu Blokkaava säie ei voi jatkaa suoritusta ennen kuin I/Olaite on valmis Yleensä tämä on etu lukeva säie ei kuluta resursseja odottaessaan ja jatkaa automaattisesti työtään kun dataa on taas tarjolla. Web-serverissä tämä voisi olla myös ongelma, kun jokaista asiakasta kohden pitäisi olla oma säie odottamassa Javassa on myös ei-blokkaava I/O-kirjasto

36 Iteraatio ja rekursio Rekursiossa tehdään paljon metodikutsuja Metodikutsun yhteydessä suorituspinosta varataan kehys paikallisia muuttujia jne. varten Kehyksen varaaminen ja metodikutsusta palaaminen käyttävät prosessoriaikaa ja muistia Rekursio on tämän vuoksi usein tehottomampi ratkaisu kuin iteraatio Riippuu myös koneen arkkitehtuurista ja käytetystä kääntäjästä...sekä tietysti ohjelmointikielestä Usein rekursiivisen ratkaisun selkeys voi olla olennaisempaa kuin saavutettu tehoetu

37 Kääntäjän optimointeja Loop unrolling Method inlining Software pipelining Reordering Häntärekursion poisto jne.. (Ylläolevat ovat yleisiä esimerkkejä ja lista sisältää myös ei java-spesifejä esimerkkejä. Tarjolla olevan optimoinnin taso vaihtelee ohjelmointikielen ja käytetyn kääntäjän mukaan)

38 Ohjelmoijan optimointeja (esim.) Olioiden kierrätys Monimutkaisten olioiden luonti on raskasta Käytöstä poistettujen olioiden tallennus ja uudelleen käyttöönotto nopeuttaa (factory pattern) StringBuffer vs. String Runsaasti merkkijonojen yhteenliittämisiä sisältävässä ohjelmassa StringBuffer voi vähentää väliaikaisten merkkijonojen luomista. Nopeuserot suurilla merkkijonoilla parhaimmillaan valtavia. StringBuilder on vielä parempi. (kunhan kaikki kirjoitus tehdään yhdessä säikeessä) final-määreen käyttö final-määreellä metodien korvaaminen aliluokissa estetään. Tällöin kääntäjä voi korvata metodikutsun sijoittamalla metodin koodin suoraan kutsun tilalle. (tätä ei nykyisin enää suositella) Vakioarvot vs muuttujat Kääntäjä voi sijoittaa vakioiksi (final public static) määritetyt muuttujat vakioina lopulliseen konekoodiin

39 Ohjelmoijan optimointeja (esim.) Välitulosten uudelleenkäyttö Dynamic programming Ei lasketa uudelleen välituloksia jos ne lasketaan joskus aiemmin algoritmissa jotain toista arvoa varten Hakualgoritmeissa karsinta Jos tiedetään että jokin haku tai ratkaisualgoritmi ei voi löytää haluttua tulosta tällä hetkellä työn alla olevaa reittiä, lopetetaan etsintä tätä kautta ajoissa ja kokeillaan jotakin muuta. Tietovirtojen puskurointi Kovalevyn yms. I/O laitteiden luku/kirjoitusoperaatioiden kannattaa mieluummin kirjoittaa kerralla paljon kuin usein vähän. BufferedWriter, BufferedReader, BufferedInputStream BufferedOutputStream.

40 Ohjelmoijan optimointeja private-määreen käyttö Myös private-määre mahdollistaa kääntäjän optimoinnin Koska muuttujiin / metodeihin ei pääse ulkoa, voidaan koodia käsitellä voimakkaammin method inlining jne. Ja paljon, paljon muuta...

41 Yhteenveto Ohjelmien tehokkuuteen vaikuttavia tekijöitä on monia Tehokkuuteen eniten vaikuttavat päätökset tehdään usein jo suunnitelmatasolla Tietorakenteiden ja algoritmien valinta on erittäin tärkeää Vasta näiden jälkeen kannattaa ajatella optimointia Algoritmien nopeutta kuvataan Iso-O, Iso-Θ, Iso-Ω ja pieni-o notaatioilla Kääntäjä osaa optimoida koodia usein riittävän hyvin Vain kriittinen koodi on syytä optimoida käsin Koodia tutkimalla tai profiloimalla voidaan löytää mahdolliset pullonkaulat Käsin optimointi voi haitata ylläpidettävyyttä tai jopa hidastaa ohjelmaa jos ei tiedä mitä tekee Laitteiston ja kääntäjän tuntemuksesta on apua

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö Algoritmit 1 Luento 2 Ke 11.1.2017 Timo Männikkö Luento 2 Algoritmin esitys Algoritmien analysointi Suoritusaika Asymptoottinen kertaluokka Peruskertaluokkia NP-täydelliset ongelmat Algoritmit 1 Kevät

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö Algoritmit 2 Luento 14 Ke 3.5.2017 Timo Männikkö Luento 14 Ositus ja rekursio Rekursion toteutus Kertaus ja tenttivinkit Algoritmit 2 Kevät 2017 Luento 14 Ke 3.5.2017 2/30 Ositus Tehtävän esiintymä ositetaan

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 25.-26.1.2017 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka laskee kahden kokonaisluvun välisen jakojäännöksen käyttämättä lainkaan jakolaskuja Jaettava m, jakaja n Vähennetään luku

Lisätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

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

Lisätiedot

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3 16. Lohkot 16.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.2 Lohkot Kaarisulut

Lisätiedot

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n)) Määritelmä: on O(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että c g(n) kun n > n 0 O eli iso-o tai ordo ilmaisee asymptoottisen ylärajan resurssivaatimusten kasvun suuruusluokalle Samankaltaisia

Lisätiedot

Sisällys. 15. Lohkot. Lohkot. Lohkot

Sisällys. 15. Lohkot. Lohkot. Lohkot Sisällys 15. Lohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.1 15.2 Lohkot Aaltosulkeet

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 31.1.-1.2.2018 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka tutkii onko kokonaisluku tasan jaollinen jollain toisella kokonaisluvulla siten, että ei käytetä lainkaan jakolaskuja Jaettava

Lisätiedot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3 15. Lohkot 15.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.2 Lohkot Aaltosulkeet

Lisätiedot

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 2. Luento 8 To Timo Männikkö Algoritmit 2 Luento 8 To 4.4.2019 Timo Männikkö Luento 8 Algoritmien analysointi Algoritmien suunnittelu Rekursio Osittaminen Rekursioyhtälöt Rekursioyhtälön ratkaiseminen Master-lause Algoritmit 2 Kevät

Lisätiedot

Algoritmit 2. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 1 Ti Timo Männikkö Algoritmit 2 Luento 1 Ti 14.3.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin valinta Algoritmin analysointi Algoritmin suoritusaika Peruskertaluokkia Kertaluokkamerkinnät Kertaluokkien ominaisuuksia

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT ALGORITMIEN ANALYYSISTÄ 1.ratkaisu Laskentaaika hakkeri - optimoitu ALGORITMIANALYYSIÄ hyvä algoritmi hakkeri -optimoitu hyvä algoritmi Tehtävän koko Kuva mukailtu

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys For-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. If-else-lause vaihtoehtoisesti

Lisätiedot

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin Sisällys 17. Ohjelmoinnin tekniikkaa for-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. if-else-lause vaihtoehtoisesti

Lisätiedot

58131 Tietorakenteet ja algoritmit (syksy 2015)

58131 Tietorakenteet ja algoritmit (syksy 2015) 58131 Tietorakenteet ja algoritmit (syksy 2015) Harjoitus 2 (14. 18.9.2015) Huom. Sinun on tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. 1. Erään algoritmin suoritus vie 1 ms, kun syötteen

Lisätiedot

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmointiharjoituksia Arduino-ympäristössä Ohjelmointiharjoituksia Arduino-ympäristössä Yleistä Arduino-sovelluksen rakenne Syntaksi ja käytännöt Esimerkki ohjelman rakenteesta Muuttujat ja tietotyypit Tietotyypit Esimerkkejä tietotyypeistä Ehtolauseet

Lisätiedot

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten Sisällys 16. Ohjelmoinnin tekniikkaa Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

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

Sisällys. 16. Lohkot. Lohkot. Lohkot

Sisällys. 16. Lohkot. Lohkot. Lohkot Sisällys 16. ohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.1 16.2 ohkot aarisulut

Lisätiedot

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 1.1. (a) Jaettava m, jakaja n. Vähennetään luku n luvusta m niin kauan kuin m pysyy ei-negatiivisena. Jos jäljelle jää nolla, jaettava oli tasan jaollinen. int m,

Lisätiedot

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

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

Lisätiedot

TIE448 Kääntäjätekniikka, syksy 2009. Antti-Juhani Kaijanaho. 7. joulukuuta 2009

TIE448 Kääntäjätekniikka, syksy 2009. Antti-Juhani Kaijanaho. 7. joulukuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 7. joulukuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe F maanantai 14.12. klo 12 rekisteriallokaatio Arvostelukappale

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2016-2017 Kertausta kurssin alkuosasta II Algoritmien analyysi: oikeellisuus Algoritmin täydellinen oikeellisuus = Algoritmi päättyy ja tuottaa määritellyn tuloksen

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Luento

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015 TIEA24 Automaatit ja kieliopit, syksy 205 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 5. marraskuuta 205 Sisällys Käsiteanalyysiä Tarkastellaan koodilukkoa äärellisenä automaattina. Deterministinen äärellinen

Lisätiedot

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

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

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2017-2018 Kertausta kurssin alkuosasta II Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden

Lisätiedot

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä Sisällys 11. Javan toistorakenteet Laskuri- ja lippumuuttujat.. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin lopettaminen break-lauseella.

Lisätiedot

Tietorakenteet (syksy 2013)

Tietorakenteet (syksy 2013) Tietorakenteet (syksy 2013) Harjoitus 1 (6.9.2013) Huom. Sinun on osallistuttava perjantain laskuharjoitustilaisuuteen ja tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. Näiden laskuharjoitusten

Lisätiedot

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko 5 Taulukot Tämän osan sisältö Taulukon esittely ja luonti Taulukon alustaminen Taulukon koko Taulukon käsittely indeksointi peräkkäiskäsittely hajakäsittely harva taulukko Taulukon järjestäminen Kaksiulotteinen

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

Java kahdessa tunnissa. Jyry Suvilehto

Java kahdessa tunnissa. Jyry Suvilehto Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

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

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2 TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos TKT-3200 Tietokonetekniikka I Harjoitustyö 4: Cache, osa 2.. 2010 Ryhmä Nimi Op.num. 1 Valmistautuminen Cache-työn toisessa osassa

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti ITKP2 Ohjelmointi 1 (6 op), arvosteluraportti Tentaattori: Antti-Jussi Lakanen 17. toukokuuta 219 Yleistä Tentti 1 oli pistekeskiarvon (14,6) perusteella hieman tavanomaista helpompi. Omasta tehtäväpaperista

Lisätiedot

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin perusteet, syksy 2006 Ohjelmoinnin perusteet, syksy 2006 Esimerkkivastaukset 1. harjoituksiin. Alkuperäiset esimerkkivastaukset laati Jari Suominen. Vastauksia muokkasi Jukka Stenlund. 1. Esitä seuraavan algoritmin tila jokaisen

Lisätiedot

811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto

811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto 811312A Tietorakenteet ja algoritmit 2015-2016 I Johdanto Sisältö 1. Algoritmeista ja tietorakenteista 2. Algoritmien analyysistä 811312A TRA, Johdanto 2 I.1. Algoritmeista ja tietorakenteista I.1.1. Algoritmien

Lisätiedot

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return

Lisätiedot

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

7. Oliot ja viitteet 7.1

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

Lisätiedot

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

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Ohjelmointi 1 / 2009 syksy Tentti / 18.12 Tentti / 18.12 Vastaa yhteensä neljään tehtävään (huomaa että tehtävissä voi olla useita alakohtia), joista yksi on tehtävä 5. Voit siis valita kolme tehtävistä 1 4 ja tehtävä 5 on pakollinen. Vastaa JOKAISEN

Lisätiedot

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA: REFAKTOROINTI 2 (9) SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012 TIEA241 Automaatit ja kieliopit, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 12. tammikuuta 2012 Sisällys Sisällys Äärellisiä automaatteja PUSH ON PUSH OFF Q T Q J C C H S C,Q C,Q 0 50s 1e

Lisätiedot

1 Tehtävän kuvaus ja analysointi

1 Tehtävän kuvaus ja analysointi Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.

Lisätiedot

Tietorakenteet, laskuharjoitus 2,

Tietorakenteet, laskuharjoitus 2, Tietorakenteet, laskuharjoitus, 6.-9.1 Muista TRAKLA-tehtävien deadline 31.1. 1. Tarkastellaan ensin tehtävää yleisellä tasolla. Jos funktion T vaativuusluokka on O(f), niin funktio T on muotoa T (n) =

Lisätiedot

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

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

Lisätiedot

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

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

Lisätiedot

4 Tehokkuus ja algoritmien suunnittelu

4 Tehokkuus ja algoritmien suunnittelu TIE-20100 Tietorakenteet ja algoritmit 52 4 Tehokkuus ja algoritmien suunnittelu Tässä luvussa pohditaan tehokkuuden käsitettä ja esitellään kurssilla käytetty kertaluokkanotaatio, jolla kuvataan algoritmin

Lisätiedot

4. Algoritmien tehokkuus

4. Algoritmien tehokkuus 4. Algoritmien tehokkuus (Harel luku 6) vastaa jo minulle! [Psalmi 69:18] Kuinka paljon suoritusaikaa tai -tilaa algoritmin suoritus vaatii? Keskitymme lähinnä aikavaativuuden tarkasteluun. Myös algoritmien

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

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

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

Käyttöjärjestelmät: poissulkeminen ja synkronointi

Käyttöjärjestelmät: poissulkeminen ja synkronointi Käyttöjärjestelmät: poissulkeminen ja synkronointi Teemu Saarelainen Tietotekniikka teemu.saarelainen@kyamk.fi Lähteet Stallings, W. Operating Systems Haikala, Järvinen, Käyttöjärjestelmät Eri Web-lähteet

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 19: Rinnakkaisuus Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä) 24. 3. 2011 Sisältö 1 Säikeet 2 Lukot 3 Monitorit 4 Muuta säikeisiin

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

2 Konekieli, aliohjelmat, keskeytykset

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

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja

Lisätiedot

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot

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

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

1. Mitä tehdään ensiksi?

1. Mitä tehdään ensiksi? 1. Mitä tehdään ensiksi? Antti Jussi i Lakanen Ohjelmointi 1, kevät 2010/ Jyväskylän yliopisto a) Etsitään Googlesta valmis algoritmi b) Mietitään miten itse tehtäisiin sama homma kynällä ja paperilla

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

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

2. Olio-ohjelmoinista lyhyesti 2.1

2. Olio-ohjelmoinista lyhyesti 2.1 2. Olio-ohjelmoinista lyhyesti 2.1 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen. 2.2 Yleistä Olio-ohjelmointia käsitellään hyvin

Lisätiedot

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus Luento 1 (verkkoluento 1) Tietokonejärjestelmä Järjestelmän e eri tasot Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus 1 Tietokone- järjestelmäj ä Käyttäjä Tietokonelaitteisto Oheislaitteet

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 12. huhtikuuta 2019 Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä. Yksi A4-kokoinen lunttilappu

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä

Lisätiedot

Nopea kertolasku, Karatsuban algoritmi

Nopea kertolasku, Karatsuban algoritmi Nopea kertolasku, Karatsuban algoritmi Mikko Männikkö 16.8.2004 Lähde: ((Gathen and Gerhard 1999) luku II.8) Esityksen kulku Algoritmien analysointia (1), (2), (3), (4) Klassinen kertolasku Parempi tapa

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

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

Tutkimusmenetelmät-kurssi, s-2004

Tutkimusmenetelmät-kurssi, s-2004 Algoritmitutkimuksen menetelmistä Tutkimusmenetelmät-kurssi, s-2004 Pekka Kilpeläinen Kuopion yliopisto Tietojenkäsittelytieteen laitos Algoritmitutkimuksen menetelmistä p.1/20 Sisällys Tänään Tietojenkäsittelytiede

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Luento 1 (verkkoluento 1) Tietokonejärjestelmä Luento 1 (verkkoluento 1) Tietokonejärjestelmä Järjestelmän eri tasot Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä This image cannot currently be displayed.

Lisätiedot

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan

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