815338A Ohjelmointikielten periaatteet

Koko: px
Aloita esitys sivulta:

Download "815338A Ohjelmointikielten periaatteet"

Transkriptio

1 815338A Ohjelmointikielten periaatteet IV.1 Imperatiivinen ohjelmointi muuttujat ja tietotyypit

2 Sisältö 1. Yleistä muuttujista 2. Sidonta 3. Tyypin tarkistus 4. Näkyvyysalue 5. Yleistä tietotyypeistä 6. Primitiiviset tietotyypit 7. Rakenteelliset tietotyypit 8. Osoitintyyppi A Ohjelmointikielten periaatteet, Muuttujat 2

3 IV.1.1 Yleistä muuttujista Imperatiivisen ohjelmoinnin keskeisimpiä käsitteitä Muuttuja mallintaa tietokoneen muistipaikkaa Muuttujaan liittyy 1. Nimi (name) Tapa yksilöidä muuttuja 2. Osoite (address) Muistiosoite, jossa muuttujan arvo sijaitsee 3. Arvo (value) Data joka kulloinkin on muuttujan osoitteen osoittamassa muistipaikassa A Ohjelmointikielten periaatteet, Muuttujat 3

4 IV.1.1 Yleistä muuttujista (2) Muuttujan ominaisuuksia 1. Tyyppi (type) Muuttujan tietorakenteen nimi 2. Näkyvyysalue (scope) Se ohjelman osa, jossa muuttuja on käytettävissä 3. Elinaika (lifetime, extent) Muuttujan muistinvaraamisen ja muistinvapauttamisen välinen aika A Ohjelmointikielten periaatteet, Muuttujat 4

5 IV Muuttujan nimi Merkkijono, jota käytetään tunnistamaan muuttuja FORTRAN77: max. kuuden merkin mittaiset nimet FORTRAN 90 käyttää 31 merkin rajoitusta C-kieli: Nimen erottelupituutena vähintään 31 ensimmäistä merkkiä Nykyään useimmissa kielissä (C++, Java) mielivaltaisen pitkät nimet Useimmiten nimen alettava kirjaimella (tai alaviivalla) Isojen/pienien kirjainten erottelu Pascal, FORTRAN ei eroa Useimmiten erotetaan (C, Java jne) A Ohjelmointikielten periaatteet, Muuttujat 5

6 IV Erikoissanat Erottavat kielen kontrollirakenteita kuvaavat sanat muuttujista Varatut sanat (reserved words) Ei voi käyttää muuten kuin sille varattuun tarkoitukseen Avainsanat (keywords) Avainsana on erikoismerkityksessä ainoastaan tietyissä yhteyksissä Nykykielissä yleensä ainoastaan varattuja sanoja FORTRAN käyttää avainsanoja A Ohjelmointikielten periaatteet, Muuttujat 6

7 IV Muuttujan osoite Muuttujaan liittyvän fyysisen muistiosoitteen arvo Yleensä ilmaistaan heksalukuna Ei yleensä staattinen, muuttujan osoite saattaa vaihdella ohjelman suorituksen aikana Usein käytetään nimitystä l-value (left value) Osoite tiedettävä, kun muuttuja sijaitsee sijoituslauseen vasemmalla puolella Moninimisyys, aliasing Kaksi erinimistä muuttujaa viittaa samaan muistipaikkaan Yleensä muodostaminen ei suotavaa A Ohjelmointikielten periaatteet, Muuttujat 7

8 IV Muuttujan tyyppi Määrittelee 1. Muuttujan arvoalueen 2. Minkälaisia operaatioita tyypin muuttujalle voidaan tehdä Esimerkki: Java-kielessä Suurin kokonaisluku: Integer.MAX_VALUE pienin: Integer.MIN_VALUE Muuttujiin voidaan soveltaa perusaritmetiikan operaatioita A Ohjelmointikielten periaatteet, Muuttujat 8

9 IV Muuttujan arvo Muuttujan muistiosoitteen kulloinenkin sisältö Tässä muistiosoite = sellainen muistialue, johon koko muuttujan data mahtuu Esimerkki: Javan double-tyyppinen muuttuja kahdeksan tavun kokoinen -> muuttujan osoite kahdeksan tavun kokoinen muistialue, jossa säilytetään muuttujan arvoa. Usein nimitetään r-valueksi (right value) Tarvitaan sijoituslauseen oikealla puolella. Huom! Jotta päästäisiin käsiksi r-valueen, on l-value aina määritettävä ensin A Ohjelmointikielten periaatteet, Muuttujat 9

10 IV.1.2. Sidonta Yksi keskeisimmistä muuttujiin liittyvistä käsitteistä Jonkin ominaisuuden liittämistä ohjelman itsenäiseen kokonaisuuteen Muuttujan tapauksessa tyypinsidonta tai muistinsidonta Tyypinsidonta liittää muuttujaan jonkin tietotyypin Muistinsidonta liittää muuttujaan muistiosoitteen (varaa riittävästi muistia, jotta muuttujan arvo voidaan tallentaa) A Ohjelmointikielten periaatteet, Muuttujat 10

11 IV.1.2. Sidonta (2) Sidonta-aika (binding time) = milloin tietty sidonta tehdään Varhainen sidonta lisää tehokkuutta Myöhäinen sidonta lisää joustavuutta Staattinen sidonta (static binding) ennen ohjelman ajoa ei muutu ajon aikana Dynaaminen sidonta (dynamic binding) = ajonaikainen sidonta A Ohjelmointikielten periaatteet, Muuttujat 11

12 IV Tyypinsidonta Muuttujaan on liitettävä tietotyyppi ennen kuin sitä voi ohjelmassa käyttää Voidaan tehdä: 1. Staattisesti i. eksplisiittisellä tai ii. implisiittisellä esittelyllä 2. Dynaamisesti A Ohjelmointikielten periaatteet, Muuttujat 12

13 IV Tyypin staattinen sidonta Eksplisiittinen esittely: ohjelmalauseessa määritellään muuttuja tietyn tyyppiseksi, esimerkiksi C:ssä float f1; Useimmissa staattista tyypinsidontaa käyttävissä kielissä pakollinen Implisiittinen esittely liittää muuttujaan tietotyypin jonkin sopimuksen mukaan ilman erillistä esittelyä Esim. FORTRANissa muuttuja INTEGER-tyyppinen jos nimi alkaa I, J, K, L, M tai N-kirjaimella; muuten REAL -tyyppinen Haitta: Esittelyn poisjäänti vahingossa voi johtaa hankalasti löydettäviin virhetoimintoihin A Ohjelmointikielten periaatteet, Muuttujat 13

14 IV Tyypin dynaaminen sidonta Tyyppi määrittyy ohjelman suorituksen aikana sijoituslausetta suoritettaessa Dynaamista tyypinsidontaa käyttävät kielet eroavat voimakkaasti staattiseen tyypinsidontaan perustuvista Joustavia ja geneerinen ohjelmointi yksinkertaista Esim luvun APL ja SNOBOL Esimerkki. JavaScript: xz = [1.5, 2.2, 3.7] // Nyt xz taulukko xz = 234 // Nyt xz kokonaisluku Haittoja tehokkuuden menetys ja koodin luotettavuuden heikkeneminen A Ohjelmointikielten periaatteet, Muuttujat 14

15 IV Muistin sidonta Muuttujan tietotyyppi on määrätty -> voidaan varata muistista alue (osoite) muuttujan arvon tallentamiseen Muistin varaaminen = allokointi (allocation) Allokoinnin käänteisprosessi on varatun muistin vapauttaminen = deallokointi (deallocation) Ohjelman muistialue: Staattinen eli globaali alue Pinomuisti Varaamatonta muistia Kekomuisti Yleensä pinomuisti ja kekomuisti kasvavat toisiaan kohti A Ohjelmointikielten periaatteet, Muuttujat 15

16 IV Muuttujan elinikä Muuttujan käyttämän muistin varaamisen ja vapauttamisen välinen aika Muuttujat eliniän perusteella: 1. Staattiset, 2. Pinodynaamiset, 3. Kekodynaamiset (explicit heap dynamic) ja 4. Implisiittisesti kekodynaamiset (implicit heap dynamic) A Ohjelmointikielten periaatteet, Muuttujat 16

17 IV Staattiset muuttujat Sidotaan muistiosoitteeseen ennen ohjelman suoritusta, säilyvät sidottuna samaan osoitteeseen ohjelman päättymiseen saakka Käyttö tuo tehokkuutta Aiheuttaa joustamattomuutta Rekursiivisten aliohjelmien toteuttaminen mahdotonta FORTRANin varhaisemmissa versioissa kaikki muuttujat staattisia C:ssä static-määreellä muuttuja staattiseksi Pascal-kielessä ei staattisia muuttujia A Ohjelmointikielten periaatteet, Muuttujat 17

18 IV Pinodynaamiset muuttujat Tyyppi staattisesti sidottu, mutta muistiosoite sidotaan ajonaikaisesti esittelylausetta suoritettaessa Perua Algol 60-kielestä: paikallisten muuttujien muisti varattu pinomuistista dynaamisesti Näin toimivat yleisimmät imperatiiviset nykykielet Mahdollistavat rekursion Aliohjelman muuttujalle varataan jokaisella kutsulla kohti uusi muistiosoite Säästää muistia - yhteinen muistialue kaikkien aliohjelmien paikallisille muuttujille Dynaaminen muistinvaraus hidastaa vähän suoritusta A Ohjelmointikielten periaatteet, Muuttujat 18

19 IV (Eksplisiittisesti) Kekodynaamiset muuttujat Yleisimmin kekomuistista varattavat muuttujat Varataan kekomuistista ohjelmoijan käskystä ajonaikaisesti Voidaan viitata ainoastaan osoitinmuuttujan tai viitetyypin muuttujan avulla Voidaan varata 1. Operaattorilla (Java ja C++: new) tai 2. Kirjastofunktiolla (C: malloc()) A Ohjelmointikielten periaatteet, Muuttujat 19

20 IV (Eksplisiittisesti) Kekodynaamiset muuttujat (2) Muistin vapauttaminen Jotkin kielet: Automaattinen roskien keruu (garbage collection) (esim. Java) Joissakin kielissä ohjelmoijan vastuulla: C++: operaattori delete C: funktio free() A Ohjelmointikielten periaatteet, Muuttujat 20

21 IV (Eksplisiittisesti) Kekodynaamiset muuttujat (3) *x++=*y++ Esimerkki. Kekodynaamisen muuttujan varaaminen (ja vapauttaminen) C ja C++ -kielissä. C: C++: int *pnewint; pnewint = malloc(sizeof(int)); *pnewint = 10; free(pnewint); int *pnewint; pnewint = new int; *pnewint = 10; delete pnewint; A Ohjelmointikielten periaatteet, Muuttujat 21

22 IV Implisiittisesti kekodynaamiset muuttujat *x++=*y++ Sidotaan kekomuistiin vasta sijoituslauseen yhteydessä Käyttö sallii hyvin joustavan ohjelmoinnin ja erittäin geneerisen koodin kirjoittamisen Monissa skriptikielissä (Perl, JavaScript) merkkijonomuuttujat ja taulukot A Ohjelmointikielten periaatteet, Muuttujat 22

23 IV.1.3. Tyypin tarkistus (type checking) Varmistetaan että ohjelman operaatioissa käytettävien muuttujien tyypit ovat yhteensopivat Dynaaminen tarkistus: tyypit tarkistetaan ajonaikaisesti Staattinen tarkistus: viimeistään käännösaikana A Ohjelmointikielten periaatteet, Muuttujat 23

24 IV Tyyppiyhteensopivuus (type compatibility) 1. Nimityypin yhteensopivuus (name type compatibility) Muuttujat yhteensopivaa tyyppiä ainoastaan, jos ne on määritelty samannimisen tyyppisiksi 2. Rakennetyypin yhteensopivuus (structure type compatibility) Toteutuu, jos muuttujien rakenne on identtinen Yleensä tyypintarkistukseen käytetään jotain välimuotoa Nimityypin tarkistus liian rajoittava Rakennetyypin tarkistus liian hankala toteuttaa A Ohjelmointikielten periaatteet, Muuttujat 24

25 IV Tyyppiyhteensopivuus (2) Esimerkki. Pascal-kielisessä määrittelyssä TYPE MYINT = INTEGER; var a: INTEGER; var ma:myint; muuttujat a ja ma eivät nimityyppiyhteensopivat, mutta ovat rakennetyyppiyhteensopivat Pascal-kielessä ei käytetä nimityypin yhteensopivuutta, sijoitus ma := a; on laillinen A Ohjelmointikielten periaatteet, Muuttujat 25

26 IV Tyyppiyhteensopivuus (2) Esimerkki. C: typedef struct { int x; int y; } mystruct; typedef struct { int xx; int yy; } myotherstruct; mystruct str1; myotherstruct str2; str1 = str2 ei sallittu: C-kielessä muuten rakenneyhteensopivuus paitsi tietueiden (struct) ja unionien (union) suhteen C++ ja Java käyttävät nimityyppiyhteensopivuutta C++: typedefillä samat tyypit A Ohjelmointikielten periaatteet, Muuttujat 26

27 IV Vahvasti tyypitetty (strongly typed) kieli 1. Jokaisella muuttujalla oltava hyvin määritelty tyyppi 2. Tyyppivirheet havaitaan aina Pidetään tavoittelemisen arvoisena piirteenä Estää ohjelmointivirheet, jotka johtuvat 1. Vääräntyyppisen muuttujan sijoittamisesta tai 2. Käyttämisestä parametrina aliohjelmakutsussa Varsin harvat kielet täyttävät, jos sovelletaan tiukasti Muunnossäännöt (coercion) Vaikuttavat tyypintarkistukseen Vahvasti tyypitetyssäkin kielessä esim. aritmeettisille operaatioille sääntöjä, jotka rikkovat periaatteessa tyypitystä vastaan A Ohjelmointikielten periaatteet, Muuttujat 27

28 IV Vahvasti tyypitetty (strongly typed) kieli (2) Pascal vaihtelevia tietueita lukuun ottamatta C:ssä tapauksia, joissa tyyppivirhe voi jäädä havaitsematta -> C ei niin vahvasti tyypitetty kuin Pascal C++: tyypintarkistus vahvempi kuin C:ssä, ei vahvasti tyypitetty Ada, Java ja C# (lähes) vahvasti tyypitettyjä Tyyppivirhe voi syntyä ohjelmoijan itse pakottamana Python vahvasti tyypitetty A Ohjelmointikielten periaatteet, Muuttujat 28

29 IV.1.4. Näkyvyysalue (scope) Niiden ohjelman lauseiden kokonaisuus, joiden alueella muuttuja on näkyvä (visible), t.s. käytettävissä. Globaali (global) muuttuja: koko ohjelma Paikalliset eli lokaalit (local) muuttujat (ohjelmalohkon tai muun vastaavan yksikön) määritelty kyseisessä yksikössä Ei-paikalliset (nonlocal) muuttujat: Lohkon sisällä näkyvät lohkon ulkopuolella määritellyt muuttujat Voi määräytyä Staattisesti ennen ohjelman suoritusta tai Dynaamisesti ohjelman suorituksen aikana A Ohjelmointikielten periaatteet, Muuttujat 29

30 IV Staattinen näkyvyysalueen määräytyminen *x++=*y++ Yleisin menetelmä imperatiivisissa kielissä Muuttujien näkyvyysalueet määräytyvät ennen ohjelman suoritusta ohjelman rakenteen perusteella Rakenteet voivat olla toisilleen alisteisia -> näkyvyysalueiden sisäkkäisyys Aliohjelmalla useimmiten oma näkyvyysalue Nykykielissä voidaan muodostaa uusia näkyvyysalueita määrittelemällä ohjelmalohkoja (blocks) C: aaltosulkujen välinen osa on lohko Kootun lauseen (compound statement) sisällä ei voida esitellä uusia muuttujia (kuten lohkossa) A Ohjelmointikielten periaatteet, Muuttujat 30

31 IV Staattinen näkyvyysalueen määräytyminen *x++=*y++ Jos sisemmissä näkyvyysalueissa esitellään samannimisiä muuttujia kuin alueen sisältävässä lohkossa, on ulomman alueen muuttuja piilotettava sisemmässä lohkossa Pascalissa BEGIN END pari määrittelee kootun lauseen -> Pascalissa ei lohkoja, aliohjelmilla oma näkyvyysalue ja aliohjelmat voivat olla sisäkkäisiä A Ohjelmointikielten periaatteet, Muuttujat 31

32 IV.4.2. Dynaaminen näkyvyysalueen määräytyminen *x++=*y++ Hyvin harvat ohjelmointikielet käyttävät Esim. APL, SNOBOL, Perlissä mahdollinen Perustuu aliohjelmien suoritusjärjestykseen -> aktiivisen aliohjelman muuttujat näkyvät kaikille aliohjelmille, joita kutsutaan kyseisen aliohjelman käynnistämisen jälkeen Ongelmia: Koodin luettavuus huononee Ohjelman luotettavuus heikkenee Etu: Aliohjelmien tiedonvälityksen helpottuminen Haitat suuremmat -> ei juuri käytetä A Ohjelmointikielten periaatteet, Muuttujat 32

33 IV.1.5. Yleistä tietotyypeistä Tietotyyppi (data type): Joukko arvoja, joihin liittyy joukko näihin arvoihin sovellettavia operaatioita Keskeinen käsite ohjelmoinnissa, koska luokittelee ohjelman datan Primitiivinen tietotyyppi (primitive data type): määrittelemiseen ei käytetä muita tietotyyppejä Lähes jokaisessa kielessä määritellään joukko primitiivisiä tietotyyppejä valmiiksi Louden: yksinkertainen (simple) tietotyyppi: tietotyyppi, jolla ei ole muuta rakennetta kuin sisäänrakennettu aritmeettinen tai peräkkäinen rakenne A Ohjelmointikielten periaatteet, Muuttujat 33

34 IV.1.6. Primitiiviset tietotyypit Jaetaan tyypillisesti numeeriseen, loogiseen ja merkkitietoon Useissa varhaisissa ohjelmointikielissä ainoat primitiiviset tietotyypit numeerisia Alkuperäisessä BASIC-kielessä ainoastaan liukulukutyyppi A Ohjelmointikielten periaatteet, Muuttujat 34

35 IV Numeeriset tyypit Kokonaislukutyyppi yleisin numeerinen primitiivinen tietotyyppi Pituus voi vaihdella; 32 bittiä nykyään yleisin Liukulukutyyppi (floating-point type) Esittää reaalilukuja (likimääräisesti) tietokoneessa Esitetään useimmiten IEEE:n standardilla 754 Diskreettien rakenteiden kurssissa esityksestä tarkemmin Desimaalityyppi Tietynmittaisille desimaaliluvuille tarkka esitys Rajoittaa esitettävien lukujen kokoa Käytössä C#-kielessä (decimal), pituus 128 bittiä A Ohjelmointikielten periaatteet, Muuttujat 35

36 IV.6.2. Looginen tietotyyppi (boolean, logical type) Periaatteessa tietotyypeistä yksinkertaisin - tarvitsee vain arvot tosi ja epätosi Esitystapa vaihtelee C: mikä tahansa nollasta poikkeava lukuarvo tulkitaan todeksi ja nolla epätodeksi. Yleensä mahdollisuus saada arvot true ja false A Ohjelmointikielten periaatteet, Muuttujat 36

37 IV Merkkityypit Merkkitieto esitetään tietokoneen sisäisesti numeerisina koodeina. Aiemmin yleisin koodauskäytäntö ASCII (American Standard Code for Information Interchange) Nykyään UNICODE (2 tavua/merkki) yleistyy, esimerkiksi Java, C#: char kahden tavun kokoinen Merkkijonotyyppi (character string type) Useimmiten ei ole primitiivinen FORTRANissa (77 jälkeen) ja BASICissä primitiivisiä Monessa kielessä valmiiksi määriteltyjen perustietotyyppien joukossa A Ohjelmointikielten periaatteet, Muuttujat 37

38 IV Merkkityypit (2) C-kielen merkkijono Merkkiin \0 päättyvä yksiulotteinen merkkitaulukko Oliokielissä yleensä jonkin kirjastoluokan olioita A Ohjelmointikielten periaatteet, Muuttujat 38

39 IV Ordinaalityyppi (ordinal type) Arvot voidaan yhdistää positiivisiin kokonaislukuihin luonnollisella tavalla Useissa kielissä käyttäjän määrittelemiä ordinaalityyppejä; eivät täytä primitiivisen tyypin määritelmää, ovat kuitenkin yksinkertaisia tietotyyppejä Luetellut tyypit (enumeration types) Rajoitetut tyypit (subrange type) Luetellun tyypin muuttujien arvot määritellään luettelemalla symbolisiksi vakioiksi Tyyppiin liittyy järjestys -> arvoja voidaan vertailla A Ohjelmointikielten periaatteet, Muuttujat 39

40 IV Ordinaalityyppi (2) *x++=*y++ Esimerkki. Viikonpäivät lueteltuna tyyppinä Pascalilla: TYPE paiva = (su,ma,ti,ke,tor,pe,la); Sama C-kielellä: enum paiva {su, ma, ti, ke, tor, pe, la}; Vertailu Pascalissa: var ps,pt:paiva; begin ps:=su; pt:=tor; if pt > ps then begin (* lauseet *) end; end. Vertailu C kielessä: enum paiva x = su,y = tor; if(x < y) { // Lauseet } A Ohjelmointikielten periaatteet, Muuttujat 40

41 IV Ordinaalityyppi (3) Luetellun tyypin etuja Määritellyt tyypit ovat helposti tulkittavissa Rajojen ylityksen virhemahdollisuudet poistuvat mikäli tarkistetaan lueteltujen tyyppien yhteensopivuus Ellei lueteltua tyyppiä, on käytettävä numeerisia muuttujia kuvaamaan lueteltuja tyyppejä -> Tähän verrattuna: 1. Koodin luettavuus paranee 2. Luotettavuus paranee A Ohjelmointikielten periaatteet, Muuttujat 41

42 IV Ordinaalityyppi (4) Javassa versiosta 1.5 lähtien enum-tyyppi Esim. enum Paiva { } SUNNUNTAI, MAANANTAI, TIISTAI, KESKIVIIKKO, TORSTAI, PERJANTAI, LAUANTAI Vakiot olioita -> monipuolisempi kuin aiemmin mainitut C++11:ssa myös luokkatyyppinen enum enum class Paiva { }; SUNNUNTAI, MAANANTAI, TIISTAI, KESKIVIIKKO, TORSTAI, PERJANTAI, LAUANTAI A Ohjelmointikielten periaatteet, Muuttujat 42

43 IV Rajoitettu tyyppi Jonkin ordinaalityypin peräkkäisten arvojen osajono Ensimmäiseksi Pascalissa Voidaan käyttää myös Adassa Pascalissa: TYPE allesata = ; pienetkirjaimet = a.. z ; Käyttäminen lisää luotettavuutta mikäli kääntäjä tarkistaa virheelliset operaatiot Ei käytetä muissa yleisissä kielissä Pascalin ja Adan lisäksi A Ohjelmointikielten periaatteet, Muuttujat 43

44 IV.1.7. Rakenteelliset tietotyypit *x++=*y++ Koostuvat yhdestä tai useammasta yksinkertaista tai rakenteista tyyppiä olevasta komponentista 1. Taulukot 2. Tietueet 3. Unionit 4. Joukkotyyppi A Ohjelmointikielten periaatteet, Muuttujat 44

45 IV Taulukot Yleisimmin käytettyjä tietorakenteita Kiinteä määrä samaa tyyppiä olevia tietoalkioita, jotka sijaitsevat peräkkäin yhtenäisessä muistialueessa -> Käyttö tehokasta, koska minkä tahansa alkion muistiosoite voidaan suoraan laskea Alkiot mitä tahansa tietotyyppiä, joko primitiivistä, kielessä määriteltyä tai ohjelmassa määriteltyä Alkioihin viitataan taulukon nimellä ja alkion indeksillä taulukossa C pohjaisissa kielissä indeksit alkavat nollasta A Ohjelmointikielten periaatteet, Muuttujat 45

46 IV Taulukot (2) Esimerkki: Kokonaislukutaulukko eri kielissä C: int lukutaulu[50]; lukutaulu[10] = 34; Pascal: VAR lukutaulu: ARRAY [0..49] OF INTEGER; begin lukutaulu[10] := 34; FORTRAN: INTEGER LTAULU(0:49) LTAULU(10) = 34; A Ohjelmointikielten periaatteet, Muuttujat 46

47 IV Taulukkojen tyypit Neljä tyyppiä indeksien rajojen sidonnan ja muistin allokoinnin tapahtuma-ajan perusteella 1. Staattiset taulukot (static arrays) Rajat sidotaan staattisesti, taulukon muisti varataan staattisesti Suoritusajan tehokkuus 2. Kiinteät pinodynaamiset taulukot (fixed stackdynamic arrays) Rajat sidotaan staattisesti, muisti varataan ajonaikaisesti pinomuistista Muistin käyttö tehokkaampaa kuin staattisilla taulukoilla A Ohjelmointikielten periaatteet, Muuttujat 47

48 IV Taulukkojen tyypit (2) 3. Pinodynaamiset taulukot (stack-dynamic arrays) Rajat sidotaan dynaamisesti, muisti varataan pinomuistista. Molemmat pysyvät vakioina taulukon elinajan Taulukon kokoa ei tarvitse tietää etukäteen -> lisää joustavuutta 4. Kekodynaamiset taulukot (heap-dynamic array) Rajat sidotaan dynaamisesti, taulukon muisti varataan dynaamisesti kekomuistista Taulukon rajat ja varattu muisti voivat muuttua sen elinaikana -> joustavin tyyppi A Ohjelmointikielten periaatteet, Muuttujat 48

49 IV Taulukkotyypit eri kielissä Staattiset taulukot FORTRANin taulukot (versio 77 ja ennen) REAL REAALILUVUT(4) C/C++-kielessä taulukko voidaan esitellä staticmääreellä staattiseksi Kiinteät pinodynaamiset taulukot Yleisimmin pinosta varattavat taulukot, esim. C, C++ (aiemmat versiot), Pascal A Ohjelmointikielten periaatteet, Muuttujat 49

50 IV Taulukkotyypit eri kielissä (2) Pinodynaamiset taulukot Aiemmin harvinaisia imperatiivisissa kielissä Adassa alusta saakka AR_LEN := 25; declare AR: array(1..ar_len) of INTEGER; C/C++-kielissä uusimmissa versioissa sallittu int i,koko = 15; for(i=5; i < 10; i++){ } int taulu[koko]; // Nykyään käy C/C++:ssa A Ohjelmointikielten periaatteet, Muuttujat 50

51 IV Taulukkotyypit eri kielissä (3) Kekodynaamiset taulukot Javan, C#:n kaikki taulukot int[] lukutaulu = new int[50]; C/C++ -kielissä varataan kuten muutkin dynaamiset muuttujat C:ssä malloc int *lukutaulu; lukutaulu = malloc(50*sizeof(int)); lukutaulu[10] = 34; free(lukutaulu); C++:ssa new int[] lukutaulu; lukutaulu = new int[50]; lukutaulu[10] = 34; delete[] lukutaulu; A Ohjelmointikielten periaatteet, Muuttujat 51

52 IV Moniulotteiset taulukot Tarvitaan useampia indeksejä viittaamaan taulukon alkioihin Yleensä tarkoittaa sitä että taulukon ensimmäisen indeksin alkiot (n-1) ulotteisia taulukoita jne. Esimerkki: Pascalissa ARRAY[1..6,3..21,0..3] OF INTEGER on sama kuin ARRAY[1..6] OF ARRAY[3..21] OF ARRAY[0..3] OF INTEGER Yleensä dimensioille ei ylärajaa A Ohjelmointikielten periaatteet, Muuttujat 52

53 IV Taulukko-operaatiot Yleensä kielissä ei juuri operaatioita, jotka käsittelevät taulukkoa itsenäisenä yksikkönä Tavallisesti toteutettu kirjastofunktioina tai sisällytetty luokkakirjastoihin FORTRAN 90: Sisältää taulukko-operaatioita, esimerkiksi taulukkojen summan (alkioittain) Ada: Mahdollista viitata taulukon osiin indeksirajoilla -> voidaan käsitellä matriisin rivejä tai sarakkeita vektoreina A Ohjelmointikielten periaatteet, Muuttujat 53

54 IV Taulukko-operaatiot (2) APL Laaja kokoelma kieleen rakennettuja vektori- ja matriisioperaatioita Suunniteltu tällaisten tehtävien ohjelmoimiseen Sisältää operaattorit mm. matriisin transponointiin, käänteismatriisin etsimiseen, vektoreiden piste- ja ristituloille A Ohjelmointikielten periaatteet, Muuttujat 54

55 IV Tietueet (records) Erityyppisten tietoalkioiden kooste, jossa tiettyyn alkioon eli kenttään (field) viitataan sen nimellä Muodostetaan loogisia kokonaisuuksia, jotka koostuvat erilaisista tietoalkioista Aiemmin sisältynyt kaikkiin yleisiin kieliin Paitsi FORTRANiin Oliokielissä ei tarvetta (C++:ssa mukana) Muisti varataan peräkkäisistä muistipaikoista Yleisarvio: Käyttökelpoisia tietotyyppejä Toteutus varsin suoraviivainen eikä sisällä ongelmia yleensä missään ohjelmointikielessä A Ohjelmointikielten periaatteet, Muuttujat 55

56 IV Tietueet (2) Esimerkki. C-kielessä määrittely struct Asiakas { }; char nimi[25]; int tilinro; esittely ja käyttö (varataan pinosta): struct Asiakas a; strcpy(a.nimi,"huijari"); a.tilinro = 21; varataan dynaamisesti : struct Asiakas* pa; pa = malloc( sizeof(struct Asiakas)); strcpy(pa->nimi,"huijari"); pa->tilinro = 21; A Ohjelmointikielten periaatteet, Muuttujat 56

57 IV Unioni Vastaa tietotyyppien unionia Muuttujassa vain yksi kenttä, joka voi olla tyypiltään jokin annetuista tietotyypeistä -> muuttujan sisältämä tiedon tyyppi voi vaihdella ohjelman suorituksen aikana Käyttö voi olla hyödyllistä esimerkiksi kirjoitettaessa koodia, jonka on tarkoitus toimia eri ympäristöissä Esim. kokonaisluku voi olla 16-, 32- tai 64-bittinen Voidaan kirjoittaa koodia, jossa tehdään eistandardimaisia tyypinmuunnoksia -> Riski: voi aiheuttaa monia ongelmatilanteita A Ohjelmointikielten periaatteet, Muuttujat 57

58 IV Unioni (2) Tyypintarkistusta tyyppiin liitettävä tietokenttä, jonka perusteella päätellään, mikä kulloinkin talletettu tyyppi Valitsinkenttä (tag field, discriminant) C ja C++ -kielissä ns. vapaa unioni (free union). Ei valitsinkenttää kertomassa, minkä tyyppinen tieto on tallennettu muuttujaan Muuttujalle varataan tila suurimman mahdollisen tietotyypin mukaan Ei tyypintarkistusta -> ohjelmoija vapaa muuntamaan tietotyypin miksi tahansa vaihtoehdoista Ongelmien vuoksi jätetty toteuttamatta monissa kielissä Esim. Java, C# A Ohjelmointikielten periaatteet, Muuttujat 58

59 IV Joukkotyyppi (set) Tyypin muuttujat voivat sisältää järjestämättömän kokoelman jonkin ordinaalityypin muuttujan erillisiä arvoja -> mallinnetaan matemaattista joukkoa Yleisistä (imperatiivisista) ohjelmointikielistä ainoastaan Pascalissa Kirjastoluokkana mm. C++:ssa, C#:ssa, Javassa, Pythonissa A Ohjelmointikielten periaatteet, Muuttujat 59

60 IV.1.8. Osoitintyyppi (pointer type) Muuttujien arvot muistiosoitteiden arvoja ja lisäksi erityinen arvo null (tai nil) Muuttujia kutsutaan yleensä osoittimiksi (pointers) Tarvitaan käsittelemään dynaamisia muuttujia ja erityisesti dynaamisia tietorakenteita Lähes kaikissa imperatiivisissa ohjelmointikielissä mahdollista käyttää osoittimia Poikkeus FORTRAN: tietorakenteiden käsittely hankalaa A Ohjelmointikielten periaatteet, Muuttujat 60

61 IV.1.8. Osoitintyyppi (2) Muuttuja sisältää muistiosoitteen -> muuttujana aina saman tyyppinen Ohjelmoinnin kannalta tiedettävä osoitinmuuttujan tarkoitetyyppi (reference type) = minkälaiseen muuttujaan osoittaa Muuttuja, johon osoitinmuuttujan arvo kulloinkin viittaa, on sen tarkoitemuuttuja Osoitinmuuttuja voi viitata mihin tahansa tietotyyppiin, myös toiseen osoittimeen A Ohjelmointikielten periaatteet, Muuttujat 61

62 IV.1.8. Osoitintyyppi (3) Osoitin esitellään kirjoittamalla tarkoitetyyppi ja sen jälkeen tyyppioperaattori ennen muuttujan nimeä C/C++ -kielessä * Pascalissa ^ Adassa access A Ohjelmointikielten periaatteet, Muuttujat 62

63 IV Osoittimien tärkeimmät operaatiot 1. Sijoitus (assignment) *x++=*y++ Sijoittaa osoitinmuuttujan arvoksi jonkin muistipaikan 2. Muistipaikan sisältöön viittaaminen (viittauksen purkaminen, dereferencing) Toteutetaan yleensä jollakin sisältö-operaattorilla 3. Muuttujien vertailu, ts. sen vertaaminen osoittavatko ne samaan muistipaikkaan Pascalissa ainoat sallitut operaatiot osoittimille A Ohjelmointikielten periaatteet, Muuttujat 63

64 IV C/C++ -kielten osoittimet Voi käyttää hyvin monipuolisesti -> ohjelmoijalle monenlaisia mahdollisuuksia, mutta virheellinen käyttö helppoa Muuttujan muistiosoite voidaan selvittää ja sijoittaa osoitinmuuttujaan, esimerkiksi int muuttuja = 20; int *pm; pm = &muuttuja; *pm = 55; // Nyt muuttuja == A Ohjelmointikielten periaatteet, Muuttujat 64

65 IV C/C++ -kielten osoittimet (2) C-kielessä tyypintarkistus väljä: float f = ; int *pif; float *pf; pif = &f; pf = pif; C:ssä sallittu, mutta ei C++ :ssa A Ohjelmointikielten periaatteet, Muuttujat 65

66 IV C/C++ -kielten osoittimet (3) Osoitinaritmetiikka sallittu Jos ptr on osoitintyypin muuttuja, ptr+1 osoittaa seuraavan tarkoitetietotyypin muuttujan osoitteeseen. Esimerkiksi: char* ptr; -> ptr+1 osoittaa seuraavaan tavuun int* ptr; -> ptr+1 osoittaa neljän tavun päähän C/C++ -kielissä geneerinen osoitintyyppi void* voi osoittaa minkätyyppiseen muuttujaan tahansa A Ohjelmointikielten periaatteet, Muuttujat 66

67 IV C/C++ -kielten osoittimet (4) *x++=*y++ Esimerkki. Taulukon läpikäynti osoittimilla C/C++:ssa char c; int ki; double rl; int index; char merkit[4] = {'a','b','c','d'}; int kokoluvut[4] = {1,2,3,4}; double rluvut[4] = {1.1,2.2,3.3,4.4}; char* pc = merkit; int* pi = kokoluvut; double* pd = rluvut; for(index=0;index < 4; index++) { c = *(pc + index); ki = *(pi + index); rl = *(pd + index); printf("merkki on %c, kokonaisluku on %d, reaaliluku on %e\n", c,ki,rl); } A Ohjelmointikielten periaatteet, Muuttujat 67

68 IV Osoitintyypin ongelmia 1. Moninimisyys Seuraa väistämättä osoittimien sallimisesta Osoittimet voidaan asettaa osoittamaan samaan muistipaikkaan Katsotaan yleensä haitallisiksi 2. Roikkuvat osoittimet Osoittavat jo vapautettuun muistiin Käytettäessä arvo satunnainen Voi johtaa hankalasti löydettäviin virheisiin A Ohjelmointikielten periaatteet, Muuttujat 68

69 IV Osoitintyypin ongelmia (2) 3. Muistivuoto (memory leakage) Ohjelmassa varattua dynaamista muistia ei vapauteta Syntyy usein hävittämällä viite dynaamiseen muuttujaan Voi johtaa kekomuistin loppumiseen ja ohjelman kaatumiseen Osoitintyypin virheet yleisimpien C/C++ -ohjelmien virheiden joukossa A Ohjelmointikielten periaatteet, Muuttujat 69

70 IV Viitetyyppi (reference type) Osoitintyypin muuttujien ongelmallisuuden takia ainakin Javassa ja C#:ssa luovuttu niistä ja korvattu viitteillä Aluksi C++ -kieleen lähinnä toteuttamaan viitetyypin parametrinvälitys funktioille Viitetyypin muuttujan avulla voidaan luoda muuttujalle alias A Ohjelmointikielten periaatteet, Muuttujat 70

71 IV Viitetyyppi (2) C++ -kielen viite: vakio-osoitin, jolle tehdään implisiittinen muistiosoitteeseen viittaaminen On vakio -> alustettava jollakin muistiosoitteen arvolla, viittaa samaan muistiosoitteeseen koko elinaikansa Esimerkki float f; float &ref_f = f; tekee muuttujista f ja ref_f aliaksia -> sijoituslause ref_f = 2.78; sijoittaa muuttujan f arvoksi A Ohjelmointikielten periaatteet, Muuttujat 71

72 IV Viitetyyppi (3) Java yleistänyt viitemuuttujan tyyppiä -> osoittimet voitu korvata viitteillä Kaikki luodut oliot Javassa varataan dynaamisesti kekomuistista, olion nimi on viite olioon Osoitinaritmetiikka ei sallittua Eivät ole vakio-osoittimia, viite voidaan asettaa osoittamaan toiseenkin olioon Muistivuotojen estämiseksi Javassa roskien keruu (garbage collection) huolehtii siitä, että oliot vapautetaan, kun niihin ei enää ole viittauksia A Ohjelmointikielten periaatteet, Muuttujat 72

Muuttujat imperatiivisissa ohjelmointikielissä

Muuttujat imperatiivisissa ohjelmointikielissä Muuttujat imperatiivisissa ohjelmointikielissä Seuraavaksi keskitytään nykyään valta-asemassa oleviin, imperatiivisiin ohjelmointikieliin. Tässä dokumentissa perehdytään keskeiseen muuttujan käsitteeseen

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

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

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU Ohjelmointi 2 Jussi Pohjolainen TAMK» Tieto- ja viestintäteknologia Tietotyypeistä C++ - kielessä useita tietotyyppejä Kirjaimet: char, wchar_t Kokonaisluvut: short, int, long Liukuluvut: float, double

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet String-merkkijonoluokka 1 Ohjelmointikielten merkkijonot Merkkijonot ja niiden käsittely on välttämätöntä ohjelmoinnissa Valitettavasti ohjelmointikielten tekijät eivät tätä ole ottaneet

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Muuttujat eri muisteissa Ohjelman muistialueen layout Paikallisen ja globaalin muuttujan ominaisuudet Dynaamisen muistinkäytön edut Paikallisten muuttujien dynaamisuus ADT

Lisätiedot

Tieto- ja tallennusrakenteet

Tieto- ja tallennusrakenteet Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)

Lisätiedot

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka

Lisätiedot

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 IV.3 Imperatiivinen ohjelmointi aliohjelmat Sisältö 1. Yleistä aliohjelmista 2. Proseduurit ja funktiot 3. Parametrien välittäminen 4. Taulukon välittäminen

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:

Lisätiedot

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

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

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017. C! Dynaaminen muisti 9.2.2017 Agenda Kertausta merkkijonoista Dynaaminen muisti Valgrind-perusteet ja esimerkkejä Seuraava luento to 2.3. Ei harjoituksia arviointiviikolla 13.2. 17.2. 2 Palautetta merkkijonoihin

Lisätiedot

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

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva Sisällys 6. Muuttujat ja Java Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut. boolean- ja char-tyypit. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

6. Muuttujat ja Java 6.1

6. Muuttujat ja Java 6.1 6. Muuttujat ja Java 6.1 Sisällys Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut. boolean- ja char-tyypit. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

7. Oliot ja viitteet 7.1

7. Oliot ja viitteet 7.1 7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on

1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on 1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on esiteltävä. char ch; int count=1; struct complex float re, im; complex z; complex sqrt( complex );

Lisätiedot

Ohjelmointi 1 Taulukot ja merkkijonot

Ohjelmointi 1 Taulukot ja merkkijonot Ohjelmointi 1 Taulukot ja merkkijonot Jussi Pohjolainen TAMK Tieto- ja viestintäteknologia Johdanto taulukkoon Jos ohjelmassa käytössä ainoastaan perinteisiä (yksinkertaisia) muuttujia, ohjelmien teko

Lisätiedot

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.

Lisätiedot

Rakenteiset tietotyypit Moniulotteiset taulukot

Rakenteiset tietotyypit Moniulotteiset taulukot C! Rakenteiset tietotyypit Moniulotteiset taulukot 22.2.2018 Agenda Rakenteiset tietotyypit Vilkaisu 6. kierroksen tehtäviin Moniulotteiset taulukot Esimerkki Seuraava luento to 8.3. Ilmoittautuminen ohjelmointikokeeseen

Lisätiedot

7/20: Paketti kasassa ensimmäistä kertaa

7/20: Paketti kasassa ensimmäistä kertaa Ohjelmointi 1 / syksy 2007 7/20: Paketti kasassa ensimmäistä kertaa Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

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

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

Lisätiedot

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19 Ohjelmointikieli TIE-20306 Principles of Programming Languages Syksy 2017 Ryhmä 19 Juho Kärnä Ville Mäntysaari 1. Johdanto D on yleiskäyttöinen, strukturoitu, staattisesti tyypitetty, käännettävä ohjelmointikieli

Lisätiedot

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit:

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Sisällys 6. Muuttujat ja Java Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut, merkit, totuusarvot. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

Osoittimet ja taulukot

Osoittimet ja taulukot C! ja taulukot 1.2.2018 Tiedotteita Tämän jälkeen taas pari väliviikkoa (tenttiviikko) Seuraava luento 22.2. Laskareita ei tenttiviikolla 12.2. 16.2. 2 ja muisti Muisti Keskusyksikkö Suorittaa muistissa

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Dynaaminen muisti Rakenteiset tietotyypit

Dynaaminen muisti Rakenteiset tietotyypit C! Dynaaminen muisti Rakenteiset tietotyypit 1.3.2016 Agenda Kertausta Dynaaminen muisti Valgrind-perusteet ja esimerkkejä Yhteenveto tietorakenteista Vilkaisu 3. kierroksen tehtäviin Esim: miten linkitetty

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 4 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten lauseisiin, lausekkeisiin ja aliohjelmiin liittyvät kysymykset. Tehtävä 1. Mitä

Lisätiedot

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen D-OHJELMOINTIKIELI AA-kerho, 33 Antti Uusimäki Arto Savolainen 2 D-OHJELMOINTIKIELI D-kielen historia alkaa vuodesta 1999, kun Walter Bright aloitti uuden ohjelmointikielen kehittämisen. Ensimmäinen versio

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva Sisällys 6. Muuttujat ja Java Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut, merkit, totuusarvot. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

6. Muuttujat ja Java 6.1

6. Muuttujat ja Java 6.1 6. Muuttujat ja Java 6.1 Sisällys Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut, merkit, totuusarvot. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

samalla seuraavaan puoliavaruuteen (sukupolveen), jota siivotaan harvemmin.

samalla seuraavaan puoliavaruuteen (sukupolveen), jota siivotaan harvemmin. 3.2. OLIOT 31 Myös tästä menetelmästä on olemassa muunnelmia, jotka pyrkivät vähentämään yksittäisen pysähdyksen pituutta. Nämä ovat niinsanottuja ikäperustaisia (generational) menetelmiä, joissa muisti

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 4. Joukot, relaatiot ja funktiot Osa 3: Funktiot 4.3 Funktiot Olkoot A ja B joukkoja. Funktio joukosta A joukkoon B on sääntö, joka liittää yksikäsitteisesti määrätyn

Lisätiedot

Tyypit (eri näkökulmia)

Tyypit (eri näkökulmia) Tyypit (eri näkökulmia) Tyypit arvojen joukkona tyyppi kerää yhteen erilaiset primitiiviarvot (kokonaisluvut, liukuluvut) oleellista arvojen esitystapa tietokoneessa Tyyppien rakentaminen skalaarityypit

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne. Proseduurit Proseduuri voi olla 1) Funktio, joka palauttaa jonkin arvon: real function sinc(x) real x sinc = sin(x)/x... y = sinc(1.5) 2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma

Lisätiedot

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi ero taulukkoon taulukossa alkiot samantyyppisiä tietueessa alkiot voivat olla erityyppisiä tiedot kuitenkin yhteen kuuluvia ohjelmoinnin perusteet,

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages Tampere University of Technology Department of Pervasive Computing TIE-20306 Principles of Programming Languages Ruby Ryhmä 8 Juho Rintala Sami Paukku Sisällysluettelo 1 Johdanto... 3 2 Paradigma... 3

Lisätiedot

Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

12. Monimuotoisuus 12.1

12. Monimuotoisuus 12.1 12. Monimuotoisuus 12.1 Sisällys Johdanto. Periytymismekanismi määrittää alityypityksen. Viitteiden sijoitus ja vertailu. Staattinen ja dynaaminen luokka. Myöhäinen ja aikainen sidonta. Parametrinvälitys

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

Lisätiedot

lausekkeiden tapauksessa. Jotkin ohjelmointikielet on määritelty sellaisiksi,

lausekkeiden tapauksessa. Jotkin ohjelmointikielet on määritelty sellaisiksi, 3.5. TYYPIT 59 indeksit voidaan siirtää kielitasolta oliotasolle siirryttäessä alkamaan nollasta. Vain mikäli indeksin alin arvo oliotasolla ei ole tiedossa ennen suorituksen alkua, on tarpeen lisätä taulukko-olioon

Lisätiedot

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

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

Kielioppia: toisin kuin Javassa

Kielioppia: toisin kuin Javassa Object Pascal Pascal kielen oliolaajennus (Inprise/Borland:n oma) luokat Voit uudelleenkäyttää luomiasi objekteja esim. komponentteja Periytyminen Kielioppia: toisin kuin Javassa Ei eroa isojen ja pienien

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 12. huhtikuuta 2019 Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä. Yksi A4-kokoinen lunttilappu

Lisätiedot

Tietotyypit ja operaattorit

Tietotyypit ja operaattorit Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto

Lisätiedot

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

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) Toistaiseksi helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Vaikeaa eroavuudet Pythonin ja C:n

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Merkintöjen tulkintoja *++Pstack->top = item *Pstack->top++ = item (*Pstack->top)++ *(Pstack++)->top = item *(++Pstack)->top = item Lisää pinon toteutuksia Dynaaminen taulukko

Lisätiedot

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

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 I Johdanto Sisältö 1. Ohjelmointikielen määritelmä 2. Syitä tutkia ohjelmointikieliä 3. Ohjelmointiparadigmat 4. Suunnittelu- ja arviointikriteerit 5. Suunnitteluun

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015

815338A Ohjelmointikielten periaatteet 2014-2015 815338A Ohjelmointikielten periaatteet 2014-2015 X Skriptiohjelmointi Sisältö 1. Johdanto 2. Skriptikielten yleispiirteitä 3. Python 815338A Ohjelmointikielten periaatteet, Skriptiohjelmointi 2 X.1 Johdanto

Lisätiedot

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia Antti-Juhani Kaijanaho 16. helmikuuta 2009 Tyypitetyt ohjelmointikielet sisältävät paljon muitakin konstruktioita kuin yksinkertaisesti tyypitetyn lambda-kielen,

Lisätiedot

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus Luento 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

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

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa ssa ohjelman käytössä suoritusaikana oleva muisti jakautuu neljään osaan: koodisegmentti datasegmentti pinosegmentti (stack) kasa (heap) ssa ohjelman koodisegmentti sisältää käännetyn ohjelmakoodin sisältö

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...

Lisätiedot

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset 1 Tieto ja sen osoite (3) X DC LOAD, =X LOAD R2, X int x =; symbolin X arvo muuttujan X arvo

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

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

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin

Lisätiedot

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

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

1. luento. Ohjelmointi (C) T0004 Syksy 2003. 1. luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot. EVTEK Teknillinen ammattikorkeakoulu Ohjelmointi (C) T0004 Syksy 2003 Olli Hämäläinen kurssin sisältö ja tavoitteet työmuodot luennot 1-2/2003 laboratorioharjoitukset 1-2/2003 kotitehtävät, laboratoriokerrat

Lisätiedot

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

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

18. Abstraktit tietotyypit 18.1

18. Abstraktit tietotyypit 18.1 18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

Olio-ohjelmointi Syntaksikokoelma

Olio-ohjelmointi Syntaksikokoelma C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja

Lisätiedot

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

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys Loogisia operaatioita - esimerkkejä Tänään on lämmin päivä ja perjantai Eilen satoi ja oli keskiviikko tai tänään on tiistai. On perjantai ja kello on yli 13 Ei ole tiistai tai ei sada. Ei pidä paikkaansa,

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 27. lokakuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe D tiistai 10.11. klo 10 välikielen generointi Kääntäjän rakenne

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus Luento 4 (verkkoluento 4) Aliohjelmien toteutus Tyypit, Parametrit Aktivointitietue (AT) AT-pino, rekursio 1 Aliohjelmatyypit Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri Parametrit

Lisätiedot

sama tyyppi (joka vastaa kaikkien mahdollisten arvojen summa-aluetta). Esimerkiksi

sama tyyppi (joka vastaa kaikkien mahdollisten arvojen summa-aluetta). Esimerkiksi 3.5. TYYPIT 51 3.5.3 Kielitason tyypit Staattinen tyypitys Kielitasolla tyyppejä käytetään sulkemaan pois joitakin merkittäviä ja automaattisesti tunnistettavissa olevia merkitysopillisia virheitä (oliotason

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 V Abstraktit tietotyypit ja olioohjelmointi Sisältö I. Abstraktit tietotyypit II. 1. Johdatus abstrakteihin tietotyyppeihin 2. Abstraktit tietotyypit Adassa

Lisätiedot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

Sisällys. 15. Lohkot. Lohkot. Lohkot

Sisällys. 15. Lohkot. Lohkot. Lohkot Sisällys 15. Lohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.1 15.2 Lohkot Aaltosulkeet

Lisätiedot

12. Monimuotoisuus 12.1

12. Monimuotoisuus 12.1 12. Monimuotoisuus 12.1 Sisällys Johdanto. Periytymismekanismi määrittää alityypityksen. Viitteiden sijoitus ja vertailu. Staattinen ja dynaaminen luokka. Parametrinvälitys eräs monimuotoisuuden sovellus.

Lisätiedot

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus Luento 4 (verkkoluento 4) Aliohjelmien toteutus Tyypit, Parametrit Aktivaatiotietue (AT) AT-pino, rekursio 1 Aliohjelmatyypit Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri Parametrit

Lisätiedot

20. Javan omat luokat 20.1

20. Javan omat luokat 20.1 20. Javan omat luokat 20.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang Sisällys 20. Javan omat luokat Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.1 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

C++ Kuva 1-1. C- ja C++ kielien perustana olevat kielet.

C++ Kuva 1-1. C- ja C++ kielien perustana olevat kielet. 1. JOHDANTO C-kieli on perustana useille muille ohjelmointikielille. Esimerkiksi C++-kieli on kehitetty C- kielestä, Java- ja C#-kielen syntaksin perustana on toiminut C-kieli ja useat muutkin ohjelmointikielet

Lisätiedot

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1 17. Javan omat luokat 17.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 17.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3 15. Lohkot 15.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.2 Lohkot Aaltosulkeet

Lisätiedot