Seminarski Nizovi ProgramskiJezici

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 14

UNIVERZITET U BIHAU PEDAGOKI FAKULTET ODSJEK: MATEMATIKA I FIZIKA SMJER: MATEMATIKA I INFORMATIKA

Nizovi
Seminarski rad

Predmet: Programski jezici I Profesor: prof. dr. sc.Nedad Duki

Student: Larisa Brki

Biha, juni 2012

Sadraj
1. Uvod.......................................................................................................................................3 2. Nizovi......................................................................................................................................4 3. Jednodimenzionalni nizovi.....................................................................................................4 4. Dvodimenzionalni nizovi........................................................................................................7 5. Zadaci......................................................................................................................................9 5. Literatura...............................................................................................................................14

Uvod
U ovom seminarskom radu emo se upoznati sa izvedenim oblicima podataka. Prvo e biti opisani nizovi ili polja koja predstavljaju skupove istovjetnih podataka. Oni su u informatiku preuzeti iz matematike i omoguavaju pristupanje veem broju podataka preko zajednikog simbolikog imena i indeksa koji pokazuje redni broj elementa. esto se u programima koriste skupovi istovjetnih podataka. Za oznaavanje i rukovanje takvim istovjetnim podacima bilo bi vrlo nespretno koristiti za svaki pojednini podatak zasebnu varijablu, primjerice x1, x2,...Zamislimo samo da trebamo rezultate nekog mjerenja koji sadre 100 podataka statistiki obraditi, pri emu svaki podatak treba proi kroz isti niz raunskih operacija. Ako bismo koristili zasebna imena za svaki podatak, program bi se morao sastojati od 100 istovjetnih blokova naredbi koji bi se razlikovali samo u imenu varijable koja se u dotinom bloku obrauje. Upravo zbog ovakvih neracionalnih pristupa, koriste se nizovi ili polja.

Nizovi
Niz ili polje je kontinuirana sekvenca memorijskih lokacija, gdje svaka lokacija sadri vrijednosti istog tipa. Druga definicija: Skup podataka istog tipa koje razlikujemo putem indeksa nazivamo niz ili polje. Ti podaci mogu biti bilo kojeg tipa, ugraenog ( primjerice float ili int, itd ) ili korisniki definiranog. Pojedni lanovi polja se mogu dohvatati putem cjelobrojnih indeksa te mijenjati neovisno o ostalim lanovima polja. Svaka lokacija niza se naziva element niza. Nizovi se dijele na: jednodimenzionalne nizove viedimenzionalne nizove

Jednodimenzionalni nizovi
Najjednostavniji oblik niza su jednodimenzionalni nizovi kod kojih se lanovi dohvataju preko samo jednog indeksa. lanovi niza sloeni su linearnom slijedu, a indeks pojedinog lana odgovara njegovoj udaljenosti od poetnog lana. Deklaracija jednodimenzionalnog niza sastoji se od navoenja tipa podatka lanova niza, imena niza i broja lanova niza koji se navodi u zagradi [ ]. float x[5];

Ovom deklaracijom prevodilac e osigurati kontinuirani prostor u memoriji za 5 podataka tipa folat. Ovakvom deklaracijom lanovi niza nisu inicijalizirani, tako da imaju sluajne vrijednosti, ovisno o tome ta se nalazilo u dijelu memorije koji je dodijeljen nizu. Niz se moe istovremeno deklarisati i inicijalizirati. Tada se vrijednosti lanova navode unutar zagrada { }, a odvajaju zarezom. Npr.: int b[5]={1, 2, 3, 4}; Ako se prilikom inicijalizacije navede vie vrijednosti nego to niz ima lanova, prevodilac e javiti pogreku. Ako se prilikom inicijalizacije navede manje vrijednosti nego to niz ima lanova, onda lanovi koji nisu inicijalizirani mogu imati bilo koju vrijednost. Mogue je izostaviti dimenzije niza ukoliko se navede lista inicijalnih vrijednosti pri deklaraciji. Npr.:

float x[]={1342.5, 4.7, 23.4, 12, -7.2e12};

Ovom naredbom se deklarie jednodimenzionalni niz x, te se lanovima tog niza pridjeljuju poetne vrijednosti. Iako duina niza nije eksplicitno navedena, prevodilac e iz inicijalizacijeske liste sam zakljuiti da je niz duine 5 i rezervisat e odgovarajui memorijski prostor. Navede li se ipak kod inicijalizacije duina niza, treba paziti da ona bude ne vea i da bude jednaka broju inicijalnih vrijednosti. Broj inicijalizatora u listi smije biti manji od duine niza. Tada lanovi brojanog niza kojima nedostaju inicijalizatori postaju jednaki nuli. Nije dozvoljeno pridruiti praznu inicijalizacijsku listu nizu koji nema definisanu duinu niza.

Pri odabiru imena niza treba voditi rauna da se ime niza ne smije podudarati s imenom neke varijable u podruju dosega niza, tj. u podruju u kojem je niz vidljiv. Pojedini lanovi niza se dalje u kodu dohvataju pomou cjelobrojnog indeksa koji se navodi u uglatoj zagradi [ ] iza imena niza. Prvi lan niza ima uvijek indeks 0. Broj unutar zagrade oznaava broj lanova niza, a obzirom da indeksiranje poinje od 0, indeks zadnjeg lana je za jedan manji od broja lanova niza. Jedno od ogranienja pri koritenju niza jest da duina niza mora biti specificirana i poznata u trenutku prevoenja koda. Duina jednog deklarisanog niza se ne moe mijenjati tokom izvoenja programa. Prava snaga obrade podataka strukturiranih u nizove dolazi u savezu sa brojakim petljama, gdje se broja u petlji koristi kao indeks elementa niza. Tako je omoguena elegantna i kompaktna obrada svih elemenata niza. U sluaju nizova velike duine inicijalizacija se izvodi koritenjem petlje.

Dvodimenzionalni nizovi
U dosadanjim primjerima koristili smo jednodimenzionalne nizove u kojima su lanovi sloeni u jednom kontinuiranom nizu i dohvataju se samo jednim indeksom. esto se pak valja potreba za pohranjivanjem podataka u dvodimenzionalne ili viedimenzionalne strukture. Viedimenzionalni nizovi imaju dva ili vie indeksa. Broj indeksa odreuje dimenziju niza. Npr. deklaracija i inicijalizacija 2-dimenzionalnog niza ( kao to je matrica, tabela) je: int m[2][3]={{3, 5, 7}, {2, -4, -6}}; Ovaj dvodimenzionalni niz se sastoji od 2 reda i 3 kolone. Svaki element u dvodimenzionalnom nizu se jedinstveno locira navoenjem reda i kolone kojima element pripada. Prvom redu i koloni dodjeljuje se indeks 0. Indeksi za pojedine dimenzije moraju biti odvojeni u zasebnim uglatim [ ] zagradama. Pravila koja vrijede za jednodimenzionalne nizove vrijedi i za dvodimenzionalne nizove. Elementi dvodimenzionalnog niza se mogu prilikom deklaracije i inicijalizirati. Npr.: int Tablica[3][5]={{11, 12, 13, 14, 15}, {21, 22, 23, 24, 25}}; Ovim se inicijaliziraju lanovi prva dva reda. Unutranje vitiaste zagrade omeuju lanove u pojedinim redovima. Budui da je inicijalizacijska lista kraa od duine niza ( nedostaju lanovi treeg reda ), lanovi treeg reda se inicijaliziraju na nulu.

Elegantna obrada podataka strukturiranih u dvodimenzionalne nizove se postie koritenjem for petlji. Dvije ugnjedene for petlje mogu biti iskoritene za indeksiranje svih elemenata dvodimenzionalnog niza. Broja vanjske petlje moe biti koriten za indeks reda ( kolone ), a broja unutranje petlje moe biti koriten za indeks kolone ( reda ) niza.

Zadaci
1. /*Program ocitava poizvoljni niz cijelih brojeva, te prikazuje sumu samo elemenata na
parnim pozicijama.*/ #include<iostream> using namespace std; void UnesiNiz(int[20],int); void IspisNiza(int[20],int); int SumaEl(int[20],int); void main() {

int brel; cout<<"Niz ima elemenata:"; cin>>brel; int x[20]; cout<<"Ealementi niza su:"<<endl; UnesiNiz(x,brel); cout<<"Niz je:"<<endl; IspisNiza(x,brel); cout<<"Suma elemenata na parnim pozicijama je:"<<SumaEl(x,brel)<<endl; } void UnesiNiz(int a[20],int brel) { for(int i=0;i<brel;i++) cin>>a[i]; } void IspisNiza(int a[20],int brel) { for(int i=0;i<brel;i++) cout<<a[i]<<"\t"; cout<<endl; } int SumaEl(int a[20],int brel) { int suma=0; for(int i=0;i<brel;i++)

{ if(i%2!=0) suma=suma+a[i]; } return suma; }

2. /*Ucitati 10 cijelih brojeva, izracunati njihovu aritmeticku sredinu,

te izbrojati koliko od ucitanih 10 brojeva je vece od izracunate vrijednosti aritmeticke sredine.*/ #include<iostream> using namespace std; void UnesiNiz(int[10]); void IspisNiza(int[10]); void AritmetickaSredina(int[10]); void main() { int x[10]; cout<<"Elementi niza su:"<<endl; UnesiNiz(x); cout<<"Niz je:"<<endl; IspisNiza(x); AritmetickaSredina(x); } void UnesiNiz(int a[10]) { for(int i=0;i<10;i++) cin>>a[i]; } void IspisNiza(int a[10]) { for(int i=0;i<10;i++) cout<<a[i]<<"\t"; cout<<endl; } void AritmetickaSredina(int a[10]) { int suma=0; for(int i=0;i<10;i++) suma=suma+a[i]; int as=suma/10; cout<<"Aritmeticka sredina niza je: "<<as<<endl; int brojac=0; for(int i=0;i<10;i++) { if(a[i]>as) brojac++; } cout<<"Broj elemenata koji su veci od aritmeticke sredine ima:"<<brojac<<endl;

3. /*Ucitati proizvoljni niz od 10 cijelih brojeva, te prikazati sumu kvadrata samo onih koji su
veci od zadnje ucitanog broja. */ #include<iostream> using namespace std;

10

void void void void {

UnesiNiz(int[]); IspisNiza(int[]); SumaKvadrata(int[]); main() int x[10]; cout<<"Unesite elemente niza: "<<endl; UnesiNiz(x); cout<<"Niz je: "<<endl; IspisNiza(x); cout<<"Suma kvadrata elemenata koji su veci od zadnjeg broja je: "; SumaKvadrata(x);

} void UnesiNiz(int a[]) { for(int i=0;i<10;i++) cin>>a[i]; } void IspisNiza(int a[]) { for(int i=0;i<10;i++) cout<<a[i]<<"\t"; cout<<endl; } void SumaKvadrata(int a[]) { int suma=0; for(int i=0;i<10;i++) { if(a[i]>a[9]) suma=suma+a[i]*a[i]; } cout<<suma<<endl; }

4. /*Napisi program koji omogucuje unos elemenata matrice 3x3, a zatim ispisuje tu matricu,
ispisuje elemente sa glavne dijagonale, te sumu elemenata na glavnoj dijagonali.(bez funkcija)*/ #include<iostream> using namespace std; void main() { int m[3][3]; cout<<"Unesite elemente matrice: "<<endl; for(int i=0;i<3;i++) for(int j=0;j<3;j++) cin>>m[i][j]; cout<<"Matrica je oblika: "<<endl; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) cout<<m[i][j]<<"\t"; cout<<endl; } int suma=0; cout<<"Elementi sa glavne dijagonale su:"<<endl;

11

for(int i=0;i<3;i++) { for(int j=0;j<3;j++) if(i==j) cout<<m[i][j]<<"\t"; } cout<<endl; cout<<"Zbir elemenata na glavnoj dijagonali je: "<<endl; for(int i=0;i<3;i++) for(int j=0;j<3;j++) if(i==j) suma=suma+m[i][j]; cout<<suma<<endl;

5. /*Napisati program koji ispisuje jedninicnu matricu.*/


#include<iostream> using namespace std; void Ispis(int[100][100],int); void main() { int n; cout<<"Matrica ima kolona i redova: "; cin>>n; int m[100][100]; cout<<"Jedinicna matrica je: "<<endl; Ispis(m,n); } void Ispis(int m[100][100], int br) { for(int i=0;i<br;i++) { for(int j=0;j<br;j++) if(i==j) cout<<"1"<<"\t"; else cout<<"0"<<"\t"; cout<<endl; } }

6. /*Unose se elementi matrice dimenzija 3X3.Napisati program koji ce omoguciti unos


vrijednost, te prikaz na ekranu cijele matrice, te prikaz transponirane matrice.*/ #include<iostream> using namespace std; void UnesiMatricu(int[3][3]); void IspisiMatricu(int[3][3]);

12

void TransponiranaMat(int[3][3]); void main() { int m[3][3]; cout<<"Elementi matrice su: "<<endl; UnesiMatricu(m); cout<<"Matrica je: "<<endl; IspisiMatricu(m); cout<<"Transponirana matrica je: "<<endl; TransponiranaMat(m); } void UnesiMatricu(int a[3][3]) { for(int i=0;i<3;i++) for(int j=0;j<3;j++) cin>>a[i][j]; } void IspisiMatricu(int a[3][3]) { for(int i=0;i<3;i++) { for(int j=0;j<3;j++) cout<<a[i][j]<<"\t"; cout<<endl; } } void TransponiranaMat(int a[3][3]) { for(int j=0;j<3;j++) { for(int i=0;i<3;i++) cout<<a[i][j]<<"\t"; cout<<endl; } }

13

Literatura
1. Julijan ribar, Boris Motik: Demistificirani C++ , Element, Zagreb, 2001. 2. Selim Paic: Strukturno programiranje u C++ , Zagreb, 2008.

14

You might also like