Kod jednodimenzionalnih polja članovi polja (podaci) su poredani u niz (jedan iza drugoga), a indeks svakog od članova odgovara njegovoj udaljenosti od prvog člana.
|
Jednodimenzionalno polje |
|
X[0] |
X[1] |
X[2] |
... |
... |
X[N-1] |
Svaki od članova niza se označava cjelobrojnim indeksom i to tako da prvi član niza ima indeks 0, a posljednji član indeks za jedan manji od duljine polja (u gornjem primjeru duljina polja je N).
Kod izdvajanja (dohvaćanja) članova niza, indeks člana niza može biti zadan kao:
-
cjelobrojna konstanta,
-
cjelobrojna varijabla,
-
cjelobrojni izraz.
|
Način zadavanja indeksa članova niza |
|
X[3] |
cjelobrojna konstanta |
|
X[a] |
cjelobrojna varijabla |
|
X[a*3-1] |
cjelobrojni izraz |
Polje treba deklarirati (svi članovi polja moraju biti istog tipa) kako bi se u memoriji osigurao potreban prostor za podatke u polju.
|
Primjeri deklaracije polja |
|
tip_clanova_niza ime_niza [duljina_niza] |
Opći oblik deklaracije jednodimenzionalnog polja |
|
int X[6]; |
Polje X je jednodimenzionalno polje koje ima šest članova koji su po tipu cijeli brojevi. |
|
int a[100];
float X[20];
char tekst[50]; |
Članovi polja mogu biti bilo kojeg tipa (int, float ili bilo kojeg drugog). |
|
int A[6];
int A; |
Kao što se pri deklaraciji ne smiju ponavljati ista imena varijabli, tako se ni ime polja ne smije podudarati s imenom drugog polja ili neke od varijabli. Primjerice, ovakva je deklaracija pogrešna. |
Članovima deklariranog polja mogu se pridružiti vrijednosti. Vrijednosti se navode unutar para vitičastih zagrada, odvojene zarezom.
|
Pridruživanje vrijednosti članovima polja |
|
int X[6]={2,34,1,67,99,7} |
Polje X ima 6 članova i svi su po tipu cijeli brojevi. |
|
int X[ ]={2,34,1,67,99,7} |
Vrijedit će i ako se ne navede duljina polja: (prevoditelj sam "zaključuje" da je u listi šest članova i nakon toga se duljina polja više ne može mijenjati). |
|
X[a*3-1] |
cjelobrojni izraz |
|
Član polja |
X[0] |
X[1] |
X[2] |
X[3] |
X[4] |
X[5] |
|
Vrijednost |
2 |
34 |
1 |
67 |
99 |
7 |
Članovi polja se razlikuju po indeksu koji se mijenja od 0 do N–1 (N je ukupan broj članova niza) pa je za upis i ispis članova polja prikladno rabiti petlju. Petlja for se rabi ako je unaprijed poznat broj ponavljanja petlje, a petlja while i petlja do-while ako broj ponavljanja nije unaprijed poznat.
Ovdje će biti prikazani samo najjednostavniji primjeri rada s jednodimenzionalnim poljima.
|
Zadatak:
|
Treba unijeti članove jednodimenzionalnog polja int X[6] = {2,34,1,67, 99,7} pa ih ispisati.
Ispis treba izgledati ovako:
A[0]=2 A[1]=34 A[2]=1 A[3]=67 A[4]=99 A[5]=7
|
Rješenje:
|
#include <iostream>
using namespace std;
int main ()
{
int i;
int A[6]={2,34,1,67,99,7};
for(i=0;i<6;i++)
{
cout<<"A["<<i<<"]="<<A[i]<<" ";
}
cout<<endl;
return 0;
}
|
Rezultat:
|
A[0]=2 A[1]=34 A[2]=1 A[3]=67 A[4]=99 A[5]=7
|
|
Duljina deklariranog polja
Duljina deklariranog polja se ne može mijenjati tijekom izvođenja programa, a mora biti veća ili jednaka broju članova polja. Ako je deklarirana duljina polja veća od broja članova kojima je pridružena vrijednost, preostalim se članovima pridružuje vrijednost 0.
|
Zadatak:
|
Primjer pridruživanja nule članovima polja može se vidjeti ako se u prethodnom primjeru u polje A[6], pohrane samo četiri podatka:
|
Rješenje:
Rezultat:
|
A[0]=2 A[1]=34 A[2]=1 A[3]=67 A[4]=0 A[5]=0
|
|
|
Zadatak:
|
Treba unijeti N članova jednodimenzionalnog polja, pa ih ispisati i zbrojiti. N mora biti manji ili jednak 10 (N<=10). Ispis neka bude oblika:
Upisi broj clanova polja:
Upisi X[...] clan polja:
....
....
Zbroj ... clanova polja iznosi ....
|
-
Kako nije unaprijed poznat broj članova polja (N) treba ga unijeti i provjeriti da li je 0<N<=10. Provjera se izvodi petljom do-while.
-
Prva petlja for će poslužiti za upis članova polja, a druga za zbrajanje i ispis.
Rješenje:
|
#include <iostream>
using namespace std;
int main ()
{
int N,i,zbroj;
int X[10];
zbroj=0;
do
{
cout<<"Upisi broj clanova polja:";
cin>>N;
}
while((N<=0)||(N>10));
for (i=0;i<N;i++)
{
cout<<endl<<"Upisi X["<<i<<"]:";
cin>>X[i];
}
for (i=0;i<N;i++)
{
cout<<X[i]<<endl;
zbroj=zbroj+X[i];
}
cout<<endl<<"N="<<N<<". Zbroj "<<N <<" clanova polja iznosi "<<zbroj <<endl;
return 0;
}
|
Rezultat:
|
Upisi broj clanova polja:5
Upisi X[0]: 11
Upisi X[1]: 2
Upisi X[2]: 8
Upisi X[3]: 6
Upisi X[4]: 5
11
2
8
6
5
N=5. Zbroj 5 clanova polja iznosi 32
|
|
Oprez!
U radu s poljima treba biti oprezan jer jezik C++ ne provjerava granice polja prilikom pristupa članovima polja. Ako se navede prevelik ili negativan indeks, prevoditelj neće javiti pogrešku i pri izvršavanju programa pristupit će se memorijskoj adresi koja nije u području rezerviranom za polje. To će prouzročiti neispravan rad programa:
-
Ako se izdvaja (dohvaća) član s nedozvoljenim indeksom, rezultat je slučajni broj.
-
Ako se vrijednost pridružuje članu s nedozvoljenim indeksom, vrijednost će se pohraniti u memoriju na mjesto predviđeno za druge sadržaje što će vjerojatno prouzročiti pogrešan rad programa.
|
|