1. Ohjelmoinnin peruskäsitteet ja -elementit

Samankaltaiset tiedostot
Algoritmit 1. Luento 3 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

4. Lausekielinen ohjelmointi 4.1

811120P Diskreetit rakenteet

Muistutus aikatauluista

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

4. Lausekielinen ohjelmointi 4.1

12. Javan toistorakenteet 12.1

811120P Diskreetit rakenteet

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

ITKP102 Ohjelmointi 1 (6 op)

Johdanto kurssin sisältöön

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

12. Javan toistorakenteet 12.1

Algoritmit 1. Luento 1 Ti Timo Männikkö

Tietorakenteet ja algoritmit - syksy

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

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

Tutoriaaliläsnäoloista

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

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

11.4. Context-free kielet 1 / 17

Ohjausrakenteet. Valinta:


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

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

Tietorakenteet ja algoritmit

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

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

11. Javan toistorakenteet 11.1

TAMPEREEN TEKNILLINEN YLIOPISTO

Palautetta viime luennosta

Ohjelmointitekniikka lyhyesti Survival Kit 1 Evtek KA ELINKAARIMALLEISTA

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

Kaavioiden rakenne. Kaavioiden piirto symboleita yhdistelemällä. Kaavion osan valitseminen päätöksellä ja toistaminen silmukalla.

Ohjelmoinnin perusteet Y Python

etunimi, sukunimi ja opiskelijanumero ja näillä

KOODAUSPLÄJÄYS. Ohjelmoinnin perusteet

Algoritmit 1. Luento 10 Ke Timo Männikkö

Zeon PDF Driver Trial

Ohjelmoinnin perusteet, syksy 2006

Määrittelydokumentti

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

Ohjelmoinnin perusteet Y Python

Ehto- ja toistolauseet

Johdatus ohjelmointiin

Python-ohjelmointi Harjoitus 5

14/20: Keittokirja I

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

Luento 5. Timo Savola. 28. huhtikuuta 2006

Java-kielen perusteita

Ohjelmoinnin perusteet Y Python

TAMPEREEN TEKNILLINEN YLIOPISTO

Algoritmit 2. Luento 2 To Timo Männikkö

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

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

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

13. Loogiset operaatiot 13.1

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Java-kielen perusteita

Algoritmit 2. Luento 2 Ke Timo Männikkö

Harjoitustyö: virtuaalikone

5/20: Algoritmirakenteita III

8. Kieliopit ja kielet

811312A Tietorakenteet ja algoritmit I Johdanto

Ohjelmiston testaus ja laatu. Testausmenetelmiä

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

Ohjelmoinnin perusteet Y Python

Harjoitustyön testaus. Juha Taina

JAVA-OHJELMOINNIN PERUSTEET. Sisältö 1. JAVA OHJELMOINTI LÄHTEITÄ HARJOITUKSET MUUTAMA MALLIRATKAISU...

Python-ohjelmointi Harjoitus 2

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmointi 1. Kumppanit

Ohjelmoinnin perusteet Y Python

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Tietueet. Tietueiden määrittely

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

Ohjelmoinnin perusteet Y Python

ELM GROUP 04. Teemu Laakso Henrik Talarmo

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

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

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

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

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

Algoritmit 2. Luento 8 To Timo Männikkö

Lyhyt kertaus osoittimista

Tietotekniikan valintakoe

Tieto- ja tallennusrakenteet

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

1. Universaaleja laskennan malleja

Ohjelmoinnin perusteet Y Python

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Ohjelmoinnin perusteet Y Python

Tarkennamme geneeristä painamiskorotusalgoritmia

Ohjelmoinnin perusteet Y Python

Transkriptio:

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 Testaus Käyttöönotto ja ylläpito 2

Ohjelmointi sisältää laajasti ottaen seuraavat vaiheet esitutkimus (vaatimukset) o yleiset vaatimukset (asiakasvaatimukset) o mitä ohjelman tulee tehdä, ei miten ohjelma toteutetaan o onko ratkaisua olemassa o miksi ohjelma/ohjelmisto tulee tehdä o mitkä ovat asiakkaan todelliset tarpeet o mitä se saa maksaa o yksityiskohtaisten, ristiriidattomien ja täydellisten vaatimusten selvittäminen on usein vaikeaa 3

4 määrittely o analysoidaan asikasvaatimuksia ja johdetaan niistä ohjelmistovaatimukset (järjestelmävaatimukset, tekniset vaatimukset, ominaisuudet) o kuvataan ohjelmiston toiminnot toteutettavat ominaisuudet käyttöliittymä kommunikointi muiden järjestelmien kanssa o toteutukselle asetettavat ei -toiminnaliset vaatimukset ja rajoitukset suoritusteho vasteaika käytettävyys käytettävissä oleva muistitila toteutus tietyllä ohjelmointikielellä

suunnittelu o suunnitellaan määriteltyjen toimintojen toteutus (miten joku asia tehdään) o arkkitehtuurisuunnittelu -> moduulit o moduulisuunnittelu -> moduulien sisäinen rakenne tietorakenteet algoritmit kuvaamiseen voi käyttää ns. pseudokoodia, joka on normaalikielen ja jonkin ohjelmointikielen sekoitus toteutus o suunnitelmien kääntäminen käytettävälle ohjelmointikielelle o käsitetään usein tärkeimmäksi, vaikka sen tulisi olla vain suunnitelmien kaavamainen toteutus (luovuus kohdistuu analyysija suunnitelmavaiheisiin) o ohjelmakoodin kirjoittamisessa tulisi kiinnittää huomio tyyliin ja dokumentointiin 5

integrointi ja testaus o ohjelman testauksen tehtävänä on löytää virheitä, ei todistaa ohjelman virheettömyyttä o debuggaus, selvitetään ongelman syytä ja pyritään korjaamaan löytynyt virhe (tehtyjen korjausten vaikutukset on myös testattava) o myös vaatimukset ja suunnitelmat on testattava käyttöönotto ja ylläpito o asiakkaan ongelmien ratkominen o virheiden korjaaminen o ohjelman muuttaminen vaatimusten muuttuessa o uusien piirteiden lisääminen 6

Tämä ns. vesiputousmalli on erityistapaus yleisestä ongelmanratkaisumallista analysoi ratkaistava ongelma niin että ymmärrät sen kunnollisesti suunnittele ratkaisu toteuta ja testaa ratkaisua 7

Olennaiset asiat ovat tehtävän analyysi ja ohjelman suunnittelu, jotta ohjelmaa ei tarvitsisi muuttaa jälkeenpäin muutokset kalliita ja vaikeita suorittaa ohjelma voidaan suunnitella ja toteuttaa hyvin monella tavalla, ei ole yhtä ainoata oikeaa tapaa ratkaista tiettyä ongelmaa 8

Keskeistä kurssissa on ymmärtää ohjelmointi suunniteltuna ongelmanratkaisuna ohjelmaa ei voi kirjoittaa ennen kuin annettu tehtävä on ymmärretty ja siihen liittyvä ongelma ratkaistu algoritmin avulla algoritminen ongelmanratkaisu riippumaton toteutuskielestä; ratkaisun jälkeen ohjelma voidaan koodata periaatteessa millä tahansa ohjelmointikielellä ohjelman toteuttaminen systemaattisesti Käytännössä ohjelman kehitys ei voi edetä kirjaimellisesti edellä mainitun mallin (ns. vesiputousmalli) mukaisesti osa vaatimuksista saattaa selvitä vasta projektin aikana vaatimukset muuttuvat projektin aikana 9

Kurssilla tarvitaan perustiedot (alkeet) C-kielestä käytännön esimerkkien toteuttamiseksi vaarana liika kielikeskeisyys samat periaatteet ohjelmien kehittämiseksi pätevät myös muihin ohjelmointikieliin 10

Tietokone keskusmuisti Tulostuslaite Muistilaite Kommunikointilaite CPU Syöttölaite 11

Keskusmuisti OSOITE SISÄLTÖ 2000 2001 2002 2003 2004.. 01001010 01100001 01110110 01100001 00000011. merkki 'J' merkki 'a' merkki 'v' merkki 'a' numero 3 12

Ohjelmointikielet Konekieli eri valmistajien keskusyksiköillä (CPU) on kullakin oma konekieli esim. 1101101010011010 voi tarkoittaa käskyä laske kaksi lukua yhteen konekielinen ohjelmointi on kuitenkin työlästä virhealtista ohjelman kirjoittaminen liian hidasta 13

Assembly-kieli kullakin prosessorilla oma assembly -kieli käytetään ns. muistikkaita (mnemonics) kuvaamaan eri käskyjä esim. ADD R1, R2 helpottaa ohjelmointia käännettävä konekieliseksi ennen suorittamista (assembler) assembler ADD R1, R2 1101101010011010 14

Korkean tason ohjelmointikielet Basic, Fortran, Cobol, Pascal, C, C++, Ada, Java kielet muistuttavat melkein jokapäiväistä englannin kieltä yksi käsky tekee useita pikku tehtäviä helppo käyttää siirrettävyys Esimerkiksi: pintaala = 5 * 5 * 3.1415; 15

Ohjelma on käännettävä konekieliseksi ennen kuin sitä voidaan suorittaa. Kääntäminen voidaan toteuttaa eri tavoin. kääntäjä (compiler) on ohjelma, joka saa syötteeksi lähdekoodin (source code)(ohjelmoijan kirjoittamaa koodia) ja tuottaa käännöksen tuloksena kohdekoodia (target code). kohdekoodi voi olla joko koneen keskusyksikön ymmärtämiä konekielisiä käskyjä tai esimerkiksi Java-kielen tapauksessa ns. tavukoodia (byte code). tavukoodia ei voi suoraan suorittaa missään prosessorissa. tarvitaan erillinen tulkkausohjelma, joka kääntää tavukoodin konekielelle ja lähettää käskyt prosessorin suoritettavaksi 16

Syntaksi ja semantiikka ohjelmointikielen syntaksi (kielioppi) määrittelee kuinka voidaan symboleja, varattuja sanoja ja tunnuksia yhdistelemällä muodostaa ohjelma, joka noudattaa kielen sääntöjä ohjelmointikielen semantiikka määrittää mitä ohjelma tekee syntaksiltaan oikea ohjelma ei tarkoita sitä, että ohjelma olisi myös semantiikaltaan oikea, vaan ohjelma voi olla täysin järjetön. Ohjelma tekee aina sitä mitä sen käsketään tehdä, mutta tämä ei välttämättä ole sama kuin mitä ohjelman halutaan tekevän. 17

Virheet ohjelmassa voi olla kolmenlaisia virheitä kääntäjä löytää syntaksivirheet, eli virheet, jotka ovat kielen sääntöjen vastaisia Jos ohjelmassa on syntaksivirheitä ei kääntäjä tuota suoritettavaa ohjelmaa virhetilanne voi ilmetä myös ohjelman suorituksen aikana o yleensä nollalla jakaminen keskeyttää ohjelman suorituksen ohjelma voi toimia, mutta tuottaa silti vääriä tuloksia; loogiset virheet 18

Lausekielet Lausekielen periaate: algoritmit + tietorakenteet = ohjelmat Algoritmi on yksiselitteinen ja äärellinen sarja toimintaohjeita tehtävän suorittamiseksi ohjelmointikielestä riippumaton toteutettavissa koneellisesti toimintaohje = lause = käsky Algoritmi määrittelee toiminnot, joiden kohteina ovat tiedot jotka esitetään tietorakenteissa -> tietojenkäsittely 19

Kun algoritmit ja tietorakenteet kirjoitetaan ohjelmointikielellä saadaan ohjelma 20

Toiminnot Yleisesti ottaen kieli tarjoaa perustoiminnot ja välineet monimutkaisempien toimintojen rakentamiseen perustoiminnot: sijoituslauseet aritmeettiset operaatiot loogiset operaatiot tekstin luku tulostaminen ohjausrakenteet monimutkaisempien toimintojen määrittämiseksi peräkkäisyys: lause1; lause2;... lausen; valinta (haarautuminen): if-then toisto: while, repeat, for 21

toiminnan abstrahointi moduulien avulla: kutsutaan funktioiksi, metodeiksi, riippuen käytettävästä ohjelmointikielestä 22

Askeleittain tarkentaminen Seuraavilla esimerkeillä pyritään antamaan intuitiivinen kuva algoritmista käyttäen pseudokieltä, joka on sekoitus ohjelmointikieltä ja luonnollista kieltä Algoritmien kehittäminen usein vaikeaa ja virhealtista: Esim. Lentoajan laskenta aikataulun perusteella 1. lue lähtöaika 2. lue saapumisaika 3. vähennä saapumisajasta lähtöaika 23

Yksinkertainen ongelma ja algoritmi, joka antaa yleensä oikean vastauksen. Silti syntyy ongelmia jos lähtö- ja saapumispaikat sijaitsevat eri aikavyöhykkeillä. Virheet usein vaikeita havaita; tarvitaan systemaattista lähestymistapaa algoritmien suunnitteluun Yleisesti käytetty lähestymistapa tarkentaa algoritmin askeleittain tarkentaminen (hajoita ja hallitse) stepwise refinement tai top-down design kokonaistoiminnot tarkennetaan toistuvasti osatoiminnoiksi Esimerkkinä kehitetään algoritmi, joka kertoo robotille, kuinka keitetään kuppi teetä (kerrotaan tietokoneelle, miten tehtävä suoritetaan) 24

Alustava versio: 1. keitä vesi 2. laita tee kuppiin 3. lisää vesi kuppiin Käskyjen tarkentaminen siten, että robotti pystyy ne tulkitsemaan. Tarkennetaan ensimmäinen komento keitä vesi 1.1 täytä pannu vedellä 1.2 laita levy päälle 1.3 laita pannu levylle 1.4 odota kunnes vesi kiehuu 1.5 ota pannu levyltä 1.7 laita levy pois päältä 25

Samoin tarkennetaan toinen komento laita tee kuppiin 2.1 ota teepaketti hyllystä 2.2 avaa teepaketti 2.3 ota teepussi 2.4 laita teepussi kuppiin 2.5 sulje teepaketti Alkuperäisen algoritmin kaksi ensimmäistä käskyä on tarkennettu ja saatiin kaksi alialgoritmia. Tarkoituksena on se, että robotti suorittaa käskyt peräkkäisessä järjestyksessä. 26

Voi olla, että algoritmia joudutaan vielä tarkentamaan. Esim. täytä pannu vedellä : 1.1.1 aseta pannu hanan alle 1.1.2 avaa hana 1.1.3 odota kunnes pannu on täynnä 1.1.4 sulje hana Kyseessä on kolmas tarkennusaskel Tarkennusta jatketaan, kunnes saavutetaan tarkkuuden tason jossa robotti voi suorittaa lauseet Tuloksena on hierarkkinen rakenne. Saadaan lopullinen algoritmi, joka voi näyttää vaikka tältä 27

/* Algoritmi teen keittämiseen */ /* Keitä vesi */ 1.1.1 aseta pannu hanan alle 1.1.2 avaa hana 1.1.3 odota kunnes pannu on täynnä 1.1.4 sulje hana 1.2 laita levy päälle 1.3 laita pannu levylle 1.4 odota kunnes vesi kiehuu 1.5 ota pannu levyltä 1.6 laita levy pois päältä 28

/* Laita tee kuppiin */ 2.1 ota teepaketti hyllystä 2.2 avaa teepaketti 2.3 ota teepussi 2.4 laita teepussi kuppiin 2.5 sulje teepaketti /* Lisää vesi kuppiin */ 3 lisää vesi kuppiin Rivit /* ja */ merkkien väleissä ovat ohjelman kommentteja jotka on tarkoitettu ohjeiksi ohjelman lukijalle, ei robotille 29

Algoritmin kuvaamiseen voidaan käyttää myös vuokaaviota: Keitä vesi laita tee kuppiin lisää vesi kuppiin 30

Vuokaavion osan sisällön voi edelleen kuvata tarkemmin (esim. täytä pannu vedellä: 31

laita levy päälle laita pannu levylle odota kunnes vesi kiehuu ota pannu levyltä laita levy pois päältä 32

Peräkkäisyys Edellä esitelty algoritmi on suoraviivainen peräkkäinen sarja lauseita (käskyjä) robotille ohjelman suorittamiseksi. lauseet suoritetaan peräkkäin, yksi kerrallaan jokainen lause suoritetaan täsmälleen yhden kerran suoritusjärjestys on sama kuin kirjoitusjärjestys viimeisen lauseen päättäminen lopettaa algoritmin 33

Peräkkäinen sarja lauseita on joustamaton rakenne mitä tapahtuu, jos teepaketti on tyhjä? ei vaihtoehtoja erilaisille tilanteille Peräkkäisyys on tärkeä ja olennainen rakenne, mutta liian yksinkertainen. 34

Valinta Algoritmiin tarvitaan lisää joustavuutta, joka saadaan valinnan avulla. Tyhjän teepaketin tapaus voidaan hoitaa valinnalla seuraavasti 2.1. ota teepaketti hyllystä 2.1.1 JOS paketti on tyhjä NIIN ota uusi paketti kaapista 2.2 avaa teepaketti 2.3 ota teepussi 2.4 laita teepussi kuppiin 2.5 sulje teepaketti 35

Olennainen lisäys on lause 2.1.1 kertoo uuden lauseen, joka valitaan kertoo ehdon, milloin tämä uusi lause valitaan 36

Yleinen muoto: if ehto then lause 1 else lause 2 Valintarakennetta voidaan käyttää sisäkkäin. Suunnitellaan askeleittain algoritmi, joka poimii kolmesta annetusta luvusta x, y, z suurimman. Karkea versio: if x > y then poimi x tai z else poimi y tai z 37

Tarkennus kohtaan poimi x tai z: if x > z then poimi x else poimi z 38

Saadaan lopullinen algoritmi: if x > y then if x > z then poimi x else poimi z else if y > z then poimi y else poimi z Olennaista algoritmin kirjoituksessa sisennys selvyyden vuoksi; käytetään helpottamaan lukijan työtä. 39

Toisto Tarkastellaan tietojen hakua. Oletetaan, että on annettu lista henkilötietoja, jossa jokainen listan alkio on nimi - osoite -pari. Tehtävänä on hakea annettua nimeä vastaava osoite. Eräs mahdollinen algoritmi voisi näyttää seuraavalta: tarkista listan ensimmäinen nimi if kyseessä on annettu nimi then lue vastaava osoite else tarkista listan seuraava nimi if kyseessä on annettu nimi then lue vastaava osoite else tarkista listan seuraava nimi if kyseessä on annettu nimi then lue vastaava osoite else tarkista listan seuraava nimi 40

Milloin haku päättyy? Ei ole tietoa kuinka monta kertaa valinta pitäisi kirjoittaa. Ratkaisuna toistorakenne: repeat - until Käyttämällä toistoa (iteraatio, silmukka) nimen haku voidaan kirjoittaa muotoon: tarkista listan ensimmäinen nimi repeat if kyseessä on annettu nimi then lue vastaava osoite else tarkista listan seuraava nimi until annettu nimi löytyi tai lista on lopussa 41

Toistorakenteen yleinen muoto on repeat runko-osa until ehto Runko-osa toistetaan niin kauan kun lopetusehto on epätosi. Esimerkiksi ehto: annettu nimi löytyi on epätosi JA lista on lopussa on epätosi. Eli niin kauan kun nimeä ei ole löytynyt ja lista ei ole lopussa voidaan etsintää jatkaa. 42

Äärelliseen rakenteeseen ennalta määräämätön lukumäärä lauseiden toistoja. ongelmaksi tulee toiston päättymisen takaaminen esim. jos unohdetaan ehto lista on lopussa Myös toistorakenteita mahdollisuus yhdistellä sisäkkäin. 43

Toistorakenne repeat - until ei sovellu kaikkiin toistoa vaativiin tehtäviin, koska toistoehto on rakenteen lopussa. Esimerkiksi: on annettu lista numeroita ja tehtävänä on hakea listasta suurin numero: aseta suurimmaksi listan ensimmäinen numero repeat tarkista listan seuraava numero N if N > suurin tähän saakka then aseta N suurimmaksi until lista on käyty läpi tulosta suurin numero 44

Virhe: mitä tapahtuu jos listassa on vain yksi alkio? rivit käydään läpi järjestyksessä toiston päättymisehto on rakenteen lopussa 45

Tarvitaan päättymisehto rakenteen alkuun Eräs ratkaisu on toistorakenne while - do aseta suurimmaksi listan ensimmäinen numero while lista ei ole lopussa do tarkista listan seuraava numero N if N > suurin tähän saakka then aseta N suurimmaksi tulosta suurin numero Nyt lopetusehto on toistorakenteen alussa. 46

Lisäksi yleisesti käytetty toiston variaatio: repeat - for jokaiselle alkiolle runko-osa Esimerkkinä algoritmi joka laskee N:n ensimmäisen kokonaisluvun kertoman (k! = k x (k - 1) x... x 1) lue N /* käyttäjä antaa numeron */ kertoma <- 1 repeat - for jokaiselle kokonaisluvulle 1:stä N:ään kertoma <- kertoma * kokonaisluku tulosta kertoma 47

Vielä yksinkertainen toiston muunnelma: repeat N kertaa runko-osa 48

Modulaarisuus Askeleittain tarkentamisessa algoritmi jaettiin pienempiin palasiin, joita tarkennettiin kunnes päästiin tasolle, jonka algoritmin suorittaja pystyy tulkitsemaan. Usein nämä palaset ovat suhteellisen riippumattomia toisistaan ja pääalgoritmista jolloin ei tarvitse kiinnittää huomiota siihen missä suuremmassa asiayhteydessä palasia käytetään -> modulaarisuus. 49

Esimerkkinä algoritmit, jotka kertovat piirturille kuinka piirretään neliöitä. Oletetaan, että piirturi pystyy tulkitsemaan seuraavat käskyt: eteen (x) /* siirry x senttimetriä eteen */ vasen (x) /* käänny x astetta vasempaan */ oikea (x) /* käänny x asetetta oikeaan */ laske /* laske kynä paperille */ nosta /* nosta kynä paperilta */ 50

Oletetaan, että piirturin tulee piirtää kaksi sisäkkäistä neliötä ao. kuvan mukaan. Lisäksi oletetaan, että piirturi on aluksi piirrettävien neliöiden keskipisteessä X, kynä ylhäällä ja osoittaa kuvan nuolen suuntaan. B A X 51

Yleisellä tasolla algoritmi voisi koostua neljästä peräkkäisestä lauseesta: siirry pisteeseen A piirrä neliö, jonka sivu on 10 cm siirry pisteeseen B piirrä neliö, jonka sivu on 20 cm Algoritmin toinen ja neljäs lause ovat itsenäisiä toimintoja; riippumattomia yleisen tason algoritmin muista lauseista -> voidaan suunnitella ja tarkentaa erikseen; moduuli. Moduulille on erilaisia nimityksiä eri ohjelmointikielissä; procedure, routine, subroutine, function, method. 52

Jotta moduuli olisi yleisesti hyödyllinen, sen tulisi pystyä piirtämään halutun kokoinen neliö ( nyt 10 ja 20 cm sivut) siirry pisteeseen A piirrä neliö (10) siirry pisteeseen B piirrä neliö (20) Nyt itse moduuli voidaan kirjoittaa seuraavaan muotoon käyttäen piirturin ymmärtämiä käskyjä: module piirrä neliö (koko) laske repeat 4 kertaa eteen (koko) vasen (90) nosta 53

Moduulin spesifikaatio kertoo mitä se tekee: Tämä moduuli piirtää neliön, jonka toisen sivun pituus on koko lähtien kynän nykyisestä paikasta. Neliö piirretään vastapäivään, ensimmäinen sivu piirturin nykyisen suunnan mukaan. Kynä palaa alkuperäiseen paikkaan ja alkuperäiseen suuntaan ylös nostettuna. Mouduulin yleinen muoto: module nimi ( muodolliset parametrit ) runko-osa 54

Muodollisia parametrejä käytetään moduulin rungossa suorittamaan suunniteltu tehtävä yleisessä muodossa; tässä koko kertoo piirrettävän neliön koon. Todelliset parametrit riippuvat tilanteesta ja ne määrätään pääalgoritmissa moduulin kutsussa; tässä moduulia kutsutaan kahdesti: piirrä_neliö (10) piirrä_neliö (20) Vertaa funktion käsitteeseen matematiikassa f (x) = 2x + 1 f (5) = 11 55

Liityntä moduulin ja sen kutsujan välillä eksplisiittisesti (näkyvästi) ilmaistu parametreillä (esim. koko) implisiittisesti sivuvaikutuksilla (kynä jää ylös) 56

Piirtotehtävä jaettiin kahteen algoritmiin: pääalgoritmi ja sen käyttämä moduuli (alialgoritmi). Lopulliseksi pääalgoritmiksi saadaan tarkennuksen jälkeen: vasen (45) eteen ( 50) vasen (135) piirrä_neliö (10) oikea (135) eteen ( 50) vasen (135) piirrä_neliö (20) 57

Tämä käyttää hyväkseen alialgoritmia: module piirrä_neliö (koko) laske repeat 4 kertaa eteen (koko) vasen (90) nosta Modulaarisuus on keskeinen asia ohjelmoinnissa ja ohjelmien suunnittelussa. sopii luonnollisesti yhteen askeleittain tarkentamisen kanssa moduulin ja sitä kutsuvan alialgoritmin suunnittelu voidaan tehdä erikseen helpottaen suunnitteluprosessia 58

jotta moduuli voidaan ottaa käyttöön, tarvitsee vain tietää mitä se tekee; ei miten se tehtävän suorittaa edesauttaa algoritmien ymmärtämistä edesauttaa uudelleenkäytettävyyttä; lisätään aliohjelmakirjastoon 59

Tietorakenteet Algoritmien käsittelemä tieto on tyypitettyä Perustietotyypit totuusarvot (tosi, epätosi) merkit ( A, k, 1, < ) kokonaisluvut (1, 24, -100, 99999, ) reaaliluvut (liukuluvut) (1.5, -99.124, 4.9E2, -0.32e32, ) 60

Rakenteisia tietotyyppejä: merkkijono ( kissa ) tietue: (<etunimi><sukunimi><htunn><verot>) tiedosto taulukko Lisäksi monimutkaisempia rakenteita: lista, pino, puut, verkot. 61

Algoritmien ohjausrakenteet ja algoritmien käsittelemä tieto (data) liittyvät kiinteästi toisiinsa. valitut ohjausrakenteet riippuvat usein siitä, miten käsiteltävän tiedon rakenne jäsennellään: rakenteinen tieto rakenteinen tieto heijastaa tietoelementtien keskinäisiä suhteita 62

Yleinen esimerkki; lista tai jono lista henkilö-osoite -pareja Suomen kielen sana; jono kirjaimia Suomen kielen lause; jono sanoja luku; jono numeroita puhelinluettelo Myöhemmin esitellään yksinkertaisten tietorakenteiden toteuttamista C- kielellä. 63