Op 10 3536

Preview:

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

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

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;};

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);}

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);}

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]);}

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;

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

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.

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.

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;}

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;...};

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;

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;

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;}

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.