Code C++: Phép toán cộng, nhân hai ma trận

- Cộng hai ma trận
Cho A=(aij) và B=(bij) là hai ma trận cùng cấp m x n. Khi đó, C=A ± B cũng là ma trận cấp m x n và được xác định bởi cij   aij  ± bij,  1 ≤ i ≤ m, 1 ≤ j ≤ n.
- Nhân hai ma trận
Cho A=(aij) là ma trận trận cấp m x n và B=(bjk) là ma trận cấp n x p. Khi đó, C=A.B = (cik) là ma trận cấp m x p.
Cài đặt mã nguồn
#include <conio.h>
#include <iostream>
#define max 100
using namespace std;

/*Hàm nhập ma trận hệ số*/
void NhapMaTran(float A[max][max], int m, int n, char ch)  {
for(int i = 0; i<m; i++)
for(int j = 0; j<n; j++) {
cout<<ch<<"["<<i<<"]["<<j<<"] = ";
cin>>A[i][j];
}
}
/* Hàm xuất ma trận*/
void XuatMaTran(float A[max][max], int m, int n) {
for(int i=0 ; i<m; i++){
cout<<endl;
for(int j=0 ; j<n; j++)
cout<<A[i][j]<<"\t";
}
}

/*C = A+B*/
void CongMaTran(float A[max][max], float B[max][max], float C[max][max], int m, int n) {
for(int i = 0; i<m; i++)
for(int j = 0; j<n; j++)
C[i][j] = A[i][j]+B[i][j];
}
/*A cap mxn * B cap nxp = C cap mxp*/
void NhanMaTran(float A[max][max],float B[max][max], float C[max][max],int m,int n,int p)
for(int i = 0; i<m; i++)
for(int k = 0; k<p; k++) {
C[i][k]=0;
for(int j = 0; j<n; j++)
C[i][k] = C[i][k]+A[i][j]*B[j][k];
}
}
/*Chuong trinh chinh*/
int main() {
int m,n,p;
float A[max][max],B[max][max],C[max][max],D[max][max];
cout<<"Nhap m = "; cin>>m;
cout<<"Nhap n = "; cin>>n;
cout<<"Nhap p = "; cin>>p;
cout<<"Nhap ma tran A cap "<<m<<"x"<<n<<endl;
NhapMaTran(A,m,n,'A');
cout<<"Nhap ma tran B cap "<<m<<"x"<<n<<endl;
NhapMaTran(B,m,n,'B');
cout<<"Nhap ma tran C cap "<<n<<"x"<<p<<endl;
NhapMaTran(C,n,p,'C');
cout<<"Ma tran A";
XuatMaTran(A,m,n);
getch();
cout<<"\n\nMa tran B";
XuatMaTran(B,m,n);
getch();
cout<<"\n\nMa tran C";
XuatMaTran(C,n,p);
getch();
cout<<"\n\nMa tran D = A+B";
CongMaTran(A,B,D,m,n);
XuatMaTran(D,m,n);
getch();
cout<<"\n\nMa tran D = A.C";
NhanMaTran(A,C,D,m,n,p);
XuatMaTran(D,n,p);
getch();
return 0;
}
Kết quả khi chạy chương trình
Tag: C, C++, ma trận, matrix, array, cộng hai ma trận, nhân hai ma trận

Related Posts
Previous
« Prev Post

5 comments

June 18, 2015 at 10:53 PM

Tks Admin đã viết những bài đăng bổ ích. Sau 1 năm ăn chơi thì giờ em đã có hứng thú để học tập rồi :D

Reply
avatar
November 2, 2015 at 4:21 PM

Chào MINH TUAN Vu
Cảm ơn bạn đã quan tâm và chia sẻ thông tin.
Sự động viên của bạn sẽ là nguồn động lực lớn để tôi chia sẻ nhiều bài học bổ ích hơn nữa.
Trân trọng

Reply
avatar
December 10, 2015 at 3:27 PM

Bài hay ạ, nhưng em học ở trường khác cách viết của Ad
cô dạy toàn int main, từ lúc bắt đầu học C++ cho tới bài mảng này CHƯA BAO GIỜ sài VOID nên em không biết nó là gì luôn.
thứ 2 là : bọn em khai báo INT MAIN() xong là nhập mảng vào = 1 dòng FOR, sau đó Xử lý mảng theo đề bài = dòng For tiếp, và cuối cùng là Xuất kq cũng bằng 1 dòng For cuối cùng. Nghĩa là tất cả 3 phần như thế đều trong {} của Int main, chứ không chia ra như các diễn đàn Void Nhập, void xuất, void cộng,nhân, rồi void main. :( thật sự là em không biết nên học theo hướng nào nữa

Reply
avatar
December 10, 2015 at 9:50 PM

Chào Khang Luu Song
Mình trả lời các thắc mắc của bạn như sau:
1. main() là hàm chính. Khi nhấn F9 chạy, chương trình dịch sẽ thực thi các lệnh trong hàm main() này trước tiên. Viết int main hay void main cũng được. Bạn lưu ý nếu sử dụng Dev C++ thì phải là int main. Turbo/Borland C++ thì void hay int đều được. Khi sử dụng int main() thì trước khi kết thúc hàm, phải return 0.
2. Cách viết như bài trên là tách thành các hàm riêng biệt, chỗ nào cần sử dụng bạn chỉ gọi tên hàm, truyền đối số vào. Giảm thiểu việc phải viết lại nhiều hàm có chức năng giống nhau nhiều lần. Theo tôi, bạn nên dùng theo cách này. Tránh việc viết đi viết lại mã nguồn nhiều lần để thực hiện 1 công việc giống nhau. Nếu cần chỉnh sửa thì cũng chỉ việc sửa ở 1 chỗ thôi.
Nếu cần hỗ trợ có thể liên hệ cho tôi: nguyenminhhienit@gmail.com
Chúc bạn học tập tốt

Reply
avatar
January 28, 2018 at 11:02 PM

admin cho em hỏi , cái nhân 2 ma trận nếu em không lầm thì phải ra ma trận 3x3 ạ , còn không thì a phải ghi D = C.A thì mới ra ma trận 2x2 chứ ???

Reply
avatar