Cho mình hỏi, sao bài này, ma trận A, B lại in được ra màn hình, còn ma trận kết quả C lại không in được ra màn hình? Có lỗi gì trong việc thực hiện phép cộng trừ nhân hai ma trận?
Code:
#include <iostream>
#include <iomanip>
using namespace std;
class MATRAN
   {
   	private:
   		double a[30][30];
   		int m, n;
   	public:
   		MATRAN();
   		void nhap();
   		void xuat();
   		int dkcongtrumt(MATRAN B);
   		MATRAN cong(MATRAN B);
   		MATRAN tru(MATRAN B);
   		int dknhanmt(MATRAN B);
   		MATRAN nhan(MATRAN B);
   };
MATRAN::MATRAN()
   {
   	for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) a[i][j] = 0;
   }
void MATRAN::nhap()
   {
   	cout << "\nNhap so hang cua ma tran: "; cin >> m;
   	cout << "\nNhap so cot cua ma tran: "; cin >> n;
   	for (int i = 0; i < m; i++) for (int j = 0; j < n; j++)
   	   {
   	   	cout << "\nNhap phan tu hang " << i + 1 << " cot " << j + 1 << ": ";
   	   	cin >> a[i][j];
	   }
	cout << "\n";
   }
void MATRAN::xuat()
   {
   	for (int i = 0; i < m; i++)
   	   {
   	   	for (int j = 0; j < n; j++) cout << setprecision(5) << setw(6) << a[i][j];
   	   	cout << "\n";
	   }
   }
int MATRAN::dkcongtrumt(MATRAN B) //Dieu kien de cong tru duoc hai ma tran
   {
   	if (m == B.m && n == B.n) return 1;
   	else return 0;
   }
MATRAN MATRAN::cong(MATRAN B)
   {
   	MATRAN C;
   	for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) C.a[i][j] = a[i][j] + B.a[i][j];
   	return C;
   }
MATRAN MATRAN::tru(MATRAN B)
   {
   	MATRAN C;
   	for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) C.a[i][j] = a[i][j] - B.a[i][j];
   	return C;
   }
int MATRAN::dknhanmt(MATRAN B) //Dieu kien de nhan hai ma tran
   {
   	if (n == B.m) return 1;
   	else return 0;
   }
MATRAN MATRAN::nhan(MATRAN B)
   {
   	MATRAN C;
   	for (int i = 0; i < m; i++) for (int j = 0; j < B.n; j++)
   	   {
   	   	C.a[i][j] = 0;
   	   	for (int k = 0; k < n; k++) C.a[i][j] += a[i][k] * B.a[k][j];
	   }
	return C;
   }
int main()
   {
   	MATRAN A, B, C;
   	int choice;
   	cout << "\nNhap ma tran A: "; A.nhap(); A.xuat();
   	cout << "\nNhap ma tran B: "; B.nhap(); B.xuat();
   	cout << "\nMoi chon cac thao tac sau: ";
   	cout << "\n 1. Cong hai ma tran;";
   	cout << "\n 2. Tru ma tran A voi ma tran B;";
   	cout << "\n 3. Nhan ma tran A voi ma tran B;";
   	cout << "\n 4. Thoat.";
   	do
   	   {
   	   	cout << "\nBan chon: "; cin >> choice;
   	   	switch(choice)
   	   	   {
   	   	   	case 1:
   	   	   		if (A.dkcongtrumt(B) == 0) cout << "\nKhong the cong ma tran.";
   	   	   		else
   	   	   		   {
   	   	   		   	C = A.cong(B);
   	   	   		   	cout << "\nCong hai ma tran ta duoc: " << endl;
   	   	   		   	C.xuat(); //Ma tran C khong in ra man hinh
				   }
				break;
			case 2:
				if (A.dkcongtrumt(B) == 0) cout << "\nKhong the tru ma tran.";
   	   	   		else
   	   	   		   {
   	   	   		   	C = A.tru(B);
   	   	   		   	cout << "\nTru hai ma tran ta duoc: " << endl;
   	   	   		   	C.xuat(); //Ma tran C khong in ra man hinh
				   }
				break;
			case 3:
				if (A.dknhanmt(B) == 0) cout << "\nKhong the nhan ma tran.";
				else
				   {
				   	C = A.nhan(B);
				   	cout << "\nNhan hai ma tran ta duoc: " << endl;
				   	C.xuat(); //Ma tran C khong in ra man hinh
				   }
				break;
			case 4: break;
			default: cout << "\nNham thao tac roi thim, chon lai de.";
		   }
	   }
	while (choice != 4);
	return 0;
   }
18.cpp