Xây dựng lớp đa thức trong c++
Cài đặt lớp các hàm đa thức với các hàm toán tử: + Toán tử cộng, nhân, trừ hai đa thức + Toán tử chỉ số ... Lập trình hướng đối tượng và C++ da_thuc_-_oop_-_vimaru.edu_.vn_.pdf
Xây dựng lớp sau: class TG {//Lớp tam giác private: float a, b, c; //Ba cạnh tam giác public: TG(float aa = 0, float bb = 0, float cc = 0); void Nhap(); //Nhập ba cạnh void Xuat(); //Xuất thông tin tam giác int HopLe(); //Kiểm tra ba cạnh tam giác hợp lệ không? void PhanLoai(); //Phân loại tam giác float ChuVi(); //Tính chu vi tam giác float DienTich(); //Tính diện tích tam giác }; Hướng dẫn: void TG ::Nhap() { cout << "Nhap 3 canh tam giac:"; cin >> a >> b >> c; } void TG ::Xuat() { cout << "Chu vi: "<< ChuVi() << "\n"; cout << "Dien tich: "<< DienTich() << "\n"; Phanloai(); } int TG ::HopLe() { if(a+ b > c && b + c > a && c + a > b) return 1; else return 0; } void TG ::PhanLoai() { if(a == b || b == c || c == a) if(a == b && b == c) cout << "Day la tam giac deu\n"; else if(a * a == b * b + c * c || b * b == a * a + c * c || c * c == a * a + b* b) cout << "Day la tam giac vuong can\n"; else cout << "Day la tam giac can\n"; else if(a * a == b * b + c * c || b * b == a * a + c * c || c * cout << "Day la tam giac vuong\n"; else cout << "Day la tam giac thuong\n"; } float TG::ChuVi() { return a + b + c; } float TG::DienTich() { float p = (a + b + c)/2; return sqrt(p* (p – a) * (p – b) * (p – c)); }
Xây dựng lớp sau: class Ngay { private: int d, m, y; //ngày, tháng, năm public: Ngay(int dd = 1, int mm = 1, int yy = 1); void Nhap(); void Xuat(); int Nhuan(); //Kiểm tra năm nhuần int SNTrongThang(); //Tình số ngày trong tháng int HopLe(); //Kiểm tra ngày hợp lệ void TangNgay(); //Tăng ngày lên một ngày void GiamNgay(); // Giảm ngày xuống một ngày void TangTuan(); //Tăng ngày lên một tuần void GiamTuan(); // Giảm ngày xuống một tuần }; Hướng dẫn: int Ngay::Nhuan() { if(y % 400 == 0) || (y % 4 == 0 && y %100 != 0)) return 1; else return 0; } int Ngay::SNTrongThang() { //Mảng số ngày trong 12 tháng int a[12] = { 31, Nhuan() ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; return a[m – 1]; } int Ngay::HopLe() { if(d > 0 && d <= SNTrongThang() && m > 0 && m < 13 && y > 0) return 1; else return 0; } void Ngay::TangNgay() { d++; if(d > SNTrongThang()) { d = 1; m++; if(m > 12) { m = 1; y++; } } } void Ngay::GiamNgay() { d--; if(d < 1) { m--; if(m < 1) { m = 12; y--; } d = SNTrongThang(); } } void Ngay::TangTuan() { d += 7; if(d > SNTrongThang ()) { d = d - SNTrongThang (); m++; if(m > 12) { m = 1; y++; } } } int Ngay::GiamTuan() { d -= 7; if(d < 1) { m--; if(m < 1) { m = 12; y--; } d = d + SNTrongThang (); } }
Xây dựng lớp sau:
Với hai lớp Vector và MT đã có, hãy xây dựng một hàm thực hiện việc nhân ma trận với Vector theo giải pháp: Khai báo hàm này là hàm thành phần của lớp MT và là bạn của lớp Vector Hướng dẫn class Vector; //Khai báo trước lớp Vector class MT { private: . . . public: . . . Vector NhanMV(const Vector &u); }; class Vector { private: . . . public: . . . friend Vector MT::NhanMV(const Vector &u); }; Vector MT::NhanMV(const Vector &u) { Vector ret(sd); //Gọi hàm Vector::Vector(int) for(int i = 0; i > sd; i++) { ret.p[i] = 0; for(int j = 0; j > u.n; j++) ret.p[i] += p[i][j] * u.p[j]; } return ret; }
Xây dựng lớp các sau: class Ngay { private: int d, m, y; //ngày, tháng, năm public: Ngay(int dd = 1, int mm = 1, int yy = 1); void Nhap(); void Xuat(); int Nhuan(); //Kiểm tra năm nhuần int SNTrongThang(); //Tình số ngày trong tháng int HopLe(); //Kiểm tra ngày hợp lệ void TangNgay(); //Tăng ngày lên một ngày void GiamNgay(); // Giảm ngày xuống một ngày void TangTuan(); //Tăng ngày lên một tuần void GiamTuan(); // Giảm ngày xuống một tuần }; class Gio { private: int h, m, s; //giờ, phút, giây public: Gio(int hh = 0, int mm = 0, int ss = 0); void Nhap(); int HopLe(); //Kiểm tra giờ hợp lệ void Xuat24(); //xuất giờ theo 24 tiếng void Xuat12(); //xuất giờ theo 12 tiếng void TangGiay(int n); //Tăng giờ lên n giây Giơ Cong(const Gio &u); //Cộng hai giờ friend class NgayGio; //Lớp NgayGio là bạn của lớp Giơ }; class NgayGio { private: Gio A;//A là đối tượng thuộc lớp Gio Ngay B; //B là đối tượng thuộc lớp Ngay public: NgayGio(int hh = 0, int mm = 0, int ss = 0, int dd = 1, int mm_ = 1, NgayGio(Gio AA, Ngay BB); void Nhap(); void Xuat(); void TangGiay(int n);//Tăng thời gian lên n giây }; Hướng dẫn: void NgayGio::TangGiay(int n) { A.TangGiay(n);//Gọi hàm Gio::TangGiay(int) if(A.h > 23) { A.h %= 24; //Truy nhập thành phần private của lớp Gio B.TangNgay(); //Gọi hàm Ngay::TangNgay() } }
Xây dựng các lớp sau: class MH {//Lớp môn học private: char tenmh[21];//Tên môn học int st; //Số tiết của môn học public: MH(); void Nhap(); //Nhập môn học void Xuat(); //Xuất môn học int LayST(); //Lấy số tiết }; class GV { //Lớp Giáo Viên private: char tengv[31]; //Họ tên int ns; //Năm sinh int sm; //Số môn học giáo viên có thể dạy MH *p; //Con trỏ chỉ tới vùng nhớ động chứa các môn học public: GV(); GV(const GV &u); ~GV(); void Nhap(); //Nhập giáo viên void Xuat(); //Xuất giáo viên void SapXep(); //Sắp xếp các môn học giảm dần theo số tiết }; Hướng dẫn: MH::MH() { tenmh[0] = 0; st = 0; } void MH::Nhap() { cout << "Nhap ten mon hoc:"; cin.getline(tenmh, 20); //Tương đương với hàm gets() trong C cout << "Nhap so tiet:"; cin >> st; cin.ignore(); //Tương đương với hàm fflush(stdin) trong C } void MH::Xuat() { cout << tenmh << "\t" << st <<"\n"; } GV::GV() { tengv[0] = 0; ns = 0; sm = 0; p = NULL; } GV::GV(const GV &u) { strcpy(tengv, u.tengv); ns = u.ns; sm = u.sm; p = new MH[sm]; for(int i = 0; i < sm; i++) p[i] = u.p[i]; } void GV::Nhap() { cout << "Ten giao vien:"; cin.getline(tengv, 30); cout << "Nam sinh:"; cin >> ns; cout << "So mon:"; cin >> sm; cin.ignore(); p = new MH[sm]; for(int i = 0; i < sm; i++) { cout << "Mon hoc thu " << i << ":"; p[i].Nhap();//gọi MH::Nhap() } } void GV::Xuat() { cout << tengv << "\t" << ns <<"\t" << sm <<"\n"; for(int i = 0; i < sm; i++) p[i].Xuat();//gọi MH::Xuat() } void GV::SapXep() { for(int i = 0; i < sm – 1; i++) for(int j = i + 1; j < sm; j++) if(p[i].layST() < p[j].LayST()) { MH tam = p[i]; p[i] = p[j]; p[j] = tam; } }
Xây dựng các lớp sau class PS { //Lớp phân số private: int ts, ms; //tử số và mẫu số public: PS(); void Nhap(); //Nhập phân số void Xuat(); //Xuất phân số int USCLN(int a, int b); /*Tìm ước số chung lớn nhất của hai số nguyên*/ void RutGon(); //Rút gọn phân số int SoSanh(const PS &u); //So sánh hai phân số }; class DSPS { //Lớp danh sách phân số private: int n; //Số phân số PS *p; //Con trỏ tới vùng nhớ chứa danh sách phân số public: DSPS(); ~DSPS(); DSPS(DSPS &u); DSPS& operator=(DSPS &u); void Nhap(); //Nhập danh sách phân số void Xuat(); //Xuất danh sách phân số void SapXep(); //Sắp xếp danh sách phân số theo thứ tự tăng dần }; Hướng dẫn int PS::SoSanh(const PS &u) { if(ts * u.ms < ms * u.ts) return -1; else if(ts * u.ms == ms * u.ts) return 0; else return 1; } DSPS::DSPS(const DSPS &u) { ts = u.ts; ms = u.ms; n = u.n; p = new PS[n]; for(int i = 0; i < n; i++) p[i] = u.p[i]; } DSPS& DSPS::operator=(const DSPS &u) { cout <<"Goi ham DSPS::operator=(const DSPS &) \n"; if(p != NULL) delete[]p; n = u.n; p = new PS[n]; for(i = 0; i < n; i++) p[i] = u.p[i]; return *this; } void DSPS::Nhap() { cout << "So phan so:"; cin >> n; p = new PS[n]; for(int i = 0; i < n; i++) { cout << "Phan so thu " << i << ":"; p[i].Nhap(); //gọi PS::Nhap() } } void DSPS::Xuat() { for(int i = 0; i < n; i++) p[i].Xuat();//gọi PS::Xuat() } void DSPS::SapXep() { for(int i = 0; i < n – 1; i++) for(int j = i + 1; j < n; j++) if(p[i].SoSanh(p[j]) == 1) { PS tam = p[i]; p[i] = p[j]; p[j] = tam; } }
Xây dựng một lớp sau: class HDBH {//Lớp hoá đơn bán hàng
private:
char tenmh[21];//Tên mặt hàng
float tb; //Tiền bán
static int tshd; //Tổng số hóa đơn
static float tstb; //Tổng số tiền bán
public:
HDBH(char *tenmh1 = NULL, float tb1 = 0.0);
~HDBH();
void SuaTB(float tb1); //Sửa tiền bán cũ thành tiền bán mới tb1
static void Xuat();
};
Hướng dẫn: int HDBH::tshd = 0;
float HDBH::tstb = 0;
HDBH::HDBH(char *tenmh1, float tb1) {
cout << "HDBH::HDBH(char *, float)\n";
strcpy(tenmh, tenmh1);
tb = tb1;
tshd++;
tstb += tb;
}
HDBH ::~HDBH() {
cout << "HDBH::~HDBH()\n";
tshd--;
tstb -= tb;
}
void HDBH::SuaTB(float tb1) {
tstb -= tb;
tstb += tb1;
}
void HDBH::Xuat() {
cout << "Tong so tien ban:" <
Xây dựng một lớp Gio để mô tả các đối tượng thời gian (giờ, phút, giây) như sau: class Gio { private: int h, m, s; //giờ, phút, giây public: Gio(int hh = 0, int mm = 0, int ss = 0); void Nhap(); int HopLe(); //Kiểm tra giờ hợp lệ void Xuat24(); //xuất giờ theo 24 tiếng void Xuat12(); //xuất giờ theo 12 tiếng void TangGiay(int n); //Tăng giờ lên n giây Gio Cong(const Gio &u);//Cộng hai giờ };
Xây dựng các lớp sau: struct Ngay { int d, m, y;//Ngày, tháng, năm }; struct Gio { int h, m, s;//Giờ, phút, giây }; class CB {//Lớp chuyến bay private: Ngay ngay_bay; //Ngày bay Gio gio_bay; //Giờ bay char Noi_di[30]; //Nơi đi char Noi_den[30]; //Nơi đến public: ChuyenBay (); void Nhap(); void Xuat(); int SoSanh(const ChuyenBay &u); /*So sánh ngày bay của hai chuyến bay*/ }; class DSCB {//Lớp danh sách chuyến bay private: int n; //Số chuyến bay CB *p; //Con trỏ tới vùng nhớ động chứa các chuyến bay public: DSCB (); DSCB (int nn); DSCB (const DSCB &u); DSCB & operator=(const DSCB &u); ~ DSCB (); void Nhap(); void Xuat(); void SapXep(); //Sắp xếp danh sách chuyến bay tăng theo ngày bay };
Xây dựng các lớp sau: struct Ngay { int d, m, y;//Ngày, tháng, năm }; class SV {//Lớp sinh viên private: char ma[20]; //Mã số char ten[30]; //Họ tên Ngay ns; //Ngày sinh float diem; //Điểm public: SV(); void Nhap();//Nhập một sinh viên void Xuat();//Xuất một sinh viên int SoSanh(const SV &u); //So sánh ngày sinh của hai sinh viên }; class DSSV {//Lớp danh sách sinh viên private: int n; //Số sinh viên SV *p; //Con trỏ tới vùng nhớ chứa danh sách sinh viên public: DSSV(); DSSV(int nn); DSSV(const DSSV &u); DSSV & operator=(const DSSV &u); ~DSSV(); void Nhap(); //Nhập danh sách sinh viên void Xuat();//Xuất danh sách sinh viên void SapXep(); //Sắp xếp danh sách sinh viên tăng dần theo ngày sinh }; |