Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ thực hiện phép nhân ma trận


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×2 có 3 hàng 2 cột:

8 1
4 9
5 6

Chương trình thực hiện phép nhân ma trận:

Ví dụ

#include <iostream>
using namespace std;

int main() {
  int product[10][10], r1 = 3, c1 = 3, r2 = 3, c2 = 3, i, j, k;
  int a[3][3] = {{2, 4, 1}, {2, 3, 9}, {3, 1, 8}};
  int b[3][3] = {{1, 2, 3}, {3, 6, 1}, {2, 4, 7}};
  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;
    }
  }
  return 0;
}

Kết quả đầu ra

Ma trận thứ nhất:
2 4 1
2 3 9
3 1 8
Ma trận thứ hai:
1 2 3
3 6 1
2 4 7
Tích hai ma trận:
16 32 17
29 58 72
22 44 66

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

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

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

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

Sau khi có tích, 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;
}