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đenogPRISTUPANJE 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
...
3ERS - VIŠEDIMENZIONALNI NIZOVI
By lanik
3ERS - VIŠEDIMENZIONALNI NIZOVI
- 353