VIŠEDIMENZIONALNI NIZOVI

Šta su to nizovi?

Nizovi su složeni tipovi podataka koji se sastoje od određenog broja elemenata međusobno istog tipa koji mogu biti osnovni ili izvedeni (složeni).

Definišite niza karaktera od 5 elemenat i inicijalizujte ga: 

char nizKaraktera[5] = {'a','b','c','d','e'}; 

Niz čiji su elementi nizovi prostih podataka je dvodimenzionalni niz.

Za označavanje elemenata jednodimenzionalnog niza potreban je jedan indeks a[i]. Za označavanje elemenata dvodimenzionalnog niza potreban su da indeksa A[i][j].

a[3] – predstavlja četvrti element niza(11)
A[2][3] – element dvodimenzionalnog koji se nalazi u trećem redu i četvrtoj koloni(5)

Niz čiji su elementi dvodimenzionalni nizovi je trodimenzionalni niz.
Niz čiji su elementi (n-1)dimenzionalni nizovi su n dimenzionni nizovi.

 

DEFINISANJE VIŠEDIMENZIONOG NIZA

Opšti oblik definisanja višedimenzionog niza:
tip naziv [dužina1][ dužina2].......[ dužinan];
tip – identifikator jednog od osnovnih tipova podataka (int, char, float, double)
naziv – identifikator višedimenzionalnog niza
dužina1, dužina2, dužinan – broj elemenata višedimenzionog niza po pojedinim dimenzijama

 

PRIMERI:

1) Definisati matricu celih brojeva 20x30

2) Definisati trodimenzionalni niz realnih brojeva 10x11x12

3) Definisati matricu karaktera 20x50

INICIJALIZACIJA VIŠEDIMENZIONALNIH NIZOVA

Primer inicijalizacije jednodimenzionalnog niza!!!
int a[6] = {1,2,3,4,5,6};

Primeri inicijalizacije višedimenzionalnih nizova:
int a[2][3] = {1,2,3,4,5,6};   //nepregledna inicijalizacija
Najpogodnije je višedimenzionalni niz inicijalizovati po svakoj dimenziji.
int a[2][3] = {{1,2,3},{4,5,6}}   
int b[2][3][3] = {{{2,3,4},{9,10,11},{17,20,21}},{{39,42,45},{47,49,57},{61,68,79}}};
int a[] = {1,2,3,4};
int c[][3] = {{1,2},{3,4,5},{6}};
int d[][3] = {1,2,3,4,5,6};
int e[]; //Greška mora se ili navesti dimenzija ili da se obavi inicijalizacija
int e[][7]; //Greška mora se ili navesti dimenzija ili da se obavi inicijalizacija
int d[][] = {1,2,3,4,5,6}; //Greška navođenje ostalih dimenzija je obavezno



Ako su u pojedinim dimenzijama izostavljeni članovi višedimenzionalnog niza podrazumevani članovi su nule.
int c[4][3] = {{1,2},{3,4,5},{6}};
je isto što i
int c[4][3] = {{1,2,0},{3,4,5},{6,0,0},{0,0,0}};
PRIMERI nepravilne inicijalizacije višedimenzionalnog niza
int f[2][3] = {{1},{2},{3}};  
// Broj redova prilikom inicijalizacije je veći nego dozovljen
int g[2][3] = {{1},{2,3,4,5}}; 
// Broj elemenata u drugoj dimenziji je veći nego što je dozvoljeno
int e[2][3] = {1,2,3,4,5,6,7}; 
// Broj elemenata višedimenzionalnog niza je veći od predviđenog

PRISTUPANJE ELEMENTIMA VIŠEDIMENZIONALNOG NIZA

int mat[3][4] = {{5,6,7,8},{71,72,73,74},{31,32,33,34}}; 
//Ispis elementa u drugom redu i trećoj koloni:
printf("%d",mat[1][2]);
//Izmena vrednosti elementa u četvrtom redu i drugoj koloni:
mat[3][1] = 15;

PROGRAMSKA MANIPULACIJA MATRICAMA

 

Manipulacija matricama se najčešće obavlja preko ugnježedenih for petlji gde je jedna spoljašnja a druga unutrašnja. Obilazak matrica može da bude po vrstama. U ovom slučaju se za prolazak kroz vrste matrice koristi spoljašnja a za prolazak kroz kolone matrice koristi unutrašnja for petlja. Obilazak matrica može da bude po kolonama. U ovom slučaju se za prolazak kroz kolone matrice koristi spoljašnja a za prolazak kroz vrste matrice koristi unutrašnja for petlja.
Sve operacije sem ispisa matrice(isključivo po vrstama) mogu da se urade i po vrstama i po kolonama matrice!!!

 

UNOŠENJE ELEMENATA U MATRICU

//a)Unos elemenata po vrstama
//Programski kod:
int a[3][4];
for(i=0;i<3;i++)
{
       for(j=0;j<4;j++)
       {
              printf("Unesite element matrice[%d][%d]",i+1,j+1);
              scanf("%d",&a[i][j]);
       }
}

1)	i=0, i<3
	a.	j=0, j<4, a[0][0]
	b.	j=1, j<4, a[0][1]
	c.	j=2, j<4, a[0][2]
	d.	j=3, j<4  a[0][3]
	e.	j=4, sada uslov više nije tačan
2)	i=1,i<3
	a.	j=0, j<4, a[1][0]
	...

Domaći zadatak1: napisati algoritam i kod za unos elemenata matrice po kolonama!!!
Domaći zadatak2: napisati algoritam i kod za ispis elemenata matrice po vrstama!!!

One matrice koje imaju isti broj kolona i vrsta nazivaju se kvadratne matrice.
Kvadrtane matrice imaju glavnu i sporednu dijagonalu.

Transponovanje matrice


Kvadratne matrice mogu da se tranponuju. Transponovanje matrice predstavlja zamenu vrednosti redova i kolona matrice.

Napomena: Prilikom transponovanja potreno je privremeno sačuvati jedan оd elemenata koji menjaju mesto u pomoćnu promenljivu. 

SMEŠTANJE (STATIČKIH) VIŠEDIMENZIONIH NIZOVA U MEMORIJU

Broj memorijskih lokacija koje zauzima višedimenzioni niz se dobija tako što se pomnože veličine svih dimenzija višedimenzionog niza i veličina u bajtovima koju zauzima jedan podataka matrice.

Zadaci sa matricama

Zadatak1: Definišite matricu celih brojeva proizvoljne veličine. Napišite program kojim se ispisuju elementi te matrice. Za to napišite posebnu funckiju.


Zadatak2: Definišite matricu celih brojeva proizvoljne veličine. Napišite program kojim se određuje suma elemenata te matrice. Prolaziti kroz matricu po kolonama. Za to napišite posebnu funckiju.


Zadatak3: Definišite matricu celih brojeva proizvoljne veličine. Napišite program kojim se određuje koliko ima neparnih elementa te matrice. Prolaziti kroz matricu po vrstama. Za to napišite posebnu funckiju.


Zadatak4: Definišite matricu celih brojeva proizvoljne veličine. Napišite program kojim se ispisuju elementi glavne dijagonale matrice. Za to napišite posebnu funckiju. 

Zadatak5: Definišite matricu celih brojeva proizvoljne veličine. Napišite program kojim se ispisuju elementi sporedne dijagonale matrice. Za to napišite posebnu funckiju. 

 

Zadatak6: Definišite kvadratnu matricu celih brojeva proizvoljne veličine. Napišite program kojim se ispisuju elementi transponovane matrice. Za to napišite posebnu funckiju. 


Zadatak7: Definišite matricu celih brojeva proizvoljne veličine. Napišite program kojim se određuje najveći element matrice. Prolaziti kroz matricu po kolonama. Za to napišite posebnu funckiju.


Zadatak8: Definišite matricu karaktera proizvoljne veličine. Napišite program kojim se određuje broj samoglasnika u matrici. Prolaziti kroz matricu po vrstama. Za to napišite posebnu funckiju.

 

Zadatak9: Definišite matricu celih brojeva proizvoljne veličine. Napišite program u kojem se ispisuju najveći elementi svake vrste matrice. Prolaziti kroz matricu po vrstama. Za to napišite posebnu funckiju.

Zadatak10: Definišite matricu celih brojeva proizvoljne veličine. Napišite program u kojem se ispisuju prosečna vrednost elemenata svake kolone matrice. Prolaziti kroz matricu po kolonama. Za to napišite posebnu funckiju.

SABIRANJE I ODUZIMANJE MATRICA I MNOŽENJE MATRICE SA SKALAROM

//DEO KODA ZA SABIRANJE DVE MATRICE PO VRSTAMA
if((v1==v2)&&(k1==k2))
{
	for(i=0;i<v1;i++)
	{
		for(j=0;j<k1;j++)
		{
			c[i][j]=a[i][j]+b[i][j];
		}
	}
}
else
{
	printf("Dve matrice se ne mogu sabrati jer nisu istih dimenzija");  
}

Zadatak 1: Napisati program u kojem će se inicijalizovati dve matrice tako da imaju isti broj redova i kolona i napisati funkciju za sabiranje te dve matrice po redovima. 

Zadatak 2: Napisati program u kojem će se inicijalizovati dve matrice tako da imaju isti broj redova i kolona i napisati funkciju za oduzimanje te dve matrice po kolonama. 

 

Zadatak 3: Napisati program u kojem će se inicijalizovati matrica i napisati funkciju za množenje matrice skalarom.

Zadaci za kontrolni

Zadatak 1:
Napisati program za unos dve matrice, ispis elemenata dve matrice, izračunavanje zbira dve matrice, množenja matrice skalarom i transponovanje matrice. Program treba da sadrži sledeće funkcije (potprograme) UnosMatrice, IspisMatrice, ZbirMatrica, MnozenjeSkalarom, Transponovanje. Program treba da sadrži sistem menija sa sledećim opcijama: 1) Unos elemenata matrice A i B 2) Ispsi elemenata matrice A i B 3)Sabiranje matrica A i B 4) Mnozenje matrice A ili B  skalarom (korisnik bira matricu) 5)Transponovanje matrice A ili B (korisnik bira matricu) 6) Kraj programa. Operacije matricama obaviti po vrstama. Treba obezbediti zaštitu da se ispis i bilo koja operacija ne može izvršiti dok se nisu unele matrice. Broj vrsta i kolona unosi korisnik, matrica ne može da bude veća od 20x20. Matrice se mogu sabrati ako imaju jednak broj vrsta i kolona inače ispisati poruku. Matrice se mogu transponovati ako su kvadratne inače ispisati poruku. Posle transponovanja ispisati matricu. Program realizovati pomoću potprograma: za unos matrice, ispis, sabiranje dve matrice, množenje matrice skalarom i transponovanje matrice. Napisati potprogram za realizaciju menija.

printf("\t\t\tRad sa statickim matricama po vrstama");
printf("\n\tOdaberite zeljenu opciju");
printf("\n\t1) Unos elemenata matrice A i B");
printf("\n\t2) Ispis elemenata matrice A i B");
printf("\n\t3) Sabiranje matrice A i B");
printf("\n\t4) Mnozenje matrice A ili B skalarom");
printf("\n\t5) Transponovanje matrice A ili B");
printf("\n\t6) Kraj programa");
printf("\n\tOdaberite opciju:");

Zadatak 2:
Napisati program za unos dve matrice, ispis elemenata dve matrice, izračunavanje razlika dve matrice, oderđivanje najvećeg elementa matrice i određivanje prosečne vrednosti svake vrste matrice. Program treba da sadrži sledeće funkcije (potprograme)UnosMatrice, IspisMatrice, RazlikaMatrica, NajvecaVrednost, IspisProsecnihVrednostiVrsta. Program treba da sadrži sistem menija sa sledećim opcijama: 1) Unos elemenata matrice A i B 2) Ispis elemenata matrice A i B 3)Razlika matrica A i B 4) Najveći element matrice (korisnik bira matricu)  5)Prosečna vrednost kolona matrice(korisnik bira matricu)  6) Kraj programa. Operacije matricama obaviti po kolonama. Treba obezbediti zaštitu da se ispis i bilo koja operacija ne može izvršiti dok se nisu unele matrice. Broj vrsta i kolona unosi korisnik, matrica ne može da bude veća od 20x20. Matrice se mogu oduzimati ako imaju jednak broj vrsta i kolona inače ispisati poruku. Program realizovati pomoću potprograma: za unos matrice, ispis, razlika dve matrice, najveći element matrice i prosečna vrednost svake vrste matrice. Napisati potprogram za realizaciju menija.

printf("\t\t\tRad sa statickim matricama po kolonama");
printf("\n\tOdaberite zeljenu opciju");
printf("\n\t1) Unos elemenata matrice A i B");
printf("\n\t2) Ispis elemenata matrice A i B");
printf("\n\t3) Razlika matrice A i B");
printf("\n\t4) Najveci element matrice");
printf("\n\t5) Prosecna vrednost elemenata matrice");
printf("\n\t6) Kraj programa");
printf("\n\tOdaberite opciju:");

Kriterijum za ocenjivanje

Sigurne opcije: sistem, menija, unos matrice, ispis matrice, zbir, razlika

 

Operacije:vrstama/kolonama

 

Bodovi po zadacima

sistem menija: 5 bodova

Unos matrice: 20 bodova

Ispis matrice: 20 bodova

Zbir/ razlika matrice:20 bodova

Opcija 4: 20 bodova

Opcija 5: 20 bodova

Ocene:

ocena 2: 40 - 54

ocena 3: 55 - 69

ocena 4: 70 - 84

ocena 5: 85 - 105

Opcije 4 i 5:

Najveći/najmanji element matrice

Zbir/proizvod elemenata matrice

Najveći element glavne dijagonale matrice

Transponovanje matrice

Proizvod matrice sa skalarom

...

Made with Slides.com