Muistutus aikatauluista

Samankaltaiset tiedostot
Tutoriaaliläsnäoloista

Tietojenkäsittelyn perusteet I kurssijärjestelyt. 3op tai 5op

12. Javan toistorakenteet 12.1

11. Javan toistorakenteet 11.1

12. Javan toistorakenteet 12.1

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

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

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

Python-ohjelmointi Harjoitus 5

811120P Diskreetit rakenteet

Ohjelmoinnin peruskurssi Y1

Ehto- ja toistolauseet

811120P Diskreetit rakenteet

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Luento 5. Timo Savola. 28. huhtikuuta 2006

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Ohjausrakenteet. Valinta:

ITKP102 Ohjelmointi 1 (6 op)

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

Ohjelmoinnin peruskurssi Y1

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

Ohjelmoinnin perusteet Y Python

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Harjoitustyön testaus. Juha Taina

Zeon PDF Driver Trial

Java-kielen perusteita

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Demot Timo Männikkö

Ohjelmoinnin peruskurssien laaja oppimäärä

Algoritmit 1. Demot Timo Männikkö

Palautetta viime luennosta

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Ohjelmoinnin peruskurssi Y1

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

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

13. Loogiset operaatiot 13.1

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Luento 3 Ti Timo Männikkö

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet

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

Ohjelmoinnin peruskurssi Y1

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

linux: Ympäristömuuttujat

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

16. Ohjelmoinnin tekniikkaa 16.1

Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Ohjausrakenteet:

Ohjelmoinnin peruskurssi Y1

Sisällys. 15. Lohkot. Lohkot. Lohkot

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Ohjelmoinnin perusteet Y Python

16. Ohjelmoinnin tekniikkaa 16.1

Ohjelmoinnin perusteet Y Python

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Sisällys. 16. Lohkot. Lohkot. Lohkot

Ohjelmoinnin perusteet Y Python

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

1. Omat operaatiot 1.1

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

Tarkennamme geneeristä painamiskorotusalgoritmia

Tieto- ja tallennusrakenteet

Ohjelmoinnin peruskurssien laaja oppimäärä

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Ohjelmoinnin perusteet, syksy 2006

13. Loogiset operaatiot 13.1

Ohjelmoinnin perusteet Y Python

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmoinnin perusteet Y Python

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

13. Hyvä ohjelmointitapa (osa 1) 13.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

Palvelinpuolen ohjelmointi

Mathematica Sekalaista asiaa

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssien laaja oppimäärä

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

14. Hyvä ohjelmointitapa 14.1

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

5/20: Algoritmirakenteita III

Harjoitus 3 -- Ratkaisut

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

ITKP102 Ohjelmointi 1 (6 op)

Algoritmit 2. Luento 9 Ti Timo Männikkö

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

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

Transkriptio:

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

Luentopalautteita Liikaa asiaa, liikaa opittavaa, en ymmärrä mitään! Sama asia käsitellään onneksi aina kahdesti: kerran luennoilla, ja toisen kerran tutoriaaleissa Tekemällä asiat tulevat paremmin haltuun Lisäksi: Tutoriaalitehtävät yleensä pohjustavat kotitehtäviä! Yhdessä tehtävässä oli jotain ENDIF, ELSE, hommeleita ja kummallinen hymiö :=? Pahoittelen! Olivat jääneet viime vuodesta Jos näette näitä vielä, niin ilmoitelkaa. Tehtävä on nyt korjattu Pythonissa ei tarvita ENDIF sanoja! 165

Luentopalautteesta Superesimerkki: x = 3 y = (x == 3) Sijoitetaan ensin x:n arvoksi 3 Aloitetaan 2. rivin suorittaminen sulkeista: x == 3 on tosi, x:n arvo todellakin on 3, siis sulkulausekkeen arvo on True Nyt suoritetaan vielä välivaihe y = True y:n arvoksi sijoitetaan True, y on siis totuusarvoinen muuttuja, ja x oli kokonaislukuarvoinen! Nyt y:tä voidaan käyttää esim. if-lauseen ehtona: if y: print x on kolme

Muuttujien nimeäminen (Pythonissa) Muuttujien syntaktisesti oikeat nimet riippuvat ohjelmointikielestä Pythonissa nimen: Tulee alkaa kirjaimella (a-z) tai alaviivalla _ Saa sisältää kirjaimia, numeroita tai alaviivoja _ Pienet ja isot kirjaimet erotellaan Esim suurinarvo on eri muuttuja kuin suurinarvo Käytäntönä on aloittaa muuttujien nimet pienellä kirjaimella Seuraavat sanat kirjoitetaan isolla samassa nimessä: muuttujajonkanimiontodellapitka Seuraavilla kursseilla samat käytännöt 167

Muuttujien nimeäminen 2 Koska nimet voivat olla monta merkkiä, muuttujat: x = 1 y = 2 xy = 1 x3 = 3 ovat kaikki eri muuttujia. Yhden muuttujan nimi on siis tässä x3 Toisaalta voidaan kirjoittaa: xy = x*3*y jolloin muuttujaan xy sijoitetaan tulo x*3*y 168

Toisto ja modulaarisuus

Päivän sisältö Ohjausrakenne: toisto Definiitti toisto Indefiniitti toisto Modulaarisuus

Toisto

Toisto? Mihin tarvitaan toistoa? print 2 * 1 = 2 print 2 * 2 = 4 print 2 * 3 = 6 print 2 * 4 = 8 print 2 * 5 = 10...

Toisto Peräkkäisyys ja valinta eivät riitä algoritmeissa tarvittavan yleisyyden saavuttamiseksi Riittävä yleisyys saavutetaan toiston (repetition) eli iteraation avulla Toistoa kutsutaan myös silmukaksi (loop) tai toistorakenteeksi

Toistorakenteet Definiitti toisto Toistokertojen määrä tunnetaan etukäteen Toistokertojen määrä ei voi muuttua toistorakenteen suorituksen aikana Joskus lyhennysmerkintä: korvaa kopioi-liitä menetelmän Indefiniitti toisto Dynaaminen toistorakenne, jossa toistokertojen määrä määräytyy toiston aikana Voi määräytyä toistoehdon avulla niin, ettei määrää tiedetä ennen toiston suorituksen aloittamista Lisää aidosti kielen ilmaisuvoimaisuutta Huolehdittava siitä, että toisto päättyy joskus!

Definiitti toisto ( for ) Definiitti toisto on muotoa for x in lista: toiminto Suoritetaan toiminto kerran kutakin listan L alkiota kohden Voidaan viitata vuorossa olevaan listan alkioon Toiminto voi siis kohdistua eri objektiin eri toistokerroilla

Mikä lista? Esittelyssä: range Usein käydään läpi lukuja joltain väliltä Tähän voidaan käyttää range-funktiota Funktiot käsitellään tarkemmin ensi viikolla Esimerkiksi for i in range(n): toiminto Tässä toiminto suoritetaan N kertaa siten, että Ensimmäisellä toistokerralla i:n arvo on 0, toisella kerralla 1, Viimeisellä N-1, ei siis N!

Mikä lista? Esittelyssä: range Voidaan myös aloittaa jostain tietystä luvusta ja lopettaa toiseen lukuun for i in range(m, N): toiminto Tässä toiminto suoritetaan aloittaen arvosta M ja lopettaen N- 1:een Esim. luvut 1,2,3,,8,9,10 range(1,11)

Mikä lista? Esittelyssä: range Jos alku- ja loppuarvot ovat samat, silmukkaa ei suoriteta ollenkaan: for i in range(5,5): print tätä ei suoriteta

Askeltava toisto - esimerkki summa = 0 for i in range(1,6): summa = summa + i Muuttuja i saa siis arvot 1, 2, 3, 4, 5 ja suorittaa toiminnot kullakin i:n arvolla

Askeltava toisto - esimerkki summa = 0 for i in range(1,6): summa = summa + i Muuttuja i saa siis arvot 1, 2, 3, 4, 5 ja suorittaa toiminnot kullakin i:n arvolla 1. toisto, i = 1: sijoitetaan summaan arvo 0 + 1

Askeltava toisto - esimerkki summa = 0 for i in range(1,6): summa = summa + i Muuttuja i saa siis arvot 1, 2, 3, 4, 5 ja suorittaa toiminnot kullakin i:n arvolla 1. toisto, i = 1: sijoitetaan summaan arvo 0 + 1 2. toisto, i = 2: sijoitetaan summaan arvo 1 + 2

Askeltava toisto - esimerkki summa = 0 for i in range(1,6): summa = summa + i Muuttuja i saa siis arvot 1, 2, 3, 4, 5 ja suorittaa toiminnot kullakin i:n arvolla 1. toisto, i = 1: sijoitetaan summaan arvo 0 + 1 2. toisto, i = 2: sijoitetaan summaan arvo 1 + 2 3. toisto, i = 3: sijoitetaan summaan arvo 3 + 3

Askeltava toisto - esimerkki summa = 0 for i in range(1,6): summa = summa + i Muuttuja i saa siis arvot 1, 2, 3, 4, 5 ja suorittaa toiminnot kullakin i:n arvolla 1. toisto, i = 1: sijoitetaan summaan arvo 0 + 1 2. toisto, i = 2: sijoitetaan summaan arvo 1 + 2 3. toisto, i = 3: sijoitetaan summaan arvo 3 + 3 4. toisto, i = 4: sijoitetaan summaan arvo 6 + 4

Askeltava toisto - esimerkki summa = 0 for i in range(1,6): summa = summa + i Muuttuja i saa siis arvot 1, 2, 3, 4, 5 ja suorittaa toiminnot kullakin i:n arvolla 1. toisto, i = 1: sijoitetaan summaan arvo 0 + 1 2. toisto, i = 2: sijoitetaan summaan arvo 1 + 2 3. toisto, i = 3: sijoitetaan summaan arvo 3 + 3 4. toisto, i = 4: sijoitetaan summaan arvo 6 + 4 5. toisto, i = 5: sijoitetaan summaan arvo 10 + 5 Silmukka suoritetaan 5 kertaa i:n arvoilla 1, 2, 3, 4 ja 5

Askeltava toisto - esimerkki for i in range(1,11): print 2 *, i, =, (i * 2) Tulostaa: 2 * 1 = 2 2 * 2 = 4 2 * 3 = 6.. 2 * 10 = 20

Askeltava definiitti toisto Jos askel poikkeaa yhdestä, se voidaan antaa rangelle kolmanneksi parametriksi range(alkuarvo, loppuarvo, askel) Esimerkiksi for i in range(1,10, 2): toiminto Suorittaa toiminnon i:n arvoille 1,3,5,7,9

Edellinen esimerkki toisella tavalla for i in range(2, 21, 2): print 2 *, (i/2), =, i Tulostaa: 2 * 1 = 2 2 * 2 = 4 2 * 3 = 6.. 2 * 10 = 20 Viime esimerkissä: for i in range(1,11): print 2 *, i, =, (i * 2)

Askeltava definiitti toisto Askel voi olla myös negatiivinen Esimerkiksi for i in range(10,0,-1): print i Nyt i saa arvot 10, 9, 8,, 1 Loppuarvo 0 jää jälleen pois

Sisäkkäiset toistolauseet Kuten ehtolauseita, myös toistolauseet voivat sisältää toisia toistolauseita Esimerkiksi: for i in range(5): for j in range(5): print i, j Tulostaa 0 0 0 1 0 2 0 3 0 4 1 0 1 1 1 2 1 3 1 4. (eri riveille) Sisemmän silmukan laskuri (eli j yllä) kannattaa nimetä eri tavalla kuin ulomman

Sisäkkäiset toistolauseet Sisempi toistolause voi käyttää myös ulomman laskurimuuttujaa Esimerkiksi: for i in range(3): for j in range(i): print "sisempi silmukka"

Indefiniitti toisto (toistojen lukumäärää ei tiedetä) while ehto: toiminto Silmukan toiminnot suoritetaan niin kauan kuin ehto on tosi Jos ehto heti epätosi, ei suoriteta kertaakaan

Indefiniitti toisto (toistojen lukumäärää ei tiedetä) while ehto: toiminto Toiminnon suorituksen jälkeen ehto testataan jälleen Jos ehto edelleen voimassa, suoritetaan toiminnot uudestaan Toisto loppuu, kun ehto on epätosi

While-toisto - esimerkki i = 5 summa = 0 while i < 10: summa = summa + i i = i + 1

While-toisto - esimerkki i = 5 summa = 0 while i < 10: summa = summa + i i = i + 1 i = 5 < 10 suoritetaan silmukka; summa 5; i 6

While-toisto - esimerkki i = 5 summa = 0 while i < 10: summa = summa + i i = i + 1 i = 5 < 10 suoritetaan silmukka; summa 5; i 6 i = 6 < 10 suoritetaan silmukka; summa 11; i 7

While-toisto - esimerkki i = 5 summa = 0 while i < 10: summa = summa + i i = i + 1 i = 5 < 10 suoritetaan silmukka; summa 5; i 6 i = 6 < 10 suoritetaan silmukka; summa 11; i 7 i = 7 < 10 suoritetaan silmukka; summa 18; i 8

While-toisto - esimerkki i = 5 summa = 0 while i < 10: summa = summa + i i = i + 1 i = 5 < 10 suoritetaan silmukka; summa 5; i 6 i = 6 < 10 suoritetaan silmukka; summa 11; i 7 i = 7 < 10 suoritetaan silmukka; summa 18; i 8 i = 8 < 10 suoritetaan silmukka; summa 26; i 9

While-toisto - esimerkki i = 5 summa = 0 while i < 10: summa = summa + i i = i + 1 i = 5 < 10 suoritetaan silmukka; summa 5; i 6 i = 6 < 10 suoritetaan silmukka; summa 11; i 7 i = 7 < 10 suoritetaan silmukka; summa 18; i 8 i = 8 < 10 suoritetaan silmukka; summa 26; i 9 i = 9 < 10 suoritetaan silmukka; summa 34; i 10

While-toisto - esimerkki i = 5 summa = 0 while i < 10: summa = summa + i i = i + 1 i = 5 < 10 suoritetaan silmukka; summa 5; i 6 i = 6 < 10 suoritetaan silmukka; summa 11; i 7 i = 7 < 10 suoritetaan silmukka; summa 18; i 8 i = 8 < 10 suoritetaan silmukka; summa 26; i 9 i = 9 < 10 suoritetaan silmukka; summa 34; i 10 i = 10 ei ole < 10, lopetataan

While-toisto ehdon muotoilu Mikä tässä on vikana? i = 5 summa = 0 while i < 10: summa = summa + i

While-toisto ehdon muotoilu Toiston rungossa on tärkeä tehdä operaatioita jotka lopulta muuttavat ehdon epätodeksi Ehdon muotoon kiinnitettävä huomiota Yleinen virhe: ehto joka pysyy totena ViLLEssä tällaiset virheet ilmenevät aikakatkaisuvirheenä (Operation timed out) i = 5 summa = 0 while i < 10: summa = summa + i

While-toisto ehdon muotoilu Esimerkki: i = 1 summa = 0 while i!= 10: summa = summa + i i = i + 2 Nyt i käy läpi parittomia arvoja 1, 3, 5, 7, 9, 11 Ehto ei siis ikinä tule epätodeksi Korjaus: ehto muotoon i < 10

Indefiniitti vs definiitti toisto Definiitti toisto voidaan aina korvata indefiniitillä toistolla Päinvastoin ei päde! Indefiniitti toisto riittäisi kaikkien toistojen esittämiseen Selvyyden vuoksi valitaan ongelmaan parhaiten sopiva toistomuoto Jos tarvitaan silmukkamuuttujaa, definiitti yleensä soveltuu paremmin

Indefiniitti vs definiitti toisto Definiitti toiston korvaus indefiniitillä toistolla esimerkki: Definiitti toisto summa = 0 for i in range(1,6): summa = summa + i Indefiniitti toisto summa = 0 i = 1 while i < 6: summa = summa + i i = i + 1

Yhteenveto kontrollirakenteista Ohjausrakenne Selitys Iteratiivisten ohjelmien perusrakenne Koodirivit suoritetaan ylhäältä alas algoritmiin kirjoitetussa järjestyksessä Tästä järjestyksestä voidaan poiketa muilla rakenteilla Kontrollirakenne jolla valitaan kahden toiminnon välillä Ehdon ollessa tosi suoritetaan if-lohkon koodi Ehdon ollessa epätosi suoritetaan else-lohkon koodi Mahdollistaa toiminnon suorittamisen monta kertaa Eri tyyppejä sen mukaan tiedetäänkö toistojen määrä Rakenteet for, while

Modulaarisuus

Moduuli Moduuli on itsenäinen algoritmikomponentti Moduuli eli metodi (method) eli rutiini (routine) eli alirutiini (subroutine) eli aliohjelma (subprogram) Moduuli ratkaisee yhden osaongelman Moduuli voidaan suunnitella käyttöyhteydestä riippumattomasti Moduulia voidaan käyttää missä tahansa algoritmissa jossa esiintyy ko. Osaongelma

Moduulin kutsu ja modulaarisuus Moduulia käyttävän algoritmin sanotaan kutsuvan moduulia Useista moduuleista koostuvaa algoritmia sanotaan modulaariseksi Modulaarisessa algoritmissa jokainen ei-triviaali moduuli koostuu pienemmistä moduuleista

Moduulin määrittely Yksinkertaisen moduulin määrittely on muotoa: def moduulinnimi(): moduulin runko moduulinnimi on moduulille annettu nimi Nimen tulee kuvata moduulin tehtävää Käytetään moduulia kutsuttaessa Moduulin runko on tehtävän toteuttavat toiminnot

Moduulin kutsu def moduulinnimi(): moduulin runko Moduulia kutsutaan sen nimeä käyttäen Esimerkiksi yo. moduulin kutsu: moduulinnimi() Monimutkaisempia määrittelyjä ja kutsuja ensi viikolla

Moduulin käyttö - esimerkki Tehtävä: kuljeta auto maaliin teitä pitkin Käytössä moduulit turnright(), turnleft(), moveforward(), movebackward() 226

Moduulin käyttö - esimerkki Käytössä moduulit turnright(), turnleft(), moveforward(), movebackward() Naiivi tapa: turnright() moveforward() moveforward() turnright() moveforward() moveforward() turnright() moveforward() moveforward() 227

Moduulin käyttö - esimerkki Käytössä moduulit turnright(), turnleft(), moveforward(), movebackward() Naiivi tapa: turnright() moveforward() moveforward() turnright() moveforward() moveforward() turnright() moveforward() moveforward() Moduuliin: def oikeajaeteen(): turnright() moveforward() moveforward() oikeajaeteen() oikeajaeteen() oikeajaeteen() 228

Moduulin käyttö - esimerkki Miten algoritmi voidaan korjata kuvan uuteen tilanteeseen? # Ei toimi! def oikeajaeteen(): turnright() moveforward() moveforward() oikeajaeteen() oikeajaeteen() oikeajaeteen() 229

Moduulin käyttö - esimerkki V: korjataan vain moduulia # Toimii! def oikeajaeteen(): turnright() moveforward() moveforward() moveforward() oikeajaeteen() oikeajaeteen() oikeajaeteen() 230

Moduulin käyttö - esimerkki V: Vähennetään vielä turhaa copy-pastea käyttämällä silmukoita # Toimii! def oikeajaeteen(): turnright() for i in range(3): moveforward() for i in range(3): oikeajaeteen() 231