2.8 TIETO- JA TALLETUSRAKENTEET

Slides:



Advertisements
Samankaltaiset esitykset
18. Abstraktit tietotyypit
Advertisements

15. Loogiset operaatiot.
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
@ Leena Lahtinen Helia TIETO JA TIETOKONEOHJELMA  TIETOKONEOHJELMA KÄSITTELEE TIETOJA  TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA.
© Hannu Laine 1 Tietorakenteet ja algoritmit Funktio-osoittimet Funktio-osoittimen ja taulukko-osoittimen vertailu Funktio-osoittimen käyttötapoja.
JavaScript (c) Irja & Reino Aarinen, 2007
Relaatiomalli •Ted Codd 1970 •Matemaattinen perusta •Helppo toteuttaa •Helppo omaksua •Käytetyin tietomalli •Muodostaa perustan kurssin myöhemmille asioille.
Binääripuut Kaksihaaraista puuta sanotaan binääripuuksi:
2.8.3 Abstraktit tietotyypit
EXtensible Markup Language
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
22. Taulukot.
Rakenteinen ohjelmointi
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
C-ohjelmointi, kevät 2006 Taulukot Binääritiedostot Luento
AS Automaation signaalinkäsittelymenetelmät
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
OLIO-OHJELMOINTI PERUSTEET PERUSTIETOTYYPIT
RSA – Julkisen avaimen salakirjoitusmenetelmä Perusteet, algoritmit, hyökkäykset Matti K. Sinisalo, FL.
5.3.3 Koodin generointi Koodin generointi tarkoittaa objektikoodin eli konekielisen ohjelman tuottamista. Generointi jakautuu kolmeen osatehtävään: 1.Muistin.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
Ohjelman perusrakenteet
TIETO JA TIETOKONEOHJELMA TIETOKONEOHJELMA KÄSITTELEE TIETOJA TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA MENETELMILLÄ.
2. Vuokaaviot.
© Lammi-Niskala-Kossarev ADT:n toteutus Imperatiivinen paradigma Imperatiivinen paradigma toimenpiteet aktiivisia, tiedot passiivisia toimenpiteet.
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Relaatioalgebra (1) Kokoelma relaatioiden käsittelyyn tarkoitettuja operaatioita Operaatiot muuntavat relaatioita uusiksi relaatioiksi Muodostaa perustan.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
Visual Basic -ohjelmointi
String-vertailusta ja Scannerin käytöstä (1/2)
Tietotyypit Tietotyyppi määrittää muuttujan sisältämän datan luonnetta, muistista tarvittavaa tilaa ja sitä, millaisia operaatioita siihen voidaan kohdistaa.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
22. Taulukot.
6. Relaatioalgebra ja relaatiokalkyyli
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
1 Ohjelmointikielten varhaishistoria Esa-Matti Miettinen
5. Lineaarinen optimointi
Rinnakkaisuus Järjestelmässä, jossa voi olla useita prosesseja rinnakkain suorituksessa voi tulla tilanteita, joissa prosessien suoritusta täytyy kontrolloida.
Aakkosnumeerinen tieto Tarkoittaa kaikkea muuta tietoa paitsi laskentaan tarkoitettuja lukuja Muuttujan tietosisältö on siis tekstitietoa Muuttujan tietotyypiksi.
Visual Basic -ohjelmointi
Antti-Jussi Lakanen Nuorten peliohjelmointi 2009 / Jyväskylän yliopisto.
Java - Tietokanta. JDBC=Java database connectivity  ODBC:n kaltainen ohjelmointiliittymä SQL- tietokantoihin  Koostuu Java-kehitysympäristön (esim.
Javascript 2: Ohjelmointikielen ominaisuudet Jaana Holvikivi Metropolia.
Visual Basic -ohjelmointi
XSL Teppo Räisänen
15. Ohjelmoinnin tekniikkaa
FOR i := 0...N-1 DO summa := summa + A[i] tulo := tulo * A[i] ENDFOR.
Ohjelma Mikro-ohjelmointi Symbolinen konekieli Osoitustavat.
Hajakoodaus Talletetaan alkiot avain-indeksoituun taulukkoon Hajakoodausfunktio Menetelmä avain-indeksin laskemiseen avaimesta Törmäyksen selvitysstrategia.
Muuttujan osoite int a=1; 0xbfffea64 /* tulostetaan a:n osoite*/ printf(“%p\n”, &a); 0xbfffea68 /* tulostetaan a:n osoite + 1*/ printf(“%p\n”, &a+1); /*
Linkitetty lista Joukko alkioita jotka on kytketty toisiinsa linkeillä Listan alkio sisältää talletettavan datan ja linkin seuraavan alkioon Alkion lisääminen.
MapInfon tiedostot TAB – Tiedosto, jonka avulla tietokanta avataan MapInfossa. Tiedostossa tietoja kentistä ja koordinaattijärjestelmästä. DAT, XLS. TXT.
Scalan valmiit kokoelmat. Mikä on kokoelma?  Tietorakenne jonka tehtävänä on pitää kirjaa (useista) tietyn tyyppisistä arvoista. Kokoelman sisältämiä.
String-vertailusta ja Scannerin käytöstä (1/2)
2. Taulukot.
13. Loogiset operaatiot.
15. Ohjelmoinnin tekniikkaa
Aakkosnumeerinen tieto
10. Javan ohjausrakenteet
14. Hyvä ohjelmointitapa.
Aakkosnumeerinen tieto
2. Taulukot.
15. Ohjelmoinnin tekniikkaa
Kontrollirakenteet laajemmin
13. Loogiset operaatiot.
TIETO JA TIETOKONEOHJELMA
3. Attribuutit.
4. Luokan testaus ja käyttö olion kautta
Esityksen transkriptio:

2.8 TIETO- JA TALLETUSRAKENTEET Edellä olleissa esimerkeissä algoritmien käsittelemä tieto on ollut rakenteeltaan yksinkertaista, kuten lukuja, merkkejä totuusarvoja. Esimerkiksi asetuslauseessa r:=(k*p*t)/100 r, k, p, ja t ovat yksinkertaisia (ei-rakenteisia) muuttujia. Reaalimaailmassa on tarvetta myös edellisiä monimutkaisempien tietokokonaisuuksien käsittelyyn.

Tällaiset loogisesti yhteenkuuluvat tiedot muodostavat tietorakenteen (data structure). Algoritmien pystyvät käsittelemään näitä rakenteita ja usein algoritmit kuvaavat prosesseja, jotka muuntavat yhden tietorakenteen toiseksi (esim. syöttötiedot tulostiedoksi).

Yksittäisellä tietoalkiolla on tyyppi, joka kertoo, joka kertoo millaisia arvoja tarkasteltava tietoalkio voi saada ja millaisia operaatioita alkioon voi soveltaa. Tietorakenteet muodostetaan tietoalkioista. Ohjelmointikielissä on valmiiksi määritelty kaikki yleisimmät yksinkertaiset tietotyypit. Lisäksi kielissä on välineet tietorakenteiden konstruoimiseksi.

Tavallisimpia yksinkertaisia tyyppejä: reaaliluvut (Real) kokonaisluvut (Integer) totuusarvot (Boolean) merkit (Char) ’Tyyppi’ tarkoittaa kahta asiaa: minkälaisia arvoja ko. tietoalkio voi saada ja mitkä operaatiot ovat mahdollisia.

Esimerkki: Tyyppi Integer: ohjelmointikielissä ilmoitetaan millä vaihteluvälillä kokonais- lukujen tulee olla (esim. -32678  32767 tai usein jokin tätä suurempi vv.) Lisäksi ilmoitetaan mitä kokonaisluku- operaatioita on käytössä, esim.: + - * / DIV MOD

Vastaavat arvoalueet ja operaatiot ilmoitetaan kaikille muillekin yksinkertaisille perustyypeille kunkin kielen yhteydessä.

Tietorakenteisiin liittyy kaksi ominaisuutta: abstrakti malli eli abstrakti tietotyyppi ADT (abstract data type) talletusrakenne (storage structure)

Mitä ADT tarkoittaa ? tarkastellaan mallin mukaisten alkioiden oleellisia piirteitä malli on riippumaton käytettävästä ohjelmointikielestä alkiot kuvataan niiden käytöksen avulla (operaatiot ja niiden vaikutus)

Abstraktien tietotyyppien avulla siis mallinnetaan tietoalkioita ohjelmointikielistä ja talletusrakenteista riippumattomasti. Tässä tarkastellaan seuraavia yleisimpiä adt- tyyppejä: lista, jono, pino, puu ja graafi. Niiden toteutukseen käytetään mm. seuraavia talletusrakenteita: tietue, taulukko ja linkitetty rakenne.

2.8.2 Talletusrakenteita Tietue (record) Taulukko (array tai table) Linkitetty rakenne

Tietue Loogisesti yhteenkuuluvat tiedot kootaan yhdeksi tietorakenteeksi, jolle annetaan nimi. Tietue (record) muodostuu kentistä (field). Oliokielissä likimain vastaava rakenne on luokka (class).

Tietue Esimerkki: yhdestä henkilöstä tieto- järjestelmään kerättävät tiedot voidaan koota tietueeksi. Tällöin kenttinä voisivat olla mm. sukunimi, etunimi, syntymäaika, osoite,… Joissakin kielissä tietueet määritellään RECORD/END –määreellä:

Tietue esimerkiksi henkilötietojen tietue: henkilotiedot = RECORD sukunimi: String; etunimi: String; osoite: String; saika: Date; … END

Tietue Tietueiden käsittely on yksinkertaista: olkoon kahden henkilön tiedot kahdessa eri em. tyyppisessä tietueessa A ja B. Silloin kenttiin viitattaisiin merkinnällä (pistenotaatio): A.sukunimi, B.sukunimi, A.saika jne. Kenttiä voidaan käyttää ohjelmissa kuten muuttujia.

Tietue Tietueoperaatioita: arvon sijoittaminen tietueen kenttään tietueen yksittäisen kentän käyttäminen tietueen kopiointi kokonaisena.

Taulukko Taulukko (array) määritellään ohjelman alussa tietyn kokoiseksi rakenteeksi. Se koostuu keskenään samaa tietotyyppiä olevista alkioista, ’ruuduista’. Taulukko voidaan käsittää rakennelmaksi, jossa on rivejä ja sarakkeita (ns. kaksiulotteinen taulukko).

Taulukko, jossa on 8 riviä ja 5 saraketta:

Taulukko Taulukon alkioihin (ruutuihin) päästään käsiksi indeksien avulla. Merkintä X[4,2] tarkoittaa X- nimisen taulukon 4. rivillä, 2. sarakkeessa olevaa ruutua:

Taulukko Taulukko voi olla 1-ulotteinen, 2-ulotteinen, 3-ulotteinen, ….. Edellisen sivun taulukko on 2-ulotteinen. 1-ulotteinen taulukko = vektori Indeksoitu yhdellä indeksillä, esim. V[5]

Taulukko 2-ulotteinen taulukko (matriisi), indeksointi kahdella indeksillä, esim. edellä X[4,2]

Taulukko 3-ulotteinen taulukko indeksointi kolmella indeksillä, esim. edellä X[2,4,5]

Taulukko Esimerkki (moniste s. 58): Vaihtolajittelualgoritmi. Nimilista on talletettu 1-ulotteiseen taulukkoon T. MODULE valintalajittelu (T, n) FOR i:=1, 2, …, n-1 DO FOR j:=i+1, i+2, …, n DO IF T[i] > T[j] THEN vaihda (T[i],[j]) ENDIF ENDFOR ENDMODULE

Taulukko Esimerkki (moniste s. 58): Paikkakuntien välinen etäisyystaulukko (km). Esim. kuudelle kaupungille tarvitaan 6 x 6 –kokoa oleva taulukko: Iisalmi Jyväs-kylä Kuopio Pieksä- mäki Suonen-joki Var- kaus 254 85 174 136 223 169 80 118 129 89 51 138 38 49 Suonen- joki 87 Varkaus

Taulukko MODULE LähinKaupunki(Etä, a) RETURNS a:ta lähinnä olevan kaupungin nimen lähinmatka:=100000 (* jokin iso luku alkuarvoksi *) FOR j:=Iisalmi, …, Varkaus DO IF a <> j THEN IF Etä[a,j] < lähinmatka THEN lähinmatka:=Etä[a,j] lähin:=j ENDIF ENDFOR RETURN lähin ENDMODULE

Taulukko Huom: Taulukon indekseinä käytettiin paikkakuntien nimiä (ei ole mahdollista kaikissa o-kielissä). Taulukossa kaikki etäisyydet kahteen kertaan !

Taulukko MODULE taulusumma (Taulu, m, n) RETURNS lukujen summa Esimerkki: n x m –kokoa olevan taulukon sisältämien lukujen summa: MODULE taulusumma (Taulu, m, n) RETURNS lukujen summa summa:=0 FOR i:=1, …, n DO FOR j:=1, …m DO summa:=summa+Taulu([i,j] ENDFOR RETURN summa ENDMODULE

Linkitetty rakenne Yleensä linkitetty rakenne on yhteenkuuluvien tietueiden muodostama kokoelma. Tietueet liitetään eli linkitetään toisiinsa erityisten osoitin- eli linkki- kentän avulla. Rakennelma toteutetaan tietokoneen keskusmuistissa, osoittimet ovat siten tietokoneen muistipaikkojen numeerisia arvoja. Linkitetyn rakenteen tietoalkio sisältää siis varsinaisen datan ja osoittimen seuraajaan. (Joskus osoittimia on useampia kuin yksi).

Linkitetty rakenne data 1 … data n osoitin seuraajaan Tietoalkion rakenne on periaatteessa seuraavanlainen, käytetään yhtä osoitinta:

Linkitetty rakenne L … Yllä on yksiosoittiminen eli yhteen suuntaan ketjutettu (lineaarinen) lista L. Rakenne on rekursiivinen: jokaista alkiota seuraa lista, tosin alkuperäistä pienempi. Poikkeuksena viimeinen alkio: sillä ei ole seuraajaa (”maadoitusmerkki”).

Linkitetty rakenne L … L’ Yllä on kaksiosoittiminen eli kahteen suuntaan ketjutettu (lineaarinen) lista L.

Linkitetty rakenne L … Ylläolevassa listassa on käytössä rengas- rakenne: viimeisestä alkiosta on osoitin listan alkuun. LISTOJEN TOTEUTUSTA TARKASTELLAAN KOHDASSA 2.8.3.2.

Linkitetty rakenne, mitä hyötyä: alkioiden poisto ja lisäys helppoa dynaaminen rakenne: alkioita otetaan listaan vain tarpeen mukaan (vrt. esim. vektorit, jotka yleensä tulee määritellä kiinteän kokoisiksi). Esimerkiksi POISTO listan keskeltä: L 1 2 3 … … L 1 3 … …