Структуре

Структуре су сложени типови података који се састоје од одређеног броја елемената. Елементи структура називају се поља структура, могу да буду међусобно различитих типова и обележавају се идентификаторима. Да би се приступило пољу структуре, потребно је навести и идентификатор структуре чијем пољу жели да се приступи.

Поља структура могу бити произвољног простог или сложеног типа. То значи да поља структура могу бити друге структуре, али и низови. Могу да се образују и низови чији су елементи структуре.

Структуре се обично користе за описивање сложених, апстрактних објеката, нпр:

  • тачка у равни се описује координатама x и y

  • комплексан број се описује реалним и имагинарним делом

  • аутомобил се описује регистарским бројем, ознаком модела, годином прозводње, називом произвођача, именом власника…

  • књига се описује именом аутора, насловом, називом издавача, годином издавања, бројем страница…

Структура се сматра типом података који дефинише програмер. Општи облик дефиниције структуре је:

struct име_структуре {низ_декларација};

име_структуре је идентификатор за идентификацију структуре која се дефинише. Име структуре нема статус идентификатора типа, па у каснијим позивањима на ову структуру увек мора да се пише struct име_структуре!

низ_декларација служи за набрајање поља структуре. Свака декларација у низу има облик наредбе за дефинисање података:

тип поље, поље, ... поље;

тип представља основни тип свих поља у декларацији. Поља су идентификатори поља са евентуалним модификаторима, којима се означава да је неко поље низ или показивач датог основног типа. Тип поља структуре не може да буде структура која се управо дефинише, али може да буде показивач на такву структуру. Имена поља структуре важе само до краја структуре. Због тога идентификатори поља не могу да се користе самостално, већ само уз неки податак типа дате структуре. Исти идентификатор може да се користи у више различитих структура, и та поља могу да у различитим структурама буду различитих типова. Идентификатор поља структуре сме да се поклапа са именом неког од података који се користе у програму.

Подаци структурног типа дефинишу се уобичајеним наредбама за дефинисање података. Као ознаку типа потребно је навести struct име_структуре. Уз свако име податка могу се наводити и уобичајени модификатори [дужина] за дефинисање низа чији су елементи структуре, или * за дефинисање показиваче на структуре.

И за структуре може да се наведе почетна вредност (иницијализатор) приликом дефинисања. Општи облик наредбе за дефинисање структуре са почетном вредношћу је:

struct тип име={вредност, вредност, …, вредност};

Наведене вредности додељују се узастопним пољима структуре. Број и типови вредности треба да се слажу са бројем и типовима поља структуре. Навођење више вредности од броја поља није дозвољено. Уколико је број вредности мањи, почетне вредности преосталих поља представљају поља постављају се на нуле одговарајућих типова. У случају да је неко од поља структуре такође структура или низ, одговарајућа вредност треба да се састоји од низа вредности унутар заграда {}.

Пример:

struct tacka {int x,y;}; /* definise se tip struct tacka za predstavljanje tacaka u ravni kao struktura od dva celobrojna polja x i y koja cine koordinate tacaka */
struct tacka a,b,c,p={35,-12},q; /* definise se pet promenljivih a,b,c,p i q tipa struct tacka. Kao pocetna vrednost, promenljivoj p dodeljuju se koordinate {35, -12} */
struct pravougaonik {struct tacka dole_levo,gore_desno;}; /* definise se tip struct pravougaonik sa dva polja. Ta polja su tipa struct tacka koje predstavljaju donji levi i gornji desni ugao pravougaonika. Uz pretpostavku da su ivice pravougaonika paralelne sa koordinatnim osama te dve tacke jednoznacno odredjuju pravougaonik */
struct pravougaonik w,x,y={{1,1},{3,3}}; /*definisu se tri pravougaonika w,x i y. Pored toga, za pravougaonik y dodeljene su pocetne vrednosti za donji levi ugao {1,1} i gornji desni ugao {3,3}. Zapazi da su imena x i y koriscena i kao identifikatori polja strukture tacka! */
struct krug {double r;struct tacka centar;}; /* definise struktura za predstavljanje krugova pomocu poluprecnika i koordinata centra. Polja ove strukture su medjusobno razlicitih tipova */

Наредба typedef може да се користи и за додељивање идентификатора структурним типовима:

typedef struct ime_strukture {низ декларација} име_типа;

Идентификатор име_типа може касније да се користи као идентификатор типа без додавања службене речи struct. Име_структуре у наредбама typedef се најчешће изоставља.

Пример:

typedef struct {char licno_ime[16],prezime[16];}Ime; /* tip Ime sastoji se od licnog imena i prezimena od po 16 znakova */
typedef struct {char dan,mesec; short int godina;} Datum; /* tip Datum sastoji se od dana, meseca i godine, odgovarajucih tipova */
typedef struct{
char licni_broj[13];
Ime osoba;
Datum datum_rodjenja;
char adresa [30];
} Gradjanin; /* tip Gradjanin definisu se potrebni podaci za predstavljanje podataka o ljudima */
Gradjanin marko, pera, steva; /* definisu se tri promenljive tipa Gradjanin */
Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се /  Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се /  Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се /  Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се /  Промени )

w

Повезивање са %s