Приступ елементима матрице – проласци кроз матрицу¶
Научили смо како да унесемо и испишемо елементе матрице. Да видимо сада како
можемо да приступамо елементима матрице. Али пре него што наставимо, дефинишимо
неке појмове.Број редова матрице означићемо промењивом r
а број колона промењивом k

Шта је квадратна матрица?
Квадратна матрица има исти број редова и колона, што значи да обе
димензије имају исту вредност, па се дефинише само једна променљива n
која
представља и број редова и број колона.
За унос елемената матрице и даље су неопходни два циклуса и два различита бројача за редове, односно колоне (иако су границе у којима се крећу вредности ових бројача исте!).
Код квадратне матрице дефинише се главна дијагонала која иде од горњег левог
угла до доњег десног угла, и то тако што оба бројача имају исту вредност
(i == j
).
Постоји и споредна дијагонала, која иде од доњег левог угла до горњег десног
угла и дефинише се тако што је збир оба бројача једнак димензији матрице
(i + j == n - 1
).
Поред тога, постоје и троуглови изнад главне, односно изнад споредне дијагонале, као и троуглови испод главне, односно испод споредне дијагонале.
Кренимо да анализирао случај по случај.
Приступ елементима матрице – главна и споредна дијагонала¶
Посматрајмо једну квадратну матрицу димензија 3 х 3.


Написати програм за унос елемената квадратне матрице целобројног типа елемената и максималних димензија 5 х 5, као и за испис елемената главне дијагонале.
Решење::
#include<stdio.h>
int main(void)
{
int A[5][5], i, j, n;
printf("Unesite broj redova odnosno kolona ");
scanf("%d", &n);
printf("Unesite elemente matrice:\n");
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
printf("A[%d][%d] = ", i, j);
scanf("%d", &A[i][j]);
}
printf("\nElementi na glavnoj dijagonali su:\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i == j)
printf("%6d", A[i][j]);
else
printf("\t", A[i][j]);
}
printf("\n");
}
return 0;
}
Излаз:
Unesite broj redova odnosno kolona 3
Unesite elemente matrice:
A[0][0] = 1
A[0][1] = 2
A[0][2] = 3
A[1][0] = 4
A[1][1] = 5
A[1][2] = 6
A[2][0] = 7
A[2][1] = 8
A[2][2] = 9
Elementi na glavnoj dijagonali su:
1
5
9

Написати програм за унос елемената квадратне матрице целобројног типа елемената и максималних димензија 5 х 5, као и за испис елемената споредне дијагонале.
Решење::
#include<stdio.h>
int main(void)
{
int A[5][5], i, j, n;
printf("Unesite broj redova odnosno kolona ");
scanf("%d", &n);
printf("Unesite elemente matrice\n");
for(i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
printf("A[%d][%d] = ", i, j);
scanf("%d", &A[i][j]);
}
printf("\nElementi na sporednoj dijagonali su: \n");
for(i = 0; i < n ; i++)
{
for (j = 0; j < n; j++)
{
if(i + j == n - 1)
printf("%6d", A[i][j]);
else
printf("\t", A[i][j]);
}
printf("\n");
}
return 0;
}
Излаз:
Unesite broj redova odnosno kolona 3
Unesite elemente matrice
A[0][0] = 1
A[0][1] = 2
A[0][2] = 3
A[1][0] = 4
A[1][1] = 5
A[1][2] = 6
A[2][0] = 7
A[2][1] = 8
A[2][2] = 9
Elementi na sporednoj dijagonali su:
3
5
7
Приступ елементима матрице изнад и испод главне дијагонале¶
Посматрајмо једну квадратну матрицу димензија 3 х 3 и пробајмо да уочимо у ком су односу индекси реда и колоне изнад, односно испод главне дијагонале.

Примећујемо да је за приступ елементима изнад главне дијагонале услов да је
i < j
, односно за приступ елементима испод главне дијагонале да је i > j
.
Направимо програм који ће исписати елементе изнад и испод главне дијагонале.

Написати програм за унос елемената квадратне матрице целобројног типа елемената и максималних димензија 5 х 5, као и за испис елемената изнад и испод главне дијагонале. На преосталим местима исписати бланко.
Решење::
#include<stdio.h>
int main(void)
{
int A[5][5], i, j, n;
printf("Unesite broj redova odnosno kolona: ");
scanf("%d", &n);
printf("Unesite elemente matrice:\n");
for(i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
printf("A[%d][%d] = ", i, j);
scanf("%d",&A[i][j]);
}
printf("\nUneli ste matricu: \n");
for(i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf("%d\t", A[i][j]);
printf("\n");
}
printf("\nElementi iznad glavne dijagonale su: \n");
for(i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i < j)
printf("%d\t", A[i][j]);
else
printf("\t", A[i][j]);
}
printf("\n");
}
printf("\nElementi ispod glavne dijagonale su: \n");
for(i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i > j)
printf("%d\t", A[i][j]);
else
printf("\t", A[i][j]);
}
printf("\n");
}
return 0;
}
Излаз:
Unesite broj redova odnosno kolona: 3
Unesite elemente matrice:
A[0][0] = 1
A[0][1] = 2
A[0][2] = 3
A[1][0] = 4
A[1][1] = 5
A[1][2] = 6
A[2][0] = 7
A[2][1] = 8
A[2][2] = 9
Uneli ste matricu:
1 2 3
4 5 6
7 8 9
Elementi iznad glavne dijagonale su:
2 3
6
Elementi ispod glavne dijagonale su:
4
7 8
Приступ елементима матрице изнад и испод споредне дијагонале¶
Посматрајмо једну квадратну матрицу димензија 3 х 3 и пробајмо да уочимо у ком су односу индекси реда и колоне изнад, односно испод споредне дијагонале.

Примећујемо да је за приступ елементима изнад споредне дијагонале услов да је
i + j < n - 1
, односно за приступ елементима испод главне дијагонале да је
i + j > n - 1
. Пробајмо да направимо програм који ће исписати елементе изнад и
испод главне дијагонале.

Написати програм за унос елемената квадратне матрице целобројног типа елемената и максималних димензија 5 х 5, као и за испис елемената изнад и испод споредне дијагонале. На преосталим местима исписати бланко.
Решење::
#include<stdio.h>
int main(void)
{
int A[5][5], i, j, n;
printf("Unesite broj redova odnosno kolona: ");
scanf("%d",&n);
printf("Unesite elemente matrice:\n");
for(i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
printf("A[%d][%d] = ", i, j);
scanf("%d", &A[i][j]);
}
printf("\nUneli ste matricu: \n");
for(i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf("%d\t", A[i][j]);
printf("\n");
}
printf("\nElementi iznad sporedne dijagonale su: \n");
for(i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i + j < n - 1)
printf("%d\t", A[i][j]);
else
printf("\t", A[i][j]);
}
printf("\n");
}
printf("\nElementi ispod sporedne dijagonale su: \n");
for(i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i + j > n - 1)
printf("%d\t", A[i][j]);
else
printf("\t", A[i][j]);
}
printf("\n");
}
return 0;
}
Излаз:
Unesite broj redova odnosno kolona: 3
Unesite elemente matrice:
A[0][0] = 1
A[0][1] = 2
A[0][2] = 3
A[1][0] = 4
A[1][1] = 5
A[1][2] = 6
A[2][0] = 7
A[2][1] = 8
A[2][2] = 9
Uneli ste matricu:
1 2 3
4 5 6
7 8 9
Elementi iznad sporedne dijagonale su:
1 2
4
Elementi ispod sporedne dijagonale su:
6
8 9
Проласци кроз матрицу¶
Видели смо како можемо проћи кроз матрицу користећи два циклуса и одговарајуће услове. Пробајмо сада да те циклусе што више упростимо. Код приступа елементима по редовима и колонама немамо промене, док ћемо видети како можемо преуредити све остале проласке. Ако нисте сигурни, можете увек користити два циклуса и услов.
Посматрајмо сада неке случајеве.
Циклуси за обилазак матрице по редовима:
for (i = 0; i < r; i++)
for (j = 0; j < k; j++)
{
//Upotreba elemenata a[i][j]
}
Циклуси за обилазак матрице по колонама:
for (j = 0; j < k; j++)
for (i = 0; i < r; i++)
{
//Upotreba elemenata a[i][j]
}
Главна и споредна дијагонала, као и троуглови изнад и испод њих постоје само код квадратне матрице.
Код квадратне матрице број реова мора бити једнак броју колона па ћемо у наредним примерима посматрати да је број редова једнак броју колона n = r = k
.
Циклуси за обилазак матрице по главној дијагонали:
Услов за елементе на главној дијагонали је да је индекс i = j
for (i = 0; i < n; i++)
{
//Upotreba elemenata a[i][i]
}
Циклуси за обилазак матрице по споредној дијагонали:
Услов за елементе на споредној дијагонали је да је i + j = n - 1
for (i = 0; i < n; i++)
{
//Upotreba elemenata a[i][n - 1 - i]
}
Циклуси за обилазак матрице по споредној дијагонали – један циклус:
for (i = 0, j = (n - 1); i < n; i++, j--)
{
//Upotreba elemenata a[i][j]
}
Следе циклуси за обилазак матрице по троугловима изнад и испод главне дијагонале:
Циклуси за обилазак матрице по горњем троуглу по редовима (врстама) :
Услов за елементе у горњем троуглу је да је индекс i < j
for (i = 0; i < n - 1; i++)
for (j = i + 1; j < n; j++)
{
//Upotreba elemenata a[i][j]
}
Циклуси за обилазак матрице по горњем троуглу по колонама:
Услов за елементе у горњем троуглу је да је индекс i < j
for (j = 0; j < n; j++)
for (i = 0; i < j; i++)
{
//Upotreba elemenata a[i][j]
}
Циклуси за обилазак матрице по доњем троуглу по колонама:
Услов за елементе у доњем троуглу је да је индекс i > j
for (j = 0; j < n - 1; j++)
for (i = j + 1; i < n; i++)
{
//Upotreba elemenata a[i][j]
}
Циклуси за обилазак матрице по доњем троуглу по редовима (врстама):
Услов за елементе у доњем троуглу је да је индекс i > j
for (i = 1; i < n - 1; i++)
for (j = 0; j < i; j++)
{
//Upotreba elemenata a[i][j]
}

На основу горњих циклуса креирати програме за приказ свих могућих циклуса за пролазак кроз матрицу. Пробајте за домаћи да дефинишете циклусе за обиласке троуглова изнад и испод споредне дијагонале.