Квадратна матрица

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

изнад главне дијагонале: i<j, односно:

for(j=1;j<n;j++)for(i=0;i<j;i++)

испод главне дијагонале: i>j, односно:

for(j=0;j<n-1;j++)for(i=j+1;i<n;i++)

изнад споредне дијагонале: i+j<n-1, односно:

for(i=0;i<n-1;i++)for(j=0;j<n-1-i;j++)

испод споредне дијагонале: i+j>n-1, односно:

for(i=1;i<n;i++)for(j=n-i;j<n;j++)

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

#include<stdio.h>
main()
{
int i,j,n,a[20][20],s=0,max;
printf("unesi dimenzije matrice");scanf("%d",&n);
printf("unesi elemente matrice");
for(i=0;i<n;i++)
{
printf("%d. vrsta:",i+1);
for(j=0;j<n;j++) scanf("%d",&a[i][j]);
}
/* prolazimo kroz celu matricu, ali izdvajamo samo elekente koji se nalaze na sporednoj dijagonali (ciji indeksi zadovoljavaju uslov i+j==n-1) i sabiramo ih */
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if (i+j==n-1)s=s+a[i][j];
/* za prolazak kroz sporednu dijagonalu mozemo koristiti i samo jedan ciklus, cime izdvajamo samo elemente na glavnoj dijagonali:
for(i=0;i<n;i++)s=s+a[i][n-1-i];*/
printf("zbir elemenata sporedne dijagonale je %d\n",s);
max=a[0][0];
/* prolazimo samo kroz trazeni trougao, primenjujuci granice u definisanju ciklusa za prolazak kroz matricu */
for(j=1;j<n;j++)
for(i=0;i<j;i++)
if(a[i][j]>max)max=a[i][j];
printf("maksimalan elemenat u trouglu iznad glavne dijagonale je %d\n",max);
}

Написати функцију за транспоновање квадратне матрице. Написати програм у који уносимо димензију матрице, елементе матрице, он изврши транспоновање матрице и прикаже новодобијену матрицу. За уношење елемената матрице и приказивање транспоноване матрице користити одговарајуће функције. Програм треба да обрађује више улазних података (услов за завршетак рада је да се унесе димензија n<=0)
Транспоновање матрице значи да редови и колоне мењају места. Због тога је довољно пролазити само кроз троугао изнад (или испод) главне дијагонале, јер елементи на главној дијагонали остају где јесу, а остали ротирају око главне дијагонале као око осе ротације.

#include<stdio.h>
void unesi(int a[][20],int n)
{
int i,j;
for(i=0; i<n; i++)
{
printf("%2d. vrsta? ", i+1);
for(j=0; j<n; j++)scanf("%d", &a[i][j]);
}
}
void pisi(int a[][20],int n)
{
int i,j;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)printf("%5d", a[i][j]);
printf("\n");
}
}
void transp(int a[][20],int n)
{
int i,j,pom;
for(i=1;i<n;i++)
for(j=0;j<i;j++) { pom=a[i][j]; a[i][j]=a[j][i]; a[j][i]=pom; }
}
main()
{
while(1)
{
int a[20][20], n;
printf("\ndimenzija matrice? "); scanf("%d", &n);
if(n<=0)break;
printf("unesi elemente matrice:\n");
unesi(a,n);
transp(a,n);
printf("\ntransponovana matrica:\n");
pisi(a,n);
}
}

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s