Рад са више матрица (низова)

Понекад је потребно решавати проблем који захтева рад са више матрица или више низова или матрицу и низ. Потребно је на почетку програма дефинисати СВЕ матрице и низове који ће се користити у програму, пожељно је дефинисати функције unesi, stampaj (prikazi), и по потреби још неку функцију, како би главни програм био што једноставнији.

Сабирање (одузимање) две матрице

Све три матрице имају исте димензије. Елементи резултујуће матрице добијају се тако што се саберу (одузму) одговарајући елементи полазних матрица:

c[i][j]=a[i][j]+b[i][j]

или

c[i][j]=a[i][j]-b[i][j]

Наравно, неопходна су два for циклуса, како би се прошли СВИ елементи обеју матрица, односно како би се формирала цела резултујућа матрица.

Множење две матрице

Димензије полазних матрица су такве да је број колона прве матрице једнак броју редова друге матрице, а димензије резултујуће матрице су број редова прве матрице x број колона друге матрице:

Amxp, Bpxn, Cmxn

Елементи резултујуће матрице добијају се као скаларни производ i-тог реда прве матрице и j-те колоне друге матрице:

c[i][j]=a[i][0]*b[0][j]+a[i][1]*b[1][j]+...+a[i][p-1]*b[p-1][j]

Решење овог проблема дато је следећим програмом (наравно, могуће су и измене програма, у складу са потребама):

#include<stdio.h>
void unesi(int a[][20], int m, int n)
{
     int i,j;
     for(i=0;i<m;i++)
     for(j=0;j<n;j++)
          scanf("%d",&a[i][j]);
}
void stampaj(int a[][20],int m, int n)
{
         int i,j;
         for(i=0;i<m;i++)
     {
          for(j=0;j<n;j++)
          printf("%d\t",a[i][j]);
          printf("\n");
     }
}
main()
{
     int a[20][20],b[20][20],c[20][20],m,n,p,i,j,k;
     printf("unesi m,p,n");scanf("%d%d%d",&m,&p,&n);
     unesi(a,m,p);
     unesi(b,p,n);
     for(i=0;i<m;i++)
     for(j=0;j<n;j++)
     {
              c[i][j]=0;
          for(k=0;k<p;k++)
          c[i][j]=c[i][j]+a[i][k]*b[k][j];
     }
     printf("matrica a:\n");stampaj(a,m,p);
     printf("matrica b:\n");stampaj(b,p,n);
     printf("proizvod matrica a i b je:\n");stampaj(c,m,n);
}

Резултат извршавања:

множење матрица

Матрице и низови

Понекад је потребно на основу матрице формирати низ чији елементи су везани за колоне односно редове матрице: збирови, максимални или минимални елементи… Након тога, над низом можемо обављати операције као што су сортирање или претраживање, евентуално сортирање применити и над матрицом.

Пример: Написати програм који на основу матрице Amxn формира низ чији су елементи производ елемената одговарајуће врсте. За уношење елемената матрице користити функцију unesi, за приказ новодобијеног низа користити функцију pisi.

#include<stdio.h>
void unesi(int a[][20], int m, int n)
{
     int i,j;
     for(i=0;i<m;i++)
     for(j=0;j<n;j++)
          scanf("%d",&a[i][j]);
}
void pisi(int a[],int n)
{
     int i;
     for(i=0;i<n;i++)printf("%d\t",a[i]);
}
main()
{
     int a[20][20],b[20],i,j,m,n;
     printf("unesi dimenzije matrice");scanf("%d%d",&m,&n);
     printf("unesi elemente matrice");unesi(a,m,n);
     for(i=0;i<m;i++)
     {
          b[i]=1;
          for(j=0;j<n;j++)b[i]=b[i]*a[i][j];
     }
     printf("dobijeni niz je:");pisi(b,m);
}

Advertisements

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

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

WordPress.com лого

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

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

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

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

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

Google+ photo

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

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