Uvod u programski jezik C (4. deo)
Autor: Veljko Simić
Nizovi i matrice
U prošlom broju smo pričali o uslovnom grananju i kontroli toka programa. Naučili smo rad sa petljama, pa bismo ovaj tekst, u kome će biti reči o nizovima, počeli jednim pitanjem: kako ćemo napisati program koji računa prosečnu vrednost za deset vrednosti koje se unose? Pretpostavljamo da bi vaše rešenje imalo neku petlju koja bi se izvršavala deset puta i u njoj biste unosili vrednosti u neku promenljivu, nazovimo je zbir, sabirali biste te vrednosti i na kraju biste tu promenljivu podelili sa 10. Dobro, hajde da malo otežamo zadatak. Posle računanja proseka ispisati sve vrednosti koje su veće od njega! Tu nastaje problem: mi te vrednosti nismo zapamtili, već samo njihov zbir. Kada bismo pokušali da zadatak rešimo sa deset različitih promenljivih, zadatak bi bio poprilično ograničen i veoma teško bismo ga uopštili za, na primer, šesnaest vrednosti. Za ovakve, a i mnoge druge situacije, koriste se nizovi.
Niz je određen broj memorijskih lokacija koje imaju isti naziv. Pojedinačnim vrednostima se pristupa pomoću njihovog indeksa (njihovog rednog broja u nizu) i sve vrednosti u nizu moraju biti istog tipa. Indeks niza u programskom jeziku C se piše u uglastim zagradama i, pošto sve počinje od 0, to važi i za numeraciju članova niza.
Opšta deklaracija niza izgleda ovako:
tip ime_niza[broj_članova];
Npr. ako nam treba niz koji ćemo nazvati Pera, od deset članova tipa int, deklarisaćemo ga ovako:
int pera[10];
Kad želite da peti član tog niza ima vrednost 42:
pera[4]=42;
Kao što vidite, sve počinje od 0, pa peti član niza ima indeks 4. Jedan od uobičajenih početničkih lapsusa jeste pristupanje članu koji ne postoji. U ovom slučaju bi bio član sa indeksom 10 – dakle pera[10] ne postoji, a ova greška se naziva off by one.
Možda mislite da određivanje broja članova niza pri deklaraciji ograničava nizove, ali, kao što smo rekli na početku, niz je skup memorijskih lokacija i računar mora znati koliko memorije treba da rezerviše. Postoji način dinamičkog dodeljivanja memorije nizu. To ćemo opisati u nekom od narednih tekstova. Ne moraju svi članovi niza biti iskorišćeni. Tako da, ako ste rezervisali deset mesta, možete da iskoristite deset, jedno, ali i nijedno.
U programskom jeziku C vrednosti elemenata niza nisu unapred deklarisane – dakle, u tim elementima se nalazi vrednost koja se nalazila na toj memorijskoj lokaciji, osim u slučaju kada je niz definisan kao globalna promenljiva. Tada svi članovi niza imaju vrednost 0.
Sada kada možemo reći da imate neko teorijsko znanje o nizovima, možemo uraditi zadatak s početka teksta.
#includeint main() { int n, niz[100],zbir=0,i; //definišemo niz od 100 elemenata float prosek; printf ("Unesite duzinu niza manju od 100"); scanf ("%d",&n); for (i=0;i prosek) printf ("%d ",niz[i]); return 0; }
Nizovi takođe mogu da budu višedimenzionalni. Dvodimenzionalni nizovi se nazivaju matrice. Matrice imaju veliku ulogu pre svega u čuvanju i obradi tabelarnih podataka. Da biste dobro vladali matricama, potrebno je da imate iskustva sa višestrukim for petljama. Prolazak kroz matricu je šablonski postupak i svodi se na upotrebu dve ugnježdene petlje for, od kojih je spoljna za redove, a unutrašnja za kolone. Tako prolazimo kroz matricu red po red. Matrica se definiše slično kao niz, samo što ima dve uglaste zagrade koje označavanju indekse rada i kolone. Ako želimo da definišemo matricu 10×10 tipa int, to bi izgledalo ovako:
int matrica[10][10];
Sledi primer učitavanja i ispisa matrice:
#includeint main() { int matrica[20][20],m,n,i,j; printf ("Unesite dimenzije matrice manje od 20!"); scanf ("%d%d",&m,&n); for (i=0:i Ovo je bio kratak uvod u diskusiju o nizovima i matricama. U sledećem broju ćemo pokazati neke nove tehnike sa ovim strukturama i neke nove stvari u C jeziku.
Naredni deo ovog serijala možete pročitati ovde.
Prethodni deo ovog serijala možete pročitati ovde.