1. algoritmi

23
1.1 1. Algoritmi

Upload: john

Post on 06-Jan-2016

36 views

Category:

Documents


2 download

DESCRIPTION

1. Algoritmi. Sisällys. Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. Algoritmin määritelmä. Ohjelmointi vaatii abstraktia ajattelua, jonka apuvälineinä käytetään algoritmeja (algorithm). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 1. Algoritmi

1.1

1. Algoritmi

Page 2: 1. Algoritmi

1.2

Sisällys• Algoritmin määritelmä.• Aiheen pariin johdatteleva esimerkki.• Muuttujat ja operaatiot (sijoitus, aritmetiikka ja

vertailu).• Algoritmista ohjelmaksi.

Page 3: 1. Algoritmi

1.3

Algoritmin määritelmä• Ohjelmointi vaatii abstraktia ajattelua, jonka

apuvälineinä käytetään algoritmeja (algorithm).• Algoritmi on vaiheittainen kuvaus jonkin tehtävän

suorittamista varten äärellisessä ajassa. • Algoritmilla on siis alku-, väli- ja loppuvaiheet.• Mikäli äärellinen aika ei riitä, on kyseessä − algoritmin asemasta niin sanottu proseduuri tai− algoritmissa on virhe (ikuinen silmukka).

Page 4: 1. Algoritmi

1.4

AvaaOvi-algoritmi • Tehtävänä kertoa erityisen

älykkäälle robotille kuinka avata ovi.

• Tehdään aluksi joitakin algoritmin muotoilemista helpottavia oletuksia: ovi on kunnossa, paikallaan, kiinni, lukitsematon, ovessa on kahva eikä kahvaa tarvitse painaa.

- Tartu kahvaan.- Vedä kahvasta,kunnes ovi on auki.

Page 5: 1. Algoritmi

1.5

AvaaOvi-algoritmi• Usein ensimmäisessä

hahmotelmassa havaitaan virhe (niin sanottu bugi): Edellä ei huomioitu sitä, että jotkut ovet voi avata myös työntämällä.

- Tartu kahvaan.- Jos ovi on vedettävää mallia, niin vedä kahvasta, kunnes ovi auki.- Muuten työnnä kahvasta,kunnes ovi on auki.

?

Page 6: 1. Algoritmi

1.6

Muuttujat ja operaatiot• Edellinen algoritmi oli hyvin vapaamuotoinen, koska

toimijan oletettiin olevan koneeksi älykäs.• Valitettavasti nykytietokoneet tarvitsevat tyhminä

härveleinä paljon yksityiskohtaisempia ohjeita.• Algoritmia muuttujien ja operaatioiden avulla

tarkentamalla päästään lähemmäs tietokonetta.• AvaaOvi-algoritmi voidaan jakaa karkeasti

toimintoihin ja toimintojen kohteisiin.− Esim. vaiheessa “Tartu kahvaan” on toiminto “tartu” ja

kohde “kahva”.

Page 7: 1. Algoritmi

1.7

Muuttujat ja operaatiot• Tarkemmissa algoritmeissa (ja ohjelmissa) kohteet

esitetään muuttujina ja toiminnot operaatioina.− Myös kohteen osat (esim. ovi ja kahva) ja ominaisuudet

(esim. oven väri) voidaan ajatella muuttujiksi.− Algoritmin epämääräisemmät osat, kuten “ovi on

vedettävää mallia”, voidaan ymmärtää tilanteen mukaan joko muuttujiksi tai toiminnoiksi.

• Ajattelussa siirrytään näin abstraktimmalle tasolle: algoritmissa käsitellään muuttujien sisältämiä tietoja operaatioita suorittamalla.

Page 8: 1. Algoritmi

1.8

Muuttujat• Muuttujalla on nimi (tunnus) ja nimeen liittyvä arvo.• Muuttuja ei ole matematiikasta tuttu käsite, jolla

symboloidaan usein tuntematonta arvoa.− Esim. yhtälössä x + 1 = 0 tuntematon arvo on x.

• Algoritmissa muuttujan arvo on yleensä tunnettu ja erityisesti erona on se, että arvo voi muuttua algoritmin edetessä vaiheesta toiseen.− Muuttuja muistuttaa hieman suuretta eli mitattavaa

ominaisuutta. Esimerkiksi lämpötila (T) on suure, jolla mitataan aineen lämpöenergian määrää.

Page 9: 1. Algoritmi

1.9

Muuttujat• Esim. kurssin ilmoittautumistietoja käsittelevässä

algoritmissa voisi olla muun muassa muuttujat etunimi, sukunimi ja opiskelijanumero ja näillä muuttujilla arvot "Mikko", "Meikäläinen" ja 12345, kun Mikko Meikäläinen ilmoittautuu kurssille. Tiina Terävän ilmoittautuessa muuttujien aikaisemmat arvot korvautuvat Tiinan arvoilla.

Page 10: 1. Algoritmi

1.10

Muuttujat• Yleensä vain yhden muuttujan arvo muuttuu, kun

algoritmi etenee vaiheesta toiseen.− On myös mahdollista, että vaiheesta toiseen

siirryttäessä yhdenkään muuttujan arvo ei muutu.• Algoritmin tila tarkoittaa muuttujien arvoja tietyssä

algoritmin vaiheessa.

Page 11: 1. Algoritmi

1.11

Muuttujat• Algoritmin ymmärrettävyyden kannalta on erittäin

tärkeää, että muuttujan nimestä nähdään minkä tiedon säilyttämiseen muuttujaa käytetään.

• Nimissä käytetään kirjaimia ja numeroita.• Yleensä hyvä nimi on riittävän pitkä.− Esim. syntymäpäivän sisältävälle muuttujalle on parempi

antaa nimeksi vaikkapa syntpvm kuin p.− Lyhyitä nimiä voi käyttää vain, jos erehtymisen vaaraa ei

ole.

Page 12: 1. Algoritmi

1.12

Muuttujat• Muuttujille määritellään lausekielissä yleensä tyyppi: muun

muassa kokonais- ja liukuluvut sekä yksittäiset merkit ja merkkijonot ovat käytettävissä.− Esim. henkilön paino ja pituus on järkevää esittää lukuina, kun

taas etu- ja sukunimi ovat luontevasti merkkijonoja.• Muuttujalle ei voi antaa mittayksikköä.− Esim. henkilön pituus esitetään muuttujana ilman metrin tunnusta

(m), vaikka pituussuureen yksiköksi on sovittu metri.• Muuttujat oletetaan toistaiseksi alkeistyyppisiksi ja niiden

tyyppejä ei määritellä, jotta algoritmien kirjoittaminen ei olisi kurssin alkuvaiheessa liian vaikeaa.

Page 13: 1. Algoritmi

1.13

Operaatiot• Muuttujien arvojen käsittelyyn.− Operaatio saa muuttujan arvon käyttöönsä yksilöimällä

arvon muuttujan nimen avulla.• Perusoperaatioita kutsutaan usein operaattoreiksi ja

niille on annettu omat symbolit.• Operaattorin käsittelemät arvot ovat operandeja.• Perusoperaatioiden lisäksi usein on käytettävissä

monimutkaisempia operaatioita esimerkiksi arvojen tulostamiseen.

Page 14: 1. Algoritmi

1.14

Sijoitusoperaattori• Perusoperaatioista tärkein on

sijoitusoperaattori (←), joka korvaa muuttujan vanhan arvon uudella.

• Yleisesti:muuttujanNimi ← arvo

missä muuttujan nimi (1. operandi) on aina operaattorin vasemmalla puolella ja uusi arvo (2. operandi) operaattorin oikealla puolella.− Sijoitus ymmärretään yleensä

algoritmin vaiheeksi.

• Uusi arvo voi olla pelkkä arvo, muuttujan arvo tai esimerkiksi laskutoimituksen tulos.

• Esim. ilmoittautumisalgoritmi, jossa muuttujiin sijoitetaan pelkkiä arvoja:etunimi ← "Tiina"sukunimi ← "Terävä"opiskelijanumero ← 54321

Page 15: 1. Algoritmi

1.15

Sijoitusoperaattori• Muuttujien arvot ovat samat, mutta säilyvät

erillisinä, kun muuttujan arvo sijoitetaan toisen muuttujan arvoksi.

• Esim. sijoituksia aikaa ja matkaa käsittelevässä algoritmissa:

matka ← 100aika ← 2matka2 ← matka (matka = 100, matka2 = 100)

matka ← 30 (matka = 30, matka2 = 100)

• 3. sijoituksen jälkeen muuttujilla matka ja muuttujalla matka2 on edelleen oma erillinen arvo, vaikka molempien muuttujien arvo on 100.

• Koska arvot ovat erilliset, muuttujan matka2 arvo ei muutu, kun muuttujalle matka annetaan uusi arvo 4. sijoituksessa.

Page 16: 1. Algoritmi

1.16

Sijoitusoperaattori• Esim. sijoituksia elokuva-arvosteluja hallinnoivassa algoritmissa:

nimi ← "Aliens" (Merkkijono suljetaan lainausmerkkeihin.) julkaisuvuosi ← 1986luokka ← 'A' (Yksittäinen merkki suljetaan suoriin

yksinkertaisiin lainausmerkkeihin eli niin sanottuihin hipsuihin.)

Page 17: 1. Algoritmi

1.17

Aritmeettiset operaattorit• Myös tutut aritmeettiset

operaattorit (+ , - , ∙ , /) ovat käytettävissä.

• Aritmeettisen operaattorin operandit ovat arvoja ja tulos on arvo, joka voidaan sijoittaa muuttujaan.

• Laskujärjestys koulusta tuttu.• Sijoitusoperaattori on heikko:

esimerkiksi aritmetiikka suoritetaan ennen sijoitusta.

• Esim. aritmetiikkaa pelkillä arvoilla:tulosumma ← 1 ∙ 2 + 2 ∙ 2missä ensin lasketaan tulot 1 ∙ 2 ja 2 ∙ 2, toiseksi summataan tulot 2 + 4 ja lopuksi sijoitetaan summa muuttujan arvoksi.− Sijoitus muodostaa algoritmin

vaiheen, vaikka ennen sijoittamista lasketaan aritmeettisilla operaatioilla.

Page 18: 1. Algoritmi

1.18

Aritmeettiset operaattorit• Esim. nopeuden laskeminen

muuttujien avulla:nopeus ← matka / aika

Otetaan aluksi käyttöön muuttujien arvot:30 / 2Tämän jälkeen lasketaan osamäärä:15ja lopuksi sijoitetaan osamäärä muuttujan arvoksi:nopeus ← 15

• Huom! Sama muuttuja voi esiintyä myös sijoitus-operaattorin molemmin puolin.

• Esim. lisätään aikaa:aika ← aika + 1jolloin selvitetään muuttujan nykyinen arvo:2 + 1lasketaan summa:3ja sijoitetaan se uudeksi arvoksi:aika ← 3

Page 19: 1. Algoritmi

1.19

Vertailuoperaattorit• Algoritmeissa tarvitaan usein myös

vertailuoperaattoreita (<, =, >, ≤, ≥, ≠).• Oletetaan toistaiseksi, että vertailu palauttaa arvon

kyllä (K) tai ei (E). (Nämä voidaan ajatella totuusarvoiksi tosi ja epätosi.)

• Esim. luku ← 10arvaus ← 13 - 3samat ← luku = arvaus (samat = K)pienempi ← arvaus < 1 (pienempi = E)

Page 20: 1. Algoritmi

1.20

Operaatiot• Perusoperaatioiden lisäksi voidaan olettaa, että on

käytettävissä myös muita operaatioita.• Näille ei ole varattu symbolia - muut operaatiot

tunnistetaan muuttujien tapaan nimen avulla.• Erotetaan muuttujista nimen perään kirjoitettavan

kaarisulkuparin (( )) avulla.• Esim. nimi kiinni on muuttujan tunnus, mutta nimi

kiinni() tarkoittaa operaatiota, jolla voitaisiin esimerkiksi tutkia onko ovi kiinni.

Page 21: 1. Algoritmi

1.21

Operaatiot• Operaatio voi saada parametrina arvon.• Parametri välitetään operaatiolle kirjoittamalla se

sulkujen väliin.• Operaatio voi myös palauttaa arvon (niin sanottu

paluuarvo), joka asetetaan usein muuttujan arvoksi.• Esim. tartu(kahva)

onkoVedettäväMalli ← vedettävä(ovi)arvattava ← arvoLuku()min ← min(400, paino)

Page 22: 1. Algoritmi

1.22

Operaatiot• Sopivat myös kommunikointiin ympäristön kanssa:

Algoritmin laatija voisi käyttää esimerkiksi lue() ja tulosta(arvo) -operaatioita tietojen lukemiseen näppäimistöltä ja tulostamiseen näytölle.

• Esim. LaskeNopeus matka ← lue() aika ← lue() nopeus ← matka / aika tulosta(nopeus)

LaskeNopeus matka ← lue() aika ← lue() nopeus ← matka / aika tulosta(nopeus)

matka

aikanopeus

Page 23: 1. Algoritmi

1.23

Algoritmista ohjelmaksi• Ohjelma on algoritmin konkreettinen toteutus

jollakin ohjelmointikielellä.−Muuttujien ja operaatioiden esitystapa vaihtelee

ohjelmointikielestä toiseen.• Algoritmeja hahmotellaan− toisinaan vuokaavioiden tai −usein pseudokoodin

avulla ennen varsinaista toteutusta.