Professional Documents
Culture Documents
Definicija matrice:
Dvodimenzionalni niz ili matrica sastoji se od vrsta, pri čemu je svaka vrrsta jedan vektor
(jednodimenzionalni niz), tj matrica je niz vektora. Po analogiji je trodimenzionalni niz je niz
matrica, itd.
tip imeniza[MAX][MAX][MAX][MAX]…[MAX];
Na primer:
int matrica[3][4], trodniz[3][6][4];
Svi elementi višedimenzionalnih nizova su celi brojevi. Matrica je dvodimenzionalni niz i prva
dimenzija ima maksimalno 3 vektora pri čemu se svaki vektor sastoji od maksimalno 4
elementa. Trodimenzionalni niz ima tri dimenzije pri čemu je prva dimenzija sa maksimalno 3
matrice, a svaka matrica se sastoji od maksimalno 6 vektora, pri čemu svaki vektor ima 4
elementa koji su celi brojevi.
Višedimenzionalne nizove treba koristiti kada je potrebno opisati složeni podatak koji
je opisan sa više podataka, pri čemu i indeksi koji opisuju višedimenzionalni niz predstavljaju
podatak neophodan za opis elementa.
Na primer ako posmatramo igricu minsko polje. Tada se svako polje može opisati sa x
koordinatom, y koordinatom i brojem koji opisuje šta se nalazi na toj koordinati. Koristili bi
matricu gde bi prvi indeks opisivao horizontalnu poziciju, drugi vertikalnu poziciju, a vrednost
elementamatrice bi opisivalo šta se na toj poziciji nalazi: 1 – postoji mina ili 2 – mina se nenalazi
na toj poziciji.
Matrica A ima tri vrste i četiri kolone. Deklaracija matrice A i ujedno njena inicijalizacija s tim
da matrica ima ovakav izgled je:
Za slučaj da smo hteli inicijalizovati matricu a da pri tome ne napišemo sve elemente, ne
obuhvaćenim elementima automatski bi se dodelila vrednost nula. Za slučaj da smo deklarisali
i inicijalizovali sa:
2 4 0 0
A = 4 6 7 3
2 1 3 0 3 x 4
Na primer:
int a[3][4];
A00 A01 A02 A03 A10 A11 A12 A13 A20 A21 A22 A23
Kao i kod jednodimenzionalnog niza ili vektora tako i kod višedimenzionalnih nizova
postoji prisna veza između pokazivača i niza.
Pristup odgovarajućem podatku matrice može se vršiti pomoću indeksa ili pokazivača
Kod matrice ima dva indeksa (prvi je indeks vrste, a drugi je indeks kolone). Indeksi moraju
biti prirodni brojevi ili promenljive koje su celobrojnog tipa. Kao i kod vektora u indeksu može
mostojati i celobrojni izraz.
Na primer:
unsigned s, i, j, a[3][4]={{2, 4, 0, 1},{4, 6, 7, 3},{2, 1, 3, 5}};
Pristup pomoću operatora indeksiranja:
Prvi način:
s=a[2][1]; - nakon ove naredbe dodele promenljiva s ima vrednost 1.
Drugi način:
int i=1, j=0;
s=a[i][j]; - nakon ove naredbe dodele s je 4.
Na primer:
int a[MAXV][MAXK];
Prototip funkcija koja koristi matricu a kao parametar imala bi sledeći izgled:
Zadatak 1 - 1
Zadata je kvadratna matrica A = a ij n≤10. Napisati C program za sabiranje svih elemenata matrice A.
nxn
Rešenje:
/***************************************************************************
Opis: Demonstrira kako se formira i ispisuje matrica u C-u.
Koristi module: -
Autori: Branko Markoski, Dejan Lacmanovic, Predrag Pecev
Datum poslednje promene:
***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#define MAX_DIM 10
int main(void)
{
/* Definicija promenljivih. */
int n,i,j,s,a[MAX_DIM][MAX_DIM];
/* Inicijalizacija matrice. */
for(i=0;i<MAX_DIM;i++)
{
for(j=0;j<MAX_DIM;j++) a[i][j]=0;
}
do{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++) a[i][j]=rand()%8+1;
}
for(s=0,i=0;i<n;i++)
{
for(j=0;j<n;j++) s+=a[i][j];
}
printf("\n\n\n Broj %d je zbir svih elemenata matrice A.",s);
return 0;
}
Zadatak 2-2
Napisati C program koji na osnovu prirodnog broja N (N<10) formira i štampa matricu A sledećeg izgleda.
NNNNNNN
N • • • • • N
N • 222 • N
A = N • 212 • N
N • 222 • N
N • • • • • N
NNNNNNN
Rešenje:
/***************************************************************************
Opis: Demonstrira kako se formira i ispisuje matrica u C-u.
Koristi module: -
Autori: Branko Markoski, Dejan Lacmanovic, Predrag Pecev
Datum poslednje promene:
***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#define MAX_DIM 20
int main(void)
{
/* Definicija promenljivih. */
int n,i,j,k1,k2,a[MAX_DIM][MAX_DIM];
/* Inicijalizacija matrice. */
for(i=0;i<MAX_DIM;i++)
{
for(j=0;j<MAX_DIM;j++) a[i][j]=0;
}
do{
k2=2*n-1;
k1=n;
for(i=0;i<k2;i++)
{
for(j=i;j<k2;j++)
{
/* Formira se gornji ugaonik. */
a[i][j]=k1;
a[j][i]=k1;
/* Formira se donji ugaonik. */
a[2*n-i-2][2*n-j-2]=k1;
a[2*n-j-2][2*n-i-2]=k1;
}
k1--;
k2--;
}
a[n-1][n-1]=1; /* Element u sredini matrice ima uvek vrednost jedan. */
Zadata je matrica A = a ij pri čemu je n paran prirodan broj i n<10. Broj timova prvenstva je n, a tablica
nxn
fudbalskog prvenstva je matrica A, čiji elementi zadovoljavaju sledeće svojstvo:
Rešenje:
/***************************************************************************
Opis: Demonstrira primenu matrice u resavanju nekog konkretnog problema.
Koristi module: -
Autori: Branko Markoski, Dejan Lacmanovic, Predrag Pecev
Datum poslednje promene:
***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#define MAX 9
int main(void)
{
enum bool{FALSE,TRUE};
/* Definicija promenljivih. */
int n,i,j,pom,broj,k,tabla[MAX][MAX];
do{
/* Moraju se preskociti slucajevi kada je indeks vrste jednak indeksu kolone jer
ne moze ekipa igrati sama sa sobom. */
broj=0;
for(i=0;i<n;i++)
{
k=TRUE;
for(j=0;j<n;j++)
{
if(i!=j&&tabla[i][j]==0) k=FALSE;
}
if(k) broj++;
}
if(broj<5&&broj>1)
printf("\n\n\n\nU prvenstvu je ukupno %d ekipe bilo bez poraza!",broj);
else printf("\n\n\n\nU prvenstvu je ukupno %d ekipa bilo bez poraza!",broj);
return 0;
}