# 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