Polja

 

POLJA

     Ovo poglavlje objašnjava polja i ilustruje njihovu upotrebu pri definisanju varijabli. Polje se sastoji od niza objekata (nazivaju se i elementi niza), koji su istog tipa i zauzimaju neprekidan memorijski prostor. Općenito, samo polje ima simboličko ime, a ne njegovi elementi. Svaki elemenat je identificiran njegovim indeksom, koji pokazuje položaj nekog elementa u nizu. Broj elemenata u nizu naziva se dimenzija polja. Dimenzija polja je fiksirana i prethodno određena, i ne može se promijeniti u toku izvršenja programa.Polja su pogodna za predstavljanje podataka koji se sastoje od mnogo sličnih, individualnih objekata. Primjeri za to su lista imena, tabela gradova i njihovih sezonskih temperatura.

 

Definisanje i inicializacija polja

 

Varijabla polje je definisana specificiranjem njegove dimenzije i tipa njegovih elemenata. Na primjer, polje koje obuhvata 10 mjerenja visine (od kojih je svaka cijeli broj) može se definisati na sljedeći način:

 

int visina[10];

 

     Pristup individualnim elementima nekog niza vrši se indeksiranjem niza. Prvi elemenat niza uvijek ima indeks 0. Na taj način, visina[0] i visina[9] označavaju prvi i posljednji elemenat niza visina, respektivno. Svaki elemenat niza se može tretirati kao varijabla tipa cijeli broj. Tako, na primjer, da bi smo trećem elementu ovog niza pridružili vrijednost 177, pisali bismo:

 

visina[2] = 177;

 

     Pokušaj pristupa nepostojećem elementu nekog niza (na primjer visina[-1] ili visina[10]) može uzrokovati ozbiljnu grešku (tzv. runtime greška, ili greška 'indeks izvan granica’).Procesiranje bilo kojeg niza obično uključuje korištenje petlje, koja ide kroz niz od elementa do elementa.

    Sljedeći primjer pokazuje funkciju koja računa srednju vrijednost nekog niza:

 

                    const int velicina = 3;

                    double Srednja (int broj[velicina])

                    {

                       double srednja = 0;

                       for (int i = 0; i < velicina; ++i)

                       srednja += broj[i];

                       return srednja/velicina;

                     }

 

Kao i kod ostalih varijabli, vrijednosti elemenata niza se mogu inicijalizirati. U tu svrhu koriste se zagrade{}, između kojih se specificira lista početnih vrijednosti elemenata niza koje su odvojene zarezom.

 Na primjer,

 

int broj[3] = {5, 10, 15};

 

definiše niz broj, i inicijalizira tri elementa ovog niza na vrijednosti 5, 10, 15, respektivno. Ovo je tzv. eksplicitno inicijaliziranje. Kada je broj vrijednosti u inicijalizatoru manji od dimenzije niza,ostali elementi su inicijalizirani na nulu, kao u slučaju:

 

int broj[3] = {5, 10}; // broj[2] je inicijaliziran na 0

 

     Kada se koristi potpuni inicijalizator (broj početnih vrijednosti odgovara dimenziji niza), dimenzija niza postaje suvišna i može se izostaviti, tj. broj elemenata je implicitan u inicijalizatoru (implicitna inicijalizacija). U ovom slučaju inicijalizacija niza  broj se može izvršiti i na sljedeći način:

 

int broj[] = {5, 10, 15}; // dimenzija nije potrebna

 

     Još jedan primjer u kojem se dimenzija niza može izostaviti je kada je niz parametar u nekoj funkciji. Na primjer, funkcija Average iz ranijeg primjera se može napisati na bolji način, ako se postavi da dimenzija niza nije fiksirana na neku konstantnu vrijednost, nego se dodaje još jedan parametar, tj.

 

         double Srednja (int broj[], int velicina)

               {

                  double srednja = 0;

                  for (int i = 0; i < velicina; ++i)

                  srednja += broj[i];

                  return srednja/velicina;

               }

Kompletan program bi, u tom slučaju, bio:

 

               #include <iostream>

               using namespace std;

               double Srednja (int broj[],int velicina)

               {

                   double srednja = 0;

                   for (int i = 0; i < velicina; ++i)

                   srednja += broj[i];

                   return srednja/velicina;

                   }

                      main ()

                   {

                      int velicina;

                      cout <<"Broj elemenata ....";

                      cin >> velicina;

                      int n[velicina];

                      for(int i=0;i<velicina;i++){

                      cout<<"n["<<i<<"]= ";

                      cin>>n[i];

                  }

      cout << "Srednja vrijednost je .... "<<Srednja(n,velicina)         <<"\n";

                      system("PAUSE");

                       }

 

    Sljedeći program predstavlja primjer pomoću kojeg se unosi, sortira i ispisuje neki niz. Pri tome,sortiranje je izvedeno od najvećeg prema najmanjem elementu niza.

 

                                        #include <iostream>

                                        using namespace std;

                                        int main ()

                                        {

                                                    // DEKLARACIJA

                                             int x[10];

                                             int y[10];

                                             int i, j, n;

                                                    // UNOSENJE

                                             cout << "Unesite broj clanova polja: ";

                                             cin >> n;

                                             for (i = 0; i < n; i++)

                                             {

                                                  cout << "Unesite clan br. " << i << ": ";

                                                  cin >> x[i];

                                                  y[i] = x[i];

                                             }

                                                    // SORTIRANJE

                                             for (i = 0; i < n-1; i++)

                                              {

                                             for (j = i+1; j < n; j++)

                                               {

                                             if (y[i] < y[j]) swap(y[i],y[j]);

                                              }

                                              }

                                                    // STAMPANJE

                                            cout << "x:" << '\t' << "y:" << endl;

                                            for (i = 0; i < n; i++)

                                              {

                                             cout << x[i] << '\t' << y[i] << endl;

                                               }

                                          }

 

Interesantno je napomenuti da je i C++ string niz karaktera. Tako

 

char str[] = "HELLO";

 

definiše varijablu  str  kao niz šest (6) karaktera: pet slova i prazan karakter (null-character).

Završni prazan karakter postavlja kompajler. Za razliku od toga,

 

char str[] = {'H', 'E', 'L', 'L', 'O'};

 

definiše varijablu  str kao niz od  5  elemenata.