Page 1

Programiranje II – Vježba 6.

Vježba 6.

Ime studenta:

Nizovi i klase Ciljevi ove laboratorijske vježbe: 1. upoznati se sa nizovima 2. naučiti korištenje nizova u klasama Kao pripremu za ovu vježbu pročitajte slijedeća poglavlja iz knjige: 7. Klase – objekti 8. Nizovi Kao pripremu za slijedeću vježbu pročitajte slijedeća poglavlja iz knjige: 8. Nizovi 9. Preopterećenje 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 korisnički objekti. Elementi jednog niza se ne mogu razlikovati po svom tipu, odnosno jedan niz može sadržavati samo jednu vrstu varijabli ili objekata. Prilikom deklaracije niza u uglatim zagradama navodimo ukupni broj članova niza. Važno je zapamtiti da indeksiranje niza počinje sa nulom, odnosno da prvi član niza ima indeks [0], a ne [1]. Isto tako, važno 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 računa u petljama, kod inicijalizacije brojača petlje i uvjeta za završetak petlje. U jeziku C++ kompajler ne provjerava je li vrijednost indeksa niza unutar deklariranog opsega, to je dužnost programera (ovakve greške mogu dovesti do rušenja programa). Također, prilikom deklaracije niza ne vrši se njegova inicijalizacija, odnosno resetiranje vrijednosti varijabli. To je također dužnost programera.

1


Programiranje II – Vježba 6. Višedimenzionalni nizovi Moguće je definirati i nizove s više dimenzija. Takvi nizovi mogu se razmatrati i kao nizovi sastavljeni od nekoliko nizova. Ako je višedimenzionalni 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 znači da se vrijednost elemenata niza može mijenjati unutar funkcije i da će biti sačuvana. Evo tipične 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 pokazivači Prilikom rada s nizovima često je zgodno koristiti pokazivače. Naime, ime niza tretira se kao «pokazivačka konstanta» koja predstavlja adresu prvog elementa niza. Stoga možemo deklarirati pokazivač istog tipa kao što su elementi niza te ga izjednačiti 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, koristeći pokazivačku aritmetiku, odnosno uvečavajući pokazivač za n dobijamo adresu n-tog člana niza. Članovima niza sada možemo pristupati dereferencirajući uvečani pokazivač, odnosno vrijedi: *(p) ⇔ a[0] *(p + 1) ⇔ a[1] *(p + 2) ⇔ a[2] ... *(p + n) ⇔ a[n]

Iz ovoga slijedi da se pokazivači mogu koristiti i prilikom prijenosa nizova u funkcije. Naime, kada se niz u funkciju prenosi uobičajeno, 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 sadrži slijedeći kod: #include <iostream> using namespace std; void inicijalizacija(int A[]) { for( int i=0; i<10 ; i++ )

2


Programiranje II – Vježba 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. Opišite što program radi. ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ Korak 2. Dodajte funkciju suma koja će sumirati članove niza te je vraćati u glavni program. U glavnom programu pozovite funkciju suma i ispišite sumu niza. Napišite 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 opišite što radi. ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ Korak 2. Napravite funkciju slijedeće 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. Napišite kako ste pozvali funkciju za ispis prvog retka: ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ Korak 4. Modificirajte funkciju print_row tako da u jednom retku ispisuje niz proizvoljne dužine. Dužina niza neka bude dodatni argument funkcije, tj. void print_row(int y[], int len);

Iz glavnog programa pozovite funkciju sa slijedećim parametrima: print_row(board[0], 4);

3


Programiranje II – Vježba 6. Napišite tijelo funkcije. Što funkcija ispiše kao četvrti član? Zašto? ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ Zadatak 6.3

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

Dodatni zadaci

Zadatak 6.4 Klasi iz zadatka 6.3 dodati metodu vratiNiz koja će vraćati sadržaj niza. U glavnom programu osim sume ispisati i sadržaj niza pomoću 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. Napišite metodu, njen poziv iz glavnog programa i ispis programa. ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________

4


Programiranje II – Vježba 6. ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ Zadatak 6.5 Napišite program koji sa konzole učitava 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 izračuna množenjem prvih članova odgovarajuće 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

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

5


Programiranje II – Vježba 6. ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________

6


Programiranje II – Vježba 6. Zadatak 6.6. Programu iz zadatka 6.5 dodajte funkciju imena print_row_pointer. Funkcija neka bude identična 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 također koristiti pokazivače.U glavnom programu ispišite sadržaj matrice koristeći funkciju print_row_pointer. Napišite funkciju print_row_pointer, poziv iz glavnog programa koji se odnosi na ispis matrice te ispis programa: ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ _____________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________ ______________________________________________________________________________________________

7

C++ Niz - pokaz-f-ija- datoteka  

Ciljevi ove laboratorijske vježbe: 1. upoznati se sa nizovima 2. naučiti korištenje nizova u klasama Ime studenta: Programiranje II – Vježba...