15
08/26/22 1 Nizovi struktura Niz struktura se opisuje kao i svaki drugi niz deklaracijom struct licnost osoba[MAX]; Ovom deklaracijom opisuje se struktura od MAX elemenata. Svaki elemenat predstavlja strukturu tipa licnost. Ako deklarišemo pokazivač na strukturu licnost struct licnost osoba[MAX], *pok_lic; tada su inicijalizacije pokazivačke promenljive pok_lic=osoba; pok_lic=&osoba [0]; ekvivalentne. Pošto pok_lic pokazuje na osoba [0], to pok_lic +1 pokazuje na osoba [1]. osoba [0].starost == (*pok_lic).starost== pok_lic-> starost

Op 10 3536

Embed Size (px)

DESCRIPTION

Sam programski jezik je uređen konačan skup znakova za formulisanje programa. Njegova definicija data u ISO standardu glasi: programski jezik je veštački jezik koji se koristi za predstavljanje programa. Sam program predstavlja sistem oznaka za opis algoritama i struktura podataka pomoću kojih ljudi komuniciraju sa računarom. Jednostavnije korišćenje mašinskog jezika dobija se uvođenjem simboličkih imena za naredbe i adreseme morijskih lokacija, a to omogućava asemblerski ili simbolički mašinski jezik. Asemblerski jezik je niskog nivoa, zbog toga što je korespodencija između asemblerskog i mašinskog jezika jedan prema jedan. Programer koristi naredbe računara na kome radi, pa stoga program nije prenosiv - ne može se izvršiti na drugom računaru bez reprogramiranja.

Citation preview

Page 1: Op 10 3536

04/10/23 1

Nizovi struktura• Niz struktura se opisuje kao i svaki drugi niz deklaracijom

struct licnost osoba[MAX];• Ovom deklaracijom opisuje se struktura od MAX elemenata. Svaki

elemenat predstavlja strukturu tipa licnost.• Ako deklarišemo pokazivač na strukturu licnost

struct licnost osoba[MAX], *pok_lic;• tada su inicijalizacije pokazivačke promenljive

pok_lic=osoba;pok_lic=&osoba [0]; ekvivalentne.

• Pošto pok_lic pokazuje na osoba [0], to pok_lic +1 pokazuje na osoba [1].

• osoba [0].starost == (*pok_lic).starost== pok_lic-> starost

Page 2: Op 10 3536

04/10/23 2

Primer

• Napisati program kojim se čitaju broj fudbalskih ekipa, za svaku ekipu: naziv, broj osvojenih bodova i gol razlika , a zatim ispisuje tabela sa gol razlikom. # define MAXIME 30#define MAXEKIPA 20struct tabela {char ime [MAXEKIPA];unsigned bodovi;int razlika;};

Page 3: Op 10 3536

04/10/23 3

main(){int n;struct tabela ekipa[MAXEKIPA];void citaj();void pisi();void sort();printf(''\n Unesi broj ekipa:'');scanf(''%d'',&n);printf(''\n Unesi ime,bodove i gol-razliku svake ekipe:\n'');citaj(ekipa,n);sort(ekipa,n);printf(''Niz posle sortiranja je :\n'');pisi(ekipa,n);}

Page 4: Op 10 3536

04/10/23 4

void citaj(struct tabela x[],int n){int i;for(i=0;<n;i++){printf(“%d.”,i+1);scanf(“%s%u%d”,&x[i].ime,&x[i].bodovi,&x[i].razlika); }}void pisi(struct tabela x[],int n){int i;for(i=0; i<n;i++)printf(''%d.%s%u%d\n'',i+1,x[i].bodovi,x[i].razlika);}

Page 5: Op 10 3536

04/10/23 5

void razmeni(struct tabela *a, struct tabela *b){struct tabela pom;pom=*a;*a=*b;*b=pom;}void sort (struct tabela a[],int n){int i,j;for(i=0;i<n-1;i++)

for(j=i+1;j<n;j++) if((a[i].bodovi<a[j].bodovi) || ((a[i].bodovi==a[j].bodovi && (a[i].razlika<a[j].razlika)))

razmeni(&a[i],&a[j]);}

Page 6: Op 10 3536

04/10/23 6

Hijerarhijske strukture• Struktura kao svoj element može sadržati i drugu strukturu.

Takva struktura se naziva hijerarhijska struktura. Na primer, struktura licnost može sadržati elemenat datumrodjenja tipa datum koji predstavlja strukturu:

• struct datum {unsigned dan;unsigned mesec;unsigned godina;};struct licnost {char ime[30];struct datum datumrodjenja;}osoba;

Page 7: Op 10 3536

04/10/23 7

Hijerarhijske strukture

• Posredstvom promenljive osoba moguće je obraćanje elementu datumrodjenja navođenjemosoba.datumrodjenja

• Pojedinim elementima strukture sa datumom rođenja moguće je obraćanje navođenjem:osoba.datumrodjenja.danosoba.datumrodjenja.mesecosoba.datumrodjenja.godina

Page 8: Op 10 3536

04/10/23 8

Samoreferentne strukture

• Za implementaciju tipova podataka kao sto su povezane liste i stabla koristimo samoreferentne strukture. To su strukture u kojima je jedan ili više članova pokazivač na strukturu istog tipa. Jedan primer je

struct element {char ime[64];struct element *next;};

• Struktura element ima član next koji je pokazivač na strukturu tipa element. Taj pokazivač nam služi za povezivanje istovrsnih podataka u listu tako što će next pokazivati na sledeći element u listi; poslednji element ima u polju next upisanu vrednost NULL. Na taj način dobijamo jednostruko povezanu listu.

Page 9: Op 10 3536

04/10/23 9

Strukture i funkcije

• Jedine dopuštene operacije nad strukturama jesu kopiranje i dodeljivanje strukturi kao celini, označavajući joj adresu operatorom & i pristupajući njenim članovima. Struktura moze biti argument funkcije koja tada dobija kopiju strukture koja je stvarni argument funkcije. Isto tako funkcija moze vratiti strukturu u glavni program.

• Formalni parametar funkcije može biti struktura ili pokazivač na strukturu. Kada je parametar struktura, tada se kao stvarni argument pri pozivanju funkcije navodi struktura čija se kopija stavlja na raspolaganje funkciji. Ovakva predaja parametara po vrednosti ne dozvoljava promenu strukture koja je stvarni argument.

• Kada je formalni parametar funkcije pokazivač na strukturu, tada se kao stvarni argument pri pozivanju funkcije navodi adresa strukturne promenljive. Pošto se funkciji predaje adresa strukturne promenljive, ona može i da menja njene elemente.

Page 10: Op 10 3536

04/10/23 10

• Opis strukture se može navesti unutar neke funkcije, i tada se može koristiti samo u njenim granicama. Ako se opis strukture navede van bilo koje funkcije, mogu ga koristiti sve funkcije opisane iza njene definicije.

• Na primer, sledeca funkcija uzima dve strukture tipa tacka kao argumente i vraća strukturu tipa tacka koja je suma dvaju argumenata:struct tacka suma(struct tacka p1, struct tacka p2){p1.x += p2.x;p1.y += p2.y;return p1;}

Page 11: Op 10 3536

04/10/23 11

Unije

• Unije se razlikuju od struktura po tome što svi elementi unije koriste isti memorijski prostor i što se u svakom trenutku može koristiti samo jedan od elemenata unije. One se koriste kada treba minimizirati zauzeti memorijski prostor.

• Unija se opisuje na sledeći način:

• union oznaka_unije {tip ime_elementa1;tip ime_elementa2;...};

Page 12: Op 10 3536

04/10/23 12

• Ako je dat šablon:union primer {char c;int i;double d;};mogu se definisati promenljive tipa unija na sledeći način:union primer x;union primer a[10];union primer *pok;

• Pristup elementima unije se realizuje na sledeći način:x.c=‘A’;x.i=77;x.d=20.3;

Page 13: Op 10 3536

04/10/23 13

Unije• U svakom momentu, unija čuva vrednost samo jednog elementa,

tako da se mora voditi računa o tome koji je element poslednji dobio vrednost, inače se dobija besmislen rezultat.

• Na primer, ako se napiše:x.c=‘Z’;broj=35.4*x.d;greška je u tome što iako je registrovana vrednost char tipa, sledeća linija koda računa sa elementom tipa double.

• Pokazivači na unije se koriste na isti način kao i pokazivači na strukture:pok=&x;broj=pok->d;

Page 14: Op 10 3536

04/10/23 14

Polja bitova• U C jeziku ne postoje tipovi podataka koji zauzimaju jedan bit, ali on

omogućava lak način opisa i obrade podataka koji zauzimaju zadati broj bitova. To se realizuje pomoću specijalnih elemenata strukture koji se nazivaju polja bitova. Polja bitova se koriste pri kreiranju programa kod kojih je važno racionalno korišćenje memorije, kao i u sistemskim programima kada je potrebno obezbediti pristup određenim bitovima registra.

• Šablon:struct oznaka_strukture {[unsigned ime_polja1]:duzina_polja1;[unsigned ime_polja2]:duzina_polja2;...[unsigned ime_poljan]:duzina_poljan;}

Page 15: Op 10 3536

04/10/23 15

• Primer:struct covek_st {unsigned pol:1;unsigned starost:7;unsigned roditelji:2;}covek;

• Pristup poljima bitova se ostvaruje na isti način kao i elementima strukture:covek.roditelji=2.