Tietorakenteet ja algoritmit

Samankaltaiset tiedostot
Tietorakenteet ja algoritmit

Algoritmi ja abstraktio

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Tietorakenteet ja algoritmit

Tietueet. Tietueiden määrittely

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

Lyhyt kertaus osoittimista

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit - syksy

Algoritmit ja tietorakenteet / HL 1 Copyright Hannu Laine. Lista. Yleistä

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

Muita linkattuja rakenteita

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Rakenteiset tietotyypit Moniulotteiset taulukot

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

Loppukurssin järjestelyt

Tieto- ja tallennusrakenteet

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Osoitin ja viittaus C++:ssa

A TIETORAKENTEET JA ALGORITMIT

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Tietorakenteet ja algoritmit

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Tietorakenteet ja algoritmit

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

Loppukurssin järjestelyt C:n edistyneet piirteet

815338A Ohjelmointikielten periaatteet

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

Osoittimet ja taulukot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

1. Olio-ohjelmointi 1.1

Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla:

Olio-ohjelmointi Syntaksikokoelma

811120P Diskreetit rakenteet

Ohjelmoinnin perusteet Y Python

1. Mitä tehdään ensiksi?

Algoritmit ja tietorakenteet / HL Copyright Hannu Laine

Ohjelmoinnin perusteet Y Python

Tehtävä 1. TL5302 Olio-ohjelmointi Koe Malliratkaisuja. Tässä sekä a)- että b)-kohdan toimiva ratkaisu:

ITKP102 Ohjelmointi 1 (6 op)

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Tietotyypit ja operaattorit

13 Operaattoreiden ylimäärittelyjä

Algoritmit 2. Luento 2 To Timo Männikkö

Ohjelmoinnin perusteet Y Python

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

TIE Tietorakenteet ja algoritmit 25

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

812341A Olio-ohjelmointi, I Johdanto

Dynaamiset tietorakenteet

Ohjelmointi 1 C#, kevät 2014, 2. uusintatentti NIMI:

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Osoittimet ja taulukot

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

ITKP102 Ohjelmointi 1 (6 op)

Algoritmit 2. Luento 2 Ke Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Ohjelmoinnin perusteet Y Python

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

TIETORAKENTEET JA ALGORITMIT

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017.

Ohjelmoinnin perusteet Y Python

Ohjelmointi 1 Taulukot ja merkkijonot

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Ohjelmointiharjoituksia Arduino-ympäristössä

18. Abstraktit tietotyypit 18.1

Ohjelmoinnin perusteet Y Python

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

Algoritmit 1. Luento 4 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

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

Ohjelmoinnin perusteet Y Python

Monadeja siellä, monadeja täällä... monadeja kaikkialla? TIES341 Funktio ohjelmointi 2 Kevät 2006

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

ITKP102 Ohjelmointi 1 (6 op)

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

Ohjelmoinnin perusteet Y Python

1. Omat operaatiot 1.1

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

3. Binääripuu, Java-toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

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

Geneeriset tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 1. Luento 1 Ti Timo Männikkö

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä

Transkriptio:

Tietorakenteet ja algoritmit Kurssin sisältö pääpiirteittäin Tarvittavat pohjatiedot Avainsanat Abstraktio Esimerkkiohjelman tehtäväkuvaus Abstraktion käyttö tehtävässä Abstrakti tietotyyppi Hyötyjä ADT:n käytöstä Operaattorien vahvuuskaavio Lisäesimerkki abstraktiosta (Neliöjuuren laskenta) 1

Kurssin sisältö pääkohdittain Abstraktio Abstraktit tietotyypit (ADT) ADT:t yleiseen käyttöön pino jono lista puut muita tietorakenteita Työkaluja tietorakenteiden ja algoritmien toteutukseen dynaamisen muistin käyttö rekursio oliot Funktio-osoittimet 2

Tarvittavat pohjatiedot C-kielen taito Erityisesti Funktiot ja parametrit Osoittimet Tietueet 3

Avainsanat Abstraktio Yleisyys Uudelleenkäytettävyys Ohjelmistokomponentti 4

Abstraktio yleensä Abstraktio tarkoittaa ylemmän tason käsitteiden käyttöä. Ihminen tarvitsee abstraktiota selvitäkseen monimutkaisista asioista. Abstraktion avulla asioiden monimutkaisuuden ei anneta häiritä ajattelua. Monimutkaisista asioista voidaan muodostaa useampitasoinen hierarkiarakenne. Voidaan käyttää myös ohjelmoinnissa. Päätehtävä Osatehtävä1 Osatehtävä2 Osatehtävä3 Osateht1.1 Osateht1.2 Osateht3.1 Osateht3.2 5

Esimerkkiohjelman tehtäväkuvaus Suunnistajan ohjelman tehtäväkuvaus Kirjoita ohjelma, jolle syötetään lähtöpisteen ja tavoitepisteen koordinaatit. Ohjelma laskee ja tulostaa kuljettavan matkan lähtöpisteestä tavoitepisteeseen. 6

Ensimmäinen ratkaisuyritys Käydään läpi tunnilla. Ei käytetä abstraktiota. (Sivu 15) http://users.metropolia.fi/~pasitr/2015-2016/ti00ac30-3006/luento/01/ratkaisut/tietorak_1_s15.pdf http://users.metropolia.fi/~pasitr/2015-2016/ti00ac30-3006/luento/01/ratkaisut/tietorak_1_s15.cpp Nähdään kuinka asia tehdään. Vaikea nähdä mitä oikeastaan tehdään ja mitä asiakokonaisuuksia käsitellään 7

Toinen ratkaisuyritys Käydään läpi tunnilla. Käytetään toimintojen abstraktiota. (Sivu 16) http://users.metropolia.fi/~pasitr/2015-2016/ti00ac30-3006/luento/01/ratkaisut/tietorak_1_s16.pdf http://users.metropolia.fi/~pasitr/2015-2016/ti00ac30-3006/luento/01/ratkaisut/tietorak_1_s16.cpp Funktiot Parempi kuin ensimmäinen yritys. Nähdään helposti mitä tehdään. Käsiteltävän datan muodostamat asiakokonaisuudet vielä hankala havaita. 8

Lopullinen ratkaisu Käydään läpi tunnilla. Käytetään toimintojen abstraktiota ja tietojen abstraktiota. (Sivu 17) http://users.metropolia.fi/~pasitr/2015-2016/ti00ac30-3006/luento/01/ratkaisut/tietorak_1_s17.pdf http://users.metropolia.fi/~pasitr/2015-2016/ti00ac30-3006/luento/01/ratkaisut/tietorak_1_s17.cpp Tietueet Nähdään helposti mitä tehdään ja mitä asiakokonaisuuksia käsitellään. Huomautus. Verkossa on täydellinen esimerkki (Moniste1, Esimerkki 1) 9

Abstrakti tietotyyppi Olemme itse asiassa kehittäneet abstraktin tietotyypin piste (tai point). Saadaan yhdistämällä tietojen ja toimintojen abstr. Määritelmä. Abstrakti tietotyyppi on tietotyyppi, joka sisältää kaikki jonkin asian kuvaamiseksi tarvittavat tietokentät ja tämän tietotyypin käsittelyyn tarvittavat funktiot ns. operaatiofunktiot. Pisteen tapauksessa siis abstrakti tietotyyppi on tyyppi Tpoint ja funktiot void read_point(tpoint *p, char *prompt); void print_point(tpoint p); float distance(tpoint p1, Tpoint p2); jne 10

Lopputulos Lopputulos: Ihmisen luonnostaan käyttämää abstraktiomallia voidaan käyttää ohjelmoinnissa sellaisenaan. Näin ohjelmista saadaan helposti ymmärrettäviä ja yksinkertaisia. Näin on saatu ratkaistua probleema, joka seuraa siitä, että ihminen kehittää ongelman ratkaisun kuvauksen, tietokone seuraa näitä ohjeita. Nyt ohjelma vastaa ihmisen ajattelumallia ja on yhtä aikaa tietokoneen ymmärrettävissä 11

Välittömät hyödyt Jo pikku ohjelmointitehtävien suorittamisessa saatuja etuja tästä lähestymistavasta: Ohjelmasta tulee selkeä, kun nähdään mitä tehdään (eikä vain kuinka). Ohjelma voidaan kehittää step-by-step menetelmällä ja osat voidaan jopa testata valmiiksi erikseen. Ohjelmiston ylätason toteutus tulee erotettua alatason ratkaisuista. Alatason komponentti voidaan vaihtaa muuttamatta ylätasolla mitään. Komponentti soveltuu muunkinlaisten sovellusten rakentamiseen kuin suunnistajan ohjelma. Kahteen jälkimmäiseen ja muihin etuihin tutustutaan myöhemmin. 12

ADT-ajattelu sopii kaikkiin sovelluksiin Esimerkkejä: kompleksilukujen käsittelysovellus matriisien käsittelysovellus urheilukilpailujen tulospalvelujärjestelmä mittausten analyysiohjela henkilöryhmien hallinta jne Tietotyyppi: Thloryhma Operaatiofunktiot: lue_hlo_ryhma tulosta_hlo_ryhma jne Tietotyyppi: Turheilulaji Operaatiofunktiot: ilmoittautuminen numeroiden_arvonta ajanotto_ja_mittaus tuloslistan_muodostaminen jne Tietotyyppi: Tmittaukset (tai Tmittaussarja) Operaatiofunktiot: lue_mittaukset tulosta_mittausket laske_ka jne 13

Operator precedence Operator Associativity () [] ->. Left to right! ~ + - ++ -- & * (type) Right to left (unary) * / % Right to left + - Left to right << >> Left to right < <= > >= Left to right ==!= Left to right & Left to right (bit-wise and) ^ Left to right (bit-wise xor) Left to right (bit-wise or) && Left to right (logical and) Left to right (logical or)? : (condition) Right to left = *= /= %= += -= &= ^= = <<= >>= Right to left, Left to right 14

Ensimmäinen ratkaisuyritys (koko ohjelma) int main(void) { float x1, y1, x2, y2, et, dx, dy; printf( Anna lähtöpiste : ); scanf( %f%f, &x1, &y1); printf( Anna tavoitepiste : ); scanf( %f%f, &x2, &y2); dx = x2 x1; dy = y2 y1; et = sqrt(dx*dx + dy*dy); printf( Matka on %f\n, et); return 0; } 15

Toinen ratkaisuyritys (koko ohjelma) int main(void) { float x1, y1, x2, y2, et; lue_piste(&x1, &y1, Anna lähtöpiste ); lue_piste(&x2, &y2, Anna tavoitepiste ); et = laske_matka(x1, y1, x2, y2); tulosta_matka(et); return 0; } 16

Lopullinen ratkaisu (koko ohjelma) int main(void) { Tpiste p1, p2; float suunta, et; lue_piste(&p1, Anna lähtöpiste ); lue_piste(&p2, Anna tavoitepiste ); et = laske_matka(p1, p2); tulosta_matka(et); return 0; } 17

Lisäesimerkki (Newtonin menetelmä) 1/3 Ohjelma laskee sille syötetyn luvun neliöjuuren. Tämä on esimerkki huonosta ohjelmointityylistä. Ohjelmasta voidaan lukea kuinka asiat on tehty. Tästä ei voida lukea sitä mitä tai miksi asioita tehdään. int main (void) { } float a, b; printf(\nenter a radicand ); scanf( %f, &a); printf( \nenter the first approximation); scanf( %f, &b); while (fabs(a-b*b) >=EPS) { b = (a/b + b) / 2.0; } printf( \nsquare root is %f, b) ; return 0; Ei ole käytetty abstraktiota 18

Lisäesimerkki (Newtonin menetelmä) 2/3 Tämä on esimerkki paremmasta ohjelmointityylistä. Pääohjelma on melko luettava ja siitä nähdään mitä ja miksi tehdään. Se kuinka asiat tehdään on piilotettu häiritsemästä ylemmän tason ajattelua. int main (void) { } float radicand, approximation; int good_enough; radicand = read("enter radicand :"); approximation = read("enter 1st approximation :"); good_enough = test(approximation, radicand); while (!good_enough) { approximation = improve(approximation, radicand); good_enough = test(approximation,radicand); } write(approximation, "The calculated square root is :" ); return 0; On käytetty abstraktiota 19

Lisäesimerkki (Newtonin menetelmä) 3/3 Alla on Newtonin menetelmän matemaattinen kuvaus: x i+1 = (a / x i + x i ) / 2, i = 0, 1, 2, 3,... x i 2 - a < 20