sâmbătă, 8 septembrie 2018

Inmultire matrici

# include <iostream.h>;
# include <conio.h>;

# define MAX 50

int i,j,m,n,p;
float a[MAX][MAX],b[MAX][MAX],c[MAX][MAX];

void inm(int xs_A,int ys_A,int xd_A,int yd_A,int xs_B,int ys_B,int xd_B,int yd_B)
{
 if( ((xd_A-xs_A<=1)&&(yd_A-ys_A<=1))
    && ((xd_B-xs_B<=1)&&(yd_B-ys_B<=1)) )
    {
     if((xs_A==xd_A)||(xs_B==xd_B))
       c[xs_A][ys_A]=a[xs_A][ys_A]*b[xs_B][ys_B]+a[xs_A][yd_A]*b[xs_B][yd_B];

     if((xs_A==yd_A)||(xs_B==yd_B))
       c[xs_A][yd_A]=a[xs_A][ys_A]*b[xs_B][yd_B]+a[xs_A][yd_A]*b[xd_B][yd_B];

     if((xd_A==ys_A)||(xd_B==ys_B))
       c[xd_A][ys_A]=a[xd_A][ys_A]*b[xs_B][ys_B]+a[xd_A][yd_A]*b[xd_B][ys_B];

     if((ys_A==yd_A)||(ys_B==yd_B))
       c[xd_A][yd_A]=a[xd_A][ys_A]*b[xs_B][yd_B]+a[xd_A][yd_A]*b[xd_B][yd_B];
    }

/* else if() //64 cazuri
  {
   ...
  }*/

 else
  {
   int xm_A,ym_A,xm_B,ym_B;
   xm_A=(xs_A+xd_A)/2;
   ym_A=(ys_A+yd_A)/2;
   xm_B=(xs_B+xd_B)/2;
   ym_B=(ys_B+yd_B)/2;

   inm(xs_A,ys_A,xm_A,ym_A,xs_B,ys_B,xm_B,ym_B);
   inm(xs_A,ym_A,xm_A,yd_A,xs_B,ym_B,xm_B,yd_B);
   inm(xm_A,ys_A,xd_A,ym_A,xm_B,ys_B,xd_B,ym_B);
   inm(xm_A,ym_A,xd_A,yd_A,xm_B,ym_B,xd_B,yd_B);
  }

}

void main(void)
{
clrscr();

//Citire matici
cout<<"Intr dimensiunile primei matrici:\n";
 cin>>m>>n;
cout<<"\nIntr dimensiunile celei de a doua matrici:\n";
 cin>>n>>p;
cout<<"\nIntr elementele din prima matrice:\n";
for(i=0;i<m;i++)
 for(j=0;j<n;j++)
  cin>>a[i][j];
cout<<"\nIntr elementele din a doua matrice:\n";
for(i=0;i<n;i++)
 for(j=0;j<p;j++)
  cin>>b[i][j];


//
 inm(0,0,m-1,n-1,0,0,n-1,p-1);
//


//Afisare rezultat
cout<<"\nMatricea produs este:\n";
for(i=0;i<m;i++)
 {
  for(j=0;j<p;j++)
    cout<<c[i][j]<<" ";
  cout<<"\n";
 }

getche();
}

Niciun comentariu:

Trimiteți un comentariu