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

Koko: px
Aloita esitys sivulta:

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

Transkriptio

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

2 ViLLE-oppimisjärjestelmä ville.utu.fi Sähköinen oppimisjärjestelmä Käytetään kurssin kaikissa osasuorituksissa Jokaisella RFID-tägi, jolla läsnäolot rekisteröidään (ovella lukijat) Rekisteröityminen ja kirjautuminen yliopiston tunnuksilla HAKA-kirjautumista käyttäen Linkki rekisteröintiin seuraavalla kalvolla ViLLEn teknisistä ongelmista voi ottaa yhteyttä: Tai sivuilla olevasta palaute-napista (oikea yläkulma) 2

3 ViLLE-oppimisjärjestelmä ville.utu.fi ViLLE-kurssilla tehtävät on jaoteltua kierroksiin Yksi kierros sisältää useita tehtäviä Jokaista opetustuntia (luento tai tutoriaali) vastaa yksi kierros tehtäviä 3

4 Tiedotus ja kotisivut Tiedotus ViLLEn kautta Luentokalvot ilmestyvät ViLLEen ennen luentoja Sähköpostilla tai kasvokkain kyselyt: 4

5 Läsnäolojen kerääminen Läsnäolot rekisteröidään käyttämällä ViLLE RFID-tägiä Saleissa sisällä lukijat Jaetaan ensimmäisellä luennolla (6.9) (Kone-DI opiskelijat 7.9) Ellet pääse luennolla, voi tulla kyselemään ViLLE-huoneesta (Agora, 4 krs., huone 451D) Muista rekisteröidä läsnäolosi aina luennolla tai tutoriaalissa! Kuitenkin enintään enintään 15min ennen luennon alkua Esim. 12:15 alkavan luennon läsnäolon voi merkitä aikaisintaan 12:00 Jos unohdat merkitä läsnäolon, tagi unohtuu tai tapahtuu tekninen häiriö, ilmoita siitä mieluiten luennon tai tutoriaalin alussa/lopussa. 5 War is peace, ignorance is strength, freedom is slavery

6 Osasuoritukset ja materiaali Luennot Tutoriaalit ViLLE-kotitehtävät 3op Tentti +2op (Pakollinen tkt-opiskelijoille ja avoimen väylän opiskelijoille) Ei pakollinen muille, mutta ei kiellettykään... 6

7 Luennot Torstaisin 14:15-15:45 Sali XXII Poikkeus 1. luento ti (tämä luento) Luentokalvot ViLLEen yleensä ennen luentoa Läsnäolosta lisäpisteitä Luentopalaute kerätään ViLLEn kautta 8

8 Tutoriaalit Tiistaisin 12:15-13:45 Sali XXII Materiaali ja tehtävät ViLLEssä Tehtäviä tehdään pareittain omilla tietokoneilla Tehtävät aukeavat kun tutoriaali alkaa Tehtävien tekoa voi jatkaa seuraavan viikon tutoriaaliin asti => Tehtävät siis auki 7 päivää Paikalla mentoreita / ohjaajia Läsnäolovelvoite 5 kertaa 6:sta! 9

9 Tutoriaalit - läsnäolovelvoite Paikalla vähintään 5 kertaa kuudesta Vaikka tehtäviä tekisi kotona, se ei korvaa läsnäoloa Parityöskentely on osa kurssia Läsnäolovaatimus on kaikille Poissaoloperusteita eivät ole mm.: Päällekäisyys toisen kurssin kanssa Palkkatyöt Tunne siitä, että osaa jo kaiken 10

10 Tutoriaalien laitteistovaatimukset Ei tarvita erillisiä ohjelmistoja Moderni selain riittää Internet Explorer toimii heikosti Firefox, Chrome hyvin Perusläppäri, isosta resoluutiosta hyötyä Tableteilla ja kännyköillä voi olla vaikeuksia Kaikilla ei tarvitse olla omaa kannettavaa, riittää että noin puolella on 11

11 ViLLE-kotitehtävät Kotitehtäviä ViLLE-järjestelmässä Kierros aukeaa joka luennon alussa Tehtävät auki 2 viikkoa Kierroksella myös luento- ja tutoriaalipalaute Tutoriaalien palautetta ei luonnollisesti kannata antaa ennen itse tutoriaaleja... tai jos ei ole paikalla Palaute ei valitettavasti ole anonyymiä 12

12 ViLLE rekisteröityminen Rekisteröityminen ViLLE-kurssille: TAI Yliopiston tunnuksilla tai jollain HAKA-tunnuksella Kurssiavain: tkpreg Kirjautuminen rekisteröitymisen jälkeen: HAKA-linkistä sivulla LDAP-linkki helpompi TY:n opiskelijoille...jos nämäkään vaihtoehdot eivät miellytä, voit vaihtaa ViLLEen erillisen salasanan ja kirjautua etusivulta suoraan 14

13 Kurssin aiheet ja aikataulu # Aihe Luento Tutoriaali 1 Kurssijärjestelyt ja johdanto Ti Ohjelmointikielet ja peruskäsitteet To 8.9 Ti Toisto ja modulaarisuus To 15.9 Ti Parametrit, funktiot, iteraatio ja rekursio To 22.9 Ti Tieto- ja talletusrakenteet To 29.9 Ti ? To 6.10 Ti ? To Ti

14 Kurssin aiheet ja aikataulu (vain Kone-DI!) # Aihe Luento Tutoriaali 1 Kurssijärjestelyt ja johdanto Ke Ohjelmointikielet ja peruskäsitteet To 8.9 Ke Toisto ja modulaarisuus To 15.9 Ke Parametrit, funktiot, iteraatio ja rekursio To 22.9 Ke Tieto- ja talletusrakenteet To 29.9 Ke ? To 6.10 Ke ? To Ke

15 Tavoitteet Kurssin jälkeen opiskelija Tuntee pääpiirteissään informaatioteknologian osa-alueet ja keskeisimmät käsitteet Ymmärtää algoritmisen ajattelun, ohjelmointiin liittyvät peruskäsitteet Osaa kirjoittaa yksinkertaisia algoritmeja käyttäen Python-ohjelmointikieltä 19

16 Arvostelu (3op) Osa-alue Kotitehtävät ja palaute Luentoläsnäolo 0 % Tutoriaaliläsnäolo 5/6 Minimisuoritus 50% pisteistä Tutoriaalipisteet 50% pisteistä ViLLE näyttää arvion arvosanasta Toiminto on kuitenkin ensimmäistä kertaa käytössä, ilmoittakaa, jos huomaatte jotain kummallista Tehtäviä lisätään muutamia kurssin aikana, joten puolivälissä hankittu hyväksytty arvosana saattaa muuttua hylätyksi 20

17 Arvostelu (5op) Vaatimukset: 3op osio suoritettu (myös aiemman vuoden suoritus käy) Tentti läpäisty (yli 50%) Arvosanaan vaikuttaa tehtyjen ViLLE-tehtävien pistemäärä (korkeintaan +1.0 arvosanaa) 21

18 Tentti ViLLE-tentti Tehdään joko omalla koneella luentosalissa tai mikroluokan koneilla 22

19 Toistuvia kysymyksiä Tarvitseeko joka viikon tehtävistä tehdä vähintään 50%? Ei, voi jättää viikon vaikka nollille, kaikkien pisteiden summa lasketaan Voiko tehtäviä yrittää uudestaan? ViLLE-tehtävissä ei koskaan rajoiteta yrityskertoja Mitä eroa on sivuaineopiskelijoiden suoritustavalla? Ei mitään 26

20 Kysyttävää järjestelyistä? 27

21 Johdanto kurssin sisältöön

22 Terminologiaa Algoritmi on jonkin tehtävän suorittamiseksi tarvittavien toimenpiteiden kuvaus Ongelman ratkaisu lasketaan suorittamalla algoritmin toimenpiteet Tietokone suorittaa sopivalla formaalilla kielellä kuvattuja algoritmeja Ohjelmointikielet ovat näitä sopivia formaaleja kieliä Ohjelma on algoritmin esitys jollain ohjelmointikielellä

23 Tietojenkäsittelytiede (Computer science) Tieteellinen lähestymistapa laskentaan ja ongelmanratkaisuun Ei pelkkää tietokoneen ohjelmointia Ohjelmointi ja tietokoneet ovat työkaluja 31

24 Esimerkki algoritmista Algoritmi kupin kahvia keittämiseen 1. Lisää kuppi vettä kahvinkeittimeen 2. Taita suodatinpussin reunat 3. Laita suodatinpussi keittimeen 4. Lisää kahvinpuruja yksi mitallinen 5. Laita keitin päälle 6. Odota kunnes kahvi on tippunut

25 Algoritmista suoritukseen Algoritmi on menetelmä, jonka mukaisesti tehtävää suoritetaan Tehtävän suoritusta kutsutaan prosessiksi Tehtävän suorittajaa kutsutaan prosessoriksi Yleensä tietokoneen osa

26 Tietokoneen pääkomponentit Muisti Syöttö Prosessori Tulostus

27 Prosessori Syöttö Muisti Prosessori Tulostus Suorittaa osaamiaan perusoperaatioita Prosessorin tärkeimmät osat: Aritmeettis-looginen yksikkö (arithmetic and logic unit, ALU) Sisältää dataa käsittelevät ja muokkaavat loogiset piirit Suorittaa esim. laskutoimitukset Rekisterit Sisältävät muistista haettavan datan jota prosessori käsittelee Ovat erityisen nopeita muistipaikkoja Kontrolliyksikkö (control unit, CU) eli ohjausyksikkö Kontrolliyksikön rekisterit sisältävät koneen tarvitsemaa kontrollitietoa Pitää kirjaa missä vaiheessa ohjelman suoritus on

28 Muisti Syöttö Muisti Prosessori Tulostus Säilyttää tietoa (dataa) Keskusmuistissa säilytetään Suoritettavaa algoritmia Dataa, johon algoritmin operaatiot kohdistetaan Oheismuisti Tarvitaan suurten tietomäärien pitkäaikaiseen varastointiin Esim. kiintolevy, Bluray

29 Muisti Syöttö Muisti Prosessori Tulostus Keskusmuisti jaettu kahteen komponenttiin Pysyväismuisti (ROM, Read Only Memory) Sisältää ohjelman, jolla laitteisto alustetaan ja käyttöjärjestelmä ladataan Datan kirjoittaminen hidasta tai mahdotonta Käyttömuisti eli työmuisti (RAM, Random Access Memory) Sisältää esim. suoritettavan algoritmin ja sen tarvitseman datan Datan kirjoittaminen ja lukeminen nopeaa

30 Syöttö & tulostus Syöttö Muisti Prosessori Tulostus Syöttölaitteilla Algoritmi ja käsiteltävä tieto syötetään muistiin Tulostuslaitteilla Tietokone tulostaa käsittelyn tulokset Kumpikaan ei ole välttämättömiä tietokoneen toiminnalle Tosin kommunikaatiokyvytön tietokone on melko hyödytön

31 Väylä Näppäimistö Prosessori Aritmeettis- Looginen yksikkö Kontrolliyksikkö. Väylä Keskusmuisti Rekisterit Kiintolevy Näyttö

32 Väylä. Väylä (bus) on kokoelma johtimia Hoitaa tiedonsiirron Prosessorin, muistin ja laitteiden välinen data kulkee aina väylän kautta Tietokoneen toimintaperiaate (yksinkertaistettuna): Prosessori noutaa suoritettavan ohjelman (konekieliset) käskyt ja tarvittavan datan keskusmuistista Prosessori suorittaa käskyissä määritellyt toiminnot Prosessori siirtää käsitellyn datan takaisin keskusmuistiin (tai muihin muisti-/tulostuslaitteisiin)

33 Kahden olotilan periaate - bitit Tietokoneen toiminta perustuu kahden olotilan periaatteeseen: Kaksi vaihtoehtoa, esim. johdossa on (arvo=1) tai ei ole (arvo=0) jännitettä Kaikki data tietokoneessa esitettään arvoilla 0 ja 1, eli biteillä Kaikki data esitetään bittijonona Kokonaisluvut käyttäen 2-järjestelmän esitystä (binäärilukuja) Desimaaliluvut tallennetaan eritavalla (esim 1.0 tallennetaan eritavoin kuin kokonaisluku 1) Kuvan ja äänen käsittely tietokoneessa vaatii tiedon muuttamisen bittijonoksi (siis 0 ja 1)

34 Tietokoneet kaikkialla yhteiskunnassa miksi? Nopeus Tietokoneen prosessori voi suorittaa miljardeja yksinkertaisia operaatioita sekunnissa, aivojen laskentanopeus on paljon hitaampi Nopeus ei kuitenkaan yksin riitä, ja monet ihmiselle helpot tehtävät ovat koneille vaikeita (esim. motoriset toiminnot) Monet ongelmat niin vaikeita, ettei tietokoneidenkaan nopeus riitä Luotettavuus (Viattomat) tietokoneet toimivat kuten algoritmi käskee eivätkä tee virheitä Virheet johtuvat yleensä virheistä algoritmeissa (jotka ihminen ohjelmoi) Tietokone ei kykene arvioimaan tulosten järkevyyttä

35 Tietokoneet kaikkialla yhteiskunnassa miksi? Muisti Tietokoneet kykenevät varastoimaan rajattomasti tietoa, ihmisen muistikapasiteetti on rajallinen Paperi vie paljon tilaa, hidas hakea Kustannukset Tietokoneen käytöllä voidaan saavuttaa merkittäviä kustannussäästöjä verrattuna tehtävien suorittamiseen ihmistyövoimalla Kuitenkin ohjelmointi voi olla kallista

36 Ohjelmointikielet Tietokone ei pysty suorittamaan luonnollista kieltä Luonnollisissa kielissä algoritmin kannalta ongelmallista: Laaja sanasto Monimutkaiset kielioppisäännöt Lauseiden merkitys riippuu kontekstista Perustuu viime kädessä puhuttuun kieleen Käyttö vaatii maailmankuvaa Algoritmit esitetään formaalilla kielellä, eli ohjelmana

37 Ohjelmointikielet Ohjelmointikielen suunnittelussa huomioitava Helpotettava algoritmien ilmaisemista tietokoneen ymmärtämässä muodossa Helposti tietokoneen ymmärrettävissä Helposti ihmisen ymmärrettävissä Minimoitava virhemahdollisuudet ohjelmaa kirjoitettaessa Ohjelmaa tutkimalla pitäisi olla helppo vakuuttua sen oikeellisuudesta Lukuisia ohjelmointikieliä suunniteltu Kurssilla käytetään Python-ohjelmointikieltä

38 Esimerkki: Piet-kieli Ohjelmointi tapahtuu täyttämällä tietyn värisiä pikseleitä Helppo ymmärtää tietokoneelle, kun värejä vastaavat operaatiot on hyvin määritelty Ihmiselle?

39 Esimerkki: INTERCAL-kieli Kielessä pitää olla kohtelias käyttämällä tarpeeksi PLEASE avainsanaa, joka ei itsessään tee mitään Jos on kuitenkin liian nöyristelevä, suoritus voidaan lopettaa Mikä tahansa saatetaan välillä jättää suorittamatta, jos ei ilmaista, että se on tärkeä PLEASE-avainsanalla DO,1 SUB #12 <- #16 DO,1 SUB #13 <- #162 PLEASE READ OUT,1 PLEASE GIVE UP Voidaanko ohjelmaa tutkimalla vakuuttua sen oikeellisuudesta?

40 Algoritmi Käytettävän kielen säännöt Ohjelmointi Lausekielinen ohjelma Kääntäjä Käännös Linkkaaja Konekielinen ohjelma Linkkaus Suorituskelpoinen konekielinen ohjelma Muut tarvittavat konekieliset ohjelmat Syötetiedot Suoritus Tulostiedot

41 Algoritmi Käytettävän kielen säännöt Ohjelmointi Lausekielinen ohjelma Ongelman ratkaiseva algoritmi ohjelmoidaan käyttäen jonkin ohjelmointikielen sääntöjä Jokainen algoritmin askel esitetään ohjelmassa käskynä, lauseena Ohjelma muodostuu lausejonosta, jotka määrittävät tietokoneen suorittamat perusoperaatiot Kirjoitettua ohjelmaa kutsutaan usein lausekieliseksi ohjelmaksi Koneista riippumattomia ohjelmointikieliä Suunniteltu ihmisille helpoksi ja luontevaksi Tietokone ei ymmärrä korkean tason lausekieltä suoraan

42 Lausekielinen ohjelma Kääntäjä Käännös Konekielinen ohjelma Kullakin prosessorilla on sille ominainen konekieli (machine language) Kieli joka on suunniteltu toimimaan yhdessä prosessorin kanssa Voidaan kuvata vain hyvin primitiivisiä operaatioita, jotka kone osaa suorittaa Konekielellä ohjelmointi on työlästä, mutta lausekielien ansiosta harvoin tarpeellista (aiheeseen palataan kurssin II osassa) Kääntäjä (compiler) tai tulkki (interpreter) muuntaa lausekielisen ohjelman konekieliseksi ohjelmaksi Kääntäjä muuntaa koko ohjelman kerralla, tulkki lause kerrallaan sen suorituksen aikana (aiheeseen palataan kurssin II osassa)

43 Konekielinen ohjelma Muut tarvittavat konekieliset ohjelmat Linkkaaja Linkkaus Käännetty konekielinen ohjelma ei usein ole suorituskelpoinen Toimiakseen se tarvitsee muiden jo käännettyjen ohjelmien apua Tätä varten suoritetaan linkkaus Suorituskelpoinen konekielinen ohjelma Liitetään tarvittavat muut ohjelmat käännettyyn konekieliseen ohjelmaan Linkkaaja on liittämisen suorittava ohjelma Monissa järjestelmissä linkkaus ja suoritus voidaan tehdä yhdellä komennolla

44 Huomautuksia Tämä on kuitenkin vain yksi tapa, jolla algoritmi voidaan saattaa suoritettavaksi Erityisesti kääntämisvaiheessa on useita eroja Käännösvaiheita voi olla useita Käännös voidaan tehdä vaiheittain (tulkkaus) 53

45 Algoritmi Käytettävän kielen säännöt Ohjelmointi Lausekielinen ohjelma Kääntäjä Käännös Konekielinen ohjelma Muut tarvittavat konekieliset ohjelmat Linkkaaja Linkkaus Suorituskelpoinen konekielinen ohjelma Syötetiedot Suoritus Tulostiedot

46 Ohjelmistot Tietokoneen ohjelmistot koostuvat Sovellusohjelmistosta (application software) Valmisohjelmia ja käyttäjien tekemiä ohjelmia Systeemiohjelmistosta (system software) Systeemitason ohjelmia kuten esim. kääntäjät ja tulkit Käyttöjärjestelmiä, jotka huolehtivat mm. syöttö- ja tuloslaitteiden hallinnasta ja tietojen pitkäaikaissäilytyksestä

47 Algoritminen ongelmanratkaisu Ongelman ratkaisu algoritmisesti tietokoneella voidaan kuvata algoritmilla: 1. Esitä algoritmi ohjelmana sopivalla ohjelmointikielellä 2. Suorita ohjelma tietokoneessa Vaihe 2 on usein helppo Vaiheen 1 algoritmin muodostaminen ei Vaatii luovuutta ja älyllistä ponnistelua Ei ole mahdollista kirjoittaa algoritmia algoritmin muodostamiseksi

48 Algoritmin perusvaatimukset Algoritmi On täsmällinen ja yksityiskohtainen kuvaus tai ohje tehtävän suoritukseen Perustuu yksikäsitteiseen ja tarpeeksi täsmälliseen tehtävän määritykseen Syötteiden ja tulosteiden tarkka kuvaus tärkeä osa Algoritmit ovat kielestä ja koneesta riippumattomia Mikä tahansa ohje ei siis ole algoritmi

49 Algoritmien asteittainen tarkentaminen Algoritmien suunnittelu usein vaikeaa Yleinen virhe, että algoritmi tuottaa oikean tuloksen, mutta ei juuri annettuun tehtävään - > varattava riittävästi aikaa tehtävän määrittelylle Algoritmien suunnitteluun kehitetty menetelmiä Yksi sellainen on asteittain tarkentava menetelmä (stepwise refinement) Algoritmi suunnitellaan kokonaisuudesta osiin edeten (top-down design) Jaetaan alkuperäinen prosessi pienempiin osiin, joille voidaan laatia oma algoritminsa Jaetaan osa-algoritmit jälleen pienempiin ja pienempiin osiin Riittävän pienet osa-algoritmit ratkaistaan Lopullinen ratkaisu yhdistetään alialgoritmeista

50 Algoritmien asteittainen tarkentaminen Algoritmin abstraktiotaso laskee jokaisella tarkentamisella Tehtävän ratkaisu suunnitellaan ensin korkealla abstraktiotasolla Konkretisoidaan asteittain, kunnes abstraktiotaso on sopiva suorittajalle (tietokoneelle) Ohjelmointi on siis ihmisen korkean abstraktiotason ajattelun muuntaminen koneelle soveltuvalle matalammalle abstraktiotasolle

51 Algoritmien asteittainen tarkentaminen Esimerkki: kaakaon keittoalgoritmi robotille. 1. Keitä vettä 2. Pane kaakaojauhoja kuppiin 3. Kaada vettä kuppiin Ei tarpeeksi tarkka robotin suoritettavaksi -> tarkennetaan

52 Algoritmien asteittainen tarkentaminen Esimerkki: kaakaon keittoalgoritmi robotille. 1. Keitä vettä 1. Täytä vesipannu 2. Aseta pannu liedelle 3. Lämmitä kunnes vesi kiehuu 4. Siirrä pannu lieden sivuun 2. Pane kaakaojauhoja kuppiin 3. Kaada vettä kuppiin Edelleen kaipaa tarkennusta -> tarkennetaan

53 Algoritmien asteittainen tarkentaminen Esimerkki: kaakaon keittoalgoritmi robotille. 1. Keitä vettä 1. Täytä vesipannu 1. Aseta vesipannu vesihanan alle 2. Avaa vesihana 3. Odota, kunnes pannu on täynnä 4. Sulje vesihana 2. Aseta pannu liedelle 3. Lämmitä kunnes vesi kiehuu 4. Siirrä pannu lieden sivuun Tarkennusta jatketaan kunnes suorittaja (robotti) voi tulkita ja suorittaa ne

54 Palautetta viime luennosta Kuka saa ja kenen täytyy suorittaa 5op kokonaisuus? Sivuaineopiskelijat suorittavat jos heidän sivuainekokonaisuuteen on merkitty niin Kokonaisuuksia on useita eri tiedekunnittain, mahdoton luetella kaikkia Kysy tarvittaessa omalta opoltasi TKT-opiskelijoiden täytyy suorittaa 5op Avoimen väylän opiskelijoiden täytyy suorittaa 5op Ketään ei voi kieltää suorittamasta 5op 3op osuudesta ja 2op osuudesta tulevat eri arvosanat 3op osuus täytyy olla suoritettuna ennen kuin 2op osuuden arvosanan saa Mikä tässä nyt oli oikeastaan tärkeää? Aloitusluennot yrittävät antaa vähän pohjatietoa monesta asiasta, suurpiirteinen tietämys riittänee 88

55 Palautetta viime luennosta Näytin opiskelijakorttiani lukijaan en saanut läsnäoloa? Opiskelijakortti pitää käydä rekisteröimässä erikseen ViLLEn, samoin kuin RFID-tagit tai muut, jos opiskelijakorttia haluaa käyttää kulunvalvontaan Kaikki kortit eivät käy, siksi tageja jaetaan RFID-tagin saa kysymällä luennoitsijalta tai menemällä Agoran 4krs. huoneeseen 451D Opiskelijakortin voi liittää samalla ViLLEen jos se onnistuu Läsnäoloa ei tullut? Aloitusluennolla läsnäoloja merkittiin niin myöhään, etteivät ne enää rekisteröityneet Unohdit näyttää ViLLEä! Niin unohdin. Deadlineihin on kuitenkin vielä niin paljon aikaa, että ensi viikon tutoriaaleissa kaikki selvinnee 89

56 Ohjelmointikielet ja peruskäsitteet

57 Sisältö Pythonin esittely Ohjelmointikielet ja peruskäsitteet Muuttujat Valinta

58 Pythonista Kurssilla käytetty ohjelmointikieli Tulkattava kieli Ohjelma muunnetaan suoritettavaan muotoon lause kerrallaan ohjelmaa suoritettaessa Tämä kurssi ei kuitenkaan ole Python-kurssi Vältetään Pythonille ominaisia piirteitä Kirjoitetaan yksinkertaista koodia

59 Pythonista Ladattavissa Ei kurssin kannalta välttämätöntä asentaa ollenkaan Jos asennat, asenna v2.7.x (älä uusinta 3.x versiota) ViLLE käyttää 2.7-versiota, ja näiden versioiden välillä on monia eroja Jos et käytä Windowsia, Python saattaa olla jo asennettuna Kokeile terminaalissa python komentoa Verkosta löytyy palveluita pythonin suorittamiseen, joka saattaa pieneen testailuun riittää Esim

60 Algoritmin ymmärtäminen Prosessorin tulee kyetä tulkitsemaan algoritmi Ymmärtää esitysmuoto Kyetä suorittamaan operaatiot Algoritmin esityksen ymmärtäminen jakautuu kahteen vaiheeseen: 1. Ymmärtää symbolit joilla algoritmi esitetään Käytetyn kielen aakkosto Käytetyn kielen kielioppi 2. Ymmärtää jokaisen askeleen merkitys

61 Kielen syntaksi miten ohjelma kuvataan? Kielen syntaksi: Määrittää kielen lauseiden muodon eli kielioppisäännöt Määrää miten kielen symboleja saa laillisesti käyttää Syntaksi siis määrää, millaisia ovat kielen oikein muodostetut lauseet. Syntaktisesti oikea ohjelma noudattaa kielen syntaksia Esimerkki: yhteenlaskukieli: <lhs> + <rhs> Oikeita kielen lauseita: a + b, Vääriä: + 2, b +, + + +

62 Kielen semantiikka mitä ohjelma tarkoittaa? Kielen semantiikka Oppi lauseiden merkityksestä eli tiettyjen ilmaisujen merkitys kielessä Semantiikka määrää, mitä kielen lauseet tarkoittavat. Semantiikka vastaa siis kysymykseen Mitä? Esimerkkejä: Hauki on kala. (syntaktisesti ja semanttisesti oikein) Delfiini on kala. (syntaktisesti oikein, semanttisesti väärin)

63 Ohjelmointikielten semantiikka Luonnollisiin kieliin verrattuna yksinkertaista Syntaksi ja semantiikka eroteltu ohjelmointikielissä Algoritmin askeleet voivat olla syntaktisesti oikein, mutta semanttisesti merkityksettömiä

64 Ohjelmointikielen kielioppi Ohjemointikielten syntaksi nykyään tarkasti määritelty 60-luvulta lähtien syntaksi määritelty käyttäen kielioppia Esim. Pascal-kielen kielioppi koostuu n. 150 kielioppisäännöstä Kielioppisäännöt määrittävät kielen syntaksin täsmällisesti Ohjelmointikielten semanttiikkaa ei (yleensä) kyetä määrittelemään täsmällisesti

65 Algoritmin suorittaminen Algoritmin suorittaakseen tulee 1. tuntea algoritmin kuvauksessa käytetyt symbolit 2. osata liittää kuhunkin askeleeseen sen merkitys 3. kyetä suorittamaan operaatiot Ohjelmointikielen kääntäjä suorittaa vaiheet 1 ja 2 Kääntäjä muuttaa ohjelman jokaisen askeleen sopiviksi operaatioiksi Prosessori suorittaa operaatiot (vaihe 3)

66 Syntaksivirheet Syntaksivirhe tarkoittaa kielen syntaksin rikkomista Virhe estää virheellisen lauseen suorittamisen Usein yksikin virhe estää koko ohjelman suorittamisen Pythonissa tämä pätee Esimerkkejä: syntaksivirhe Pythonissa, mutta ei C:ssä a++ kirjoitusvirhe varatussa sanassa funktion dosomething()

67 Virheiden havaitseminen Syntaksivirheet havaitaan vaiheessa 1 (kielen kuvauksen tunteminen) Jotkin semanttiset virheet vaiheessa 2 (askeleiden merkitys) Jotkin semanttiset virheet vaiheessa 3 (operaatioiden suoritus) Koska Python on tulkattava kieli, vaiheiden 2 ja 3 virheet havaitaan vasta ohjelman suorituksen aikana Vaiheen 1 virheet havaitaan suorituksen alussa (syntaksi tarkistetaan)

68 Virheiden havaitseminen - esimerkki Esimerkkilause: Kirjoita viikon n:nnen päivän nimi. Syntaktisesti oikein Semanttinen oikeellisuus voidaan tarkastaa vasta suoritettaessa Lause on semanttisesti oikein vain tietyille n:n arvoille n:n arvo tiedetään vasta silloin

69 Loogiset virheet Syntaktisesti oikea, virheellisen tuloksen antava ohjelma sisältää loogisen virheen Loogiset virheet voidaan havaita esim. vertaamalla algoritmin tuottamaa print oikeaksi tiedettyyn tulokseen Edellyttää oikein tuloksen tuntemista Esim. Lukujen summan laskevan algoritmin tulos tunnetaan Loogiset virheet vaikeampi havaita kuin syntaktiset ja semanttiset Voidaan välttää tuomalla algoritmin semantiikka selvästi esille Kuvaavien nimien käyttö Ohjelmakoodin sijoitetut kommentit

70 Algoritmin suoritusjärjestys - peräkkäisyys Algoritmin lauseet suoritetaan algoritmin määräämässä järjestyksessä Peräkkäisyys (sequential) on yksi algoritmien perusohjausrakenteista (flow of control) Peräkkäisessä ohjelmassa lauseet suoritetaan Yksi kerrallaan Täsmälleen kerran Siinä järjestyksessä kuin ne ovat algoritmissa Viimeisen lauseen suoritus päättää algoritmin suorituksen

71 Lause ja lauseke Algoritmin yksittäisiä käskyjä (tai komentoja) kutsutaan lauseiksi (statement) Lause on yksi suoritettava osa lausekielistä ohjelmaa, joka koostuu useista lauseista Lausekkeella (expression) tarkoitetaan Luku- tai muita arvoja (2, muumi, 523.3) Muuttujaviittauksia Erilaisia laskutoimituksia (+, -, *, /) tai Muita operaatioita sisältävää ilmausta Lausekkeella on sen osista määräytyvä yksikäsitteinen arvo

72 Lause ja lauseke Lauseen ja lausekkeen ero: lausekkeella on arvo, lauseella ei Lauseketta ei voi käyttää yksinään, sen on oltava lauseen osa Lausekkeiden asema tosin vaihtelee eri ohjelmointikielissä Lausekkeita: x + 7 * y Lauseita: a = b = 3 * a

73 Operaattorit Operaattori määrää mitä lasketaan Binääriset operaattorit Aritmeettiset operaattorit Plus, miinus, kerto, Asetusoperaattori (seuraavaksi) Vertailuoperaattorit <, >, =, Loogiset operaattorit (ja, tai,..) Unaariset operaattorit Negaatio (esim -5) Ja monia muita kielestä riippuen

74 Operandit Objekteja, joita operaattori käyttää arvon laskemiseen Esim: 4 + 2, operaattori on + ja operandeja ovat 4 ja , operaattori on ja operandi on 42.

75 Muuttujat

76 Muuttujat Muuttuja Algoritmin halutun tuloksen saavuttamiseen käytetään usein apuna muuttujia (variables) Muuttuja On nimi, johon on liitetty jokin arvo Arvo voi muuttua algoritmin suorituksen aikana Tarkoittaa usein tietokoneen muistipaikkaa Algoritmin käskyt muuttavat muistipaikkojen sisältöä (eli muuttujien arvoja)

77 Muuttujan alustus ja arvon asetus Asetuslause eli sijoituslause antaa muuttujalle arvon tai muuttaa sen arvoa esim muuttuja = lauseke x = Muuttuja on sen muuttujan nimi jonka arvo halutaan asettaa Lauseke on tälle muuttujalle sopivan arvon tuottava lauseke

78 Muuttujan alustus ja arvon asetus esim muuttuja = lauseke x = Asetuslauseen semantiikka: Lasketaan asetuslauseen oikean puolen saama arvo Asetetaan saatu arvo vasemman puolen muuttujan (uudeksi) arvoksi Jos muuttujalla oli ennestään arvo, se häviää Oikealla puolella olevan lausekkeen jokaisella muuttujalla oltava arvo

79 Asetuslause ja ohjelmointikielet Joissakin kielissä muuttujilla on jokin oletusarvo (esim. 0 lukuarvoille) int x Pythonissa esitellylle muuttujalle on asetettava arvo x = 0

80 Asetuslause esimerkkejä y = Muuttujan y arvo lauseen suorittamisen jälkeen?

81 Asetuslause esimerkkejä y = Muuttujan y arvo lauseen suorittamisen jälkeen? Vastaus: 7

82 Asetuslause esimerkkejä x = 5 y = x Muuttujan x arvo on ensimmäisen lauseen suorittamisen jälkeen 5. Muuttujan y arvo on toisen lauseen suorittamisen jälkeen sama kuin x:n arvo, eli 5.

83 Asetuslause esimerkkejä x = 8 y = x + 2 x = 4 Muuttujien x ja y arvot ohjelman suorittamisen jälkeen?

84 Asetuslause esimerkkejä x = 8 y = x + 2 x = 4 Muuttujien x ja y arvot ohjelman suorittamisen jälkeen? Muuttujan x arvo on ensimmäisen lauseen suorittamisen jälkeen 8. Muuttujan y arvo on 2. lauseen suorittamisen jälkeen x:n arvo plus 2, eli 10. Muuttujan x arvo on viimeisen lauseen suorittamisen jälkeen 4. Lause ei muuta y:n arvoa, eli y:n arvo on edelleen 10.

85 Tyypit Muuttujiin ja lausekkeisiin liittyy tyypin käsite Tyyppi kertoo, millainen arvo muistipaikkaan tallennetaan Tyyppi määrittää myös arvon tallennusmuodon tietokoneen muistiin

86 Sisäänrakennettuja tyyppejä Pythonissa Tyyppi Kokonaisluku Esimerkkejä arvoista Liukuluku Totuusarvo Merkkijono True False erkki merkkijono esimerkki

87 Muuttujan tyyppi Pythonissa Pythonissa muuttujalla ei ole tyyppiä, vaan arvolla, joka muuttujaan on tallennettu => Python on ns. dynaamisesti tyypitetty kieli Muuttujan arvon tyyppi voi muuttua suorituksen aikana Esim: x=2 x= hei maailma

88 Staattinen tyypitys Pythonin muuttujat ovat dynaamisesti tyypitettyjä Vastakohta tälle on staattinen tyypitys Tällöin muuttujan tyyppi määräytyy täysin kääntämisvaiheessa, eikä se voi muuttua ajon aikana Muun kuin oikeantyyppisen arvon tallentaminen muuttujaan ei ole sallittua Muuttujat alustetaan ilmaisemalla muuttujan tyyppi Esim. Javassa: int x = 3; Tai: int x; x =3

89 Staattinen tyypitys Pythonin muuttujat ovat dynaamisesti tyypitettyjä Vastakohta tälle on staattinen tyypitys Tällöin muuttujan tyyppi määräytyy täysin kääntämisvaiheessa, eikä se voi muuttua ajon aikana Muun kuin oikeantyyppisen arvon tallentaminen muuttujaan ei ole sallittua Muuttujat alustetaan ilmaisemalla muuttujan tyyppi Esim. Javassa: int x = 3; Tai: int x; x =3

90 Tulostaminen Pythonissa print-käskyllä voi tulostaa vakioita ja muuttujien arvoja Esim: print erkki merkkijono esimerkki Pilkulla voi erottaa eri vakioita tai muuttujia Tulostukseen pilkulla eroteltujen osien väliin lisätään välilyönti Esim: x=12 print x:n arvo on, x Tulostaa: x:n arvo on 12

91 Aritmeettinen lauseke

92 Aritmeettinen lauseke Aritmeettinen lauseke on lauseke, jonka arvo on luku esim. 3 * x + y (jos muuttujat x ja y ovat lukuarvoisia) Käytössä operaatiot: + - * (kertolasku) / (jakolasku) % (jakojäännös) ** (potenssi)

93 Aritmeettinen lauseke Lauseketta laskettaessa arvo lasketaan vasemmalta oikealle 1. Potenssi ** on vahvin (lasketaan ensin) 2. Aritmeettiset operaattorit *, / ja % lasketaan tämän jälkeen 3. Operaattorit + ja - ovat heikompia Ts. sama laskujärjestys kuin matematiikassa Voidaan käyttää sulkeita laskujärjestyksen osoittamiseksi Ei kannata olla liian nokkela, epäselviä lausekkeita on hyvä selventää sulkeilla Esim: y+x**3%2 voisi kirjoittaa: y + ((x**3) % 2)

94 Aritmeettinen lauseke - esimerkkejä 3 * x + 2 Lasketaan ensin 3*x, johon lisätään 2. Esim jos x:n arvo on 4, tulee lausekkeen arvoksi 14.

95 Aritmeettinen lauseke - esimerkkejä 3 * (x + 2) Lasketaan ensin x + 2, jonka tulos kerrotaan 3:lla. Esim jos x:n arvo on 4, tulee lausekkeen arvoksi 18.

96 Aritmeettinen lauseke - esimerkkejä z = 4 * (x + y - 1) Lasketaan ensin x + y, jonka tuloksesta vähennetään 1. Seuraavaksi kerrotaan tämä 4:llä. Lopuksi sijoitetaan saatu arvo muuttujaan z. Mikä tulee z:n arvoksi jos x:n arvo on 4 ja y:n -2?

97 Aritmeettinen lauseke - esimerkkejä z = 4 * (x + y - 1) Lasketaan ensin x + y, jonka tuloksesta vähennetään 1. Seuraavaksi kerrotaan tämä 4:llä. Lopuksi sijoitetaan saatu arvo muuttujaan z. Mikä tulee z:n arvoksi jos x:n arvo on 4 ja y:n -2? Vastaus: lausekkeen arvoksi tulee 4 eli 4 * (4 + (-2) - 1. Huom! Aritmeettinen lauseke on tässä sijoituslauseen oikea puoli

98 Aritmeettinen lauseke - esimerkkejä Jakojäännösoperaattori % laskee jakojäännöksen, kun vasen puoli jaetaan oikealla. Esim: jos z on 5, niin lausekkeen z % 3 arvo on 2 z = z % 2 Tässä z:n arvoksi asetetaan 0, jos z on jaollinen kahdella, ja 1 jos z ei ole jaollinen kahdella

99 Looginen lauseke

100 Looginen eli totuusarvoinen lauseke Looginen tai totuusarvoinen tai ehtolauseke on lauseke, jonka arvo on totuusarvo tosi (true) tai epätosi (false) esim. a < b + 1

101 Vertailuoperaattorit Lausekkeissa voidaan käyttää vertailuoperaattoreita Vertailuoperaattori Esimerkki Suurempi > a > 4 Pienempi < a < -2 Suurempi tai yhtäsuuri >= a >= b + 2 Pienempi tai yhtäsuuri <= b <= 0 Yhtäsuuret == Erisuuret!= a == b a!= c Huom! Kaksi yhtäsuuruusmerkkiä Huom! Esimerkkilauseiden arvot riippuvat muuttujien arvoista. Vertailuoperaattorit vaihtelevat ohjelmointikielissä.

102 Totuusarvoiset lausekkeet - esimerkkejä a < 4 Lausekkeen arvo on tosi, mikäli muuttujan a arvo on pienempi kuin 4. Muulloin lausekkeen arvo on epätosi.

103 Totuusarvoiset lausekkeet - esimerkkejä a >= b + 2 Lausekkeen arvo on tosi, mikäli muuttujan a arvo on suurempi tai yhtäsuuri kuin aritmeettisen lausekkeen b + 2. Muulloin lausekkeen arvo on epätosi.

104 Totuusarvoiset lausekkeet - esimerkkejä a 1 > b Kun a = 3 ja b = 2, mikä on lausekkeen arvo?

105 Totuusarvoiset lausekkeet - esimerkkejä a 1 > b Kun a = 3 ja b = 2, mikä on lausekkeen arvo? Vastaus: Vasen puoli: a 1 eli 3 1 = 2 Oikea puoli: b eli 2 Vertailu on siis 2 > 2, mikä ei pidä paikkaansa joten lausekkeen arvo Epätosi

106 Loogiset operaattorit Totuusarvoinen lauseke voikin sisältää loogisia operaattoreita vertailujen yhdistämiseen Pythonissa on käytössä mm. loogiset operaattorit and, or ja not

107 Loogiset operaattorit lauseke1 lauseke2 lauseke1 and lauseke2 lauseke1 or lauseke2 False False False False True False True False True True True False False True False True True True True False not lauseke1

108 Totuusarvoiset lausekkeet - esimerkkejä a < 0 and b < 0 Lausekkeen arvo on tosi, mikäli muuttujien a ja b arvo on pienempi kuin 0. Mikäli edes toisen arvo on nolla tai sitä suurempi, lausekkeen arvo on epätosi.

109 Totuusarvoiset lausekkeet - esimerkkejä a < 0 or b < 0 Milloin lausekkeen arvo on tosi?

110 Totuusarvoiset lausekkeet - esimerkkejä a < 0 or b < 0 Milloin lausekkeen arvo on tosi? Lausekkeen arvo on tosi, mikäli muuttujan a tai b arvo on pienempi kuin 0. Mikäli molempien arvo on nolla tai sitä suurempi, lausekkeen arvo on epätosi.

111 Totuusarvoiset lausekkeet - esimerkkejä (a < 0 and b > 0) or a < b Mikä on lausekkeen arvo, kun a = -1, b =0?

112 Totuusarvoiset lausekkeet - esimerkkejä (a < 0 and b > 0) or a < b Mikä on lausekkeen arvo, kun a = -1, b =0? Tosi, voidaan tarkistaa sieventämällä: (-1 < 0 and 0 > 0) or -1 < 0 (True and False) or True False or True True

113 Valinta- eli ehtolause

114 Ohjausrakenteet Peräkkäisyys on perusohjausrakenne Algoritmin on kuitenkin kyettävä toimimaan erilaisissa tilanteissa -> pelkkä peräkkäisyys ei riitä Tarvitaan siis ohjausrakenteita eli kontrollirakenteita: Valinta (branching) Toisto (repetition) Ohjausrakenteet kuvaavat järjestyksen, jossa algoritmin toimenpiteet suoritetaan Algoritmi koostetaan ohjausrakenteita yhdistelemällä Peräkkäisyys, valinta ja toisto riittävät minkä tahansa algoritmin esittämiseen

115 Valinta- eli ehtolause Saman ongelman ratkaisemiseksi eri tilanteissa algoritmin toimittava eri tavoin Algoritmin varauduttava vaihtoehtoisiin toimintoihin Algoritmin on siis tehtävä valinta eri toimintojen välillä Valinta ei saa olla satunnainen vaan sen tulee perustua yksiselitteiseen valintaehtoon

116 Valinta- eli ehtolause if on yksinkertaisin valinnan muoto jonkin toiminnon tekemiseen tai sen tekemättä jättämiseen. if ehto: toiminto

117 Valinta- eli ehtolause if ehto: toiminto ehto on totuusarvoinen lauseke (eli arvo on joko tosi tai epätosi) Ehto määrää tilanteen jossa toiminto suoritetaan Jos ehto on tosi, toiminto suoritetaan muuten ei

118 Valinta- eli ehtolause if ehto: toiminto toiminto voi olla yksittäinen lause tai joukko lauseita Se voi siis koostua useasta toiminnosta Voi siis sisältää asetuslauseita, valintalauseita, toistolauseita, jne.

119 Ehtolause - esimerkki if a < b + 2: a = b Mikäli a:n arvo on pienempi kuin b:n arvo + 2, suoritetaan toiminto. Tässä toiminto asettaa a:n arvoksi b:n arvon.

120 Sisennys Pythonissa sisennysten on oltava oikein! Sisennys määrittää mihin lohkoon lause kuuluu Saman lohkon lauseet sisennettävä samalle tasolle Esimerkki: vasemmanpuoleinen koodipätkä kasvattaa a:n arvoa aina, mutta oikeanpuolimmainen vain jos a < b if a < b: a = b a = a + 1 if a < b a = b a = a + 1

121 Sisennys Pythonissa Mieluiten joko välilyönneillä tai tabulaattoreilla sisennykset, ei näiden yhdistelmällä (Python 2:ssa yhdistely mahdollista, Python3:ssa kielletty) Vain kaksoispistettä seuraavan rivi saa ja täytyy olla sisennetty enemmän kuin edellinen rivi Virheellinen sisennys on syntaksivirhe: IndentationError Oikea sisennys a = 3 b = 4 c = a * 2 + b Virheellinen sisennys a = 3 b = 4 c = a*2 + b

122 if-else-lause if-else-lause on yleisempi valinta, jossa valitaan kahden vaihtoehtoisen toiminnon välillä: if ehto: else: toiminto1 toiminto2

123 if-else-lause if ehto: toiminto1 else: toiminto2 Mikäli ehto on tosi, suoritetaan toiminto1. Muussa tapauksessa suoritetaan toiminto2. Vain toinen toiminnoista suoritetaan

124 if-else-esimerkki if a > 0 and b > 0: print Molemmat nollaa suurempia else: print Molemmat ei nollaa suurempia

125 if-else esimerkki if x > y: max = x else: max = y Mikäli muuttujan x arvo on suurempi kuin muuttujan y, sijoitetaan muuttujaan max x:n arvo. Muussa tapauksessa (else-haarassa) sijoitetaan max:iin y:n arvo.

126 Sisäkkäiset ehtolauseet Monimutkaiset loogiset lausekkeet voivat tehdä ymmärtämisestä hankalaa Algoritmi voidaan kirjoittaa yksinkertaisimmilla loogisilla lausekkeilla käyttäen sisäkkäisiä ehtolauseita

127 Sisäkkäiset ehtolauseet - esimerkki if a > b and a > c: print "a on suurin Tämä voidaan kirjoittaa sisäkkäisiä ehtolauseita käyttäen: if a > b: if a > c: print "a on suurin" Huomaa lauseiden sisennys!

128 Kolme tai useampi vaihtoehtoa Useamman kuin kahden valinnan rakenne useissa kielissä ainakin kahdella tavalla Joko käyttämällä sisäkkäisiä if-lauseita (Tapa 1) Tai käyttämällä avainsanaa elif (Tapa 2) if ehto1: toiminto1 else: if ehto2: toiminto2 else: if ehto3: toiminto3 else: toiminto4 if ehto1: toiminto1 elif ehto2: toiminto2 elif ehto3: toiminto3 else: toiminto4

129 Valintalause ohjelmointikielissä Valintalause on käytettävissä kaikissa ohjelmointikielissä Syntaksi vaihtelee Monissa muissa kielissä sisennyksellä ei ole väliä, vaan lohko osoitetaan muilla tavoilla Sisennysten käyttö on kuitenkin useimmissä kielissä hyvän tavan mukaista Java Python LOLCODE if (ehto) { toiminto1; } else { toiminto2; } if ehto: toiminto1 else: toiminto2 ehto, O RLY? YA RLY toiminto1 NO WAI toiminto2 OIC

130 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 :00, ennen tutoriaalia Tutoriaali 1 sulkeutuu :00 Luento 2: kotitehtävät sulkeutuvat :00 172

131 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! 173

132 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

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

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

135 Toisto ja modulaarisuus

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

137 Toisto

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

139 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

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

141 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

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

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

144 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

145 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

146 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

147 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 toisto, i = 2: sijoitetaan summaan arvo 1 + 2

148 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 toisto, i = 2: sijoitetaan summaan arvo toisto, i = 3: sijoitetaan summaan arvo 3 + 3

149 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 toisto, i = 2: sijoitetaan summaan arvo toisto, i = 3: sijoitetaan summaan arvo toisto, i = 4: sijoitetaan summaan arvo 6 + 4

150 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 toisto, i = 2: sijoitetaan summaan arvo toisto, i = 3: sijoitetaan summaan arvo toisto, i = 4: sijoitetaan summaan arvo toisto, i = 5: sijoitetaan summaan arvo Silmukka suoritetaan 5 kertaa i:n arvoilla 1, 2, 3, 4 ja 5

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

152 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

153 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 = * 10 = 20 Viime esimerkissä: for i in range(1,11): print 2 *, i, =, (i * 2)

154 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

155 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 (eri riveille) Sisemmän silmukan laskuri (eli j yllä) kannattaa nimetä eri tavalla kuin ulomman

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

157 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

158 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

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

160 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

161 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

162 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

163 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

164 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

165 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

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

167 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

168 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

169 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

170 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

171 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

172 Modulaarisuus

173 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

174 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

175 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

176 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

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

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

179 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() 236

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

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

182 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() 239

183 248

184 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 on vähentää sähköpostin kautta näiden käsittelyä, joka on todella aikaavievää 249

185 Palautteista Miksei slideja saa etukäteen? Koska niistä saadaan mukava määrä virheitä pois luennon aikana ;> Tarvitseeko muuttujat definiitissä toistossa alustaa? Ei. Tai ainakaan ohjelmoijan ei tarvitse, muuttujan hallinta hoidetaan automaattisesti Voiko muuttujan nimetä muuten kuin i:ksi? Voi: for sateenvarjo in range(100, 5252): 250

186 Palautteista Miksi definiittejä ja indefiniittejä lauseita opetetaan, jos indefiniitillä pärjää? Luettavuus paranee, kun käytetään tilanteeseen sopivia lauseita i = 1 while i < n: toimintoja i = i + 1 for i in range(n): toimintoja

187 Palautteita Miten oikea toistolause valitaan? Ei ole yhtä oikeaa toistolausetta Jos se toimii, valinta ei ollut väärä Mutta jotkin toistot näyttävät elegantimmilta (subjektiivista) Älkää stressatko, sopivat lauseet alkavat tulla luonnostaan kokemuksen kautta i = 1 while i < n: toimintoja i = i + 1 for i in range(n): toimintoja

188 Palautteista Älkää antako luentopalautetta, jos ette ole paikalla Vitosen voi saada ilmankin Katsokaa, että annatte tutoriaalipalautteen tutoriaaleista, ettekä luennoista 253

189 Päivän sisältö Lisää moduuleista Funktiot Proseduurit

190 Pikakertaus moduulin määrittelystä ja kutsusta Yksinkertainen moduulin määrittely: def moduulinnimi(): toimintoja Yksinkertainen moduulin kutsu: moduulinnimi()

191 Proseduurit ja funktiot

192 Moduulit ja parametrit

193 Moduulin parametrit Viime tutoriaalin moduulit olivat hyvin tarkkaan rajattuja Esim. käänny, liiku neljä askelta Parametrisoinnilla voidaan huomattavasti parantaa uudelleenkäytettävyyttä Esim. samankaltaisista operaatioista koostuvat toimenpiteet: Käänny oikealle, liiku 3 askelta eteenpäin, käänny vasemmalle, 5 askelta eteen Käänny oikealle, liiku 5 askelta eteenpäin, käänny vasemmalle, 2 askelta eteen Käänny oikealle, liiku 1024 askelta eteenpäin, käänny vasemmalle, askelta eteen Voitaisiin abstrahoida moduuliin: Käänny oikealle, liiku N askelta eteenpäin, käänny vasemmalle, liiku M askelta eteenpäin

194 Moduulin parametrit Käänny oikealle, liiku N askelta eteenpäin, käänny vasemmalle, liiku M askelta eteenpäin def kaannyjaliiku(n, m): turnright() for i in range(n): moveforward() turnleft() for i in range(m) moveforward() kaannyjaliiku(3, 5) kaannyjaliiku(5, 2) kaannyjaliiku(1024, 65536)

195 Moduulin parametrit Moduulin määrittelyssä olevia parametreja (edellä n) kutsutaan moduulin muodollisiksi parametreiksi Muodolliset parametrit ovat muuttujia Ne osoittavat abstraktin toiminnan osaa, joka voi olla kutsukerroilla erilainen Moduulin kutsussa nämä osat kiinnitetään tapauskohtaisilla todellisilla parametreilla (edellä esim. 1024, 65536) Prosessori korvaa ensin muodolliset parametrit todellisten parametrien arvoilla Sitten prosessori suorittaa moduulin rungon (lohkon) eli toiminnot Rungon suorittamisen jälkeen palataan sille riville, josta moduulia kutsuttiin Todelliset parametrit sisältävät moduulille välitettävän tiedon

196 Proseduurit ja funktiot Matemaattisesti ajateltuna moduuli on funktio jolla on m syöttöparametria n tulosta

197 Proseduurit ja funktiot Tulosten määrän perusteella moduulit voidaan jakaa kahteen luokkaan tietojenkäsittelytieteen kannalta: Proseduaalinen moduuli (eli proseduuri) Moduulilla ei ole tulosta (n = 0) Funktionaalinen moduuli (eli funktio) Moduulilla on yksi tulos (n = 1) Merkitys perustuu parametrien perusteella laskettuun arvoon

198 Moduulin kutsu parametreilla Kaikkien moduulien kutsu on muotoa: moduulinnimi(tp1, tp2,..., tpn) Kutsussa olevat todelliset parametrit tp1, tp2,..., tpn ovat lausekkeita, joille voidaan laskea arvot ennen moduulin suoritusta

199 Moduulin kutsu parametreilla Kaikkien moduulien kutsu on muotoa: moduulinnimi(tp1, tp2,..., tpn) Parametrien lukumäärän ja järjestyksen oltava sama kuin moduulin määrittelyssä Kutsussa olevia todellisia parametreja kutsutaan myös argumenteiksi

200 Moduulin kutsu parametreilla Kaikkien moduulien kutsu on muotoa: moduulinnimi(tp1, tp2,..., tpn) Esimerkkejä kutsusta: asetasalasana( aoeuhtns ) tulostaviikonpaiva(22,9,2015)

201 Proseduurit

202 Proseduraalisen moduulin määrittely Proseduraalisen moduulin yleinen muoto on: def moduulinnimi(mp1, mp2,, mpn) moduulin runko mp1, mp2,..., mpn ovat moduulin muodolliset parametrit, jotka ovat muuttujia Moduulin nimen voi valita itse nimen tulee kuvata moduulin tehtävä

203 Proseduraalisen moduulin määrittely Muodollisilla parametreilla ei ole arvoa ennen moduulin kutsua todellisilla parametreilla (joilla pitää olla arvo) Määrittelyä ei voi suorittaa sellaisenaan Moduuli suoritetaan vasta kutsuttaessa Todelliset parametrit välittyvät muodollisten parametrien arvoiksi summaa(5, 3) def summaa(n, m): print (n+m)

204 Ks. Esim 1 Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" kolmellajaollinen(6)

205 Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" Moduulin määrittely, vielä ei suoriteta mitään kolmellajaollinen(6)

206 Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" kolmellajaollinen(6) Kutsu, siirrytään suorittamaan moduulia!

207 Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" Aloitetaan moduulin suoritus, todellinen parametrin luku arvo on 6. kolmellajaollinen(6)

208 Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" Suoritetaan moduulia. Nyt luku siis 6, joten ehto on tosi. kolmellajaollinen(6)

209 Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" Suoritetaan moduulia. Tulostetaan Kolmella jaollinen. If-rakenne päättyy kolmellajaollinen(6)

210 Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" kolmellajaollinen(6) Moduulin toiminnot suoritettu, palataan kutsun tehneelle riville. Kutsulla kolmellajaollinen(6) moduuli tulostaa siis Kolmella jaollinen

211 Moduulin runko Runko koostuu lauseista, joissa viitataan muodollisiin parametreihin Muodollisilla parametreilla on moduulia suoritettaessa todellisten parametrien arvot Rungon sisäiset (paikalliset) muuttujat ja niiden arvot eivät (yleensä) näy moduulin rungon ulkopuolelle Eri moduuleissa voidaan siis käyttää saman nimisiä muuttujia

212 Muuttujien näkyvyys - Esimerkki def asetaluku(): luku = 3 asetaluku() print luku Virhe, muuttujaa luku ei ole määritelty moduulin ulkopuolella!

213 Moduulin runko - miniesimerkki def tulostasumma(a, b): summa = a + b print summa Kutsuttaessa todellisten parametrien arvot moduulin sisällä: a = 4 b = 8 a = 4 c = 8 tulostasumma(a, c)

214 Parametrien välityksestä Pythonissa muuttujat ovat nimiä, joihin on liitetty jokin arvo Arvo sijaitsee jossain muistissa, eikä usein voi muuttua (tyyppikohtaisesti) Esimerkkejä tällaisista tyypeistä: Kokonaisluvut, liukuluvut, merkkijonot... Eli kaikki käsitellyt Sen sijaan muuttujat voivat vaihtaa osoitettavaa arvoa, Esim: x=3 x=2 Tästä johtuen jos annamme parametrina moduuliin arvon, emme voi vaikuttaa moduulin ulkopuolella olevan muuttujan arvoon Myöhemmin näemme esimerkkejä tyypeistä, jotka voivat muuttua itsessään

215 Moduulin runko esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b a = 4 b = 8 eimuutaarvoja(a, b) print a, b Kutsutaan moduulia

216 Moduulin runko - esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b Aloitetaan moduulin suoritus. Todelliset parametrit a=4, b=8. a = 4 b = 8 eimuutaarvoja(a, b) print a, b

217 Moduulin runko - esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b Muutetaan paikallisen muuttujan a arvoksi 5. Moduulin ulkopuolisen a:n arvo ei muutu a = 4 b = 8 eimuutaarvoja(a, b) print a, b

218 Moduulin runko - esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b Muutetaan paikallisen muuttujan b arvoksi 16. Moduulin ulkopuolisen b:n arvo ei muutu a = 4 b = 8 eimuutaarvoja(a, b) print a, b

219 Moduulin runko - esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b Tulostetaan a = 4 b = 8 eimuutaarvoja(a, b) print a, b

220 Moduulin runko - esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b Suoritus palaa kutsuneelle riville. a = 4 b = 8 eimuutaarvoja(a, b) print a, b

221 Moduulin runko - esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b a = 4 b = 8 eimuutaarvoja(a, b) print a, b Tulostetaan 4 8. Moduulin suoritus ei siis muuttanut näiden muuttujien arvoja.

222 Moduulin alkuehto Kaikkia moduuleja ei ole suunniteltu toimimaan kaikilla arvoilla Moduulille olisi hyvä kirjoittaa alkuehto kommenttina ennen määrittelyä Alkuehto kertoo ne olosuhteet, joissa moduuli toimii oikein Yleensä tämä tarkoittaa hyväksyttyjä parametrien arvoja Ei yleensä vaikuta moduulin suoritukseen, vaan on ohje moduulin käyttäjälle Moduuli suoritetaan myös virheellisillä parametrien arvoilla Esim. # alkuehto: n >= 0 def kertoma(n)

223 Funktiot

224 Fuktionaalisen moduulin määrittely Pythonissa funktiot määritellään samoin kuin proseduurit def moduulinnimi(mp1, mp2,,mpn): moduulin runko Funktion ainut ero on, että se palauttaa arvon moduulin rungossa

225 Funktion palautusarvo Funktion rungossa on oltava yksi (tai useampia) return-lauseita jolla määritellään moduulin palauttama arvo Return-lauseen yleinen muoto on: return-lause: return lauseke Päättää moduulin suorituksen Antaa moduulin kutsulle lausekkeen määräämän arvon ja Palauttaa kontrollin kutsukohtaan

226 Funktion palautusarvo - esimerkki def summa(a, b): return a + b Moduulin määrittely, ei vielä suoriteta. print summa(2, 5)

227 Funktion palautusarvo - esimerkki def summa(a, b): return a + b print summa(2, 5) Funktiota kutsutaan parametreilla 2 ja 5.

228 Funktion palautusarvo - esimerkki def summa(a, b): return a + b Aloitetaan funktion suoritus, todelliset parametrit 2 ja 5. print summa(2, 5)

229 Funktion palautusarvo - esimerkki def summa(a, b): return a + b Lasketaan a + b (eli 7) ja palautetaan arvo 7. Moduulin suoritus päättyy. print summa(2, 5)

230 Funktion palautusarvo - esimerkki def summa(a, b): return a + b print summa(2, 5) Suoritus palaa kutsun riville, joka tulostaa funktiokutsun palautusarvon 7.

231 Funktion palautusarvo - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: return True else: return False Funktio palauttaa True, mikäli parametri luku on kolmella jaollinen Muuten funktio palauttaa arvon False

232 Funktion palautusarvo Muissa ohjelmointikielissä kirjoitetaan usein palautusarvon tyyppi moduulin määrittelyyn Esim. Javassa int jos moduuli palauttaa kokonaisluvun Pythonissa ei tarvitse määrittelyssä erottaa proseduuria ja funktiota Itse asiassa Pythonissa proseduurit ovat myös funktioita, ja proseduureja ei ole Ero on muissa ohjelmointikielissä tärkeämpi, ja siksi osana kurssia Pythonissa proseduuri, jonka suoritus päättyy ilman return-lausetta, palauttaa arvon None automaattisesti Monissa muissa kielissä funktiosta ei voi poistua ilman return-lausetta

233 Funktion palautusarvon käyttö - esimerkkejä Funktion palautusarvo voidaan sijoittaa muuttujaan jaollinen = kolmellajaollinen(n) Funktion totuusarvoista palautusarvoa voidaan käyttää lausekkeessa if kolmellajaollinen(n): print Kolmella jaollinen Funktiokutsu on siis lauseke!

234 Funktion palautusarvon käyttö Funktion palautusarvoa voidaan käyttää moduulikutsuissa print max(a, max(b, c)) Tässä ensin suoritettaisiin kutsu max(b, c) Sitten tämä arvo on a:n lisäksi toinen todellinen parametri Lopuksi tulostetaan toisen kutsun palautusarvo

235 Ks. Esim 2 Tulostaminen ja palauttaminen ovat eri asioita! Yleinen virhe: tulostaminen ja palauttaminen sekoitetaan print-käsky tulostaa jotain ruudulle return-lause palauttaa arvon funktion kutsujalle def tulostakolme(): print 3 def palautakolme(): return 3 a = palautakolme() a = tulostakolme() a:n arvo on tämän rivin jälkeen 3 Ja tämän rivin jälkeen None, mutta ruudulle tulostettiin 3 301

236 Milloin sulkeita () tarvitaan? Sulkeita tarvitaan funktion/proseduurin parametrien ympärillä määriteltäessä: def range(a, b, c): Ja kun funktiota kutsutaan: n = onkoparillinen(24) for i in range(a, b, c): Huomaa, että print ja return eivät ole funktioita, siksi niihin ei tarvita sulkeita, mutta range on 302

237 Modulaarisuuden edut Moduulit selkeyttävät algoritmeja ja helpottavat niiden ymmärtämistä Muiden (ja alkuperäisen kirjoittajan) helpompi muuttaa myöhemmin Helpottaa virheiden etsimistä ja oikeellisuuden toteamista Käytettäessä moduulia tarvitsee ainoastaan tietää mitä se tekee, ei miten se tehtävänsä täyttää Kerran hyvin suunniteltu ja toteutettu moduuli on käytettävissä muuallakin Lähes kaikki ohjelmointikielet sisältävät laajan kirjastot moduuleja

238 304

239 Tieto- ja tallennusrakenteet

240 Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla) (Binääripuu)

241 Tiedosta tietorakenteisiin Tähän asti kurssilla keskitytty ohjausrakenteisiin Käsitelty tieto Ollut yksinkertaista Ei sisäistä rakennetta (kokonaisluku, merkki, jne.) Algoritmeissa yleensä Tavoitteena ratkaista reaalimaailman ongelmia Tieto ei ole irrallista, vaan joukko toisiinsa liittyvää tietoa Tiedot halutaan koota yhteen ja esittää ne tietorakenteena (data structure)

242 Tyypit ohjelmointikielissä Ohjelmointikielet yleensä tyypitettyjä Jokaisella ohjelman tietoalkiolla on tyyppi Tyyppi koostuu Kaikista mahdollisista arvoista Operaatioista, joita tyypin edustajiin (alkioihin) voidaan kohdistaa Ohjelmointikielissä valmiina Tyypit yksinkertaiselle tiedolle Esim. kokonaisluvut, desimaaliluvut, totuusarvot, jne. Välineet tietorakenteiden konstruoimiseen Pythonissa muuttujan tyyppiä ei tarvitse ilmoittaa Määräytyy siitä, minkä tyyppinen arvo muuttujaan on viimeksi sijoitettu

243 Tyypin määrittely Esimerkiksi kokonaislukutyyppi määritelty, kun Määritellään pienin ja suurin mahdollinen arvo Määritellään mitä operaatioita voidaan kohdistaa (+, -, *, /, %) ja miten ne toimivat Perustyypit sisäänrakennettu Omia tyyppejä voidaan kuitenkin tehdä Rakennettaessa omia tietorakenteita, operaatiot ja niiden toiminta implementoitava itse

244 Tallennusrakenne ja abstrakti tietotyyppi Erotellaan tietorakenteen abstrakti malli ja sen tallennusrakenteet Tallennusrakenne (storage structure) kertoo miten tietorakenne on toteutettu ja tallennettu tietokoneen muistiin Tietorakenteen abstrakti malli eli abstrakti tietotyyppi (abstract data type, ADT) taas kuvaa Tietorakenteeseen kohdistettavat operaatiot Operaatioiden toiminnan Riippumattomia ohjelmointikielestä

245 Abstrakti tietotyyppi Abstrakti tässä tarkoittaa että Tarkastellaan mallin mukaisten alkioiden oleellisia piirteitä Malli on riippumaton ohjelmointikielestä Alkiot kuvataan niiden käytöksen avulla (operaatiot ja niiden vaikutus) Ei siis sen mukaan miltä ne näyttävät (käytetyt tallennusrakenteet) Tietoa mallinnetaan siis ohjelmointikielistä ja tallennusrakenteista riippumattomilla abstrakteilla tietotyypeillä

246 Tallennusrakenteet ja abstraktit tietotyypit Tallennusrakenteet Taulukko Linkitetyt rakenteet Abstraktit tietotyypit Lista Jono Pino Puu Graafi (Listat eivät ole kattavia)

247 Tallennusrakenteet - Taulukko

248 Tallennusrakenteet - Taulukko Taulukko (array) on staattinen, kiinteän kokoinen rakenne Koko voidaan määrätä ohjelman suorituksen aikana Kokoa ei voi myöhemmin muuttaa Taulukon sisältöä (eli komponenttien arvoja) voidaan muuttaa Taulukko koostuu useista samantyyppisistä tietoalkioista Alkiot identifioidaan sijainnin mukaan indeksoimalla Indeksointi järjestysnumeroilla 0, 1, 2 (useissa ohjelmointikielissä) Taulukon alkiot tietokoneen muistissa peräkkäin Käsittely tehokasta ja helppoa Hyvä tallennusrakenne, jos alkioiden lukumäärä kiinteä

249 Tallennusrakenne - Taulukko Vektori (vector) on yksiulotteinen taulukko Kokoa k olevan taulukon V yksittäisiin alkioihin viitataan notaatiolla V[i], missä 0 i < k i:tä kutsutaan tässä indeksiksi

250 Ensimmäinen indeksi Elementti (indeksissä 8) Indeksit Vektorin (taulukon) koko on 10 Kuva: docs.oracle.com 326

251 Tallennusrakenne - Taulukko Matriisi (matrix) on kaksiulotteinen taulukko Indeksoidaan kahdella indeksillä: rivi ja sarake Kokoa nxm (n riviä, m saraketta) olevan matriisin M yksittäisiin alkioihin viitataan notaatiolla M[i][j], missä 0 i < n ja 0 j < m.

252 Tallennusrakenne - Taulukko j Matriisin indeksointi kun matriisin alkioon viitataan M[i][j] i

253 Tallennusrakenne - Taulukko Myös useampiulotteiset taulukot mahdollisia Taulukon sisältämää tietoa voidaan käyttää kuten samantyyppisiä muuttujia Taulukolle sallitut operaatiot Tietoalkion tallennus indeksin osoittamaan kohtaan V[2] = 7 M[3][a] = b + 3 Yksittäisen tietoalkion käyttö y = V[4] z = M[1][1]

254 Tallennusrakenne - Taulukko Taulukon alustus ja arvojen käyttö: taulu = [23, 45] x = taulu[0] y = taulu[1] summa = x + y Alustetaan taulukko

255 Tallennusrakenne - Taulukko Taulukon alustus ja arvojen käyttö: taulu[0] taulu = [23, 45] x = taulu[0] y = taulu[1] summa = x + y Alustetaan muuttuja x taulukon indeksin 0 arvolla, eli arvolla

256 Tallennusrakenne - Taulukko Taulukon alustus ja arvojen käyttö: taulu[1] taulu = [23, 45] x = taulu[0] y = taulu[1] summa = x + y Alustetaan muuttuja y taulukon indeksin 1 arvolla, eli arvolla

257 Tallennusrakenne - Taulukko Taulukon alustus ja arvojen käyttö: taulu = [23, 45] x = taulu[0] y = taulu[1] summa = x + y Lasketaan muuttujaan summa muuttujien x ja y summa

258 Tallennusrakenne - Taulukko Taulukon alustus ja arvojen käyttö: taulu = [23, 45] x = taulu[0] y = taulu[1] summa = x + y Lasketaan muuttujaan summa muuttujien x ja y summa Sama voitaisiin laskea suoraan: summa = taulu[0] + taulu[1]

259 Tallennusrakenne - Taulukko Taulukon pituuden saa Pythonissa selville funktiolla len, joka ottaa parametrina taulukon Esim: len(taulu) Palauttaa edellisessä esimerkissä 2 Esimerkki: tulostetaan kaikki taulukon T alkiot T = [2, 9, -1, 4] for i in range(len(t)): print Indeksin, i, alkion arvo on + T[i]

260 Tallennusrakenne - Taulukko T = [2, 9, -1, 4] for i in range(len(t)): print Indeksin, i, alkion arvo on, T[i] Alustetaan muuttujaan T taulukko

261 Tallennusrakenne - Taulukko T = [2, 9, -1, 4] for i in range(len(t)): print Indeksin, i, alkion arvo on, T[i] Käydään silmukassa läpi i:n arvot 0,1,2,3 Taulukon pituus len(t) on

262 Tallennusrakenne - Taulukko T[0] T = [2, 9, -1, 4] for i in range(len(t)): print Indeksin, i, alkion arvo on, T[i] Ohjelman tulostus: Indeksin 0 alkion arvo on 2 i:n arvolla 0 tulostetaan T[i] eli T[0]:n arvo

263 Tallennusrakenne - Taulukko T[1] T = [2, 9, -1, 4] for i in range(len(t)): print Indeksin, i, alkion arvo on, T[i] Ohjelman tulostus: Indeksin 0 alkion arvo on 2 Indeksin 1 alkion arvo on 9 i:n arvolla 1 tulostetaan T[i] eli T[1]:n arvo

264 Tallennusrakenne - Taulukko T[2] T = [2, 9, -1, 4] for i in range(len(t)): print Indeksin, i, alkion arvo on, T[i] Ohjelman tulostus: Indeksin 0 alkion arvo on 2 Indeksin 1 alkion arvo on 9 Indeksin 2 alkion arvo on -1 i:n arvolla 2 tulostetaan T[i] eli T[2]:n arvo

265 Tallennusrakenne - Taulukko T[3] T = [2, 9, -1, 4] for i in range(len(t)): print Indeksin, i, alkion arvo on, T[i] Ohjelman tulostus: Indeksin 0 alkion arvo on 2 Indeksin 1 alkion arvo on 9 Indeksin 2 alkion arvo on -1 Indeksin 3 alkion arvo on 4 i:n arvolla 3 tulostetaan T[i] eli T[3]:n arvo

266 Tallennusrakenteet Linkitetty rakenne

267 Tallennusrakenteet Linkitetty rakenne Linkitetyssä rakenteessa jokainen alkio sisältää Varsinaisen datan (yhden tai useampia datakenttiä) Tiedon seuraajastaan, eli osoittimen rakenteen seuraavaan alkioon Tai useampia osoittimia rakenteen muihin alkioihin Koko rakenne samaistetaan usein rakenteen ensimmäiseen alkioon eli kuvan alkioon L Linkitetty yhteen suuntaan ketjutettu rakenne

268 Tallennusrakenteet Linkitetty rakenne Jokainen linkitetty rakenteen alkio tarvitsee kaksi muuttujaa Dataa varten Viittauksen seuraavaan rakenteen alkioon Tallennusrakenne tälle ei ole kurssin kannalta tärkeä, mutta voidaan tehdä esim. luokalla, taulukolla, tai tässä esimerkissä sanakirjalla(dictionary) Esimerkiksi: linkitettyalkio = { data : solmundataa, seuraava : None} # Seuraava voidaan alustaa myöhemmin toiseksi alkioksi. # Syntaksia ei tarvitse tällä kurssilla osata Linkitetty yhteen suuntaan ketjutettu rakenne

269 Tallennusrakenteet Linkitetty rakenne Linkitetystä rakenteesta useita muunnelmia tarpeen mukaan Kahteen suuntaan ketjutettu rakenne:

270 Tallennusrakenteet Linkitetty rakenne Useita seuraajia salliva rakenne Jokaisella alkiolla voi olla useita seuraajia Rengasrakenne

271 Abstraktit tietotyypit Lista

272 Abstraktit tietotyypit Lista Abstrakti tietotyyppi lista on rakenne Koostuu alkioista, jotka on järjestetty peräkkäin Jokaisella alkiolla (paitsi viimeisellä) on yksikäsitteinen seuraaja Jokaisella alkiolla (paitsi ensimmäisellä) on yksikäsitteinen edeltäjä

273 Abstraktit tietotyypit Lista Listan operaatioita esimerkiksi: Alkion lisäys ja poisto mielivaltaiseen kohtaan listassa Ensimmäisen alkion ja loppuosan palauttavat operaatiot Lista hyvä rakenne kun tietoalkioita käsitellään peräkkäin

274 Abstraktit tietotyypit Lista>Jono Listan operaatioita rajoittamalla saadaan tärkeitä tietorakenteita Jono (queue): Määritelty vain operaatiot Alkion lisääminen alkuun Alkion poistaminen lopusta => poistetaan aina samassa järjestyksessä kuin lisättiin Ns. First-In-First-Out periaate (FifO)

275 Abstraktit tietotyypit Lista>Pino Listan operaatioita rajoittamalla saadaan tärkeitä tietorakenteita Pino (stack): Määritelty vain operaatiot Alkion lisäämiseksi listan lopusta Alkion poistaminen listan lopusta Pinosta poistetaan aina viimeksi lisätty alkio (esim. lautaspino) Ns. Last-In-First-Out periaate (LifO)

276 Abstraktit tietotyypit Listan toteutus Lista voidaan toteuttaa käyttäen tallennusrakenteina vektoria tai dynaamisia linkitettyjä rakenteita Vektorin käyttöä rajoittaa sen staattisuus Tosin se mahdollistaa helpon viittauksen järjestysnumeron mukaan Jos lista on luonteeltaan vakiokokoinen, kannattaa käyttää vektoria Jos lista aidosti dynaaminen, kannattaa käyttää dynaamisia linkitettyjä rakenteita

277 Abstraktit tietotyypit Listan toteutus vektorilla Katsotaan miten vektorilla toteutettuun listaan lisätään alkioita Oletetaan että lista on lisäyshetkellä alla esitetyn sisältöinen Lisätään alkio 42 neljänneksi (indeksi 3) alkioksi alla olevaan vektoriin (joka siis on listan tallennusrakenne) Suoritamme siis listan operaation insert(42, 3)

278 Abstraktit tietotyypit Listan toteutus vektorilla Katsotaan miten vektorilla toteutettuun listaan lisätään alkioita Lisätään alkio 42 neljänneksi (indeksi 3) alkioksi alla olevaan vektoriin (joka siis on listan tallennusrakenne) Suoritamme siis listan operaation insert(42, 3) Lisäyskohta, jossa on jo alkio

279 Abstraktit tietotyypit Listan toteutus vektorilla Katsotaan miten vektorilla toteutettuun listaan lisätään alkioita Lisätään alkio 42 neljänneksi (indeksi 3) alkioksi alla olevaan vektoriin (joka siis on listan tallennusrakenne) Suoritamme siis listan operaation insert(42, 3)

280 Abstraktit tietotyypit Listan toteutus vektorilla Katsotaan miten vektorilla toteutettuun listaan lisätään alkioita Lisätään alkio 42 neljänneksi (indeksi 3) alkioksi alla olevaan vektoriin (joka siis on listan tallennusrakenne) Suoritamme siis listan operaation insert(42, 3)

281 Abstraktit tietotyypit Listan toteutus vektorilla Katsotaan miten vektorilla toteutettuun listaan lisätään alkioita Lisätään alkio 42 neljänneksi (indeksi 3) alkioksi alla olevaan vektoriin (joka siis on listan tallennusrakenne) Suoritamme siis listan operaation insert(42, 3)

282 Abstraktit tietotyypit Listan toteutus vektorilla Katsotaan miten vektorilla toteutettuun listaan lisätään alkioita Lisätään alkio 42 neljänneksi (indeksi 3) alkioksi alla olevaan vektoriin (joka siis on listan tallennusrakenne) Suoritamme siis listan operaation insert(42, 3) Lisäyskohta vihdoin tyhjä

283 Abstraktit tietotyypit Listan toteutus vektorilla Katsotaan miten vektorilla toteutettuun listaan lisätään alkioita Lisätään alkio 42 neljänneksi (indeksi 3) alkioksi alla olevaan vektoriin (joka siis on listan tallennusrakenne) Suoritamme siis listan operaation insert(42, 3) Taulukon viimeinen alkio indeksissä 7 ei kuulu listaan Lisätään alkio

284 Taulukot ja listat Pythonissa 362

285 Taulukoista Taulukko on kiinteän kokoinen rakenne, joka sisältää samaa tietotyyppiä olevia alkioita Lista sallii lisäyksen mihin tahansa kohtaan listaa, jolloin listan koko muuttuu Pythonissa ei ole taulukoita! Pythonissa käytetään taulukon sijaan listaa, joka sisältää normaaleiden taulukon operaatioiden lisäksi alkioiden lisäämisen, poistamisen ja monia muita Edelliset esimerkit kuitenkin pätevät Pythoniin Pythonin listat voivat sisältää erityyppisiä alkioita

286 Listan alustus Alustuksessa annettavat arvot saavat olla mitä tahansa lausekkeita lista = [0, 2 + 3, 9 * 7, -2-3] a = 7 lista2= [0, a, 2*a, 3*a]

287 Listan arvojen käyttö ja sijoitus a = 4 t = [9, 8, 7, 6, 5] t[4] = 9 # listassa arvot [9, 8, 7, 6, 9] t[2 + 1] = 8 # listassa arvot [9, 8, 7, 8, 9] t[2] = t[2] - 6 # listassa arvot [9, 8, 1, 8, 9] t[a 1] = 3 # listassa arvot [9, 8, 1, 3, 9] print t[2] # tulostaa 1 print t[t[2]] # tulostaa 8 (indeksi 1) print t[a] # tulostaa 9 (indeksi 4)

288 Parametrien välityksestä funktioille Kuten viime viikolla näimme: Perustyypit, eli kokonaisluvut, desimaaliluvut, merkkijonot ja totuusarvot välitetään ikään kuin kopioimalla ne funktiolle Tämä johtuu siitä, että nämä perustyypit ovat muuttumattomia (immutable), eli niiden arvo ei voi muuttua Voimme kuitenkin muodostaa niiden arvosta uuden arvon, ja sijoittaa sen muuttujaan Listat sen sijaan ovat muuttuvia (mutable) Listoja ei kopioida, funktio saa viittauksen todellisen parametrin listaan Funktio siis voi muuttaa samaa listaa kuin kutsuja käsittelee! Tämä ei ole kattava selostus välitysmekanismeista Pythonissa, mutta kurssin kannalta riittävä AOP/OOP-kursseilla melkein vastaavaa järjestelmää käsitellään Javassa

289 Parametrien välityksestä funktioille Esimerkki: def muutalistaa(plista): print "saatiin", plista # tulostaa [1, kaksi, 3] plista[2] = "nelja print "muutettiin:", plista # tulostaa [1, kaksi, nelja ] lista = [1, "kaksi", 3] print ennen:, lista # tulostaa [1, kaksi, 3] muutalistaa(lista) print jalkeen, lista # tulostaa [1, kaksi, nelja ]

290 Matriisi Useampiulotteisia listoja voidaan määritellä käyttämällä listan arvoina listoja Esim. 2-ulotteinen lista (eli matriisi): # matriisi jossa on 2 riviä, 4 saraketta m = [[0,1,2,3], [4,5,6,7]]

291 Matriisi Voidaan jakaa usealle riville visualisoinnin helpottamiseksi # matriisi, jossa on 3 riviä, 2 saraketta m2 = [[2*3, 3*3], [3*7, 9-2], [9+1, 4]]

292 Matriisi # matriisi jossa on 2 riviä, 4 saraketta m = [[0, 1, 2, 3], [4, 5, 6, 7]] # matriisi, jossa on 3 riviä, 2 saraketta m2 = [[2*3, 3*3], [3*7, 9-2], [9+1, 4]] m[1][1] # 5 m2[0][0] # 6 m2[m[0][2]][1] # 4

293 Listan läpikäynti: Tapa 1 Lista voidaan käydä läpi kahdella tavalla, Yksinkertaisesti kun silmukassa ei tarvitse tietää listan indeksejä lista = [4, 6, 2, -4] for luku in lista: print luku Tulostaa

294 Listan läpikäynti: Tapa 2 Toinen tapa, kun tarvitaan listan indeksejä: lista = [4, 2, -4] for i in range(len(lista)): print i,,, lista[i] Tulostaa 0, 4 1, 2 2, -4

295 Matriisi # matriisi jossa on 2 riviä, 4 saraketta m = [[0, 1, 2, 3], [4, 5, 6, 7]] m[1][1] # 5 m2[1][2] # 6

296 Matriisin läpikäynti Tarvitaan kaksi sisäkkäistä silmukkaa Esim. m = [[0, 1, 2, 3], [4, 5, 6, 7]] for rivi in m: # käy läpi listan rivit for luku in rivi: # käy läpi rivin arvot print luku

297 Matriisin läpikäynti Jos tarvitaan rivin ja sarakkeen indeksit, käytetään rangea: m = [[0, 1, 2, 3], [4, 5, 6, 7]] for i in range(len(m)): # käy läpi listan rivit for j in range(len(m[i])): # käy läpi yhden rivin print rivi, i, sarake, j, arvo, m[i][j] Sisemmässä silmukassa otetaan aina yhden rivin leveys, joten rivit voivat olla erikokoisia Huomaa, että len(m) palauttaa 2, koska ulommassa listassa on 2 alkiota. Sen sijaan len(m[0]) palauttaa 4, koska sisemmässä listassa on 4 alkiota

298 Merkkijonojen läpikäynti silmukassa Merkkijonoja voi käydä läpi for-silmukassa merkki kerrallaan kuten listoja s = fhqwhgads for i in range(len(s)): print s[i] Tai: s = fhqwhgads for merkki in s: print merkki Molemmat tavat tulostavat allekkain merkit yksitellen jonosta fhqwhgads. Erona on, että ylemmässä käytetään indeksejä, kun taas alemmassa käydään läpi merkkejä. 377

299 Listan muuttaminen Pythonin lista sisältää monia operaatioita Alkioiden lisäys loppuun: lista.append(arvo) Alkioiden lisäys väliin: lista.insert(indeksi, arvo) Alkioiden poisto: lista.remove(arvo) Huom! Poistaa vain ensimmäisen alkion jonka arvo on parametrina saatu arvo Huom 2! Olemattoman luvun poisto aiheuttaa virheen (ValueError)

300 Palautteita Tutoriaalit olivat vaikeat! Totta, tentti on onneksi helpompi 379

301 Mitä range() tekee? range on funktio, joka palauttaa listan esim. a = range(5,10) Palauttaa listan [5,6,7,8,9] Siis nämä kolme silmukkaa ovat identtiset: for x in range(5,10): print x a = [5,6,7,8,9] for x in a: print x for x in [5,6,7,8,9]: print x 380

302 Tietokoneen matemaattiset perusteet

303 Tänään Tietokoneen matemaattiset perusteet Lukujärjestelmät Tiedon koodaustavat Tentissä ei saa käyttää laskinta. Seuraavat asiat kannattaa opetella sillä silmällä Käytössä on villen alkeellinen laskin

304 Tietokoneen matemaattiset perusteet

305 Algoritmista suoritukseen Tähän asti tarkasteltu itse algoritmeja Algoritmien merkitys perustuu niiden automaattiseen suorittamiseen Tietokone yleissuoritin Pystyy suorittamaan erilaisia algoritmeja Aloitetaan tietokoneen toiminnan tarkastelu

306 Von Neumannin konemalli Lähes kaikki tietokoneet perustuvat 40-luvun John von Neumannin käsitteisiin, ns. von Neumannin konemalliin: Tietokoneessa on Muisti (joukko samankaltaisia muistipaikkoja) Prosessori, jolla käytössä joukko rekistereitä Prosessori voi Ladata tietoa muistista rekistereihin Suorittaa aritmeettisia ja loogisia operaatioita rekistereille Tallentaa rekisterien arvot takaisin muistiin Koneen ohjelma koostuu Käskyjoukosta, jolla operaatioita tehdään Kontrollikäskyistä, joilla määrätään seuraava käsky

307 Bitti Digitaalisen tietokoneen toiminta perustuu kahden olotilan periaatteelle: kone joka tunnistaa kaksi eri olotilaa Useampien tilojen käyttö ei juuri tuo etuja; mutkistaa rakennetta kohtuuttomasti Lähes kaikki tietokoneet käyttävät binäärijärjestelmää toiminnan pohjana Sana bitti (bit) tulee sanoista BInary digit Tarkoittaa kaksijärjestelmän numeroa Pienin informaation yksikkö

308 Tiedon koodaus/dekoodaus Tiedon koodaus (coding): tiedon esittämistä jonkin järjestelmän mukaisina merkkeinä tai symboleina Tieto yleensä esitetty jotenkin ennen koodausta, joten kyse tiedon esitystavan muuttamisesta Alkuperäisen esitystavan palautusta kutsutaan dekoodaukseksi (decoding) Kaksi perustapaa koodaukseen Tiedoittainen koodaus: muunnetaan alkuperäinen merkitys kokonaisuutena uuteen esitysmuotoon Esim. liikennemerkit, henkilötunnus, vakioveikkaus Merkeittäinen koodaus: muunnetaan esitystavan merkit yksitellen uuteen esitysmuotoon Esim. morseaakkoset

309 Esim. sanojen koodaus tiedoittain Tehtävä: koodaa perusmuotoisia suomenkielisiä sanoja Tiedossa lista kaikista suomenkielen sanoista ja järjestysnumeroista Koodaamme sanat niiden järjestysnumerolla listassa Esim. aloittelija => 45 Luku 45 voidaan vaikka lähettää verkon yli ja vastaanottaja dekoodaa sanat samanlaisesta taulukosta 42 aloitteikas 43 aloitteinen 44 aloittelija 45 aloitus 46 aloituskorkeus 47 aloitusmerkki 48 aloituspaikka. 388

310 Esim. sanojen koodaus merkeittäin Koodataan jokainen merkki erikseen Esim: HEI => 8 5 9, JEE => välilyönti 1 A 2 B 3 C 4 D 5 E 6 F 7 G 8 H 9 I 10 J 389

311 Tieto tietokoneessa Tieto tietokoneessa voidaan jakaa: Merkkitietoon Aakkosellinen ja aakkosnumeerinen Tiedon merkitys ei suoraan nähtävissä tiedon esityksestä Koodataan yleensä merkeittäin biteiksi Lukuihin Numeerinen tieto Luvun arvo määräytyy suoraan luvun esityksestä (kun lukujärjestelmä tunnetaan)

312 Aakkosellisen tiedon koodaus Joudutaan siis koodaamaan merkeittäin biteiksi Jokaiselle merkille varataan yksikäsitteinen bittiyhdistelmä Useita järjestelmiä muunnoksen tekemiseen 7- tai 8-bittinen ASCII (American Standard Code for Information Interchange) Pääsi alkuaikoina eräänlaisen standardin asemaan 7-bittisellä ASCII-koodilla esitettävissä 2 7 eli 128 merkkiä Riitti juuri isojen/pienten kirjainten, numeroiden ja välimerkkien koodaukseen Ei riittänyt eri maissa käytettäviin erikoismerkkeihin (ä, ö, å, jne) 8-bittisellä ASCII koodilla 2 8 eli 256 merkin koodaus Riitti myös monien maiden erikoismerkkeihin Yleisesti: n-bittisellä koodisanalla esitettävissä 2 n erilaista koodia

313 7-bittinen ASCII-taulukko

314 Aakkosellisen tiedon koodaus Useita järjestelmiä muunnoksen tekemiseen Unicode Ohjelmistotalojen kehittämä merkistöstandardi Yksilöivä koodiarvo yli erilaiselle kirjoitusmerkille Useimmin käytetty merkistö nykyisin Esimerkkejä merkeistä:

315 Aakkosellisen tiedon koodaus Myös numeerinen, numeromerkeistä koostuva tieto, voidaan esittää merkkikoodina Numero ei aina tarkoita lukua vaan tulkittavissa numerosarjoiksi vailla arvoa. Esim. Osoitteissa Nimissä Puhelinnumeroissa Henkilötunnuksissa Asiakasnumeroissa

316 Lukujärjestelmät

317 Luku ja numero Luku (number) on matemaattinen objekti jolla arvo Numero (digit) on lukujen esittämiseen käytettävä merkki Numerot 0, 1, 2, 3, 4, 5, 6, 7, 8 ja 9 10-järjestelmän luvuissa Numerot 0, 1 2-järjestelmän luvuissa Kun numerot esittävät lukuja, tiedollinen koodaus mahdollista Jos luvuilla lasketaan, lukujen arvojen koodaaminen järkevämpää kuin lukujen numeroiden koodaaminen Tietokoneessa luvut esitetään kaksikantaisen lukujärjestelmän lukuina

318 Lukujärjestelmät Lukujärjestelmä (number system) jonka kantaluku k, sanotaan k- järjestelmäksi (eli k-ariseksi järjestelmäksi) k-järjestelmässä luvun esittämiseen käytettävissä k numerosymbolia d 0, d 1,, d k-1 Yleisesti käytetyissä positionaalisissa järjestelmissä luvun esityksessä olevan numeron merkitys riippuu paitsi numerosymbolista, myös sen sijainnista muihin numeroihin nähden Esim numeron 5 merkitys luvuissa 150 ja 5002

319 Lukujärjestelmät - määritelmä K-järjestelmän esitys a n-1 a n-2 a 1 a 0.a -1 a -2 a -(m-1) a -m tarkoittaa lukua a n-1 k n-1 +a n-2 k n-2 + +a 1 k+a 0 +a -1 k -1 +a -2 k -2 + a -(m-1) k -(m-1) +a -m k -m (missä tahansa järjestelmässä laskutoimitukset suoritetaan, yleensä 10) Kukin a i (i=n-1,,1,0,-1,,-m) on jokin d j (d j =0, 1,,k-1) Jos lukujärjestelmä ei käy selväksi, kantaluku voidaan merkitä luvun esityksen perään (a n-1 a n-2 a 1 a 0.a -1 a -2 a -(m-1) a -m ) k

320 Esimerkki: 10-järjestelmän esitys 5329 kymmenjärjestelmän esityksenä Tarkoittaa lukua: =

321 Esimerkki: 2-järjestelmä 10-järjestelmäksi Muuntaminen muista järjestelmistä 10-järjestelmään tehdään yleensä käyttäen edellistä määritelmää: järjestelmän esityksenä Tarkoittaa lukua: = =22 kymmenlukujärjestelmässä

322 Usein käytettyjä lukujärjestelmiä 2-järjestelmä eli binäärijärjestelmä Kantaluku k = 2 Numerosymbolit: 0, 1 8-järjestelmä eli oktaalijärjestelmä Kantaluku k = 8 Numerosymbolit: 0, 1, 2, 3, 4, 5, 6, 7 10-järjestelmä eli desimaalijärjestelmä Kantaluku k = 10 Numerosymbolit: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 16-järjestelmä eli heksadesimaalijärjestelmä Kantaluku k = 16 Numerosymbolit: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

323 Muunnos 10-järjestelmästä k-järjestelmään Algoritmi, syöte luku a 10-järjestelmässä, tulos luku k-järjestelmässä: 1. Jaa a luvulla k 2. a = kokonaisosa jakolaskusta 3. lisää jakojäännöksen numero tulosluvun etummaiseksi 4. Jos a == 0, lopeta 5. Mene kohtaan 1 402

324 Esimerkki, 10->2 Muunnetaan luku 523 binäärijärjestelmään 523/2 = 261, jakojäännös 1 261/2 = 130, jakojäännös 1 130/2 = 65, jakojäännös 0 65/2 = 32, jakojäännös 1 32/2 = 16, jakojäännös 0 16/2 = 8, jakojäännös 0 8/2 = 4, jakojäännös 0 4/2 = 2, jakojäännös 0 2/2 = 1, jakojäännös 0 1/2 = 0, jakojäännös 1, jakolaskun lopputulos = 0, voidaan lopettaa 403

325 Esimerkki, 10->2 Muunnetaan luku 523 binäärijärjestelmään 523/2 = 261, jakojäännös 1 261/2 = 130, jakojäännös 1 130/2 = 65, jakojäännös 0 65/2 = 32, jakojäännös 1 32/2 = 16, jakojäännös 0 16/2 = 8, jakojäännös 0 8/2 = 4, jakojäännös 0 4/2 = 2, jakojäännös 0 2/2 = 1, jakojäännös 0 1/2 = 0, jakojäännös 1, Tulos: 523= jakolaskun lopputulos = 0, voidaan lopettaa 404

326 Esimerkki, 10->2 Muunnetaan luku 16 binäärijärjestelmään, lyhennetään jakojäännös=j 16/2 = 8 j=0 8/2 = 4 j=0 4/2 = 2 j=0 2/2 = 1 j=0 1/2 = 0 j=1 jakolaskun lopputulos = 0, voidaan lopettaa Tulos: 16=10000 Tämä luku on jo hyvä muistisääntö bittien lukujärjestykselle: jos luku luettaisiin ylhäältä alaspäin, tulos olisi 00001=1 joka on järjetöntä Alhaalta ylöspäin ei etunollia voi tulla: viimeinen vaihe on aina 1/2 405

327 Muunnokset muiden järjestelmien välillä Oletetaan, että haluamme muuntaa x-järjestelmästä y-järjestelmään eikä kumpikaan näistä ole 10-järjestelmä Teoriassa edellä kuvatut algoritmit osaavat tehdä muunnoksen suoraan, jos osaisimme laskea laskutoimituksia x tai y-järjestelmässä Ongelma: (Yleensä) emme osaa luontaisesti laskea x- tai y-järjestelmässä jako tai kertolaskuja (laskimella tai päässä) Ratkaisu: Muunnetaan ensin x-järjestelmästä 10-järjestelmään Sitten 10-järjestelmästä y-järjestelmään Edellä kuvatut algoritmit toimivat helposti 407

328 Lukujärjestelmän muunnokset - esimerkkejä Muunnetaan luku järjestelmään (10-järjestelmän kautta) = 3* *11+4 = /4 = 111, j=0 111/4 = 27, j=3 27/4 = 6, j=3 6/4 = 1, j=2 1/4 = 0, j=1 Siis =

329 Lukujärjestelmän muunnokset Desimaaliluvun muunnos 10-järjestelmästä k-järjestelmään: Oletukset: x on luvun kokonaisosa, y luvun desimaaliosa, eli luku on x.y Jaetaan x toistuvasti k:lla (ottamalla osamäärän kokonaisosa aina uudeksi jaettavaksi), kunnes jaettava tulee nollaksi Peräkkäiset jakojäännökset muodostavat k-järjestelmän luvun kokonaisosan numerot alhaalta ylös Desimaaliosan muunnos kertomalla y toistuvasti k:lla (ottamalla tulon desimaaliosa aina uudeksi kerrottavaksi) Peräkkäisten tulojen kokonaisosat muodostavat k-järjestelmän desimaaliosan numerot ylhäältä alas Huom: vaikka desimaaliluku olisi 10-järjestelmässä päättyvä, se voi olla k- järjestelmässä päättymätön (ja päinvastoin)

330 Desimaaliluvun muunnos esimerkki Muunnetaan luku järjestelmään Kokonaisosa: 123/4 = 30, jakojäännös 3 30/4 = 7, jakojäännös 2 7/4 = 1, jakojäännös 3 1/4 = 0, jakojäännös 1 Desimaaliosa: *4 = *4 = *4 = 1.00 (0.00*4 = 0.00) Lopputulos:

331 Tietojenkäsittely ja kantaluvut Tietojenkäsittelijän näkemys: kantaluvun tulisi olla 2:n potenssi Oktaali- ja heksadesimaalijärjestelmät käytössä binäärilukujen yhteydessä Muunnos k-järjestelmän ja k j -järjestelmän välillä helpompi, koska se voidaan tehdä j numeron lohkoissa

332 Heksadesimaalijärjestelmä Heksadesimaalijärjestelmä (16-järjestelmä) on tavallinen tapa ilmaista lukuja bittien sijaan Muunnos näiden järjestelmien välillä on helppoa: 4 peräkkäistä bittiä vastaa aina yhtä numeroa heksadesimaalijärjestelmässä Voidaan käyttää taulukkoa: Jos taulukon osaa konstruoida, muunnokset ovat todella helppoja Bitteinä 16-järj. Bitteinä 16-järj A (tämä on hyvä tietää, edelliset algoritmit toimivat myös B C D E F 412

333 Muunnos binäärijärjestelmän ja heksadesimaalijärjestelmän välillä Muunnetaan heksadesimaaliksi Muunnetaan CD60 binäärijärjestelmään: E D C D 6 0 B H B H A B C D E F

334 Oktaalijärjestelmä Oktaalijärjestelmä (8-järjestelmä) on toinen toisinaan esiintyvä järjestelmä Koska järjestelmä on kahden potenssi, muunnos voitaisiin jälleen tehdä taulukolla 2-lukujärjestelmän ja 16- lukujärjestelmien välillä 414

335 Binäärilukujen yhteenlasku allekkain : Muistakaa ViLLE-tehtävissä aina merkitä muistinumerot jotka ovat ykkösiä, nekin arvioidaan!

336 Lukualue Laskutoimituksia rajoittaa lukualue Jos käytössä on 4-bittinen esitys, niin yhteenlaskun tuloskaan ei voi koskaan olla yli 4-bittinen Jos edellisessä olisi määritelty, että käytössä on vain 6 bittiä, seitsemäs bitti olisi ollut ns. ylivuotobitti (overflow) Ylivuotobitti ei kuulu laskun lopputulokseen (Tehtävissä kerrotaan aina selvästi käytetty lukualue)

337 Kokonaislukujen esittäminen

338 Kokonaislukujen esittäminen Positiivisen luvun esitys kaksijärjestelmässä sanotaan luvun puhtaaksi binääriesitykseksi Ei riitä negatiivisten lukujen esittämiseen, myös etumerkki pitää esittää Yksinkertainen tapa: lisätään eteen etumerkin kertova bitti Vasemmanpuoleisin eli eniten merkitsevä (most significant) bitti on Positiivisille luvuille 0 Negatiivisille luvuille 1 n bitillä voidaan esittää 2 n binäärilukua, eli kokonaisluvut -2 n-1, 0, 2 n-1-1 Tätä kutsutaan etumerkki+itseisarvo esitykseksi Vielä pitää varmistua siitä, että yhteenlasku toimii Yhteenlasku on perusoperaatio: kaikki muut voidaan johtaa siitä (-,*,/)

339 Luku Etum.+itseisarvo Etumerkki+itseisarvo-esitys Toimiiko yhteenlasku? Esim. yhteenlasku -2 ja +3 allekkain 1. Muunnetaan -2= = Lasketaan allekkain: -2 = = = -5 Ongelma 1: Positiivisten ja negatiivisten lukujen lukusuorat kulkevat eri suuntaan Positiivisten lukujen binääriesityksen itseisarvo kasvaa kun luku kasvaa Negatiivisten lukujen pienenee kun luku kasvaa Ongelma 2: Nollalla on kaksi esitystä: plus nolla ja miinus nolla

340 Luku 1:n komplementti Yhden komplementtiesitys Komplementoidaan negatiivisten lukujen itseisarvo-osat Nollat ykkösiksi Ykköset nolliksi Lukusuorien suunnat nyt samat, korjaa ongelman 1 Esim. yhteenlasku -2 ja +3 allekkain 1. Muunnetaan -2 -> > > Lasketaan allekkain -2 = = = (+) Vastaus vieläkin väärin, koska nollalla vielä kaksi arvoa, mutta ainakin lukusuorat kulkevat samaan suuntaan

341 Oltiinko edes lähellä? Kokeillaan muita arvoja: -2 = = = (+)0-1 = = = 1 0 = = = 3 1 = = = 4-0 = = = 2 Yhteenlasku melkein toimii, mutta on yhden liian pieni kun yhteenlaskettava on negatiivinen Miten korjataan?

342 Luku 2:n komplementti Kahden komplementtiesitys Siirretään 1:n komplementtiesityksen negatiivisia lukuja yhdellä pykälällä (lisää +1) Nollalle jää vain yksi esitys (+0) Lukualue laajenee yhdellä negatiiviseen suuntaan Esimerkkiyhteenlasku -2 ja +3 allekkain jälleen 1. Muunnetaan -2 -> > > > > norm.esitys -> etumerkki-> komplementti -> komplementti+1 2. Lasketaan allekain -2 = = =

343 Kahden komplementtiesitys Kokonaislukujen mekaaninen yhteenlasku toimii siis myös negatiivisilla luvuilla Ensimmäinen bitti kertoo edelleen etumerkin Käytännössä 2:n komplementtiesitys käytössä kaikissa tietokoneissa Voidaan tulkita lukusuoralla: Positiiviset luvut oikealla paikallaan Negatiiviset luvut siirretty posit. oikealle puolelle lisäämällä niihin 2 n Esim.: -2 = 1110 eli = 14 = Negatiivisen 10-järjestelmän luvun 2:n komplementtiesitys saadaan: Vaihtamalla itseisarvoltaan vastaavan positiivisen luvun esityksen 1 0 ja 0 1 Lisäämällä lukuun sitten yksi

344 Kahden komplementtiesitys 2 Yksinkertaisesti muunnoksen kahden komplementtiesitykseen voi kuvata seuraavasti: Jos luku on positiivinen, palauta luvun tavallinen binääriesitys Jos luku on negatiivinen: Komplementoi luku kokonaisuudessaan, etumerkkeineen päivineen Lisää saatuun lukuun yksi ja palauta tulos Huomaa, että komplementointi itsessään asettaa jo etumerkin ykköseksi 425

345 Kahden komplementtiesitys Laskutoimituksia rajoittaa lukualue Oletetaan, että bittejä on käytössä n kappaletta Jos n = 16, esitettävissä luvut Jos laskutoimitus ei pysy alueen rajoissa, ei tulos 2:n komplementtiesityksessäkään voi olla oikein syntyy ylivuoto Tämäntyyppisessä ylivuodossa ei välttämättä tule ylivuotobittiä, vaan merkkibitti vain vaihtuu kun sen ei pitäisi Esim. +4 = = = -7

346 Kahden komplementtiesitys Laskun tulos ei kuitenkaan ole mitä sattuu: tulos on aina oikein modulo 2 n (n on esityksen pituus) Luvut X ja y ovat kongruentteja modulo m, merkitään x y (mod m), jos x=y+km Missä k on kokonaisluku Esim (mod 16) Lukusuora onkin siis lukusykli Laskutoimitukset esityksen pituuden n määräämällä lukualueella Toisistaan k*2 n verran eroavat luvut ovat siis samassa kohden rengasta mutta eri kierroksella

347 Excess-koodaus Vielä yksi yleisesti käytetty kokonaislukujen esitystapa Idea: siirretään lukualue a b kokonaan positiiviselle puolelle lisäämällä kaikkiin lukuihin a Esim jos n=4 ja lukualue -8 7 puhutaan excess-8-koodauksesta Kaikkiin lukuihin lisätään siis =8 Ensimmäinen bitti edustaa etumerkkiä (0 negatiivinen, 1 positiivinen) Aritmetiikka ei yhtä kätevää kuin 2:n komplementtiesityksessä Eräitä teknisiä etuja Esim koodaus säilyttää lukujen suuruusjärjestyksen Luku Excess

348 Esimerkki: koodaaminen excess-4-esitykseen Lukualue siis -4 3 Muunnetaan luku 2 Lisätään lukuun 4, 2+4 = 6 6 muunnetaan binäärijärjestelmään tulos:

349 Arvostelu (3op) Osa-alue Kotitehtävät ja palaute Luentoläsnäolo 0 % Tutoriaaliläsnäolo 5/6 Minimisuoritus 50% pisteistä Tutoriaalipisteet 50% pisteistä ViLLE näyttää arvion arvosanasta Toiminto on kuitenkin ensimmäistä kertaa käytössä, ilmoittakaa, jos huomaatte jotain kummallista 462

350 Arvostelu (5op) Vaatimukset: 3op osio suoritettu (myös aiemman vuoden suoritus käy) Tentti läpäisty (yli 50%) Arvosanaan vaikuttaa tehtyjen ViLLE-tehtävien pistemäärä (korkeintaan +1.0 arvosanaa) Nettiopsuun tulee kaksi arvosanaa: 3op ja 2op. 463

351 Mentorointi Mentorointi vielä ja Luokassa K127 klo Kokeilu: ainakin ensi maanantaina voi mentoroinnissa pyytää, että joku vanha kierros avataan mentoroinnin ajaksi Jos kokeilu menee hyvin, jatketaan samaa 464

352 Tentistä Tenttitärppejä: Lukujärjestelmämuunnos Ohjelmointi Pitää ehdottomasti ymmärtää tulostamisen ja palauttamisen ero, jotta näistä saa pisteitä Monivalintaa teoriasta Abstraktien tietotyyppien tunnuspiirteitä 465

353 Rekursio, puut ja kertaus 466

354 Tänään Iteraatio ja rekursio Puut Kertaus 467

355 Iteraatio ja rekursio

356 Iteraatio ja rekursio Algoritmiseen ongelmanratkaisuun on kaksi päästrategiaa: 1. Iteraatio (iteration) Toiston avulla oikeaan ratkaisuun lähestyvä ratkaisutapa 2. Rekursio (recursion) Moduuli ratkaisee pienempiä osaongelmia kutsumalla itseään Molemmat ovat tapoja etsiä ongelman ratkaisua

357 Iteraatio Tavallinen menettely imperatiivisessa ajattelussa Tietokoneen toiminta on luonnostaan iteratiivista Iteraatioperiaate: jotakin toimintaa toistamalla päästään lähemmäs ratkaisua Tarkoitus tuottaa paranevia välitiloja, kunnes Saadaan tarkka ratkaisu tai Saadaan riittävän hyvä likiarvo ratkaisulle

358 Algoritmi: Iteratiivinen lineaarihaku Parametrit lista, avain ja alku (indeksi), josta haku aloitetaan Tehtävänä palauttaa True, jos avain on listassa indeksin jälkeen ja False muuten def lineaarihaku(lista, avain, alku): for i in range(alku, len(lista)): if lista[i] == avain: return True return False 472

359 Iteraatio Iteraatio voidaan jakaa kolmeen osaan: Alustus Alustetaan alkuarvot joita muokataan kohti lopullista ratkaisua Testaus Testataan nykytilaa (muuttujien arvoja) ehtoon, joka määrittää lopetetaanko iteraatio Arvojen päivitys Päivitetään algoritmin tilaa (muuttujien arvoja) niin, että ne lähestyvät lopullista ratkaisua

360 Iteraatio # summataan listan alkioita kunnes summa on yli 100 def summaakunnespaljon(lista): summa = 0 i = 0 while summa <= 100: summa = summa + lista[i] i = i + 1 return summa Alustus Testaus Arvojen päivitys 474

361 Rekursio

362 Rekursio Osatehtävän ratkaisemiseen voidaan käyttää mitä tahansa tehtävän ratkaisevaa alimoduulia Jos osatehtävä on samankaltainen (mutta pienempi) kuin moduulin tehtävä, voidaan moduulia itseään käyttää ratkaisun osana Tällöin moduulin määrittely sisältää moduulin itsensä kutsun Moduuli on siis rekursiivinen

363 Algoritmi: Rekursiivinen lineaarihaku Parametrit lista, avain ja indeksi, josta haku aloitetaan Tehtävänä palauttaa True, jos avain on listassa indeksin alku jälkeen ja False muuten def lineaarihaku(lista, avain, alku): if alku >= len(lista): return False if lista[alku] == avain: return True return lineaarihaku(lista, avain, alku+1) 479

364 Rekursiivisten moduulien vaatimukset Moduulissa pitää kuvata yksi triviaali, ei-rekursiivisesti ratkeava tapaus Kutsutaan rekursion kannaksi Jokaisen rekursion askeleen tulee lähestyä triviaalia tapausta Kutsutaan usein rekursioaskeleeksi Vaatimuksista seuraa, että rekursiivisen kutsun on oltava ehdollinen Jos ei ehtoa, rekursio jatkuu loputtomiin...

365 Algoritmi: Rekursiivinen lineaarihaku Syötteet lista, avain ja indeksi, josta haku aloitetaan Tehtävänä palauttaa True, jos avain on listassa indeksin jälkeen ja False muuten def lineaarihaku(lista, avain, alku): if alku >= len(lista): return False if lista[alku] == avain: return True return lineaarihaku(lista, avain, alku+1) Rekursion kanta Rekursioaskel 481

366 Rekursio - esimerkki kertoma(n) on kaikkien välillä 1..n olevien kokonaislukujen tulo, eli kertoma(n) = n*(n-1)*(n-2)*...*3*2*1 Toisaalta tämä voidaan määritellä myös rekursiivisesti: 1. kertoma(1) = 1 2. kertoma(n) = n * kertoma(n-1) (huom: kertoma määritellään myös 0:lle, kertoma(0)=1, mutta se kasvattaisi esimerkkejä tarpeettomasti)

367 Rekursio - esimerkki def kertoma(n): if n == 1: return 1 else: return n * kertoma(n-1) k = kertoma(3) Kutsutaan kertomafunktiota

368 Rekursio - esimerkki def kertoma(n): if n == 1: return 1 else: return n * kertoma(n-1) kertoma(3) n=3, joten päästään elselohkoon k = kertoma(3)

369 Rekursio - esimerkki def kertoma(n): if n == 1: return 1 else: return n * kertoma(n-1) kertoma(3) kutsutaan kertoma(3-1) k = kertoma(3)

370 Rekursio - esimerkki def kertoma(n): if n == 1: return 1 else: return n * kertoma(n-1) kertoma(2) kertoma(3) Nyt n=2, joten mennään jälleen else-lohkoon k = kertoma(3)

371 Rekursio - esimerkki def kertoma(n): if n == 1: return 1 else: return n * kertoma(n-1) kertoma(2) kertoma(3) Kutsutaan kertoma(2-1) k = kertoma(3)

372 Rekursio - esimerkki def kertoma(n): if n == 1: return 1 else: return n * kertoma(n-1) kertoma(1) kertoma(2) kertoma(3) Nyt n=1, palautetaan 1 kutsujalle k = kertoma(3)

373 Rekursio - esimerkki def kertoma(n): if n == 1: return 1 else: return n * kertoma(n-1) kertoma(2) kertoma(3) Tässä n=2, joten palautetaan 2 * 1 k = kertoma(3)

374 Rekursio - esimerkki def kertoma(n): if n == 1: return 1 else: return n * kertoma(n-1) kertoma(3) Tässä n=3, joten palautetaan 3*2 k = kertoma(3)

375 Rekursio - esimerkki def kertoma(n): if n == 1: return 1 else: return n * kertoma(n-1) k = kertoma(3) kertoma(3) palautti arvon 6

376 Rekursio - esimerkki Sama voidaan visualisoida paperille: kertoma(4) =4*kertoma(3) =4*(3*kertoma(2)) =4*(3*(2*kertoma(1))) =4*(3*(2*1)) =4*(3*2) =4*6 =24 Jossa sulkeet ilmaisevat suoritusjärjestystä

377 Iteraatio vai rekursio Rekursio on aina korvattavissa iteraatiolla ja päinvastoin Todistus sivuutetaan Rekursion käyttö saattaa olla muistia tuhlaavaa Riippuu sekä rekursiofunktion rakenteesta että käytetystä ohjelmointikielestä Joillekin ongelmille on helpohkosti löydettävissä rekursiivinen tai iteratiivinen ratkaisu, muttei molempia

378 Abstraktit tietotyypit - puu

379 Abstraktit tietotyypit - puu Puu (tree) on lineaarisen listan yleistys Kaikilla alkioilla on yksikäsitteinen edeltäjä (kuten listassa) Alkiolla voi olla monta seuraajaa ja eri solmuilla voi olla eri määrä seuraajia Rakenteesta tulee siis puumainen hierarkia Tieto esitetään rakenteen haarautumiskohdissa eli solmuissa (nodes) Puun haarat (branches) edustavat loogisia suhteita peräkkäisillä tasoilla olevien solmujen välillä

380 Abstraktit tietotyypit - puu Solmun seuraajia sanotaan lapsiksi Solmun edeltäjää sanotaan vanhemmaksi Q:n vanhempi P:n lapsi

381 Abstraktit tietotyypit - puu Hierarkian ylimmän tason alkiota kutsutaan puun juureksi (root) Juurisolmulla ei ole edeltäjää Puun juuri

382 Abstraktit tietotyypit - puu Alimman tason solmuja nimitetään lehdiksi (leaves) Alla vihreällä Lehtisolmuilla ei ole seuraajia

383 Abstraktit tietotyypit - puu Ei-lehtisolmuja kutsutaan sisäsolmuiksi Kuvassa valkoiset solmut Sisäsolmuilla on siis aina seuraaja tai seuraajia

384 Abstraktit tietotyypit - puu Puun haaroja jotka muodostavat solmun ja sen välittömän tai välillisen seuraajan yhdistävän reitin kutsutaan poluksi (path) Polun pituus on välillä olevien haarojen (kaarien) lukumäärä Huom: määritelmissä eroja, voidaan laskea solmujen lukumäärä Polun P-R pituus on 2

385 Abstraktit tietotyypit - puu Puun korkeus on pisimmän polun pituus juuresta lehteen Puun korkeus on 4

386 Abstraktit tietotyypit - puu Solmun aste on sen seuraajien lukumäärä Aste on 2 Aste on 4

387 Abstraktit tietotyypit - puu Listojen tavoin puu samaistetaan usein juuren kanssa Usein sovitaan, että puun jokaisella solmulla on tarkalleen k lapsipuuta Osa lapsipuista voi olla tyhjiä (puu, jossa ei ole yhtään solmua) Tällaista puuta kutsutaan k-haaraiseksi tai k-ariseksi puuksi (kary)

388 Abstraktit tietotyypit - puu Solmun aste on siis sen ei-tyhjien alipuiden lukumäärä Jos puun jokaisen solmun (paitsi lehtisolmujen) kaikki k alipuuta ovat eityhjiä, sanotaan puuta täydelliseksi k-haaraiseksi puuksi

389 Abstraktit tietotyypit - puu Alla olevan puun ariteetti on 4 (eli 4-haarainen puu) Ei ole täydellinen, esim. solmulla Q on vain 2 ei-tyhjää alipuuta Kuvaan ei ole merkitty tyhjiä alipuita

390 Abstraktit tietotyypit - binääripuut Lista on 1-haarainen puu 2-haaraista puuta kutsutaan binääripuuksi (binary tree) Solmun seuraajia sanotaan vasemmaksi ja oikeaksi alipuuksi Binääripuu on yksinkertainen, mutta ilmaisuvoimainen Usein käytetty Niistä esiintyy useita variantteja

391 Abstraktit tietotyypit - binääripuut Emme esitä binääripuun tai solmujen toteutustapaa tällä kurssilla, mutta tehtävissä käytämme solmuja pistenotaatiolla: solmu.data - solmuun liitetty datamuuttuja solmu.vasen - solmun vasen alipuu solmu.oikea - solmun oikea alipuu Pistenotaation semantiikka selviää kurssilla Algoritmin ja ohjelmoinnin peruskurssi 512

392 Abstraktit tietotyypit - binääripuut Binääripuun juuri

393 Abstraktit tietotyypit - binääripuut Juuren vasen lapsi Juuren oikea lapsi

394 Abstraktit tietotyypit - binääripuut Ei vasenta lasta Ei oikeaa lasta

395 Abstraktit tietotyypit - binääripuut Puu ei ole lineaarinen rakenne, mutta solmut voidaan luetella systemaattisessa järjestyksessä (ei suuruus, vaan läpikäyntijärjestys) Oletetaan, että binääripuuta läpikäydessä jokaisen solmun osalta käsitellään: Itse solmu Rekursiivisesti vasen alipuu Rekursiivisest oikea alipuu Saadaan kolme vaihtoehtoista järjestystä: Esijärjestys (preorder tree traversal): solmu käsitellään ennen alipuita Sisäjärjestys (inorder): solmu käsitellään alipuiden välissä Jälkijärjestys (postorder): solmu käsitellään alipuiden jälkeen

396 Esimerkki: Sisäjärjestys def sisäjärjestys(p): if not p.ontyhjä(): sisäjärjestys(p.vasen) print p.data sisäjärjestys(p.oikea) 517

397 Abstraktit tietotyypit - binääripuut Esijärjestys: 80, 40, 39, 17, 45, 77, 80, 85, 89 Sisäjärjestys: 17, 39, 40, 45, 77, 80, 80, 85, 89 Jälkijärjestys: 17, 39, 77, 45, 40, 89, 85, 80, 80

398 Abstraktit tietotyypit - binääripuut Muistisääntö läpikäynteihin Piirretään viiva puun ympäri Esijärjestys: viiva ohittaa solmun vasemmalta Sisäjärjestys: viiva ohittaa solmun alapuolelta Jälkijärjestys: viiva ohittaa solmun oikealta Esijärjestys: 80, 40, 39, 17, 45, 77, 80, 85, 89 Sisäjärjestys: 17, 39, 40, 45, 77, 80, 80, 85, 89 Jälkijärjestys: 17, 39, 77, 45, 40, 89, 85, 80, 80

399 Kertaus 520

400 Parametrien välityksestä funktioille Pythonissa parametrien välitys on teknisesti aina samanlaista: Funktiolle välitetään viittaus arvoon Näennäinen ero tulee siitä, että osaa arvoista ei voi muuttaa, vaan niistä luodaan kopio Käytännössä tämän voi ajatella seuraavasti, vaikka se ei teknisesti ole oikein, mutta käytännössä on näin: Perustyypit, eli kokonaisluvut, desimaaliluvut, merkkijonot ja totuusarvot välitetään kopioimalla Listoja ei kopioida, funktio saa viittauksen todellisen parametrin listaan

401 Parametrien välitys esimerkki 1 Esimerkki: def muutalistaa(plista): print "saatiin", plista # tulostaa [1, kaksi, 3] plista[2] = "nelja print "muutettiin:", plista # tulostaa [1, kaksi, nelja ] lista = [1, "kaksi", 3] print 'ennen:', lista # tulostaa [1, kaksi, 3] muutalistaa(lista) print 'jalkeen', lista # tulostaa [1, kaksi, nelja ]

402 Parametrien välitys esimerkki 2 def kasvatajatulosta(a): a = a + 1 print a Kasvattaa paikallisen a:n (parametrin) arvoa a = 7 kasvatajatulosta(a) print a Tulostaa 8 Tulostaa 7, funktio ei muuttanut muualla ohjelmassa käytetyn a muuttujan arvoa

Muistutus aikatauluista

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

Lisätiedot

Palautetta viime luennosta

Palautetta viime luennosta Palautetta viime luennosta Kuka saa ja kenen täytyy suorittaa 5op kokonaisuus? Sivuaineopiskelijat suorittavat jos heidän sivuainekokonaisuuteen on merkitty niin Kokonaisuuksia on useita eri tiedekunnittain,

Lisätiedot

Johdanto kurssin sisältöön

Johdanto kurssin sisältöön Johdanto kurssin sisältöön Terminologiaa Algoritmi on jonkin tehtävän suorittamiseksi tarvittavien toimenpiteiden kuvaus Ongelman ratkaisu lasketaan suorittamalla algoritmin toimenpiteet Tietokone suorittaa

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

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

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

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

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

Python-ohjelmointi Harjoitus 2

Python-ohjelmointi Harjoitus 2 Python-ohjelmointi Harjoitus 2 TAVOITTEET Kerrataan tulostuskomento ja lukumuotoisen muuttujan muuttaminen merkkijonoksi. Opitaan jakojäännös eli modulus, vertailuoperaattorit, ehtorakenne jos, input-komento

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 25.1.2010 1 / 41 Valintakäsky if Tähänastiset ohjelmat ovat toimineen aina samalla tavalla. Usein ohjelman pitäisi

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

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

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

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

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

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

Python-ohjelmointi Harjoitus 5

Python-ohjelmointi Harjoitus 5 Python-ohjelmointi Harjoitus 5 TAVOITTEET Kerrataan silmukkarakenteen käyttäminen. Kerrataan jos-ehtorakenteen käyttäminen. Opitaan if else- ja if elif else-ehtorakenteet. Matematiikan sisällöt Tehtävät

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 21.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 21.1.2009 1 / 32 Tyypeistä Monissa muissa ohjelmointikielissä (esim. Java ja C) muuttujat on määriteltävä ennen

Lisätiedot

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

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat Sisällys 12. Javan toistorakenteet Ylstä toistorakentsta. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirhtä. Silmukan rajat asetettu kierroksen

Lisätiedot

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

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Sisällys 3. Pseudokoodi Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Ohjausrakenteet: Valinta if- ja if--rakenteilla. oisto while-, do-while- ja for-rakenteilla. 3.1 3.2 Johdanto

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

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

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

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

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

13. Hyvä ohjelmointitapa (osa 1) 13.1

13. Hyvä ohjelmointitapa (osa 1) 13.1 13. Hyvä ohjelmointitapa (osa 1) 13.1 Yleistä Ohjelman elinkaari ei tyypillisesti pääty sen toteuttamiseen tarvitaan ylläpitoa. Jotta koodin muuttaminen on mahdollista, on sen oltava myös muidenkin kuin

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

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

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 19.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 19.1.2011 1 / 39 Haluatko antaa palautetta luennoista? Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

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

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

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 5. Timo Savola. 28. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

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

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2011 1 / 34 Luentopalaute kännykällä käynnissä! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

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

14. Hyvä ohjelmointitapa 14.1

14. Hyvä ohjelmointitapa 14.1 14. Hyvä ohjelmointitapa 14.1 Yleistä Ohjelman elinkaari ei tyypillisesti pääty sen toteuttamiseen; ohjelmaa voidaan käyttää ja ylläpitää jopa vuosikymmeniä. Jotta koodin muuttaminen on mahdollista, sen

Lisätiedot

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään Ohjelmointi Ohjelmoinnissa koneelle annetaan tarkkoja käskyjä siitä, mitä koneen tulisi tehdä. Ohjelmointikieliä on olemassa useita satoja. Ohjelmoinnissa on oleellista asioiden hyvä suunnittelu etukäteen.

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

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

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

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

Johdatus Ohjelmointiin

Johdatus Ohjelmointiin Johdatus Ohjelmointiin Syksy 2006 Viikko 2 13.9. - 14.9. Tällä viikolla käsiteltävät asiat Peruskäsitteitä Kiintoarvot Tiedon tulostus Yksinkertaiset laskutoimitukset Muuttujat Tiedon syöttäminen Hyvin

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

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

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin

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

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

Ohjausrakenteet. Valinta:

Ohjausrakenteet. Valinta: Ohjausrakenteet Luento antaa yleiskuvan siitä kuinka ohjelmassa suorittaan vaihtoehtoisia tehtäviä valintarakenteiden avulla ja kuinka samanlaisia ohjelma-askeleita toistetaan toistorakenteiden avulla

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

Harjoitus 5 (viikko 41)

Harjoitus 5 (viikko 41) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Vältä liian pitkiä rivejä, käytä

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

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

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b Pythonin Kertaus Cse-a1130 Tietotekniikka Sovelluksissa Versio 0.01b Listat 1/2 esimerkkejä listan peruskäytöstä. > lista=['kala','kukko','kissa','koira'] ['kala','kukko','kissa','koira'] >lista.append('kana')

Lisätiedot

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

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita Toistorakenne (while, do-while, for) 1 While- lause while-lauseen rakenne on seuraava: while (ehtolauseke) lause Kun ehtolausekkeen arvo on totta, lause suoritetaan. Lause suoritetaan

Lisätiedot

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

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) Toistaiseksi helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Vaikeaa eroavuudet Pythonin ja C:n

Lisätiedot

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5 Kysy Karilta tai Kimmolta, jos tehtävissä on jotain epäselvää. Kerro WETOon liittyvät tekniset ongelmat suoraan Jormalle sähköpostitse (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida

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

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

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi Imperatiivisen ohjelmoinnin peruskäsitteet muuttuja muuttujissa oleva data voi olla yksinkertaista eli primitiivistä (esim. luvut ja merkit) tai rakenteista jolloin puhutaan tietorakenteista. puhuttaessa

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 19.9.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 19.9.2018 1 / 18 Oppimistavoitteet: tämän luennon jälkeen Osaat kirjoittaa Python-ohjelman, joka suorittaa eri kerroilla

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 26.9.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 26.9.2018 1 / 21 Oppimistavoitteet: tämän luennon jälkeen Osaat kirjoittaa for-käskyn avulla ohjelman, joka toistaa haluttua

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 27.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 27.1.2010 1 / 37 If-käsky toistokäskyn sisällä def main(): HELLERAJA = 25.0 print "Anna lampotiloja, lopeta -300:lla."

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

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

Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Ohjausrakenteet: 3. Pseudokoodi 3.1 Sisällys Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Ohjausrakenteet: Valinta if- ja if-else-rakenteilla. Toisto while-, do-while- ja for-rakenteilla.

Lisätiedot

1. Algoritmi 1.1 Sisällys Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.2 Algoritmin määritelmä Ohjelmointi

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla ohjelmoida useita komponenteiltaan ja rakenteeltaan

Lisätiedot

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

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

1. Ohjelmoinnin peruskäsitteet ja -elementit

1. Ohjelmoinnin peruskäsitteet ja -elementit 1. Ohjelmoinnin peruskäsitteet ja -elementit 1. ohjelmoinnin periaatteet 2. ohjelmointikielet 3. algoritmien suunnittelu 1 1.1 Ohjelmoinnin periaatteet Vaatimukset Määrittely Suunnittelu Toteutus Integrointi

Lisätiedot

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

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

etunimi, sukunimi ja opiskelijanumero ja näillä Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

System.out.printf(%d / %d = %.2f%n, ekaluku, tokaluku, osamaara); Kysy Karilta tai Kimmolta, jos tehtävissä on jotain epäselvää. Kerro WETOon liittyvät ongelmat suoraan Jormalle sähköpostitse (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja

Lisätiedot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot 3. Muuttujat ja operaatiot Sisällys Muuttujat. Nimi ja arvo. Algoritmin tila. Muuttujan nimeäminen. Muuttujan tyyppi. Muuttuja ja tietokone. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeetiikka.

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

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

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

8. Kieliopit ja kielet

8. Kieliopit ja kielet 8. Kieliopit ja kielet Suomen kielen sanoja voidaan yhdistellä monella eri tavalla. Kielioppi määrää sen, milloin sanojen yhdistely antaa oikein muodostetun lauseen. "Mies räpyttää siipiään" on kieliopillisesti

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

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

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2 PERUSLASKUJA Matemaattisten lausekkeiden syöttäminen: Kirjoita ilman välilyöntejä /+^2 Kirjoita muuten sama, mutta ota välilyönti :n jälkeen / +^2 Kopioi molemmat matematiikka-alueet ja liiku alueen sisällä

Lisätiedot

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten, Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten, että se pystyy suorittamaan kaikki mahdolliset algoritmit?

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

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

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

System.out.printf(%d / %d = %.2f%n, ekaluku, tokaluku, osamaara); Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Ohjelmointitehtävien osalta palautetaan

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

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

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

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

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