Bài tập lập trình Hướng đối tượng tổng hợp (Bài 10)
Bài tập lập trình Hướng đối tượng tổng hợp
Đề bài:
Xây dựng lớp Phanso
gồm:
- Thuộc Tính:
tuso
, mauso
. - Phương thức:
- Hàm Khởi Tạo Không Tham Số, Hàm Hủy
- Nhập , Xuất
Cong()
, Tru()
, Nhan()
, Chia()
Tính Tổng, Hiệu, Tích, Thương 2 phân số obj1
và obj2
rồi in kết quả ra màn hình
Đề bài:
Xây dựng lớp Phanso
gồm:
- Thuộc Tính:
tuso
,mauso
. - Phương thức:
- Hàm Khởi Tạo Không Tham Số, Hàm Hủy
- Nhập , Xuất
Cong()
,Tru()
,Nhan()
,Chia()
Tính Tổng, Hiệu, Tích, Thương 2 phân số obj1
và obj2
rồi in kết quả ra màn hình
Code xây dựng class Phân số:
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 #include <bits/stdc++.h>using namespace std; class Phanso{private: int tuso, mauso; public: Phanso() { tuso = 0; mauso = 1; } ~Phanso() { tuso = 0; mauso = 1; }//-----------------------------------------------------------------// void set() { cout << "Nhap Tu So: "; cin >> this->tuso; cout << "Nhap Mau So: "; cin >> this-> mauso; } void get() { cout << this->tuso << "/" << this->mauso << endl; }//-----------------------------------------------------------------// Phanso Cong(Phanso obj1, Phanso obj2) { Phanso obj3; obj3.tuso = obj1.tuso * obj2.mauso + obj1.mauso * obj2.tuso; obj3.mauso = obj1.mauso * obj2.mauso; return obj3; } Phanso Tru(Phanso obj1, Phanso obj2) { Phanso obj3; obj3.tuso = obj1.tuso * obj2.mauso - obj1.mauso * obj2.tuso; obj3.mauso = obj1.mauso * obj2.mauso; return obj3; } Phanso Nhan(Phanso obj1, Phanso obj2) { Phanso obj3; obj3.tuso = obj1.tuso * obj2.tuso; obj3.mauso = obj1.mauso * obj2.mauso; return obj3; } Phanso Chia(Phanso obj1, Phanso obj2) { Phanso obj3; obj3.tuso = obj1.tuso * obj2.mauso; obj3.mauso = obj1.mauso * obj2.tuso; return obj3; }}; int main(){ Phanso obj1, obj2, obj3; obj1.set(); obj2.set(); obj3 = obj3.Cong(obj1, obj2); obj3.get(); obj3 = obj3.Tru(obj1, obj2); obj3.get(); obj3 = obj3.Nhan(obj1, obj2); obj3.get(); obj3 = obj3.Chia(obj1, obj2); obj3.get(); return 0;}
Input:
0123 1 23 4
Output
012345 10/8-2/83/84/6
Code xây dựng class Phân số:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | #include <bits/stdc++.h> using namespace std; class Phanso { private: int tuso, mauso; public: Phanso() { tuso = 0; mauso = 1; } ~Phanso() { tuso = 0; mauso = 1; } //-----------------------------------------------------------------// void set() { cout << "Nhap Tu So: "; cin >> this->tuso; cout << "Nhap Mau So: "; cin >> this-> mauso; } void get() { cout << this->tuso << "/" << this->mauso << endl; } //-----------------------------------------------------------------// Phanso Cong(Phanso obj1, Phanso obj2) { Phanso obj3; obj3.tuso = obj1.tuso * obj2.mauso + obj1.mauso * obj2.tuso; obj3.mauso = obj1.mauso * obj2.mauso; return obj3; } Phanso Tru(Phanso obj1, Phanso obj2) { Phanso obj3; obj3.tuso = obj1.tuso * obj2.mauso - obj1.mauso * obj2.tuso; obj3.mauso = obj1.mauso * obj2.mauso; return obj3; } Phanso Nhan(Phanso obj1, Phanso obj2) { Phanso obj3; obj3.tuso = obj1.tuso * obj2.tuso; obj3.mauso = obj1.mauso * obj2.mauso; return obj3; } Phanso Chia(Phanso obj1, Phanso obj2) { Phanso obj3; obj3.tuso = obj1.tuso * obj2.mauso; obj3.mauso = obj1.mauso * obj2.tuso; return obj3; } }; int main() { Phanso obj1, obj2, obj3; obj1.set(); obj2.set(); obj3 = obj3.Cong(obj1, obj2); obj3.get(); obj3 = obj3.Tru(obj1, obj2); obj3.get(); obj3 = obj3.Nhan(obj1, obj2); obj3.get(); obj3 = obj3.Chia(obj1, obj2); obj3.get(); return 0; } |
Input:
0 1 2 3 | 1 2 3 4 |
Output
0 1 2 3 4 5 | 10/8 -2/8 3/8 4/6 |
Bài Tập quản lý Vận động viên
Đề bài
Xây dựng lớp vận động viên VanDongVien
gồm:
- Thuộc tính:
hoten
(chuỗi ký tự), tuoi
(số nguyên), monthidau
(chuỗi ký tự), cannang
(số thực), chieucao
(số thực). - Phương thức:
- Thiết lập không tham số.
- Thiết lập 5 tham số
- Hủy bỏ
- Nạp chồng toán tử nhập >>
- Nạp chồng toán tử xuất <<
- Nạp chồng toán tử so sánh > (một vận động viên là lớn hơn nếu chiều cao lớn hơn,
trong trường hợp chiều cao bằng nhau thì xét cân nặng lớn hơn)
Xây dựng chương trình chính:
- Khai báo
p
là đối tượng lớp Vandongvien
(sử dụng hàm thiết lập 5 tham số), hiển thị thông tin của p
ra màn hình. - Nhập vào một mảng gồm
n
vận động viên. - Hiển thị danh sách đã nhập ra màn hình.
- Sắp xếp mảng đã nhập theo thứ tự tăng dần, hiển thị danh sách đã sắp ra màn hình.
Lời Giải:
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 #include <bits/stdc++.h>using namespace std; class VanDongVien{protected: string hoten, monthidau; int tuoi; float cannang, chieucao; public: VanDongVien() { this->hoten = this->monthidau = ""; this->tuoi = 0; this->cannang = this->chieucao = 0; } VanDongVien(string hoten, string monthidau, int tuoi, float cannang, float chieucao) { this->hoten = hoten; this->monthidau = monthidau; this->tuoi = tuoi; this->cannang = cannang; this->chieucao = chieucao; } ~VanDongVien() { this->hoten = this->monthidau = ""; this->tuoi = 0; this->cannang = this->chieucao = 0; } //----------------------------------------------// friend istream &operator>>(istream &is, VanDongVien &obj) { cin.ignore(); cout << "Nhap Ho Ten: "; fflush(stdin); getline(is, obj.hoten); cout << "Nhap Mon Thi Dau: "; fflush(stdin); getline(is, obj.monthidau); cout << "Nhap Tuoi: "; is >> obj.tuoi; cout << "Nhap Can Nang: "; is >> obj.cannang; cout << "Nhap Chieu Cao: "; is >> obj.chieucao; return is; } friend ostream &operator<<(ostream &os, VanDongVien obj) { cout << "Ho Ten: " << obj.hoten << endl; cout << "Mon Thi Dau: " << obj.monthidau << endl; cout << "Tuoi: " << obj.tuoi << endl; cout << "Can Nang: " << obj.cannang << endl; cout << "Chieu cao: " << obj.chieucao << endl; return os; } bool operator > (const VanDongVien &obj) { if (this->chieucao > obj.chieucao) return true; else if (this->chieucao < obj.chieucao) return false; else if (this->cannang > obj.cannang) return true; else return false; }}; void swap(VanDongVien &a, VanDongVien &b){ VanDongVien temp = a; a = b; b = temp;} void Bubblesort(VanDongVien arr[], int n){ for (int i = 0; i < n - 1; i++) for (int j = 0; j < n - i - 1; j++) if (arr[j] > arr[j + 1]) swap(arr[j], arr[j + 1]);} int main(){ VanDongVien p("Nguyen Van A", "Bong Da", 20, 178, 70.5); cout << p; cout << "Nhap So Luong: "; int n; cin >> n; VanDongVien *arr = new VanDongVien[n]; for (int i = 0; i < n; ++i) cin >> arr[i]; cout << endl << endl; for (int i = 0; i < n; ++i) cout << arr[i] << endl; cout << "Sort" << endl; Bubblesort(arr,n); for (int i = 0; i < n; ++i) cout << arr[i] << endl; return 0;}
Input
01234567891011121314151617 3Nguyen Van BCau Long2080190Nguyen Van CBong Chuyen2178188Nguyen Van DBoi Loi1981188
Output
012345678910111213141516171819202122232425262728293031323334353637383940414243 Ho Ten: Nguyen Van AMon Thi Dau: Bong DaTuoi: 20Can Nang: 178Chieu cao: 70.5 Ho Ten: Nguyen Van BMon Thi Dau: Cau LongTuoi: 20Can Nang: 80Chieu cao: 190 Ho Ten: Nguyen Van CMon Thi Dau: Bong ChuyenTuoi: 21Can Nang: 78Chieu cao: 188 Ho Ten: Nguyen Van DMon Thi Dau: Boi LoiTuoi: 19Can Nang: 81Chieu cao: 188 SortHo Ten: Nguyen Van CMon Thi Dau: Bong ChuyenTuoi: 21Can Nang: 78Chieu cao: 188 Ho Ten: Nguyen Van DMon Thi Dau: Boi LoiTuoi: 19Can Nang: 81Chieu cao: 188 Ho Ten: Nguyen Van BMon Thi Dau: Cau LongTuoi: 20Can Nang: 80Chieu cao: 190
Đề bài
Xây dựng lớp vận động viên VanDongVien
gồm:
- Thuộc tính:
hoten
(chuỗi ký tự),tuoi
(số nguyên),monthidau
(chuỗi ký tự),cannang
(số thực),chieucao
(số thực). - Phương thức:
- Thiết lập không tham số.
- Thiết lập 5 tham số
- Hủy bỏ
- Nạp chồng toán tử nhập >>
- Nạp chồng toán tử xuất <<
- Nạp chồng toán tử so sánh > (một vận động viên là lớn hơn nếu chiều cao lớn hơn,
trong trường hợp chiều cao bằng nhau thì xét cân nặng lớn hơn)
Xây dựng chương trình chính:
- Khai báo
p
là đối tượng lớpVandongvien
(sử dụng hàm thiết lập 5 tham số), hiển thị thông tin củap
ra màn hình. - Nhập vào một mảng gồm
n
vận động viên. - Hiển thị danh sách đã nhập ra màn hình.
- Sắp xếp mảng đã nhập theo thứ tự tăng dần, hiển thị danh sách đã sắp ra màn hình.
Lời Giải:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #include <bits/stdc++.h> using namespace std; class VanDongVien { protected: string hoten, monthidau; int tuoi; float cannang, chieucao; public: VanDongVien() { this->hoten = this->monthidau = ""; this->tuoi = 0; this->cannang = this->chieucao = 0; } VanDongVien(string hoten, string monthidau, int tuoi, float cannang, float chieucao) { this->hoten = hoten; this->monthidau = monthidau; this->tuoi = tuoi; this->cannang = cannang; this->chieucao = chieucao; } ~VanDongVien() { this->hoten = this->monthidau = ""; this->tuoi = 0; this->cannang = this->chieucao = 0; } //----------------------------------------------// friend istream &operator>>(istream &is, VanDongVien &obj) { cin.ignore(); cout << "Nhap Ho Ten: "; fflush(stdin); getline(is, obj.hoten); cout << "Nhap Mon Thi Dau: "; fflush(stdin); getline(is, obj.monthidau); cout << "Nhap Tuoi: "; is >> obj.tuoi; cout << "Nhap Can Nang: "; is >> obj.cannang; cout << "Nhap Chieu Cao: "; is >> obj.chieucao; return is; } friend ostream &operator<<(ostream &os, VanDongVien obj) { cout << "Ho Ten: " << obj.hoten << endl; cout << "Mon Thi Dau: " << obj.monthidau << endl; cout << "Tuoi: " << obj.tuoi << endl; cout << "Can Nang: " << obj.cannang << endl; cout << "Chieu cao: " << obj.chieucao << endl; return os; } bool operator > (const VanDongVien &obj) { if (this->chieucao > obj.chieucao) return true; else if (this->chieucao < obj.chieucao) return false; else if (this->cannang > obj.cannang) return true; else return false; } }; void swap(VanDongVien &a, VanDongVien &b) { VanDongVien temp = a; a = b; b = temp; } void Bubblesort(VanDongVien arr[], int n) { for (int i = 0; i < n - 1; i++) for (int j = 0; j < n - i - 1; j++) if (arr[j] > arr[j + 1]) swap(arr[j], arr[j + 1]); } int main() { VanDongVien p("Nguyen Van A", "Bong Da", 20, 178, 70.5); cout << p; cout << "Nhap So Luong: "; int n; cin >> n; VanDongVien *arr = new VanDongVien[n]; for (int i = 0; i < n; ++i) cin >> arr[i]; cout << endl << endl; for (int i = 0; i < n; ++i) cout << arr[i] << endl; cout << "Sort" << endl; Bubblesort(arr,n); for (int i = 0; i < n; ++i) cout << arr[i] << endl; return 0; } |
Input
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 3 Nguyen Van B Cau Long 20 80 190 Nguyen Van C Bong Chuyen 21 78 188 Nguyen Van D Boi Loi 19 81 188 |
Output
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | Ho Ten: Nguyen Van A Mon Thi Dau: Bong Da Tuoi: 20 Can Nang: 178 Chieu cao: 70.5 Ho Ten: Nguyen Van B Mon Thi Dau: Cau Long Tuoi: 20 Can Nang: 80 Chieu cao: 190 Ho Ten: Nguyen Van C Mon Thi Dau: Bong Chuyen Tuoi: 21 Can Nang: 78 Chieu cao: 188 Ho Ten: Nguyen Van D Mon Thi Dau: Boi Loi Tuoi: 19 Can Nang: 81 Chieu cao: 188 Sort Ho Ten: Nguyen Van C Mon Thi Dau: Bong Chuyen Tuoi: 21 Can Nang: 78 Chieu cao: 188 Ho Ten: Nguyen Van D Mon Thi Dau: Boi Loi Tuoi: 19 Can Nang: 81 Chieu cao: 188 Ho Ten: Nguyen Van B Mon Thi Dau: Cau Long Tuoi: 20 Can Nang: 80 Chieu cao: 190 |
Bài Tập OOP nâng cao
Bài Tập quản lý bán vé máy bay
Đề bài
Xây dựng lớp Vemaybay
gồm:
- Thuộc tính:
tenchuyen
, ngaybay
, giave
- Phương thức:
- Cấu tử
- Hủy
- Nhap
- Xuat
getgiave()
: hàm trả về giá vé
Xây dựng lớp Nguoi gồm:
- Thuộc tính:
hoten
, gioitinh
, tuoi
- Phương thức:
- Cấu tử
- Hủy
- Nhập
- Xuất
Xây dựng lớp Hanhkhach
(mỗi hành khách được mua nhiều vé) kế thừa lớp Nguoi
bổ
sung thêm:
- Thuộc tính:
Vemaybay *ve
; int soluong
; - Phương thức:
- Cấu tử
- Hủy
- Nhập
- Xuất
tongtien()
: trả về Tổng số tiền phải trả của hành khách
Chương trình chính: Nhập vào 1 danh sách n hành khách (n nhập từ bàn phím).
Hiển thị danh sách hành khách và số tiền phải trả tương ứng của mỗi khách hàng.
Sắp xếp danh sách hành khách theo chiều giảm dần của Tổng tiền.
Lời Giải
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 #include <bits/stdc++.h>using namespace std; class Date{protected: int day, month, year; public: Date() { this->day = this->month = this->year = 0; } ~Date() { this->day = this->month = this->year = 0; } void input() { cout << "Nhap Ngay: "; cin >> this->day; cout << "Nhap Thang: "; cin >> this->month; cout << "Nhap Nam: "; cin >> this->year; } void output() { cout << "Ngay/Thang/Nam: " << this->day << "/" << this->month << "/" << this->year << endl; }};//-------------------------------------------------------------//class Vemaybay{protected: string tenchuyen; Date ngaybay; int giave; public: Vemaybay() { this->tenchuyen = ""; this->giave = 0; } ~Vemaybay() { this->tenchuyen = ""; this->giave = 0; } void input() { cin.ignore(); cout << "Nhap Ten Chuyen: "; fflush(stdin); getline(cin, this->tenchuyen); cout << "Nhap Ngay Bay: " << endl; ngaybay.input(); cout << "Nhap Gia Ve: "; cin >> this->giave; } void output() { cout << "Ten Chuyen: " << this->tenchuyen << endl; cout << "Ngay Bay: " << endl << "\t"; this->ngaybay.output(); cout << "Gia Ve: " << this->giave << endl; } int getgiave() { return this->giave; }}; class Nguoi{protected: string hoten, gioitinh; int tuoi; public: Nguoi() { this->hoten = this->gioitinh = ""; this->tuoi = 0; } ~Nguoi() { this->hoten = this->gioitinh = ""; this->tuoi = 0; } void input() { cin.ignore(); cout << "Nhap Ho Ten: "; fflush(stdin); getline(cin, this->hoten); cout << "Nhap Gioi Tinh: "; fflush(stdin); getline(cin, this->gioitinh); cout << "Nhap Tuoi: "; cin >> this->tuoi; } void output() { cout << "Ho Ten: " << this->hoten << endl; cout << "Gioi Tinh: " << this->gioitinh << endl; cout << "Tuoi: " << this->tuoi << endl; }}; class Hanhkhach : public Nguoi{protected: int soluong; //Vemaybay *ve; Vemaybay ve[1000]; int tongtien; public: Hanhkhach() { this->soluong = 0; //this->ve = new Vemaybay[this->soluong]; ve[this->soluong]; tongtien = 0; } ~Hanhkhach() { soluong = 0; delete []ve; tongtien = 0; } void input() { Nguoi :: input(); cout << "Nhap So Luong Ve Hanh Khach Da Mua: "; cin >> this->soluong; //ve = new Vemaybay[this->soluong]; ve[this->soluong]; for (int i = 0; i < this->soluong; ++i) { ve[i].input(); tongtien += ve[i].getgiave(); } } void output() { cout << "- Thong Tin Khach Hang: " << endl; Nguoi :: output(); cout << "- Thong Tin Chuyen Bay: " << endl; for (int i = 0; i < this->soluong; ++i) { ve[i].output(); cout << endl; } cout << "==> Tong Tien = " << this->tongtien; cout << endl; } bool operator < (const Hanhkhach &obj) { if (this->tongtien < obj.tongtien) return true; else return false; }};//----------------------------------------------------------// void swap(Hanhkhach &a, Hanhkhach &b){ Hanhkhach temp = a; a = b; b = temp;} void Bubblesort(Hanhkhach arr[], int n){ for (int i = 0; i < n - 1; ++i) for (int j = 0; j < n - i - 1; ++j) if (arr[j] < arr[j + 1]) swap(arr[j], arr[j + 1]);}//----------------------------------------------------------//int main(){ cout << "Nhap So Luong Khach Hang: "; int n; cin >> n; Hanhkhach *arr = new Hanhkhach[n]; for (int i = 0; i < n; ++i) arr[i].input(); cout << endl << endl << "Output" << endl << endl; for (int i = 0; i < n; ++i) { arr[i].output(); cout << endl << "------------------" << endl << endl; } cout << "After Sort: " << endl; Bubblesort(arr, n); for (int i = 0; i < n; ++i) { arr[i].output(); cout << endl << "------------------" << endl << endl; } return 0;}
Input
01234567891011121314151617181920212223242526272829303132 3Nguyen Van ANam202Ha Noi - Hai Phong10 2 2020500000Hai Phong - Ha Noi15 2 2020450000Nguyen Van BNam211Ha Noi - TP.Ho Chi Minh20 2 20201500000Nguyen Thi CNu193Ha Noi - Da Nang19 2 20201200000Ha Noi - Hue18 2 20201250000Hue - Da Nang22 2 2020500000
Output
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 Output - Thong Tin Khach Hang: Ho Ten: Nguyen Van AGioi Tinh: NamTuoi: 20- Thong Tin Chuyen Bay: Ten Chuyen: Ha Noi - Hai PhongNgay Bay: Ngay/Thang/Nam: 10/2/2020Gia Ve: 500000 Ten Chuyen: Hai Phong - Ha NoiNgay Bay: Ngay/Thang/Nam: 15/2/2020Gia Ve: 450000 ==> Tong Tien = 950000 ------------------ - Thong Tin Khach Hang: Ho Ten: Nguyen Van BGioi Tinh: NamTuoi: 21- Thong Tin Chuyen Bay: Ten Chuyen: Ha Noi - TP.Ho Chi MinhNgay Bay: Ngay/Thang/Nam: 20/2/2020Gia Ve: 1500000 ==> Tong Tien = 1500000 ------------------ - Thong Tin Khach Hang: Ho Ten: Nguyen Thi CGioi Tinh: NuTuoi: 19- Thong Tin Chuyen Bay: Ten Chuyen: Ha Noi - Da NangNgay Bay: Ngay/Thang/Nam: 19/2/2020Gia Ve: 1200000 Ten Chuyen: Ha Noi - HueNgay Bay: Ngay/Thang/Nam: 18/2/2020Gia Ve: 1250000 Ten Chuyen: Hue - Da NangNgay Bay: Ngay/Thang/Nam: 22/2/2020Gia Ve: 500000 ==> Tong Tien = 2950000 ------------------ After Sort: - Thong Tin Khach Hang: Ho Ten: Nguyen Thi CGioi Tinh: NuTuoi: 19- Thong Tin Chuyen Bay: Ten Chuyen: Ha Noi - Da NangNgay Bay: Ngay/Thang/Nam: 19/2/2020Gia Ve: 1200000 Ten Chuyen: Ha Noi - HueNgay Bay: Ngay/Thang/Nam: 18/2/2020Gia Ve: 1250000 Ten Chuyen: Hue - Da NangNgay Bay: Ngay/Thang/Nam: 22/2/2020Gia Ve: 500000 ==> Tong Tien = 2950000 ------------------ - Thong Tin Khach Hang: Ho Ten: Nguyen Van BGioi Tinh: NamTuoi: 21- Thong Tin Chuyen Bay: Ten Chuyen: Ha Noi - TP.Ho Chi MinhNgay Bay: Ngay/Thang/Nam: 20/2/2020Gia Ve: 1500000 ==> Tong Tien = 1500000 ------------------ - Thong Tin Khach Hang: Ho Ten: Nguyen Van AGioi Tinh: NamTuoi: 20- Thong Tin Chuyen Bay: Ten Chuyen: Ha Noi - Hai PhongNgay Bay: Ngay/Thang/Nam: 10/2/2020Gia Ve: 500000 Ten Chuyen: Hai Phong - Ha NoiNgay Bay: Ngay/Thang/Nam: 15/2/2020Gia Ve: 450000 ==> Tong Tien = 950000 ------------------
Trong bài tập lập trình hướng đối tượng số 3 này, mình có 1 lưu ý nhỏ.
Nếu không sắp xếp các hành khách theo tổng tiền, thì mình vẫn có thể khai báo ve
là một con trỏ kiểu Vemaybay
, nhưng khi mình thực hiện sắp xếp, mình phải đổi chỗ các ô nhớ chứa hành khách. Nếu vẫn khai báo Vemaybay *ve
, nghĩa là ve
sẽ được lưu trong bộ nhớ chỉ đọc, nên khi đổi chỗ sẽ gây lỗi Segmentation Fault.
Bạn có thể xem thêm về lỗi này tại đây
Bài tổng hợp các bài tập lập trình hướng đối tượng từ cơ bản đến nâng cao của mình đến đây là hết rồi. Cảm ơn tất cả mọi người đã ủng hộ mình trong thời gian qua. Chào mọi người, và có thể sẽ hẹn gặp lại mọi người trong một dịp gần nhất.
Đề bài
Xây dựng lớp Vemaybay
gồm:
- Thuộc tính:
tenchuyen
,ngaybay
,giave
- Phương thức:
- Cấu tử
- Hủy
- Nhap
- Xuat
getgiave()
: hàm trả về giá vé
Xây dựng lớp Nguoi gồm:
- Thuộc tính:
hoten
,gioitinh
,tuoi
- Phương thức:
- Cấu tử
- Hủy
- Nhập
- Xuất
Xây dựng lớp Hanhkhach
(mỗi hành khách được mua nhiều vé) kế thừa lớp Nguoi
bổ
sung thêm:
- Thuộc tính:
Vemaybay *ve
;int soluong
; - Phương thức:
- Cấu tử
- Hủy
- Nhập
- Xuất
tongtien()
: trả về Tổng số tiền phải trả của hành khách
Chương trình chính: Nhập vào 1 danh sách n hành khách (n nhập từ bàn phím).
Hiển thị danh sách hành khách và số tiền phải trả tương ứng của mỗi khách hàng.
Sắp xếp danh sách hành khách theo chiều giảm dần của Tổng tiền.
Lời Giải
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 | #include <bits/stdc++.h> using namespace std; class Date { protected: int day, month, year; public: Date() { this->day = this->month = this->year = 0; } ~Date() { this->day = this->month = this->year = 0; } void input() { cout << "Nhap Ngay: "; cin >> this->day; cout << "Nhap Thang: "; cin >> this->month; cout << "Nhap Nam: "; cin >> this->year; } void output() { cout << "Ngay/Thang/Nam: " << this->day << "/" << this->month << "/" << this->year << endl; } }; //-------------------------------------------------------------// class Vemaybay { protected: string tenchuyen; Date ngaybay; int giave; public: Vemaybay() { this->tenchuyen = ""; this->giave = 0; } ~Vemaybay() { this->tenchuyen = ""; this->giave = 0; } void input() { cin.ignore(); cout << "Nhap Ten Chuyen: "; fflush(stdin); getline(cin, this->tenchuyen); cout << "Nhap Ngay Bay: " << endl; ngaybay.input(); cout << "Nhap Gia Ve: "; cin >> this->giave; } void output() { cout << "Ten Chuyen: " << this->tenchuyen << endl; cout << "Ngay Bay: " << endl << "\t"; this->ngaybay.output(); cout << "Gia Ve: " << this->giave << endl; } int getgiave() { return this->giave; } }; class Nguoi { protected: string hoten, gioitinh; int tuoi; public: Nguoi() { this->hoten = this->gioitinh = ""; this->tuoi = 0; } ~Nguoi() { this->hoten = this->gioitinh = ""; this->tuoi = 0; } void input() { cin.ignore(); cout << "Nhap Ho Ten: "; fflush(stdin); getline(cin, this->hoten); cout << "Nhap Gioi Tinh: "; fflush(stdin); getline(cin, this->gioitinh); cout << "Nhap Tuoi: "; cin >> this->tuoi; } void output() { cout << "Ho Ten: " << this->hoten << endl; cout << "Gioi Tinh: " << this->gioitinh << endl; cout << "Tuoi: " << this->tuoi << endl; } }; class Hanhkhach : public Nguoi { protected: int soluong; //Vemaybay *ve; Vemaybay ve[1000]; int tongtien; public: Hanhkhach() { this->soluong = 0; //this->ve = new Vemaybay[this->soluong]; ve[this->soluong]; tongtien = 0; } ~Hanhkhach() { soluong = 0; delete []ve; tongtien = 0; } void input() { Nguoi :: input(); cout << "Nhap So Luong Ve Hanh Khach Da Mua: "; cin >> this->soluong; //ve = new Vemaybay[this->soluong]; ve[this->soluong]; for (int i = 0; i < this->soluong; ++i) { ve[i].input(); tongtien += ve[i].getgiave(); } } void output() { cout << "- Thong Tin Khach Hang: " << endl; Nguoi :: output(); cout << "- Thong Tin Chuyen Bay: " << endl; for (int i = 0; i < this->soluong; ++i) { ve[i].output(); cout << endl; } cout << "==> Tong Tien = " << this->tongtien; cout << endl; } bool operator < (const Hanhkhach &obj) { if (this->tongtien < obj.tongtien) return true; else return false; } }; //----------------------------------------------------------// void swap(Hanhkhach &a, Hanhkhach &b) { Hanhkhach temp = a; a = b; b = temp; } void Bubblesort(Hanhkhach arr[], int n) { for (int i = 0; i < n - 1; ++i) for (int j = 0; j < n - i - 1; ++j) if (arr[j] < arr[j + 1]) swap(arr[j], arr[j + 1]); } //----------------------------------------------------------// int main() { cout << "Nhap So Luong Khach Hang: "; int n; cin >> n; Hanhkhach *arr = new Hanhkhach[n]; for (int i = 0; i < n; ++i) arr[i].input(); cout << endl << endl << "Output" << endl << endl; for (int i = 0; i < n; ++i) { arr[i].output(); cout << endl << "------------------" << endl << endl; } cout << "After Sort: " << endl; Bubblesort(arr, n); for (int i = 0; i < n; ++i) { arr[i].output(); cout << endl << "------------------" << endl << endl; } return 0; } |
Input
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 3 Nguyen Van A Nam 20 2 Ha Noi - Hai Phong 10 2 2020 500000 Hai Phong - Ha Noi 15 2 2020 450000 Nguyen Van B Nam 21 1 Ha Noi - TP.Ho Chi Minh 20 2 2020 1500000 Nguyen Thi C Nu 19 3 Ha Noi - Da Nang 19 2 2020 1200000 Ha Noi - Hue 18 2 2020 1250000 Hue - Da Nang 22 2 2020 500000 |
Output
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | Output - Thong Tin Khach Hang: Ho Ten: Nguyen Van A Gioi Tinh: Nam Tuoi: 20 - Thong Tin Chuyen Bay: Ten Chuyen: Ha Noi - Hai Phong Ngay Bay: Ngay/Thang/Nam: 10/2/2020 Gia Ve: 500000 Ten Chuyen: Hai Phong - Ha Noi Ngay Bay: Ngay/Thang/Nam: 15/2/2020 Gia Ve: 450000 ==> Tong Tien = 950000 ------------------ - Thong Tin Khach Hang: Ho Ten: Nguyen Van B Gioi Tinh: Nam Tuoi: 21 - Thong Tin Chuyen Bay: Ten Chuyen: Ha Noi - TP.Ho Chi Minh Ngay Bay: Ngay/Thang/Nam: 20/2/2020 Gia Ve: 1500000 ==> Tong Tien = 1500000 ------------------ - Thong Tin Khach Hang: Ho Ten: Nguyen Thi C Gioi Tinh: Nu Tuoi: 19 - Thong Tin Chuyen Bay: Ten Chuyen: Ha Noi - Da Nang Ngay Bay: Ngay/Thang/Nam: 19/2/2020 Gia Ve: 1200000 Ten Chuyen: Ha Noi - Hue Ngay Bay: Ngay/Thang/Nam: 18/2/2020 Gia Ve: 1250000 Ten Chuyen: Hue - Da Nang Ngay Bay: Ngay/Thang/Nam: 22/2/2020 Gia Ve: 500000 ==> Tong Tien = 2950000 ------------------ After Sort: - Thong Tin Khach Hang: Ho Ten: Nguyen Thi C Gioi Tinh: Nu Tuoi: 19 - Thong Tin Chuyen Bay: Ten Chuyen: Ha Noi - Da Nang Ngay Bay: Ngay/Thang/Nam: 19/2/2020 Gia Ve: 1200000 Ten Chuyen: Ha Noi - Hue Ngay Bay: Ngay/Thang/Nam: 18/2/2020 Gia Ve: 1250000 Ten Chuyen: Hue - Da Nang Ngay Bay: Ngay/Thang/Nam: 22/2/2020 Gia Ve: 500000 ==> Tong Tien = 2950000 ------------------ - Thong Tin Khach Hang: Ho Ten: Nguyen Van B Gioi Tinh: Nam Tuoi: 21 - Thong Tin Chuyen Bay: Ten Chuyen: Ha Noi - TP.Ho Chi Minh Ngay Bay: Ngay/Thang/Nam: 20/2/2020 Gia Ve: 1500000 ==> Tong Tien = 1500000 ------------------ - Thong Tin Khach Hang: Ho Ten: Nguyen Van A Gioi Tinh: Nam Tuoi: 20 - Thong Tin Chuyen Bay: Ten Chuyen: Ha Noi - Hai Phong Ngay Bay: Ngay/Thang/Nam: 10/2/2020 Gia Ve: 500000 Ten Chuyen: Hai Phong - Ha Noi Ngay Bay: Ngay/Thang/Nam: 15/2/2020 Gia Ve: 450000 ==> Tong Tien = 950000 ------------------ |
Trong bài tập lập trình hướng đối tượng số 3 này, mình có 1 lưu ý nhỏ.
Nếu không sắp xếp các hành khách theo tổng tiền, thì mình vẫn có thể khai báo ve
là một con trỏ kiểu Vemaybay
, nhưng khi mình thực hiện sắp xếp, mình phải đổi chỗ các ô nhớ chứa hành khách. Nếu vẫn khai báo Vemaybay *ve
, nghĩa là ve
sẽ được lưu trong bộ nhớ chỉ đọc, nên khi đổi chỗ sẽ gây lỗi Segmentation Fault.
Bạn có thể xem thêm về lỗi này tại đây
Bài tổng hợp các bài tập lập trình hướng đối tượng từ cơ bản đến nâng cao của mình đến đây là hết rồi. Cảm ơn tất cả mọi người đã ủng hộ mình trong thời gian qua. Chào mọi người, và có thể sẽ hẹn gặp lại mọi người trong một dịp gần nhất.
Không có nhận xét nào: