Tietorakenteet ja algoritmit

Samankaltaiset tiedostot
Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Algoritmi ja abstraktio

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

// // whiledemov1.c // #include <stdio.h> int main(void){ int luku1 = -1; int luku2 = -1;

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

Tietorakenteet ja algoritmit

Loppukurssin järjestelyt C:n edistyneet piirteet

3. Binääripuu, Java-toteutus

Tietorakenteet ja algoritmit

TIETORAKENTEET JA ALGORITMIT

Lyhyt kertaus osoittimista

Loppukurssin järjestelyt

Tietueet. Tietueiden määrittely

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

Tietorakenteet ja algoritmit

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

Moduli 5: Kehittyneitä piirteitä

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

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

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

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

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

Osoittimet ja taulukot

Rakenteiset tietotyypit Moniulotteiset taulukot

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

C-kieli mahdollistaa hyvin tiiviin ja samalla sekavan tavan esittää asioita, kuitenkin hyvän ohjelman tulisi olla mahdollisimman helppolukuinen ja

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Muuttujien roolit Kiintoarvo cin >> r;

C-ohjelmointi, syksy Modulaarinen ohjelmointi. Luento C-ohjelmointi Syksy

#include <stdio.h> // io-toiminnot. //#define KM_MAILISSA int main( ){

Modulaarinen ohjelmointi

Demo 6 vastauksia. 1. tehtävä. #ifndef #define D6T1 H D6T1 H. #include <iostream> using std::ostream; using std::cout; using std::endl;

1. luento. Ohjelmointi (C) T0004 Syksy luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

Binäärioperaatiot Tiedostot ja I/O

Modulaarinen ohjelmointi Kertaus osoittimista

Metaohjelmointia ja muuta hauskaa

Tiedosto on yhteenkuuluvien tietojen joukko, joka tavallisimmin sijaitsee kiintolevyllä, muistitikulla tai jollakin muulla fyysisellä tietovälineellä.

1. Mitä seuraava ohjelma tulostaa? Vastaukseksi riittää yksi rivi joka esittää tulosteen. (6 p)

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

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

Tietotyypit ja operaattorit

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

2. C-kieli ja ongelmanratkaisu

Attribuuttikieliopit

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

Osoittimet ja taulukot

Binäärioperaatiot Tiedostot ja I/O

6.3. AVR_rauta. EEPROM-muisti pva

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

int main(void) int **matrix; matrix : malloc(5 * sizeof(int *) ); *matrix : malloc(20 * sizeof(int) ); #include <stdlib.h> #include <stdio.

A TIETORAKENTEET JA ALGORITMIT

Plagioinnin tunnistaminen lähdekielisistä ohjelmista

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

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

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

Dynaamiset tietorakenteet

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

ITKP102 Ohjelmointi 1 (6 op)

Java-kielen perusteet

Efficiency change over time

Modulaarisessa ohjelmoinnissa jaetaan ohjelma osiin (moduuleihin), jotka ovat yksinkertaisia ja lyhyitä.

Laiteläheinen C-kieli osa 1 pva

LAS-TIEDOSTON SISÄLTÖ LIITE 2/1

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Moduli 2: Osoittimet ja taulukot. Joel Huttunen

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Ohjeet. AS C-ohjelmoinnin peruskurssi Aalto-yliopiston sahkotekniikan korkeakoulu Tentti , Raimo Nikkila

Ohjelmoinnin perusteet Y Python

2 Haku ja lajittelu. 2.1 Luvun hakeminen taulukosta X?? n-1. Haku ja lajittelu 35

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

C-ohjelmointi: Osoittimet

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Luennon sisältö Tyypit int, char, float, double signed, unsigned short, long Vakiot const Rakenteet if, for, while, switch, do-while Syöttö ja tulostu

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

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

if-lauseen yksinkertaisin muoto on sellainen, missä tietyt lauseet joko suoritetaan tai jätetään suorittamatta.

\+jokin merkki tarkoittaa erikoismerkkiä; \n = uusi rivi.

21. oppitunti. Esikäsittelijä. Osa. Esikäsittelijä ja kääntäjä

Huonon suunnittelun oireita. Hajuja ja sääntöjä. Hyvän suunnittelun periaatteet. Paha haju

Ohjelmoinnin jatkokurssin opetuksen kehitys

Apuja ohjelmointiin» Yleisiä virheitä

Luennon sisältö. Taulukot (arrays) (Müldnerin kirjan luku 10) Yksiulotteiset taulukot. Mikä taulukko on? Taulukko-osoitin. tavallinen osoitin

C-ohjelmointi, syksy 2006

C-ohjelmointi, syksy Yksiulotteiset taulukot Moniulotteiset taulukot Dynaamiset taulukot. Binääritiedostot. Luento

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmoinnin perusteet Y Python

13. Loogiset operaatiot 13.1

Kielioppia: toisin kuin Javassa

ASCII-taidetta. Intro: Python

Transkriptio:

Tietorakenteet ja algoritmit Useampitasoiset ADT:t Käytetään esimerkkiohjelmaa Ratkaisuyritys 1 Ratkaisuyritys 2 Lopullinen ratkaisu Lopullisen ratkaisun toteutusyritys Lopullisen ratkaisun oikea toteutus Ympyrän kuvauksen hierarkiakaavio 1

Useampitasoinen abstraktiomalli Asian monimutkaistuessa abstraktiomallissa tarvitaan useampia tasoja, jotta asia voidaan hallita (kts sivu 5 osassa 1). Käytämme taas esimerkkiohjelmaa asian valaisemiseksi. 2

Esimerkkiohjelman tehtäväkuvaus Ympyräohjelman tehtäväkuvaus Kirjoita ohjelma, jolle syötetään ympyrän määrittelevät tiedot. Ohjelma laskee ja tulostaa ympyrän pinta-alan ja myös syötetyt ympyrän tiedot. 3

Ensimmäinen ratkaisuyritys int main(void) { float cpx, cpy, r, area; printf( Anna keskipisteen x ja y : ); scanf( %f%f, &cpx, &cpy); printf( Anna säde : ); scanf( %f, &r); area = PII * r *r; printf( Ympyrän ala on %f\n, area); } Ylemmän tason käsitteitä ei näy ollenkaan. Mitkä tiedot määräävät ympyrän? printf( Keskipiste on (%f, %f). Säde on %f\n, cpx, cpy, r); return 0; 4

Toinen ratkaisuyritys Ympyrän määrittelevät tiedot ovat keskipiste ja säde (ei 3 lukua). Hyödynnetään aikaisemmin kehitetty ADT point keskipisteen esittämisessä. int main(void) { Tpoint cp; float r, area; read_point(&cp, Anna keskipiste : ); printf( Anna säde : ); scanf( %f, &r); area = PII * r *r; printf( Ympyrän ala on %f\n, area); print_point(&cp, Ympyrän keskipiste ); return 0; } Tämä on parempi ratkaisu. Mutta mitä tehtävässä pitikään tehdä ja mitä asiaa käsitellä? 5

Lopullinen ratkaisu Tehtävässä piti lukea ympyrän tiedot, laskea ympyrän ala jne. Näitä ei näy edellisen sivun ratkaisussa. void main(void) { Tcircle c; float area; read_circle(&c); area = circle_area(&c); print_circle(&c); printf("%f", area); } 6

Lopullisen ratkaisun toteutusyritys typedef struct { float kpx; float kpy; Ei hyvä! float r; } Tcircle; void read_circle(tcircle* c, const char* prompt); void print_circle(const Tcircle* c, const char* prompt); float circle_area(const Tcircle* c); jne Tällä voisi toteuttaa edellisen sivun lopullisen ratkaisun, mutta... Ei hyödynnetä (uudelleen käytetä) jo kerran tehtyä pistettä keskipisteen esittämiseen. 7

Lopullisen ratkaisun oikea toteutus 1/2 typedef struct { Tpoint cp; float r; } Tcircle; void read_circle(tcircle* c, const char* prompt); void print_circle(const Tcircle* c, const char* prompt); float circle_area(const Tcircle* c); jne Nyt hyödynnetään (uudelleenkäytetään) jo kerran tehtyä pistettä keskipisteen esittämiseen. 8

Lopullisen ratkaisun oikea toteutus 2/2 Toteutetaan malliksi yksi ADT circlen käyttöfunktioista: void read_circle(tcircle* c, const char* prompt) { printf( %s, prompt); read_point(&c->cp, Anna keskipiste ); printf( Anna säde : ); scanf( %f, &c->r); } Huomautus. Sääntönä on, että ympyrän käyttöfunktioiden toteutuksissa, käytetään keskipisteen käsittelyyn pisteen käyttöfunktioita. Olisi väärin lukea keskipiste näin scanf( %f%f, &c->cp.x, &c->cp.y); Jos keskipisteen (alakomponentin) toteutustapa muuttuisi, niin pitäisi muuttaa myös ympyrän (pääkomponentin) toteutusta. Ylemmässä oikein tehdyssä tapauksessa ympyrän funktioita ei tarvitse muuttaa vaikka pisteen toteutus muuttuu, kunhan interface säilyy. 9

Ympyrän hierarkiamalli Ei sallittu Interface Ympyrä Interface Keskipiste Interface Säde x y 10

Miten saadaan ympyrän header ja musta laatikko Pisteen tapauksessa opimme, että pistekomponenttia käytetään otsikkotiedoston point.h ja mustan laatikon point.obj avulla. Kuinka saadaan vastaavat circle.h ja musta laatikko circle. Sitä tarkastellaan seuraavaksi. Edellytyksenä on, että pistettä voidaan käyttää sellaisenaan (siis header-tiedoston ja linkattavan mustan laatikon avulla) erikseen ja myös ympyrän toteutuksessa. Lisäksi sovellusohjelmoijan tulee voida käyttää ympyrää ympyränä ilman edes tietoa pisteestä tai myös yhdessä pisteen kanssa. Näiden vaatimusten täyttämiseen tarvitaan ehdollista kääntämistä ja kirjaston luontia. 11

Ehdollinen kääntäminen 1 Application programmers view: Case 1 (Application programmer needs only circles) #include "circle.h" void main (void) { Tcircle c; read_circle(&c);... } file circle.obj (or circle.lib) is linked Case 2 (Application programmer needs circles and points) #include "circle.h" #include "point.h" void main (void) { Tcircle c; Tpoint p; read_circle(&c);... } files circle.obj (or circle.lib) and point.obj are linked 12

Ehdollinen kääntäminen 2 A component programmer's view: The contents of file point.h : #ifndef _POINT interface of point //type and prototypes #define _POINT #endif The contents of circle.h is as follows: #ifndef _CIRCLE //#ifndef _POINT #include "point.h" //#endif typedef struct { Tpoint kp; float r; } Tcircle; void read_circle(tcircle *c);... #define _CIRCLE #endif // do not use but study what would be the effect //do not use 13

Miten tehdään musta laatikko circle.lib Visual Studio 2010 Solutions Testausprojekti (Tyyppinä 32 bit Console Application) testi.c circle.lib Ympyräprojekti (Tyyppinä library (static library).) circle.c point.obj Unix / Linux Testausprojekti gcc o testi.exe testi.c circle.a Ympyräprojekti gcc c circle.c o circle.o ar crv circle.a circle.o point.o (tulos on circle.a) Dev C++ Graafisessa ympäristössä libin tekeminen näyttää vaativan sourcet kaikista osista, eli ar ohjelmaa ei pystytä ohjaamaan IDEstä. Tällöin lib voidaan koota objekteista komentoriviltä käyttämällä suoraan ar ohjelmaa, kuten yllä on sanottu tapauksesta Unix/Linux. 14