16.1.2012 dvije godine postojanja naših stranica

Jednodimenzionalno polje

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:

 

            int A[6]={2,34,1,67};

 

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.