Trong series lập trình Hướng Đối Tượng, chúng ta đã tìm hiểu nhiều về lập trình hướng đối tượng. Trong bài viết này, chúng ta sẽ thực hành một số bài tập lập trình hướng đối tượng tổng hợp để củng cố kiến thức đã học.
Bài tập lập trình hướng đối tượng cơ bản
Bài tập xây dựng lớp Phân số
Đề bài: Xây dựng lớp Phân số với các thuộc tính và phương thức sau:
- Thuộc tính: tử số (tuso), mẫu số (mauso).
- Phương thức:
- Hàm khởi tạo không tham số, hàm hủy.
- Hàm nhập và xuất.
- Các phép toán cộng (Cong()), trừ (Tru()), nhân (Nhan()), chia (Chia()).
Tính tổng, hiệu, tích, thương của hai phân số (obj1 và obj2) và in kết quả ra màn hình.
Code xây dựng lớp Phân số:
#include using namespace std; class Phanso { private: int tuso, mauso; public: Phanso() { tuso = 0; mauso = 1; } ~Phanso() { tuso = 0; mauso = 1; } void set() { cout "Nhập Tử Số: "; cin >> this->tuso; cout "Nhập Mẫu Số: "; 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:
1 2 3 4
Output:
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) với các thuộc tính và phương thức sau:
- Thuộc tính: họ tên (hoten - chuỗi ký tự), tuổi (số nguyên), môn thi đấu (monthidau - chuỗi ký tự), cân nặng (cannang - số thực), chiều cao (chieucao - số thực).
- Phương thức:
- Hàm khởi tạo không tham số.
- Hàm khởi tạo 5 tham số.
- Hàm hủy.
- 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 được coi là lớn hơn nếu chiều cao lớn hơn, nếu 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à một đối tượng của lớp Vandongvien (sử dụng hàm khởi tạo 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 của chiều cao, sau đó hiển thị danh sách đã sắp xếp ra màn hình.
Lời Giải:
#include 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 "Nhập Họ Tên: "; fflush(stdin); getline(is, obj.hoten); cout "Nhập Môn Thi Đấu: "; fflush(stdin); getline(is, obj.monthidau); cout "Nhập Tuổi: "; is >> obj.tuoi; cout "Nhập Cân Nặng: "; is >> obj.cannang; cout "Nhập Chiều Cao: "; is >> obj.chieucao; return is; } friend ostream& operator(ostream& os, VanDongVien obj) { cout "Họ Tên: " obj.hoten endl; cout "Môn Thi Đấu: " obj.monthidau endl; cout "Tuổi: " obj.tuoi endl; cout "Cân Nặng: " obj.cannang endl; cout "Chiều 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", "Bóng Đá", 20, 178, 70.5); cout p endl; cout "Nhập Số Lượng: "; 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:
3 Nguyen Van B Cau Long 20 80 190 Nguyen Van C Bóng Chuyền 21 78 188 Nguyen Van D Bơi Lội 19 81 188
Output:
Họ Tên: Nguyen Van A Môn Thi Đấu: Bóng Đá Tuổi: 20 Cân Nặng: 178 Chiều cao: 70.5 Họ Tên: Nguyen Van B Môn Thi Đấu: Cầu Lông Tuổi: 20 Cân Nặng: 80 Chiều cao: 190 Họ Tên: Nguyen Van C Môn Thi Đấu: Bóng Chuyền Tuổi: 21 Cân Nặng: 78 Chiều cao: 188 Họ Tên: Nguyen Van D Môn Thi Đấu: Bơi Lội Tuổi: 19 Cân Nặng: 81 Chiều cao: 188 After Sort: Họ Tên: Nguyen Van C Môn Thi Đấu: Bóng Chuyền Tuổi: 21 Cân Nặng: 78 Chiều cao: 188 Họ Tên: Nguyen Van D Môn Thi Đấu: Bơi Lội Tuổi: 19 Cân Nặng: 81 Chiều cao: 188 Họ Tên: Nguyen Van B Môn Thi Đấu: Cầu Lông Tuổi: 20 Cân Nặng: 80 Chiều cao: 190