Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để nhân hai ma trận bằng cách sử dụng mảng đa chiều

Ma trận là một dãy số hình chữ nhật được sắp xếp dưới dạng hàng và cột.

Ví dụ về ma trận như sau.

Ma trận 3 * 3 có 3 hàng và 3 cột như hình dưới đây -

8 6 3
7 1 9
5 1 9

Một chương trình nhân hai ma trận bằng cách sử dụng mảng nhiều chiều như sau.

Ví dụ

#include<iostream>
using namespace std;
int main() {
   int product[10][10], r1=2, c1=3, r2=3, c2=3, i, j, k;
   int a[2][3] = { {2, 4, 1} , {2, 3, 9} };
   int b[3][3] = { {1, 2, 3} , {3, 6, 1} , {2, 9, 7} };
   if (c1 != r2) {
      cout<<"Column of first matrix should be equal to row of second matrix";
   } else {
      cout<<"The first matrix is:"<<endl;
      for(i=0; i<r1; ++i) {
         for(j=0; j<c1; ++j)
         cout<<a[i][j]<<" ";
         cout<<endl;
      }
      cout<<endl;
      cout<<"The second matrix is:"<<endl;
      for(i=0; i<r2; ++i) {
         for(j=0; j<c2; ++j)
         cout<<b[i][j]<<" ";
         cout<<endl;
      }
      cout<<endl;
      for(i=0; i<r1; ++i)
      for(j=0; j<c2; ++j) {
         product[i][j] = 0;
      }
      for(i=0; i<r1; ++i)
      for(j=0; j<c2; ++j)
      for(k=0; k<c1; ++k) {
         product[i][j]+=a[i][k]*b[k][j];
      }
      cout<<"Product of the two matrices is:"<<endl;
      for(i=0; i<r1; ++i) {
         for(j=0; j<c2; ++j)
         cout<<product[i][j]<<" ";
         cout<<endl;
      }
   }
   return 0;
}

Đầu ra

The first matrix is:
2 4 1
2 3 9

The second matrix is:
1 2 3
3 6 1
2 9 7

Product of the two matrices is:
16 37 17
29 103 72

Trong chương trình trên, hai ma trận a và b được khởi tạo như sau.

int a[2][3] = { {2, 4, 1} , {2, 3, 9} };
int b[3][3] = { {1, 2, 3} , {3, 6, 1} , {2, 9, 7} };

Nếu số cột trong ma trận đầu tiên không bằng số hàng trong ma trận thứ hai thì không thể thực hiện phép nhân. Trong trường hợp này, một thông báo lỗi được in. Nó được đưa ra như sau.

if (c1 != r2) {
   cout<<"Column of first matrix should be equal to row of second matrix";
}

Cả hai ma trận a và b đều được hiển thị bằng vòng lặp for lồng nhau. Điều này được chứng minh bằng đoạn mã sau.

cout<<"The first matrix is:"<<endl;
for(i=0; i<r1; ++i) {
   for(j=0; j<c1; ++j)
   cout<<a[i][j]<<" ";
   cout<<endl;
}
cout<<endl;
cout<<"The second matrix is:"<<endl;
for(i=0; i<r2; ++i) {
   for(j=0; j<c2; ++j)
   cout<<b[i][j]<<" ";
   cout<<endl;
}
cout<<endl;

Sau đó, ma trận tích [] [] được khởi tạo bằng 0. Sau đó, một vòng lặp for lồng nhau được sử dụng để tìm tích của 2 ma trận a và b. Điều này được thể hiện trong đoạn mã dưới đây.

for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j) {
   product[i][j] = 0;
}
for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
for(k=0; k<c1; ++k) {
   product[i][j]+=a[i][k]*b[k][j];
}

Sau khi sản phẩm thu được, nó được in. Điều này được hiển thị như sau.

cout<<"Product of the two matrices is:"<<endl;
for(i=0; i<r1; ++i) {
   for(j=0; j<c2; ++j)
   cout<<product[i][j]<<" ";
   cout<<endl;
}