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 truyền ma trận cho hàm

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 * 4 có 3 hàng và 4 cột như hình dưới đây.

8 6 3 5
7 1 9 2
5 1 9 8

Một chương trình nhân hai ma trận bằng cách truyền các ma trận cho các hàm như sau.

Ví dụ

#include<iostream>
using namespace std;
void MatrixMultiplication(int a[2][3],int b[3][3]) {
   int product[10][10], r1=2, c1=3, r2=3, c2=3, i, j, k;
   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;
      }
   }
}
int main() {
   int a[2][3] = { {2, 4, 1} , {2, 3, 9} };
   int b[3][3] = { {1, 2, 3} , {3, 6, 1} , {2, 9, 7} };
   MatrixMultiplication(a,b);
   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 trong hàm main () 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} };

Hàm MatrixMultiplication () được gọi với các giá trị của a và b. Điều này được nhìn thấy bên dưới.

MatrixMultiplication(a,b);

Trong hàm MatrixMultiplication (), 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;
}