Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

3. Pseudokoodi.

Samankaltaiset esitykset


Esitys aiheesta: "3. Pseudokoodi."— Esityksen transkriptio:

1 3. Pseudokoodi

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

3 Johdanto Pseudokoodi (pseudocode) on algoritmin tekstimuotoinen esitys. Selvästi lähempänä ohjelmointikieltä kuin vuokaaviot, mutta ei oikea ohjelmointikieli. Luonnollisen kielen (esim. suomi tai englanti) ja jonkin tunnetun ohjelmointikielen (esim. Java, C++ tai Pascal) sekoitus. Ei siis yleismaailmallista standardia.

4 Johdanto Kirjoitetaan nyt suomeksi käyttäen Javan kielioppia, jolle on varattu joitakin sanoja englannin kielestä. Vuokaavioiden tapaan pseudokoodin osat suoritetaan peräkkäin ja suoritusta voidaan ohjata päätösten avulla. Vuokaavioiden päätöksiä ja silmukoita vastaavat tietyt valinta- ja toistorakenteet. Voidaan esittää vapaamuotoisena tekstinä tai tarkemmin muuttujien ja operaatioiden avulla.

5 Esimerkki: Hypotenuusan pituus
Pythagoraan lause: Suorakulmaisen kolmion kateettien neliöiden summa on yhtä suuri kuin hypotenuusan neliö. Tehtävänä kirjoittaa ohjelma hypotenuusan pituuden c laskemiseksi. b c a

6 Esimerkki: Hypotenuusan pituus
Alku Lue 1. luku Lue 2. luku Neliöi 1. luku Neliöi 2. luku Summaa neliöt Ota summan neliöjuuri Loppu Tulosta neliöjuuri Oletetaan, että käyttäjä antaa algoritmille nollaa suurempia lukuja.

7 Esimerkki: Hypotenuusan pituus
Ensimmäisellä rivillä on algoritmin otsikko, joka kertoo kyseessä olevan Hypotenuusa-nimisen algoritmin esitys. Otsikon jälkeiset rivit muodostavat algoritmin rungon. Algoritmi suoritetaan rivi kerrallaan, otsikosta alkaen ja ylhäältä alas. Algoritmi Hypotenuusa Lue 1. luku Lue 2. luku Neliöi 1. luku Neliöi 2. luku Summaa neliöt Ota summan neliöjuuri Tulosta neliöjuuri Koodi pysähtyy, kun viimeinen rivi on suoritettu.

8 Esimerkki: Hypotenuusan pituus
Myös pseudokoodina annettu algoritmi voidaan esittää tarkemmin muuttujia ja operaatioita käyttäen. pow-operaatio korottaa parametrinsa annettuun potenssiin. sqrt-operaatio ottaa parametrinsa neliöjuuren. Algoritmi Hypotenuusa akatpit ← lue() bkatpit ← lue() akatpit2 ← pow(akatpit, 2) bkatpit2 ← pow(bkatpit, 2) summa ← akatpit2 + bkatpit2 hyppit ← sqrt(summa) tulosta(hyppit)

9 Lauseet Vuokaavion “laatikot” erottavat selkeästi algoritmin vaiheet toisistaan. Edellisissä pseudokoodiesimerkeissä kukin vaihe oli kirjoitettu vastaavasti omalle rivilleen. Algoritmin kuvaaminen ei ole aina yhtä helppoa: teksti voi mennä useammalle riville tai on järkevää esittää useampia vaiheita yhdellä rivillä. Tarvitaan tapa jakaa algoritmin teksti yksiköihin.

10 Lauseet Kirjoitetun luonnollisen kielen yksiköitä:
Virke: Alkaa isolla alkukirjaimella ja päättyy isoon välimerkkiin. Sisältää yhden tai useamman lauseen. Lause: Ilmaisee ajatuksen. Rakentuu verbin ympärille. Lauseke: Lauseen läheisesti yhteenkuuluvia sanoja. Lauseohjelmointikielissä: virkkeet lauseen (statement) mittaisia, välimerkki usein puolipiste (;). Ohjelmointikielissä lauseiden laskentaa sisältäviä osia sanotaan lausekkeiksi (expression).

11 Lauseet Erotetaan jatkossa myös pseudokoodin vaiheet puolipisteellä lauseiksi. Tällöin yksi pseudokoodin vaihe voidaan esittää usealla rivillä ja useita vaiheita mahtuu samalle riville. Algoritmi Hypotenuusa Lue 1. luku; Lue 2. luku; Neliöi 1. luku; Neliöi 2. luku; Summaa neliöt; Ota summan neliöjuuri; Tulosta neliöjuuri; Samalla rivillä olevat lauseet suoritetaan vasemmalta oikealle.

12 Kommentointi ja sisentäminen
Ohjelman tulisi olla helposti ymmärrettävä, koska ihmiset sekä kirjoittavat että lukevat ohjelmia, jotka voivat olla omaa tai muiden tuotantoa: Ohjelmia tehdään usein ryhmissä. Ohjelmat vaativat ylläpitoa. Itse tehdynkin ohjelman idea unohtuu nopeasti. Ohjelman toimintaa voi selkeyttää pienellä vaivalla koodin rivejä kommentoimalla ja sisentämällä. Huom! Edelleen syytä käyttää myös kuvaavia nimiä.

13 Kommentit Kommentit ovat luonnollisella kielellä kirjoitettuja, ohjelman toimintaa selventäviä lauseita. Ongelma: Kuinka erottaa suoritettavaksi tarkoitetut lauseet kommenteista? Ratkaisu: Oma merkintätapa kommenteille. Kurssin pseudokoodissa kahdella kauttamerkillä (/) aloitettu rivi katsotaan kommentiksi. Esim. // Näitä rivejä ei suoriteta, koska ne // alkavat kahdella kauttamerkillä.

14 Kommentit Kommentti liittyy yleensä seuraavaan lauseeseen tai riviin.
Kommentilla voidaan kattaa joskus useampiakin lauseita tai rivejä. Algoritmin tarkoitus voidaan esittää kommenttina. // Lasketaan hypotenuusan pituus. Algoritmi Hypotenuusa // Luetaan kateetit. Lue 1. luku; Lue 2. luku; // Neliöidään. Neliöi 1. luku; Neliöi 2. luku; // Lasketaan pituus. Summaa neliöt; Ota summan neliöjuuri; // Tulos käyttäjälle. Tulosta neliöjuuri;

15 Sisentäminen Sisentäminen tarkoittaa muutaman välilyönnin sijoittamista peräkkäisten ja loogisesti yhteenkuuluvien rivien alkuun siten, että rivit alkavat samalta tasalta. Vaihtoehtoisesti rivejä voidaan sisentää tabulaattorilla, mutta tällöin koodin ulkoasu riippuu tekstieditorista. Välilyöntejä ja tabulaattoria ei saa käyttää sekaisin! Edellä Hypotenuusa-algoritmin rungon rivit on sisennetty, jotta lukijalle on selvää, että juuri sisennetyt rivit muodostavat rungon.

16 Esimerkki: Hypotenuusan pituus
Huonoa pseudokoodia: Algoritmi Hypotenuusa a ← lue(); b ← lue(); tulosta(sqrt(pow(a, 2) + pow(b, 2))); Parempaa pseudokoodia: // Lasketaan suorakulmaisen // kolmion hypotenuusan pituus. Algoritmi Hypotenuusa // Luetaan kateettien // pituudet muuttujiin. akatpit ← lue(); bkatpit ← lue(); // Neliöidään kateettien pituudet // pow-operaatiolla. akatpit2 ← pow(akatpit, 2); bkatpit2 ← pow(bkatpit, 2); // Lasketaan neliöiden summa. summa ← akatpit2 + bkatpit2; // Lasketaan hypotenuusan // pituus eli summan neliöjuuri. hyppit ← sqrt(summa); // Tulostetaan näytölle. tulosta(hyppit);

17 Ohjausrakenteet Päätöksiin ja toistoon liittyvä logiikka voidaan esittää niin sanotuilla ohjausrakenteilla (valinta- ja toistorakenteet), jotka ovat tietyn muotoisia lauseita. Pseudokoodin ohjausrakenne koostuu: Javan kieliopin mukaisesta englanninkielisestä sanasta, joka kertoo mikä rakenne on kyseessä. Kaarisulkujen (( )) sisään sijoitetusta ehdosta, joka saa joko totuusarvon tosi (true, T) tai epätosi (false, F). Yhdestä tai useammasta ohjausrakenteeseen liittyvästä, lauseesta, jotka suoritetaan vain, jos ehto on tosi.

18 Ohjausrakenteet Rakenteelle varattu sana ja rakenteen ehto kirjoitetaan samalle riville. Rakenteeseen liittyvät lauseet alkavat seuraavalta riviltä. Usean lauseen (n > 1) liittyminen ilmaistaan kokoamalla yksittäiset lauseet kootuiksi lauseiksi aaltosulkeiden ({ }) avulla. Esim. sana (ehto) lause 1; Pseudokoodin rakennetta selkeytetään sisentämällä kootun lauseen sisältö. Koottua lausetta ei päätetä puolipisteellä. sana (ehto) { lause 1; … lause n; }

19 Ohjausrakenteet Ohjausrakenteet voivat olla sisäkkäisiä. Esim.
sana (ehto) { lause 1; … lause 1; ... lause m; } lause n; Myös toiseen rakenteeseen sisältyvän rakenteen koottu lause sisennetään. Ohjausrakenteet ovat äärimmäisen ilmaisu-voimaisia: Peräkkäisyyteen lisätty valinta ja toisto riittävät minkä tahansa laskettavissa olevan tehtävän ratkaisuun!

20 Valintarakenteet Valintarakenteilla ilmaistaan formaalisti, kuinka algoritmin suoritus voi “haarautua” ehdosta riippuen. Tässä tärkein työkalu on if-lause, jolla kuvataan mitä täytyy tehdä, jos lauseen ehto on tosi. If-lauseen laajennos, if-else-lause, kuvaa kuinka algoritmi toimii, kun ehto on tosi ja epätosi. If-lause kuvaa yksi- ja else-lause kaksihaaraista päätöstä. Sisäkkäisillä valintarakenteilla voidaan kuvata näitä monimutkaisempia päätöksiä.

21 Valintarakenteet: if-lause
Kuvaa yksittäisen päätöshaaran: lauseet suoritetaan vain ehdon toteutuessa. Sulkujen sisällä olevan ehto (esim. “painava esine” tai “paino > 50”) palauttaa totuusarvon true toteutuessaan. Huom! Jos n = 1, voidaan aaltosulkeet jättää pois. Yleisesti: if (ehto) { lause 1; ... lause n; } Esim. if (painava esine) Kilauta kaverille; T F paino>50 T F ehto

22 Valintarakenteet: if-lause
Algoritmi KeitäTeetä if (teepussit lopussa) Osta teepusseja; Kuumenna pannullinen vettä; Laita teepusseja pannuun; Hauduta 2-3 minuuttia; Ota teepussit pannusta; Alku Loppu F T Kuumenna pannullinen vettä Teepussit lopussa? Osta teepusseja Laita teepusseja pannuun Hauduta 2-3 minuuttia Ota teepussit pannusta

23 Valintarakenteet: if-else-lause
ehto T F Kuvaa kaksihaaraisen päätöksen. Lauseet suoritetaan vaihtoehtoisesti: ehdon ollessa tosi suoritetaan if-osa, muuten else-osa. Huom! Jos n = 1 tai m = 1, voidaan aaltosulkeet jättää pois. Yleisesti: if (ehto) { lause 1; ... lause n; } else { lause m; Esim. if (painava esine) Kilauta kaverille; else Ala kiskoa;

24 Valintarakenteet: if-else-lause
Algoritmi KeitäTeetä if (teepussit lopussa) Osta teepusseja; else { Huokaise helpotuksesta; Laita ostoslistalle; } Ota teepussit pannusta; Alku Loppu F T Kuumenna pannullinen vettä Teepussit lopussa? Osta teepusseja Huokaise helpotuksesta Laita ostoslistalle

25 Sisäkkäiset valintarakenteet
if- ja if-else-lauseita voidaan yhdistää moni-mutkaisemmiksi valinnoiksi. else-osa liittyy aina lähimpään vapaaseen if-osaan. Sisennys auttaa sisäkkäisyyden ymmärtämistä. Algoritmi PolttaaPolttaa lämpö ← lue(); if (lämpö > 15) if (lämpö < 25) tulosta("Sopiva!"); else tulosta("Alkaa olla liian kuuma!"); tulosta("Alkaa olla liian kylmä!");

26 Sisäkkäiset valintarakenteet
// Sanotaan luku sisäkkäisillä // if-else lauseilla. Algoritmi SanoLukujaA numero ← lue(); if (numero = 1) tulosta("Yksi!"); else if (numero = 2) tulosta("Kaksi!"); if (numero = 3) tulosta("Kolme!"); tulosta("En osaa!"); // Sanotaan luku peräkkäisillä // if-lauseilla. Algoritmi SanoLukuB numero ← lue(); if (numero = 1) tulosta("Yksi!"); if (numero = 2) tulosta("Kaksi!"); if (numero = 3) tulosta("Kolme!"); if (numero < 1) tulosta("En osaa!"); if (numero > 3)

27 Toistorakenteet Toistorakenteilla formalisoidaan toistuva suoritus. Toisto voidaan ilmaista yhtäpitävästi while-, do-while- tai for-lauseilla, mutta yleensä jokin näistä on tietyssä tilanteessa luonnollisempi kuin toiset. Toistorakennetta kutsutaan lyhyesti silmukaksi. Silmukan suoritusta ohjataan usein laskurimuuttujalla, jonka avulla pysytään selvillä siitä, monesko kierros on meneillään. Myös lippumuuttujia käytetään ohjaukseen. Virheellinen logiikka voi johtaa silmukan loputtomaan toistoon (ikuinen silmukka).

28 Toistorakenteet: while-lause
Yleisesti: while (ehto) { lause 1; ... lause n; } Lauseita suoritetaan niin kauan kuin ehto on tosi. Suoritus on esiehtoinen, koska ehto on lauseen alussa. Voi siis olla, että ehto on epätosi jo lauseeseen tultaessa. Tällöin while-lause ohitetaan. Esim. while (jaksat) Lue tenttiin; ehto T F

29 Toistorakenteet: while-lause
Algoritmi Heippa1 // Alustetaan laskuri. i ← 0; // Luetaan toistojen lkm. lkm ← lue(); // Silmukoidaan lkm kertaa. while (i < lkm) { tulosta("Heippa!"); i ← i + 1; } i < lkm Alku T lkm ← lue() i ← 0 tulosta ("Heippa") Loppu F i ← i + 1

30 Toistorakenteet: do-while-lause
Yleisesti: do { lause 1; ... lause n; } while (ehto); Jälkiehtoinen toisto: Lauseet suoritetaan ainakin kerran, mikäli tätä ei estetä valintarakenteella. Yhdistettyä lausetta ei voi poistaa, kun n = 1. Esim. do { Lue tenttiin; } while (jaksat); T F ehto

31 Toistorakenteet: do-while-lause
Algoritmi Heippa2 // Alustetaan laskuri. i ← 0; // Luetaan toistojen lkm. lkm ← lue(); // Silmukoidaan, jos tarpeen. if (lkm > 0) do { tulosta("Heippa!"); i ← i + 1; } while (i < lkm); i < lkm Alku T lkm ← lue() i ← 0 tulosta ("Heippa") Loppu F i ← i + 1 lkm > 0

32 Toistorakenteet: for-lause
for (laskurin alustus; ehto; laskurin päivitys) { lause 1; ... lause n; } Lauseiden toisto laskurimuuttujan avulla. Kätevä, kun toistojen lukumäärä tiedetään. Voidaan korvata helposti while-lauseella. Huom! Jos n = 1, aaltosulkeet voidaan jättää pois.

33 Toistorakenteet: for-lause
Ensin: Alustetaan laskuri ja tarkistetaan ehto. Sitten: Jos ehto oli tosi, niin suoritetaan lauseet ja päivitetään laskuria, kunnes ehto on epätosi. ehto T F Päivitä laskuri ... Alusta laskuri

34 Toistorakenteet: for-lause
Algoritmi Heippa3 lkm ← lue(); for ( i←0; i < lkm; i←i+1) tulosta("Heippa!"); Olkoon lkm = 3. Suoritus: i < lkm Alku T i ← 0 lkm ← lue() tulosta ("Heippa") Loppu F i ← i + 1 i i < 3 Mitä tehdään? true Alustus, 1. kierros 1 2. kierros 2 3. kierros 3 false Lopetetaan suoritus

35 Esimerkki: Oven avaaminen
// Aikaisemmin vuokaavion // avulla esitetty algoritmi // oven avaamiseen // pseudokoodina. Algoritmi AvaaOvi // Alustetaan avauskulmaa // esittävä muuttuja. kulma ← 0; // Otetaan kahvasta kiinni. tartu(kahva); // Ovi vedettävää mallia. if (vedettävä(ovi)) // Vedetään kunnes auki. while (kulma < 70º) vedä(kahva); // Ovi työnnettävää mallia else // Työnnetään kunnes auki. while (kulma > -70º) työnnä(kahva);

36 Esimerkki: Keskiarvon laskeminen
// Keskiarvoalgoritmi tarkempana // pseudokoodina. Algoritmi LaskeKeskiarvo // Alustetaan muuttujia. summa ← 0; i ← 1; // Luetaan lukujen lukumäärä. lkm ← lue(); // Luetaan luvut silmukassa. while (i ≤ lkm) { x ← lue(); summa ← summa + x; i ← i + 1; } // Voitiin laskea keskiarvo. if (lkm > 0) { ka ← summa / lkm; tulosta(ka); } // Lukuja ei luettu. else tulosta("Ei lukuja!");

37 Kertaus Koodi jaetaan lauseiksi välimerkillä.
Sisentäminen ja kommentointi tärkeää. Ohjausrakenteilla peräkkäisyyteen liitetään valintoja ja toistoa. Valinta: if- ja if-else. Toisto: while, do-while ja for. Näillä tiedoilla voidaan tehdä pieniä ohjelmia - nyt pitäisi opetella kuinka tämä tapahtuu käytännössä Java-kielellä.


Lataa ppt "3. Pseudokoodi."

Samankaltaiset esitykset


Iklan oleh Google