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



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

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

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Tietueet. Tietueiden määrittely

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Lyhyt kertaus osoittimista

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

Tietotyypit ja operaattorit

Loppukurssin järjestelyt C:n edistyneet piirteet

Loppukurssin järjestelyt

Alkupiiri (5 min) Lämmittely (10 min) Liikkuvuus/Venyttely (5-10min) Kts. Kuntotekijät, liikkuvuus

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

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

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

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

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

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Rakenteiset tietotyypit Moniulotteiset taulukot

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

Binäärioperaatiot Tiedostot ja I/O

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

Binäärioperaatiot Tiedostot ja I/O

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

13 Operaattoreiden ylimäärittelyjä

Moduli 5: Kehittyneitä piirteitä

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

Tietorakenteet ja algoritmit

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

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

Osoittimet ja taulukot

Osoittimet ja taulukot

Tietorakenteet ja algoritmit

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

5.6. C-kielen perusteet, osa 6/8, Taulukko , pva, kuvat jma

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

C-kurssi kevät Luennon sisältö

Luennon sisältö. C-kurssi kevät Tasokokeen kohta 1: Taulukon järjestäminen. Tasokokeen kohta 2. Tasokokeen kohta 2. Tasokokeen kohta 3

Työvoima Palvelussuhdelajeittain %-jakautumat

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

Dynaamiset tietorakenteet

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

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

Java-kielen perusteet

13. Loogiset operaatiot 13.1

Ohjelmassa on käytettävä funktiota laskeparkkimaksu laskemaan kunkin asiakkaan maksu. Funktio floor pyöristää luvun lähimmäksi kokonaisluvuksi.

Moduli 2: Osoittimet ja taulukot. Joel Huttunen

13. Loogiset operaatiot 13.1

2. C-kieli ja ongelmanratkaisu

Osoitin ja viittaus C++:ssa

Tietorakenteet ja algoritmit

Dynaaminen muisti Rakenteiset tietotyypit

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

C-kurssi syksy ltö. Luennon sisält. Luento 2: tyypit, rakenteet, makrot Tyypit. signed, unsigned short,, long Vakiot const Rakenteet

Luennon sisält. ltö. C-kurssi syksy ääreet: int ja char. Yksinkertaiset tyypit. Kokonaisluvut. Merkit

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

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

C-ohjelmointi, syksy 2006

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

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Tietorakenteet ja algoritmit

Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2

TIETORAKENTEET JA ALGORITMIT

Rakenne. C-ohjelmointi: Tietorakenteita ja tyyppejä. Tyyppimuunnoksia aritmeettisten tyyppien välillä. Tyyppimuunnokset. & (bitti and) Bittioperaatiot

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ohjelmointi 1 Taulukot ja merkkijonot

811120P Diskreetit rakenteet

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

Ohjeet. Jaa vastauksesi konsepteille siten, etta:

Plagioinnin tunnistaminen lähdekielisistä ohjelmista

C-ohjelmointi: Osoittimet

KOULUMATKATUKI TAMMIKUUSSA 2003

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

C-kurssi kevät t Luento 2: tyypit, rakenteet, makrot

Java-kielen perusteet

Java-kielen perusteita

Kielioppia: toisin kuin Javassa

3. Binääripuu, Java-toteutus

Tietorakenteet ja algoritmit

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

12 Mallit (Templates)

Muuttujien roolit Kiintoarvo cin >> r;

Ohjausrakenteet. Valinta:

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

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

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

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

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

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

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

C++11 lambdat: [](){} Matti Rintala

Ohjelmoinnin perusteet Y Python

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

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

LASKUTOIMITUKSET. Montako ötökkää on kussakin ruudussa? Tulos: Tulos: Tulos: Tulos: Tulos: Tulos: Tulos: Tulos: Tulos:

5.2. Sulautetun järjestelmän C-kielen perusteet 2/8, käsitteet pva

Transkriptio:

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ö ja koko eivät muutu datasegmentti sisältää globaalit muuttujat koko ei muutu, mutta sisältö yleensä muuttuu pinosegmentissä on tila funktioiden (ml. main) paikallisille muuttujille ja parametreille sekä koko että sisältö muuttuvat myös pinosegmentillä on kiinteä tilavaraus, vaikka vain osa yleensä on käytössä 1 T0004 Olli Hämäläinen www.evtek.fi 2 T0004 Olli Hämäläinen www.evtek.fi ssa kasa on jäljelle jäävä ohjelman käytettävissä oleva muistialue ohjelma voi suoritusaikana varata dynaamisesti tilaa kasa-alueesta kirjastofunktioilla: void *malloc(size_t size); void *calloc(size_t nobj, size_t size); void *realloc(void *p, size_t size); varaus vapautetaan funktiolla void free(void *p); 3 T0004 Olli Hämäläinen www.evtek.fi Esimerkki dynaamisesta varauksesta 1 /*Esimerkki 22.2, Silander */ #include <stdlib.h> int main(void) { int *t; int koko; printf ("Paljonko taulukolle varataan tilaa? "); scanf ("%d",&koko); 4 T0004 Olli Hämäläinen www.evtek.fi Esimerkki dynaamisesta varauksesta 1 t=malloc(koko*sizeof( int)); (t==null) printf ("Tilaa ei ole tarpeeksi"); { (i=0; i<koko; i++){ printf ("\nsy t taulukon %d. alkio :",i+1); scanf ("%d",&t[i]); printf ("\ntaulukossa on luvut :"); (i=0; i<koko; i++) printf ("\n%d",t[i]); free (t); 0; 5 T0004 Olli Hämäläinen www.evtek.fi Linkitetyt merkkijonot: muostetaan linkitetty lista merkkijonoista, joille varataan tilaa sitä mukaa, kun merkkijonoja syötetään. a link a link a link 6 T0004 Olli Hämäläinen www.evtek.fi 1

#include <string.h> #include <stdlib.h> oma_alkio{ char a[127]; oma_alkio *link; Alkio; int main(void) { char puskuri[128]; int jatka=1; Alkio * ketju=malloc(sizeof(alkio)); Alkio * p_a=ketju; strcpy(ketju->a,"tämä on eka"); 7 T0004 Olli Hämäläinen www.evtek.fi /* lukuvaihe */ (jatka){ printf("anna merkkijono: "); fgets(puskuri, 127,stdin); (jatka=strlen(puskuri)-1){ p_a= p_a->link=malloc(sizeof(alkio)); strcpy(p_a,puskuri); 8 T0004 Olli Hämäläinen www.evtek.fi /* tulostus */ p_a=ketju; (p_a!= '\0'){ printf(p_a->a); p_a=p_a->link; 0; -tietorakenne i on kahden tai useamman muuttujan jakama muistialue in määrittely muistuttaa läheisesti tietueen () määrittelyä, mutta sisällössä on oleellinen ero: tietueen kentillä on omat muistialueensa, mutta in kentät (muuttujat) ovat ikään kuin päällekkäin: yhden muuttaminen muuttaa kaikkia in kenttiin viitataan samoin kuin tietuiden kenttiin operaattoreilla. ja -> 9 T0004 Olli Hämäläinen www.evtek.fi 10 T0004 Olli Hämäläinen www.evtek.fi nelikko { testi1; vertaa: tupla4 { testi2; 11 T0004 Olli Hämäläinen www.evtek.fi #include <string.h> #include <time.h> int main(void) { nelikko { testi1; tupla4 { testi2; 12 T0004 Olli Hämäläinen www.evtek.fi 2

printf(" vie tilaa %i\n",sizeof(testi1)); printf("tietue vie tilaa %i\n",sizeof(testi2)); testi2.i = 65; printf("i: %i a: %s\n",testi2.i, testi2.a); testi1.i = 65; printf("i: %i a: %s\n",testi1.i, testi1.a); testi1.a[0] = 'a'; printf("i: %i a: %s\n",testi1.i, testi1.a); testi1.a[1] = 'b'; testi1.a[2] = 'c'; testi1.a[3] = 'd'; printf("i: %i a: %s\n\n",testi1.i, testi1.a); testi2.a[0] = 'a'; printf("i: %i a: %s\n",testi2.i, testi2.a); testi2.a[1] = 'b'; testi2.a[2] = 'c'; testi2.a[3] = 'd'; printf("i: %i a: %s\n",testi2.i, testi2.a); 0; 13 T0004 Olli Hämäläinen www.evtek.fi 14 T0004 Olli Hämäläinen www.evtek.fi Bittioperaatiot Bittioperaatiot bittioperaatioiden avulla voidaan käsitellä kokonaislukumuuttujia bittitasolla koska tietotyyppien esitystapa on järjestelmäriippuvaa, ei bittioperaatioihin perustava ohjelma välttämättä ole siirrettävissä sellaisenaan järjestelmästä toiseen C-kielen bittioperaatiot & - ja: tulos on 1 jos molemmat bitit 1, muuten 0 - tai: tulos on 1, jos jompikumpi bitti 1, muuten 0 ^ - poissulkeva tai: 1, jos eri arvot, 0, jos samat ~ - negaatio: bittien kääntö 1->0 ja 0->1 >> - siirto oikealle << - siirto vasemmalle 15 T0004 Olli Hämäläinen www.evtek.fi Ehllinen lauseke ehllisen lausekkeen avulla voidaan lausekkeen arvo päättää ehn perusteella yleinen muoto: lauseke1? lauseke2 : lauseke_3 toiminta ja tulkinta: lauseke1:n arvo lasketaan ja jos se on tosi, lasketaan lauseke2:n arvo, josta saadaan koko ehllisen lausekkeen arvo; jos taas lauseke1 on epätosi, lasketaan lauseke3 ja siitä tulee koko ehllisen lausekkeen arvo 16 T0004 Olli Hämäläinen www.evtek.fi Ehllinen lauseke Esim. 1: max_x_y = x > y? x:y; muuttuja max_x_y saa arvokseen suuremman x:n ja y:n arvoista Esim. 2: rand()%2? printf( Klaava ): printf( Kruuna ); lantinheiton simulointi Lueteltu tyyppi C-kielessä voidaan määritellä oma tietotyyppi, jolla on äärellinen arvojoukko määrittelyssä luetellaan arvot ja niille tulee samalla määritellyksi myös järjestys esim. viikonpaivat {MA,TI,KE,TO,PE,LA,SU ; toteutuksessa arvot samastetaan oletusavoisesti kokonaislukuihin 0:sta alkaen, mutta ohjelmoija voi antaa myös omat kokonaislukuarvot 17 T0004 Olli Hämäläinen www.evtek.fi 18 T0004 Olli Hämäläinen www.evtek.fi 3

Lueteltu tyyppi, esimerkki /*Esimerkki 30.1, Silander Seuraavassa ohjelmassa k ytet n hyv ksi -vakioita tulostettaessa kuukausien nimet. Huomaa, kuinka vakiolla indeksoidaan sopivasti alustettua merkkijonotaulukkoa. */ kuukaudet{tam=1, HEL, MAA, HUH, TOU, KES, HEI, ELO, SYY, LOK, MAR, JOU; int main(void){ kuukaudet kk; Lueteltu tyyppi, esimerkki char *kk_nimi[]={"","tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kes kuu", "Hein kuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"; (kk=tam; kk<=jou; kk++) { printf ("%2d %s\n",kk,kk_nimi[kk]); 0; 19 T0004 Olli Hämäläinen www.evtek.fi 20 T0004 Olli Hämäläinen www.evtek.fi Varatut sanat Varatut sanat perustietotyypit auto const uble float int short unsigned auto const uble float int short unsigned long signed void long signed void register sizeof volatile register sizeof volatile char extern static char extern static 21 T0004 Olli Hämäläinen www.evtek.fi 22 T0004 Olli Hämäläinen www.evtek.fi Varatut sanat muuttujien tallennus yms. Varatut sanat omat tietotyypit auto const register sizeof volatile extern static 23 T0004 Olli Hämäläinen www.evtek.fi 24 T0004 Olli Hämäläinen www.evtek.fi 4

Varatut sanat hyppykäskyt Varatut sanat toisto 25 T0004 Olli Hämäläinen www.evtek.fi 26 T0004 Olli Hämäläinen www.evtek.fi Varatut sanat valinta Varatut sanat? 27 T0004 Olli Hämäläinen www.evtek.fi 28 T0004 Olli Hämäläinen www.evtek.fi Makrot ja esikääntäjän ohjaus #define - makron määrittely #include - kirjaston mukaanotto # #el # #end #def #ndef - ehllinen kääntäminen 29 T0004 Olli Hämäläinen www.evtek.fi Parametroidut makrot #define MAKSIMI(a,b) ((a)>(b)?(a):(b)) kutsu: maks=maksimi(sin(x)+1,x*x+y*y); => maks=((sin(x)+1)>(x*x+y*y)? (sin(x)+1) : (x*x+y*y); vertaa: #define MAKS2(a,b) (a>b? a : b) 30 T0004 Olli Hämäläinen www.evtek.fi 5

Parametroidut makrot #define NELIO(a) a*a kutsu: nelio=nelio(x); => nelio=x*x; mutta: nelio2=nelio(x+y); => nelio=x+y*x+y; Esimerkki #include <string.h> #include torso.h" ARVON KOKONAISLUKU PALAUTTAVA FUNKTIO vertaa JONKA_PARAMETRIT_ON NIINKU NOI (MERKIN_OSOITIN a, MERKIN_OSOITIN b); ARVON KOKONAISLUKU PALAUTTAVA FUNKTIO main(tyhja){ ALUKSI NIINKU MAARITELLAAN MERKKI rivi1[128],rivi2[128]; SITTEN TOTA NOIN VAAN KIRJOITTELE ("Anna merkkijono 1!\n" ); 31 T0004 Olli Hämäläinen www.evtek.fi 32 T0004 Olli Hämäläinen www.evtek.fi Esimerkki SEURAAVAKSI LUE_RIVI(rivi1,127,OLETUS_SYOTTO); SITTEN KIRJOITTELE("Anna merkkijono 2!\n" ); LUE_RIVI(rivi2,127,OLETUS_SYOTTO); KIRJOITTELE("Oman vertailun tulos on %d\n", vertaa(rivi1,rivi2)); LOPUKSI KIRJOITTELE ("strcmp-vertailun tulos on %d\n", strcmp(rivi1,rivi2)); IHAN LOPUKSI PALAA_JA_PALAUTA 0; 33 T0004 Olli Hämäläinen www.evtek.fi Esimerkki MAARITELLAAN ARVON KOKONAISLUKU PALAUTTAVA FUNKTIO vertaa JONKA_PARAMETRIT_ON(MERKIN_OSOITIN p, MERKIN_OSOITIN q){ NIIN_KAUAN_KUIN TOI (SISALTO p NIINKU ON_ERI_KUIN '\0' JA TOI SISALTO p ON_SAMA_KUIN SISALTO q) NIIN DUUNAA { p VAAN KASVAA_YHDELLA; q KASVAA_YHDELLA MYOS; SITKU NOI HOMMAT_ON_OHI NIINKU NIIN SITTEN VAAN PALAA_JA_PALAUTA SISALTO p VAHENNETTYNA SISALTO q LLA ; 34 T0004 Olli Hämäläinen www.evtek.fi Esimerkki, <torso.h> (osa) #ndef TORSO #define TORSO #define KOKONAISLUKU int #define KOKONAISLUKUARVON_PALAUTTAVA_FUNKTIO INT #define SAA_ARVON = #define SEURAAVAKSI #define VAAN #define MAARITELLAAN #define ALUKSI #define ARVON --- #end TENTTI 16.12.2003 klo 12:00 Auditoriossa sen jälkeen Hyvää joulua! 35 T0004 Olli Hämäläinen www.evtek.fi 36 T0004 Olli Hämäläinen www.evtek.fi 6