30/09/2018, 16:57
Nhận xét về đồ án ma trận của em mong mọi người góp ý
đây là định nghĩa ma trận
#pragma once
#include <iostream>
#include <fstream>
#include <iostream>
#include<cstdlib>
#include<stdlib.h>
#include<fstream>
#include<math.h>
#include <ctime>
#include"iostream"
using namespace std;
#define MAX 10
class matran
{
private:
int n;
int m[MAX][MAX];
public:
matran();
// ham tạo ma tran
void nhap();//nhap ma tran bang tay
void nhap_ngaunhien();//nhap ma tran ngau nhien
int get_n();//nhan gia tri cua n
void setMaTran(int);// set so cot va so dong cua ma tran
void setPhanTu(int, int, int);// set phan tu
int getPhanTu(int, int);//lay 1 phan tu
void xuat();//xuat ma tran ra man hinh
void nhapfile();// nhap tu file//
void xuatfile();// xuat ra file//
int tongcheochinh(); //tong cac phan tu tren duong cheo chinh//
void phantuchan(); //phan tu chan nho nhat tren duong cheo phu//
int tamgiactren(); //tong cac phan tu thuoc tam giac tren//
void tamgiacduoi(); //tong cac phan tu thuoc vung tam giac duoi//
bool ktsnt(int x); //kiem tra so nguyen to//
void sntln(); // tim so nguyen to lon nhat tren duong cheo chinh//
bool kiemtratren(); // kiem tra ma tran tam giac tren//
bool kiemtraduoi(); //kiem tra ma tran tam giac duoi//
bool kiemtradonvi(); //kiem tra ma tran don vi//
bool kiemtradx(); // kiem tra doi xung qua duong cheo chinh//
void sapxep(); // sap xep tang dan tung dong//
void operator = (matran );
matran operator + (matran&); // tong hai ma tran//
matran operator - (matran&);// hieu cua hai ma tran//
matran operator * (matran&);// tich cua hai ma tran//
bool kiemtracheochinh();//kiem tra duong cheo chinh//
~matran();
};
đây là các hàm trong matran
#include "ma_tran.h"
matran::matran()
{
this->n = 0;
}
void matran::setMaTran(int n)
{
this->n = n;
for (int i = 0; i<n; i++)
for (int j = 0; j<n; j++)
m[i][j] = 0;//mac dinh
}
void matran::setPhanTu(int i, int j, int x)
{
this->m[i][j] = x;
}
int matran::getPhanTu(int i, int j)
{
return this->m[i][j];
}
// nhap ma tran bang tay
void matran:: nhap()
{
cout << "nhap vao cap cua ma tran, n= ";
cin >> n; cout << endl;
for (int i = 0; i<n; i++)
for (int j = 0; j<n; j++)
{
cin >> m[i][j];
}
}
//nhap ma tran ngau nhien
void matran:: nhap_ngaunhien()
{
cout << "nhap vao cap cua ma tran, n= ";
cin >> n; cout << endl;
cout << "ma tran da duoc nhap ngau nhien" << endl;
srand((unsigned)time(NULL));
for (int i = 0; i<n; i++)
for (int j = 0; j<n; j++)
{
m[i][j] = rand() % 10;
}
}
//tra ve gia tri cua n
int matran::get_n()
{
return n;
}
// xuat ma tran ra man hih
void matran:: xuat()
{
cout << "phan tu cua ma tran la" << endl;
for (int i = 0; i<n; i++)
{
for (int j = 0; j<n; j++)
{
cout << m[i][j] << " ";
}
cout << endl;
cout << endl;
}
}
//xuat ma tran ra file
void matran::xuatfile()
{
matran M;
ofstream matrandemo("ma tran.txt");
matrandemo << "phan tu cua ma tran la" << endl;
for (int i = 0; i<n; i++)
{
for (int j = 0; j<n; j++)
{
matrandemo << m[i][j] << " ";
}
matrandemo << endl;
matrandemo << endl;
}
}
//nhap du lieu tu file
void matran::nhapfile()
{
ifstream matrandemo("matrandemo.txt");
matrandemo >> n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
matrandemo >> m[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << m[i][j];
cout << " ";
}
cout << "
";
}
matrandemo.close();
system("pause");
}
//kiem tra so nguyen to//
bool matran::ktsnt(int x)
{
bool kt = true;
if (x<2)
{
kt = false;
}
if (x == 2)
{
kt = true;
}
else
{
for (int i = 2; i<x; i++)
{
if (x%i == 0)
{
kt = false;
break;
}
}
}
return (kt);
}
//tong cac phan tu tren duong cheo chinh//
int matran::tongcheochinh()
{
int s = 0;
for (int i = 0; i<n; i++)
for (int j = 0; j<n; j++)
{
if (i == j)
{
s += m[i][j];
}
}
return s;
}
//phan tu chan nho nhat tren duong cheo phu//
void matran::phantuchan()
{
int i = 0, dem = 0;
int min = m[i][n - 1 - i];
for (i = 0; i<n; i++)
{
if (m[i][n - 1 - i] % 2 == 0)
{
if (m[i][n - 1 - i]<min)
{
min = m[i][n - 1 - i];
}
}
else
{
dem++;
}
}
if (dem == n)
{
cout << " khong co phan tu chan" << endl;
}
else
{
cout << " phan tu chan nho nhat la " << min;
}
}
//tong cac phan tu thuoc tam giac tren//
int matran::tamgiactren()
{
int s = 0;
for (int i = 0; i<n; i++)
{
for (int j = i + 1; j<n; j++)
{
s += m[i][j];
}
}
return (s);
}
//tong cac phan tu nguyen to thuoc vung tam giac duoi//
void matran::tamgiacduoi()
{
int s = 0;
for (int i = 1; i<n; i++)
{
for (int j = 0; j<n; j++)
{
if (ktsnt(m[i][j]) == true && i>j)
{
s = s + m[i][j];
}
}
}
if (s>0)
cout << " tong cac so nguyen to la : " << s;
else
cout << " khong co so nguyen to! ";
}
//kiem tra ma tran tam giac duoi//
bool matran::kiemtraduoi()
{
bool kt = true;
for (int i = 0; i<n; i++)
{
for (int j = i + 1; j<n; j++)
{
if (m[i][j] != 0)
{
kt = false;
break;
}
}
}
return (kt);
}
// kiem tra ma tran tam giac tren//
bool matran::kiemtratren()
{
bool kt;
for (int i = 1; i<n; i++)
{
for (int j = 0; j<n; j++)
{
if (i>j)
{
if (m[i][j] == 0)
kt = true;
else
{
kt = false;
break;
}
}
}
}
return (kt);
}
//kiem tra duong cheo chinh//
bool matran::kiemtracheochinh()
{
bool kt;
for (int i = 0; i<n; i++)
for (int j = 0; j<n; j++)
{
if (i == j)
{
if (m[i][j] != 1)
{
kt = false;
break;
}
else
kt = true;
}
}
return (kt);
}
// kiem tra ma tran don vi//
bool matran::kiemtradonvi()
{
bool kt;
if ((kiemtracheochinh() == true) && (kiemtratren() == true) && (kiemtraduoi() == true))
{
kt = true;
}
else
{
kt = false;
}
return (kt);
}
// tim so nguyen to lon nhat tren duong cheo chinh//
void matran::sntln()
{
int max = 0, dem = 0;
for (int i = 0; i<n; i++)
{
for (int j = 0; j<n; j++)
{
if (i == j)
{
if (ktsnt(m[i][j]) == true)
{
if (max<m[i][j])
{
max = m[i][j];
}
}
else
{
dem++;
}
}
}
}
if (dem == n)
{
cout << " khong co so nguyen to" << endl;
}
else
{
cout << " so nguyen to lon nhat la " << max << endl;
}
}
// kiem tra tinh doi xung cua ma tran//
bool matran::kiemtradx()
{
bool kt;
for (int i = 0; i<n; i++)
{
for (int j = 0; j<n; j++)
{
if (m[i][j] == m[j][i])
{
kt = true;
}
else
{
kt = false;
break;
}
}
}
return (kt);
}
// sap xep tang dan tung dong//
void matran::sapxep()
{
int tam;
for (int i = 0; i<n; i++)
{
for (int j = 0; j<n - 1; j++)
{
for (int k = j + 1; k<n; k++)
{
if (m[i][j]>m[i][k])
{
tam = m[i][j];
m[i][j] = m[i][k];
m[i][k] = tam;
}
}
}
}
}
//phep gán ma tran tran
void matran::operator = (matran r)
{
n = r.get_n();
for (int i = 0; i<n; i++)
{
for (int j = 0; j<n; j++)
{
m[i][j] = r.getPhanTu(i,j);
}
}
}
//tong ma tran
matran matran:: operator + (matran &h)
{
matran p;
p.n = h.n;
for (int i = 0; i<n; i++)
for (int j = 0; j<n; j++)
p.setPhanTu(i, j, m[i][j] + h.m[i][j]);
return p;
}
//hieu ma tran
matran matran:: operator - (matran &h)
{
matran p;
p.n = h.n;
for (int i = 0; i<n; i++)
for (int j = 0; j<n; j++)
p.setPhanTu(i, j, m[i][j] - h.m[i][j]);
return p;
}
//tich ma tran
matran matran:: operator * (matran &h)
{
matran p;
p.n = h.n;
int temp;
int i,j,k;
for (i = 0; i<n; i++)
{
for ( j = 0; j<n; j++)
{
temp = 0;
for ( k = 0; k<n; k++)
{
temp = temp + (m[i][k] * h.m[k][j]);
}
p.setPhanTu(i,j,temp);
}
}
return p;
}
matran::~matran()
{
}
đây là main
#include <iostream>
#include <fstream>
#include <iostream>
#include<cstdlib>
#include<stdlib.h>
#include<fstream>
#include<math.h>
#include"ma_tran.h"
using namespace std;
//ham main//
int main(int argc, char** argv)
{
matran M, h;//khoi tao ma tran
int a;
int chon = -1;
cout << "Dai Hoc Thu Dau Mot-Lop D13HT01" << endl;
cout << "Chao thay va cac ban" << endl;
cout << "Thanh vien cua nhom:" << endl;
cout << "1. Ho The Manh" << endl;
cout << "2. Tran Pham Huu Giang" << endl;
cout << "3. Le Sy Thanh Truong" << endl;
cout << "4. Huynh Ngoc Thang" << endl;
cout << "5. Le Nhat Trinh" << endl;
cout << "================================000000000=============================" << endl;
cout << endl;
while (chon != 0)
{
cout << endl;
cout << "=======================000000=======================" << endl;
cout << "1. nhap ma tran tu ban phim " << endl;
cout << "2. nhap ma tran tu file " << endl;
cout << "3. xuat ma tran ra man hinh " << endl;
cout << "4. xuat ma tran vao file " << endl;
cout << "5. tong phan tu tren duong cheo chinh " << endl;
cout << "6. phan tu chan nho nhat tren duong cheo phu" << endl;
cout << "7. tong cac phan tu thuoc tam giac tren " << endl;
cout << "8. tong cac phan tu nguyen to thuoc vung tam giac duoi " << endl;
cout << "9. tim so nguyen to lon nhat tren duong cheo chinh " << endl;
cout << "10. kiem tra ma tran tam giac duoi " << endl;
cout << "11. kiem tra ma tran tam giac tren " << endl;
cout << "12. kiem tra ma tran don vi " << endl;
cout << "13. kiem tra ma tran doi xung qua duong cheo chinh " << endl;
cout << "14. sap xep cac phan tu tren mang tang dan tung dong " << endl;
cout << "15. tinh tong, hieu, thuong tich cua 2 ma tran " << endl;
cout << "0. thoat.";
cout << endl;
cout << " ban chon : ";
cin >> chon;
cout << endl;
if (chon == 1)
{
cout << "1. nhap bang tay"<<endl;
cout << "2. nhap ngau nhien"<<endl;
cin >> a;
if (a==1)
M.nhap();
if (a == 2)
M.nhap_ngaunhien();
}
if (chon == 2)
{
M.nhapfile();
}
if (chon == 3)
{
M.xuat();
}
if (chon == 4)
{
cout << "ma tran da duoc nhap vao file";
M.xuatfile();
}
if (chon == 5)
{
cout << " tong cac phan tu tren duong cheo chinh la:" << M.tongcheochinh() << endl;
}
if (chon == 6)
{
M.phantuchan();
}
if (chon == 7)
{
cout << " tong cac phan tu tam giac tren la : " << M.tamgiactren();
}
if (chon == 8)
{
M.tamgiacduoi();
}
if (chon == 9)
{
M.sntln();
}
if (chon == 10)
{
if (M.kiemtraduoi() == true)
{
cout << " day la ma tran tam giac duoi." << endl;
}
else
cout << " day khong phai ma tran tam giac duoi." << endl;
}
if (chon == 11)
{
if (M.kiemtratren() == true)
{
cout << " day la ma tran tam giac tren." << endl;
}
else
cout << " day khong phai la ma tran tam giac tren." << endl;
}
if (chon == 12)
{
if (M.kiemtradonvi() == true)
cout << " day la ma tran don vi." << endl;
else
cout << " day khong phai la ma tran don vi." << endl;
}
if (chon == 13)
{
if (M.kiemtradx() == true)
cout << " day la ma tran doi xung!" << endl;
else
cout << " day khong phai la ma tran doi xung!" << endl;
}
if (chon == 14)
{
cout << "ma tran da duoc sap xep" << endl;
M.sapxep();
M.xuat();
}
if (chon == 15)
{
cout << " ban hay nhap matran thu 2:" << endl;
do
{
cout << " cap ma tran thu 2 bang ma tran thu nhat " << endl;
cout << "1. nhap bang tay" << endl;
cout << "2. nhap ngau nhien" << endl;
cin >> a;
if (a == 1)
h.nhap();
if (a == 2)
h.nhap_ngaunhien();
}
while (h.get_n() != M.get_n());
cout << "ma tran thu 2 la:" << endl;
h.xuat();
cout << " tong 2 ma tran" << endl;
M.tongmatran(h);
cout << " hieu 2 ma tran" << endl;
M.hieumatran(h);
cout << " tich 2 ma tran" << endl;
M.tichmatran(h);
}
}
return 0;
}
Bài liên quan
Mình mạn phép góp ý nhé: Ok!
Tự do ngôn luận mà bạn, góp ý đi, hehe
thank nhé nhưng ma mình không biết là nó hướng đối tượng không nữa, hay chỉ là thủ tục bọc trong clss?
Thực ra nếu chỉ dựa trên cách viết thì lập trình hướng đối tượng với lập trình thủ tục thông thường ko có nhiều khác biệt.
Bây giờ bạn viết 1 chương trình tập trung làm về ma trận thì khó để bạn nhận ra ưu điểm của việc dùng class thay vì lập trình cấu trúc thông thường (điều này bạn hoàn toàn làm được đúng ko?)
Tuy nhiên, nếu có 1 người khác muốn dựa vào những gì bạn đã viết để phát triển thêm về các phép toán khác về ma trận nữa chẳng hạn, thì lập trình cấu trúc ko thể làm được.
Bạn viết như vậy là ok về mặt hướng đối tượng rồi , dưới con mắt của 1 người lập trình mức trung bình như mình là vậy
thank bạn góp ý của bạn
Không nên code thế này. Trong hàm này mình thấy có for lồng for là tạm ổn. Nhưng bên trong lại là if lồng if có cả else nữa.
Về lâu về dài rất khó quản lý. OP nên tách ra làm hai hàm, hàm lớn vẫn là hàm
kiemtratren
nhưng nên có hàm phụ nữa để làm cho hàm này dễ quản lý hơn.Ví dụ: viết một hàm để thay thế:
Và trong hàm này cũng nên thêm một cặp
{}
nữa cho nó đềuCao thủ xuất hiện rồi ta
vâng, mình sẽ tối ưu ngay