You are on page 1of 7

Programiranje II Vjeba 6.

Vjeba 6.

Ime studenta:

Nizovi i klase
Ciljevi ove laboratorijske vjebe:
1. upoznati se sa nizovima
2. nauiti koritenje nizova u klasama
Kao pripremu za ovu vjebu proitajte slijedea poglavlja iz knjige:
7. Klase objekti
8. Nizovi
Kao pripremu za slijedeu vjebu proitajte slijedea poglavlja iz knjige:
8. Nizovi
9. Preoptereenje operatora

Nizovi
Nizovi su kolekcije istovrsnih objekata. Svaki niz ima svoje ime, a svaki element niza ima svoj indeks cijeli broj
koji se upisuje u uglatim zagradama iza imena niza. Elementi niza su proste skalarne varijable ili korisniki objekti.
Elementi jednog niza se ne mogu razlikovati po svom tipu, odnosno jedan niz moe sadravati samo jednu vrstu
varijabli ili objekata.
Prilikom deklaracije niza u uglatim zagradama navodimo ukupni broj lanova niza. Vano je zapamtiti da
indeksiranje niza poinje sa nulom, odnosno da prvi lan niza ima indeks [0], a ne [1]. Isto tako, vano je primjetiti
da, ako je deklaracija niza glasila:
int niz[100];

zadnji lan niza nije niz[100], nego niz[99]. O ovome posebno treba voditi rauna u petljama, kod inicijalizacije
brojaa petlje i uvjeta za zavretak petlje.
U jeziku C++ kompajler ne provjerava je li vrijednost indeksa niza unutar deklariranog opsega, to je dunost
programera (ovakve greke mogu dovesti do ruenja programa). Takoer, prilikom deklaracije niza ne vri se
njegova inicijalizacija, odnosno resetiranje vrijednosti varijabli. To je takoer dunost programera.

Programiranje II Vjeba 6.
Viedimenzionalni nizovi
Mogue je definirati i nizove s vie dimenzija. Takvi nizovi mogu se razmatrati i kao nizovi sastavljeni od nekoliko
nizova. Ako je viedimenzionalni niz argument funkcije, nije potrebno deklarirati prvu dimenziju niza, ali ostale jest.
Kako se niz prenosi u funkciju
Nizovi se u funkciju prenose kao memorijske reference. To znai da se vrijednost elemenata niza moe mijenjati
unutar funkcije i da e biti sauvana. Evo tipine deklaracije funkcije, sa nizom kao argumentom i poziva iste
funkcije:
...
void printhistogram(int counts[])
{...}
...
int main(void)
{...
int counts[10] = {0};
...
printhistogram(counts);
...}

Nizovi i pokazivai
Prilikom rada s nizovima esto je zgodno koristiti pokazivae. Naime, ime niza tretira se kao pokazivaka
konstanta koja predstavlja adresu prvog elementa niza. Stoga moemo deklarirati pokaziva istog tipa kao to su
elementi niza te ga izjednaiti s imenom niza:
int a[10];
int *p;
p = a;

// ovo je ekvivalentno naredbi: p = &a[0];

Sada pokaziva p pokazuje na adresu prvog lana niza. Stoga, koristei pokazivaku aritmetiku, odnosno
uveavajui pokaziva za n dobijamo adresu n-tog lana niza. lanovima niza sada moemo pristupati
dereferencirajui uveani pokaziva, odnosno vrijedi:
*(p)
a[0]
*(p + 1) a[1]
*(p + 2) a[2]
...
*(p + n) a[n]

Iz ovoga slijedi da se pokazivai mogu koristiti i prilikom prijenosa nizova u funkcije. Naime, kada se niz u funkciju
prenosi uobiajeno, kao referenca, tada se u stvarnosti funkciji predaje adresa, odnosno pokaziva na prvi elementa
niza.

Zadatak 6.1
Korak 1. Napravite novi projekt, koji ete nazvati z61, te u njega ubacite datoteku z61k1.cpp.
Program sadri slijedei kod:
#include <iostream>
using namespace std;
void inicijalizacija(int A[]) {
for( int i=0; i<10 ; i++ )

Programiranje II Vjeba 6.

A[i]= 2 * i;
}
void main() {
int A[10];
inicijalizacija(A);
for( int i=0; i<10 ; i++ )
cout << "A[" << i << "]=" << A[i] << endl;
}

Kompajlirajte program i pokrenite ga. Opiite to program radi.


______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
Korak 2. Dodajte funkciju suma koja e sumirati lanove niza te je vraati u glavni program. U glavnom programu
pozovite funkciju suma i ispiite sumu niza. Napiite definiciju funkcije suma.
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
Zadatak 6.2
Korak 1. Napravite novi projekt, koji ete nazvati z62, te u njega ubacite datoteku z62k1.cpp. Pokrenite program te
opiite to radi.
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
Korak 2. Napravite funkciju slijedee deklaracije
void print_row(int y[3]);

koja ispisuje jedan redak dvodimenzionalnog niza x. Funkcija ima parametar jednodimenzionalni niz y koji u stvari
predstavlja redak dvodimenzionalnog niza x. Funkcija treba ispisivati u jednoj liniji tri lana niza.
Korak 3. U glavnom programu pozovite funkciju dvaput, svaki put za jedan redak niza x. Napiite kako ste pozvali
funkciju za ispis prvog retka:
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
Korak 4. Modificirajte funkciju print_row tako da u jednom retku ispisuje niz proizvoljne duine. Duina niza neka
bude dodatni argument funkcije, tj.
void print_row(int y[], int len);

Iz glavnog programa pozovite funkciju sa slijedeim parametrima:


print_row(board[0], 4);

Programiranje II Vjeba 6.
Napiite tijelo funkcije. to funkcija ispie kao etvrti lan? Zato?
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
Zadatak 6.3

Korak 1. Napravite novi projekt, koji ete nazvati z63, te u njemu otvorite novu datoteku z63k1.cpp. Napiite klasu
klNiz koja e kao jedinu varijablu (privatnu) imati niz od deset lanova. U default konstruktoru inicijalizirajte niz na
nain kao to je to napravljeno u zadatku 6.1. Definirajte metodu sumaNiza klase klNiz koja vraa sumu lanova
niza.
Korak 2. U glavnoj funkciji deklarirajte objekt obj klase klNiz te pozivom metode ispiite sumu niza. Napiite
specifikaciju klase:
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________

Dodatni zadaci

Zadatak 6.4 Klasi iz zadatka 6.3 dodati metodu vratiNiz koja e vraati sadraj niza. U glavnom programu osim
sume ispisati i sadraj niza pomou funkcije vratiNiz. Dakle, s obzirom da je niz privatna varijabla, a da bi je mogli u
glavnom programu ispisati, trebate je preko funkcije vratiNiz prebaciti u glavni program. Napiite metodu, njen
poziv iz glavnog programa i ispis programa.
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________

Programiranje II Vjeba 6.
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
Zadatak 6.5 Napiite program koji sa konzole uitava dimenzije dvodimenzionalnog niza (matrice). Matrica ne mora
bit kvadratna. Maksimalne dimenzije matrice su 10x10. Program zatim ita prvi red i prvu kolonu matrice. Ostale
lanove matrice program neka izrauna mnoenjem prvih lanova odgovarajue kolone i stupca, tj. a(i,j) =
a(i,1)*a(1,j). Primjer:
0 4 5 6
1 4 5 6
2 8 10 12
3 12 15 18

______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________

Programiranje II Vjeba 6.
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________

Programiranje II Vjeba 6.
Zadatak 6.6. Programu iz zadatka 6.5 dodajte funkciju imena print_row_pointer. Funkcija neka bude identina onoj
iz zadatka 6.2, korak 4, s time da jednodimenzionalni niz y koji ispisujete, prenesete kao pokaziva na prvi lan tog
jednodimenzionalnog niza. Za ispis lanova jednodimenzionalnog niza takoer koristiti pokazivae.U glavnom
programu ispiite sadraj matrice koristei funkciju print_row_pointer.
Napiite funkciju print_row_pointer, poziv iz glavnog programa koji se odnosi na ispis matrice te ispis programa:
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
_____________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________
______________________________________________________________________________________________

You might also like