Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018....

28
Programski jezik C – strukture

Transcript of Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018....

Page 1: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

Programski jezik C – strukture

Page 2: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

2/28

Ugrađeni osnovni tipovi

Celobrojni – short, int, long, long long Realni – float, double, long double Znakovni - char

Page 3: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

3/28

Složeni tipovi

Nizovi, niske

Ali i ...

Korisnički definisani tipovi: strukture, unije, polja bitova, nabrojivi tipovi

Page 4: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

4/28

Strukture

Struktura u C-u je kolekcija jedne ili više promenljivih ne obavezno istih tipova, povezanih i grupisanih pod istim imenom radi lakšeg rada.

Komponente strukture u C-u se nazivaju članovima.

Page 5: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

5/28

Strukture

Na primer, struktura je slog o osobi: sadrži članove ime, adresu, broj lične karte (ili matični broj), itd.

Neki od članova mogu opet biti strukture (npr. ime ili adresa).

Page 6: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

6/28

Strukture: primer Struktura tačka:

struct tacka {int x;int y;

} Struktura je i pravougaonik (stranica paralelnih koordinatnim

osama), sa komponentama - parom tačaka t1, t2 (donje levo i gornje desno teme), itd:

struct pravoug {struct tacka t1;struct tacka t2;

};

Page 7: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

7/28

Strukture: primer

Mogu sadržati promenljive proizvoljnog tipa Na primer, moguće je definisati strukturu koja sadrži i niz

struct student {char ime[50];float prosek;

};

Page 8: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

8/28

Deklaracija promenljivih tipa strukture

struct tacka a, b, c;

Page 9: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

9/28

Strukture - deklaracija Deklaracija strukture definiše tip; On može da bude eksplicitno imenovan – kao u prethodnom

primeru tip tacka, i to eksplicitno ime može se koristiti kasnijekao skraćenica za oznaku tog tipa strukture

Uz deklaraciju strukture (ili skraćenicu tipa koji definiše struktura) mogu se navesti promenljive odgovarajućeg tipa kojidefiniše struktura

Na primer, deklaracijomstruct {

int x;int y;

} a, b, c;

Page 10: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

10/28

Inicijalizacija

Struktura se može inicijalizovati navođenjem vrednostikomponenti - konstantnih izraza, npr.

struct tacka t = {100,100 };

Page 11: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

11/28

Pristup članovima strukture Obraćanje članu strukture vrši se navođenjem imena strukture i

imena člana razdvojenih tačkom (.) Na primer,

printf("%d,%d", t.x, t.y); ili, za promenljivu s tipa pravoug,

struct pravoug s; oznaka s.t1.x označava x-koordinatu donjeg levog temena

pravougaonika s

Operator ., iako binaran, najvišeg je prioriteta (istog nivoa kaomale zagrade i unarni postfiksni operatori)

Page 12: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

12/28

Strukture i funkcije Operacije nad strukturom su kopiranje i dodela vrednosti,

uzimanje adrese strukture operatorom & (operacije nad strukturom kao celinom), i obraćanje članovima strukture

Zato se strukture mogu pojaviti kao argumenti funkcije (kopiranje) odnosno kao vrednost koju funkcija vraća (dodela)

Strukture se ne mogu porediti Strukture kao argumenti funkcije mogu se prenositi kao celine,

prenosom komponenti ili prenosom adrese strukture (pokazivača na strukturu)

Vrednost funkcije takođe može biti tipa strukture ili pokazivača na strukturu

Page 13: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

13/28

Strukture i funkcije - primeri Na primer, funkcija izgtacka izgrađuje tačku od njenih

koordinata x i y (argumenti su tipa int a vrednost koju funkcijavraća je tipa struct tacka):

/ izgtacka: izgrađuje tacku od komponenata x i y /struct tacka izgtacka(int x, int y){ struct tacka priv;

priv.x = x;priv.y = y;return priv;

}

Page 14: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

14/28

Strukture i funkcije

Funkcija za sabiranje dve tačke ima i argumente i vrednost tipastrukture tacka:

/ sabtacaka: sabira dve tacke /struct tacka sabtacaka(struct tacka t1, struct tacka t2){

t1.x += t2.x;t1.y += t2.y;return t1;

}

Page 15: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

15/28

Strukture i funkcije Funkcija tacuprav testira da li je zadata tačka u unutrašnjosti

zadatog pravougaonika argumenti su tipa struktura tacka odnosno pravoug, a funkcija

vraća ceo broj - rezultat testa):

/ tacuprav: vraca 1 ako je tačka t u pravougaoniku p, 0 inače /int tacuprav(struct tacka t, struct pravoug p){

return t.x > p.t1.x && t.x < p.t2.x && t.y > p.t1.y && t.y < p.t2.y;

}

Page 16: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

16/28

Strukture i funkcije / prenos parametara Prenos parametara po vrednosti… Primer:

struct razlomak {int brojilac;int imenilac;

}; Šta nije u redu sa narednim kodom?

void skrati(struct razlomak r) {int n = nzd(r.brojilac, r.imenilac);r.brojilac /= n; r.imenilac /= n;

}

Page 17: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

17/28

Nizovi struktura Ako treba da obrađujemo veći broj struktura istog tipa, možemo

da uvedemo onoliko nizova koliko članova ima struktura, ili da uvedemo niz struktura.

Na primerstruct opis_meseca {

char ime[10];int broj_dana;

}; ... struct opis_meseca meseci[13];

Page 18: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

18/28

Nizovi struktura - inicijalizacija Moguća je i deklaracija sa inicijalizacijom (u kojoj nije

neophodno navođenje broja elemenata niza)struct opis_meseca meseci[] = {

{ "",0 },{ "januar",31 },{ "februar",28 },{ "mart",31 },...{ "decembar",31 }

};

Page 19: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

19/28

Primer

Nakon navedene deklaracije, ime i-tog meseca u godini se može dobiti sa meseci[i].ime, njegov broj dana sa meseci[i].broj_dana

Broj elemenata ovako inicijalizovanog niza može se izračunati nasledeći način:

sizeof(meseci)/sizeof(struct opis_meseca)

Page 20: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

20/28

Unije Unije i polja bitova predstavljaju načine uštede memorije Unije su donekle slične strukturama, ali podaci koji se čuvaju u

njima dele isti memorijski prostor.union u_obelezje {

int ivred;float fvred;

} ;union u_obelezje u;u.ivred=15;

Iste operacije kao nad strukturom: dodela vrednosti i kopiranje (unije kao celine), uzimanje adrese i pristup

clanovima

može da se inicijalizuje samo vrednošću tipa svog prvog člana

Page 21: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

21/28

Polja bitova Polja bitova se koriste da bi vrednosti za koje se unapred zna da imaju

veoma mali opseg, zauzimale samo odgovarajući broj bitova, a ne i cele bajtove

Gotovo sve zavisno od implementacije Primer: struct osobine_pravougaonika {

unsigned int popunjen : 1;unsigned int boja : 3;unsigned int vrsta_okvira : 2;};...#define ZELENA 2...#define PUN 0struct osobine_pravougaonika op;op.popunjen = 0; op.boja = ZELENA; op.vrsta_okvira = PUN;

Page 22: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

22/28

Nabrojivi tipovi - enum

Tip podataka sa malim skupom dopustivih vrednosti Primer:

enum znak_karte {KARO,PIK,HERC,TREF};

Page 23: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

23/28

Enum - primeri

Sastoje se od nabrojivih konstanti sa celobrojnim vrednostima (od 0 do broja konstanti - 1, što se podrazumeva, ili sa vrednostima kojesu tim konstantama eksplicitno dodeljene).

Na primer,enum boolean {NE, DA};

je nabrojivi tip nazvan boolean sa dve nabrojive konstante od kojihprva (NE) ima vrednost 0 a druga (DA) vrednost 1.

U primeruenum meseci { JAN=1, FEB, MAR, APR, MAJ, JUN, JUL, AVG,

SEP, OKT, NOV, DEC }; nabrojiva konstanta JAN ima vrednost 1 a svaka sledeca - za 1 veću

od prethodne

Page 24: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

24/28

Enum - primer

Moguće je i eksplicitno navođenje celobrojnih vrednosti enum znak_karte {

KARO = 1,PIK = 2,HERC = 4,TREF = 8};

Page 25: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

25/28

Enum - primer

Nabrojivi tipovi mogu da učestvuju u izgradnji drugih složenih tipova Na primer,

struct karta {unsigned char broj;enum znak_karte znak;} mala_dvojka = {2, TREF};

Page 26: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

26/28

typedef – nova imena postojećih tipova

Primer:

typedef int Length;

uvodi ime Length kao sinonim za tip int

Ime tipa Length onda može da se koristi u deklaracijama, eksplicitnim konverzijama i slično, na isti način kao što se koristi imeint:

Length len, maxlen;

Page 27: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

27/28

typedef Deklaracijom typedef se NE kreira novi tip već se samo uvodi novo

ime za potojeći tip Staro ime za taj tip može da se koristi i dalje

typedef deklaracija se najčešće koristi u kombinaciji sa strukturama da bi se izbeglo pisanje ključne reči struct pri svakom korišćenju imena strukturnog tipa.

Page 28: Programski jezik C –strukturepoincare.matf.bg.ac.rs/.../Programski_jezik_C_strukture.pdf · 2018. 11. 26. · 4/28 Strukture Struktura u C-u je kolekcija jedne ili više promenljivih

28/28

typedef - primer struct tacka {

int x, y;};

typedef struct tacka Tacka; Tacka a, b;

ili...

typedef struct tacka { int x, y; } Tacka; Tacka a, b;