You are on page 1of 11

Visoka Poslovna škola strukovnih studija Blace

SEMINARSKI RAD Predmet:Algoritmi i strukture podataka Tema: Nizovi – primena u praksi

Nastavnik: Branislav Jevtovć

Student: Miloš Stojanović 50/10 r

...............1 JEDNODIMENZIONALNI NIZ............................................... Niz je konačan................. Niz Niz u programiranju predstavlja složeni tip podataka.............. Niz ima široku primenu i postoji u praktično svim programskim jezicima..................................2 STRING.................................................................7 POKAZIVAČI I NIZOVI........... Jedna od glavnih pozitivnih osobina niza je uređenost......NIZ............................................... 9 2.....................................NIZOVI – PRIMENA U PRAKSI..........3 1.................................. Homogenost kod niza se ogleda u tome što je svaki element istog skalarnog ili strukturnog tipa..... [Type text] Visoka Poslovna škola strukovnih stuija Blace [Type text] ........................................................LITERATURA..........................................................................2 ISKORIŠĆENJE PROSTORA I EFIKASNOST..................... Za niz retko možemo čuti i nazive kao što su polje ili tabela..............................4 2................................................................. 6 2............3 1..........6 STRING FUNKCIJE........4 2............................................................................................................. a svaki element ima svoj indeks................................ sačinjen od nekolicine drugih podataka istog ili različitog tipa................................5NIZ STRINGOVA.......................................................... 8 2............................................................................................... 2 1..1 PREDSTAVLJANJE NIZOVA..................4 INICIJALIZACIJA NIZOVA........ 4 2......................................................................................................................3 INDEKSIRANJE......................................Nizovi – primena u praksi Sadržaj SADRŽAJ........ 9 2................................................. 10 3......... linearno uređen skup homogenih elemenata................................................................. odnosno objekat preko kojeg prilazimo tom elementu u nizu...................................... Uređenost omogućava da se zna tačno koji je prvi......... Svaki podatak u nizu se naziva njegovim elementom. 10 1................................ drugi i svaki sledeći član niza........3 VIŠEDIMENZIONALNI NIZOVI...............................7 2................... 2 1...........................

dimenzija se poistovjećuje sa dužinom niza.l1 + 1..2 Iskorišćenje prostora i efikasnost Kod sekvencijalne memoriske reprezentacije iskorišćenje memoriskog prostora je optimalno. Jednodimenzionalni nizovi su po svojoj strukturi najjednostavniji. kažemo da je niz dimenzije n to znači da niz ima n članova.ln:un] = {X[i1. ln +1 1..i2. Kod više dimenzionalnih nizova. Al – Adresa memoriskog elementa... a pristup je efikasan ako je veličina elemenata S jednaka jednoj memoriskoj reči ili njenom celom multiplu. l2 + 1. Višedimenzionalni nizovi Višedimenzionalni nizovi su nizovi koje mi najčešće nazivamo matricama. …u1.in]}. x z ili (m..Nizovi – primena u praksi 1. Svaki višedimenzionalni niz možemo da gledamo kao na jednodimenzionalni niz sa elementima jednodimenzionalnog niza. dijagonalne matrice. simetrične matrice i dr.Predstavljanje nizova s . dvodimenzionalan (matrica).. …u1. l+1. trougaone matrice.Za niz je bitno poznavati njegove dimenzije da bismo mogli ispravno indeksirati odnosno dodavati njegove elemente.z).i2]}..Memoriska reč. [Type text] Visoka Poslovna škola strukovnih stuija Blace [Type text] ..1 Predstavljanje nizova Jednodimenzionalni nizovi Niz može biti jednodimenzionalan (niz). … u2 Primeri višedimenzionalnih nizova su: matrice. X[l1:u1:l2:u2. Npr.. in = ln. … u2.n. nego se uvek kaže da je niz dimenzija m x n x . i = l. X[l:u] = {X[i]}. ne postoji pojam dužine. X[l1:u1:l2:u2] = {X[i1.l1 + 1.. l2 + 1.…u Slika 1. i1 = l1. i2 = l2. međutim. i1 = l1. .. i2 = l2. Kod jednodimenzionalnog niza. i višedimenzionalan.

Nizovi – primena u praksi Nizovi postoje gotovo u svakom programskom jeziku. Tada se memoriska reprezentacija bitno razlikuje od memoriske reprezentacija kada je element S jednak jednoj memoriskoj reči. Slika 4. [Type text] Visoka Poslovna škola strukovnih stuija Blace [Type text] . – Memoriska reprezentacija (efikasnost pristupa) 1. U ovom zadatku imam za cilj da objasnim kakva je primena nizova u C programskom jeziku. ali može biti bilo koji objekat. Slika 3. element jednodimenzionalnog niza ima jedan indeks. – Memoriska reprezentacija kada je element S jednak jednoj memoriskoj reči Veliki problemi nastaju kada element S nije jednak jednoj memoriskoj reči.1 Jednodimenzionalni niz Opšta forma deklarisanja jednodimenzionalnog niza je: type var_name [size]. U zavisnosti od toga šta je prioritetni cilj određujemo na koji način formiramo niz.3 Indeksiranje Svaki element niza ima onoliko indeksa koliko sam niz ima dimenzija. – Memoriska reprezentacija (iskorišćenje prostora) Ako je efikasnost pristupa prioritet elementi “se smeštaju sa dopunom“ što se plaća slabim iskorišćenjem memoriskog prostora. a n-dimenzionalni niz ima n indeksa. Tako. Sam indeks je obično ceo broj.Nizovi – primena u praksi Slika 2. 2. 2. Ako je iskorišćenje prostora prioritet elementi se kontinualno smeštaju što se u nekim slučajevima plaća neefikasnošću pristupa. To ostavlja posledice na jedan od dva parametra memoriske reprezentacije a to su iskorišćenje prostora i efikasnost pristupa. Zbog efikasnosti pristupa i memoriske efikasnosti sačinjavaju izvorne kodove miliona programa širom sveta.

W 000A: GOTO 013 num[i] = i. Ako imamo potrebu da nam svaki sledeći niz ima kvadratnu vrednost i da se ispišu svi članovi niza onda ćemo postupiti na sledeći način: #include <16C74. a size određuje koliko elemenata ima niz.i++) 0007: CLRF 18 0008: MOVLW 0A 0009: SUBWF 18.i<10. C definiše da u deklarisanom nizu prvi element ima index 0. int i. Ako se sledeći element koda izvršava… int num[10]. 00C: MOVLW 0E . briši i . ako jeste tada zaustavite rutinu [Type text] Visoka Poslovna škola strukovnih stuija Blace [Type text] . int i. var_name predstavla ime niza.h> void main(void) { int num[10]. Ako niz ima 50 elemenata poslednji element niza ima index 49. učitavanje početka numeričkog koda 00D: ADDWF 18. Ako na primer želimo da 25-om elementu niza dodelimo vrednost 60 to ćemo uraditi na sledeći način: height [24] = 60. for (i=0. F 0012: GOTO 008 niz i će izgledati ovako: element 1 2 3 4 5 6 7 8 9 10 0123456789 Element niza se može koristiti na bilo kom mestu gde imate potrebu za promenjivom ili konstantnom. Ako želimo niz od 50 elemenata možemo da koristimo i izraz: int height [50].i<10. for (i=0. Prvi element se nalazi na najnižoj adresi.i++) .W 010: MOVWF 00 0011: INCF 18. C smešta jednodimenzionalne nizove kontinualno u sukcesivne memoriske lokacije. sada test da li je <10 .W 00E: MOVWF 04 00F: MOVF 18.Nizovi – primena u praksi Type predstavlja korektan C tip podataka.

Nizovi – primena u praksi num[i] = i * i.i<10. str[i] . Jedno od osnovnih pravila po kojem je to moguće je da ova niza imaju isti broj elemenata. Učitani string karaktera će biti smešten u deklarisan niz str. gets(str). Ovo je nekorektno. printf("Unesi string (<80 karaktera): \n"). } Šta ako želimo da postojeći niz proširimo sa jednim elementom? Programski jezik C ne poseduje proveru granica za indeksirani niz. Ali to može dovesti do katastrofalnog rezultata koji može da se manifestuje u vidu pada celog programa.i<10. Umesto toga podržava stringove upotrebom jednodimenzionalnih nizova karaktera. Ovaj dodatni element će sadržati null. Da li to znači da možemo upisivati i čitati element koji nije deklarisan u nizu.i++) printf("&d". void main(void) { char str[80]. Moramo biti sigurni da je dužina stringa str veća ili jednaka učitanom broju karaktera sa tastature plus null (null = \0).i++) [Type text] Visoka Poslovna škola strukovnih stuija Blace [Type text] . for (i=0. 2. . for (i=0. Da bi dodelili vrednosti jednog niza drugom nizu morate da kopirate svaki element prvog niza u element drugog niza pojedinačno. num[i]). Null se u C-u definiše kao 0. C nema ugrađen string kao tip podataka. b[10]. Ako je taj uslov zadovoljen koristi se sledeća formula: for (i=0. tada se pri deklarisanju stringa mora dodati dodatni element. String se definiše kao niz karaktera koji se završava sa null. Sve string konstante se automatski završavaju sa null u C kompajleru. int i. . Ako se svaki string mora završiti sa null.i++) b[i] = a[i].2 String String je najuobičajni jednodimenzionalni niz. Možemo. a u nekim slučajevima i rad celog računara je doveden u pitanje. Dodeljivanje vrednosti jednog niza drugom nizu korišćenjem formule dodeljivanja: int a[10]. Funkcijom gets(str) možemo učitati sve karaktere sa tastature sve dok se ne naiđe na carriage return. a=b.

j<4. 2. Dvodimenzionalni niz se koristi na potpuno isti način kao i jednodimenzionalni niz. u svaki element niza proizvod indeks vrednosti elemenata niza. Sledeći program nam smešta u 5x4 niz. printf("\n"). Dvodimenzioni nizovi se najbolje predstavljaju u vrsta/kolona formatu. for (i=0.i<5. Jedan višedimenzionalni niz dimenzija 5x5 kreiramo na sledeći način: int number [5] [5].Nizovi – primena u praksi printf("&c".j<4. for (i=0.j++) array [i][j]=i*j. Koristi 25 lokacija Ako želimo da dodamo dodatne informacije o nizu to možemo uraditi jednostavnim dodavanjem dodatnog skupa zagrada. int i.j++) printf("&d". Ovakvim nizovima se pristupa po vrstama.i to sa leva na desno. void main (void) { int array [5][4]. print("\n&s". array [i][j]).i++) { for(j=0.i<5.3 Višedimenzionalni nizovi C programski jezik podržava i rad sa višedimenzionalnim nizovima.j.i++) for(j=0. } } Grafička prikaz 5x4 niza: 0 0 0 0 0 0 1 2 3 4 0 2 4 6 8 0 3 6 9 12 [Type text] Visoka Poslovna škola strukovnih stuija Blace [Type text] . str[i]). } String se može štampati na dva načina: kao niz karaktera upotrebom &C ili kao string &S. str). a potom prikazuje sadržaj niza u vrsta/kolona formatu.

int sum=0. Prvi način podrazumeva da napravite listu svih pojedinačnih karaktera kao na primer: char str[3] = { “a”. kao što je prikazano u primeru: char name [5] = “John”.String može da bude inicijalizovan na dva načina. 2. j++) sum+=x[i][j]. num_rows=3. num_cols=4. druga konstanta na mesto drugog elementa liste i tako dalje.3. Prva konstanta se smešta kao prvi element liste. “b”. Usled upotrebe PicMikro mikrokontrolera višedimenzionalni niz od 10x10 elemenata nije moguć. Drugi metod je da se koristi string pod navodnicima. Jednostavnije je koristiti format vrsta/kolona kada se koriste dvodimenzionalni nizovi.4 Inicijalizacija nizova C programski jezik obezbeđuje metod kojim dodeljuje inicijalnu vrednost nizu na isti način kako bi bila dodeljena i za sasmostalnu varijablu. Primer sume svih elemenata matrice x: int i. i<num_cols.2. [Type text] Visoka Poslovna škola strukovnih stuija Blace [Type text] .Nizovi – primena u praksi Upotreba multidimenzionih nizova povećava broj varijabli potrebnih za pristup svakom pojedinačnom elementu.4. Kompajler automatski dodaje null na kraju stringa. Multidimenzionalni niz se inicijalizuje na isti način kao i jednodimenzionalni niz. for(i=0.5}. i <num_rows. j. Sledećim primerom ćemo prikazati inicijalizaciju niza od 5 celobrojnih elemenata: int i[5] = {1. One se ne koriste prilikom inicijalizacije zato što se stringovi u C jeziku završavaju sa null. a element i[4] će imati vrednost 5. i++) for(j=0. Možda se primećuje da ne postoje uglaste zagrade oko stringa. cout << "suma elemenata matrice=" << sum. Element i[0] će imati vrednost 0. Value_list je lista konstanti kompatibilnih sa definisanim tipom niza. “c”}. Kao alternativu koriste se dva niza od po 50 elemenata. Uopštena forma jednodimenzionalnog niza je: type_array name[size] = {value_list}. pri čemu su konstante međusobno razdvojene zarezom.

Ako bismo želeli da pristupimo animals stringu koristimo prve dve dimenzije. da bi smo pristupili drugom stringu u trećoj listi. Za pristup stringu iz tabele dovoljno je specificirati samo prvi indeks. int suma_niza(int A[]. Na primer. Da bi mogli da manipulišemo stringovima moramo da obezbedimo da string niz odgovara veličini stringa kojim se manipuliše. 2. On se inicijalizuje kao bilo koji drugi niz. 5 . 9 }.6 String funkcije Unutar programa se stringovima može manipulisati na razne načine. Isto pravilo važi i za nizove koji imaju više od dve dimenzije. i<numelements. 7 . 3 . } [Type text] Visoka Poslovna škola strukovnih stuija Blace [Type text] .Nizovi – primena u praksi Inicijalizacija 3x3 niza: int num [3] [3] = { 1 . 2 . return sum. int numelements) { int sum =0. Ovo su samo neki od mnogo brojnih funkcija. Imamo niz animals deklarisan na sledeći način: char animals [5] [4] [50]. specifiramo: animals [2] [1].5Niz stringova Niz stringova je veoma dobar za korišćenje u C jeziku.Kada se jednodimenzionalni niz pojavljuje u deklaraciji argumenata funkcije. Kreirati niz name koji sadrzi 10 imena pri čemu svako ime ima 40 karaktera (uključujući i null). 4 . names [4]). Način korišćenja niza stringova je malo drugačiji nego kod korišćenja niza. char names [10] [40]. Jedan od primera je kopiranje sa izvorišta na odredište pomoću strcpy komande. 8 . To omogućava da se konstantni string unese u RAM. 6 . 2. Sledeći primer ispisuje peto ime iz niza: printf (“&S”.tada se ne navodi dimenzija niza. i++) sum += A[i]. for(int i=0.

možete da dodelite drugom pokazivaču. 3. int a[5] = {1. Ako koristimo ime niza bez indeksa. adresu) pamti "u njegovom imenu" stoga se pri pozivu funkcije navodi samo ime. for (i=o. Kompajler memorijsku referencu niza (tj. Pošto je ime niza bez indeksa ustvari pokazivač. neispravno je inkrementirati pokazivač. } Treba zapamtiti da pokazivač treba indeksirati samo kada ukazuje na niz.7 Pokazivači i nizovi Pokazivači i nizovi su blisko povezani i međusobno zamenjivi. jer funkcije tada ne bi bile moguće. 4.Nizovi – primena u praksi Uočimo da se vrednost elemenata niza može menjati unutar funkcije. Mešanje pokazivača i nizova može dovesti do neočekivanih rezultata. bez uglatih zagrada. strcat strchr | Vrši spajanje dva stringa | Traži prvo pojavljivanje karaktera u stringu strrchr | Traži poslednje pojavljivanje karaktera strcmp | Poredi dva stringa strncmp | Poredi broj karaktera u dva stringa 2. *(p+i)). 5} void main (void) { int * p.i<5. Literatura • • Programski jezik C za PIC Mikrokontrolere.i++) printf ( “&d”. 2. To omogućava da pristupite nizu pomoću pointer aritmetike. p=a. [Type text] Visoka Poslovna škola strukovnih stuija Blace [Type text] .i. Očito je da se niz ne prenosi po vrednosti. vi zapravo upotrebljavate pokazivač na početak niza. Pošto pokazivači ukazuju samo na prvi element ili osnovu stringa. Nizovi se u funkciju prenose kao memorijske reference. Ono što se zapravo prenosi funkcija je pokazivač na prvi element stringa. Wikipedia. Kada se prenosi niz funkciji prenosi se samo pokazivač na prvi element. 3.

[Type text] Visoka Poslovna škola strukovnih stuija Blace [Type text] .Nizovi – primena u praksi • Algoritmi i strukture podataka(prezentacija).