Computer >> Hướng Dẫn 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 vào hàm


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

Ví dụ ma trận 3×4 có 3 hàng 4 cột:

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

Chương trình nhân hai ma trận bằng cách truyền ma trận vào hàm:

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 << "Số cột ma trận thứ nhất phải bằng số hàng ma trận thứ hai";
  } else {
    cout << "Ma trận thứ nhất:" << endl;
    for (i = 0; i < r1; ++i) {
      for (j = 0; j < c1; ++j)
        cout << a[i][j] << " ";
      cout << endl;
    }
    cout << endl;
    cout << "Ma trận thứ hai:" << 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 << "Tích hai ma trận:" << 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;
}

Kết quả đầu ra

Ma trận thứ nhất:
2 4 1
2 3 9
Ma trận thứ hai:
1 2 3
3 6 1
2 9 7
Tích hai ma trận:
16 37 17
29 103 72

Trong chương trình, hai ma trận a và b được khởi tạo trong main():

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

Gọi hàm MatrixMultiplication() với a và b:

MatrixMultiplication(a, b);

Trong hàm MatrixMultiplication(), nếu số cột ma trận thứ nhất không bằng số hàng ma trận thứ hai thì không thể nhân, in thông báo lỗi:

if (c1 != r2) {
  cout << "Số cột ma trận thứ nhất phải bằng số hàng ma trận thứ hai";
}

Cả hai ma trận được hiển thị bằng vòng lặp lồng nhau:

cout << "Ma trận thứ nhất:" << endl;
for (i = 0; i < r1; ++i) {
  for (j = 0; j < c1; ++j)
    cout << a[i][j] << " ";
  cout << endl;
}
cout << endl;
cout << "Ma trận thứ hai:" << endl;
for (i = 0; i < r2; ++i) {
  for (j = 0; j < c2; ++j)
    cout << b[i][j] << " ";
  cout << endl;
}
cout << endl;

Sau đó khởi tạo ma trận product[][] bằng 0. Dùng vòng lặp lồng nhau nhân hai ma trận:

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];

Cuối cùng in kết quả:

cout << "Tích hai ma trận:" << endl;
for (i = 0; i < r1; ++i) {
  for (j = 0; j < c2; ++j)
    cout << product[i][j] << " ";
  cout << endl;
}