Bài tậ p thự c hành LTHDT
2/21
MỤC LỤC 0. Phầ Phầ n 0: Struct ............................................ ................................................................... .............................................. .............................................. ............................... ........ 4 0.1. Quả Quả n lý họ học sinh ............................................. .................................................................... .............................................. .......................................... ................... 4 0.1.1. Đề bài .............................................. ..................................................................... .............................................. .............................................. ........................... .... 4 ướ ng ẫn gợ i ý ............................................. 0.1.2. H ướ ng d ẫ ..................................................................... ............................................... .................................. ........... 4 0.2. Quả Quả n lý họ học sinh - lớ lớ p ........................................... ................................................................... ............................................... .................................. ...........4 ..................................................................... .............................................. .............................................. ........................... .... 4 0.2.1. Đề bài .............................................. ướ ng ẫn cài đặt .............................................. 0.2.2. H ướ ng d ẫ ..................................................................... .............................................. ............................... ........ 5 0.3. Quả Quả n lý họ học sinh - lớ lớ p - khố khối lớ lớ p ........................................... .................................................................. .......................................... ................... 5 0.3.1. Đề bài .............................................. ..................................................................... .............................................. .............................................. ........................... .... 5 ướ ng ẫn gợ i ý ............................................. 0.3.2. H ướ ng d ẫ ..................................................................... ............................................... .................................. ........... 5 0.4. Cấ Cấ u trúc Phân số số ............................................. .................................................................... .............................................. .......................................... ................... 6 0.4.1. Đề bài .............................................. ..................................................................... .............................................. .............................................. ........................... .... 6 ướ ng ẫn gợ i ý ............................................. 0.4.2. H ướ ng d ẫ ..................................................................... ............................................... .................................. ........... 6 1. Phầ Phầ n 1: Làm quen vớ vớ i lậ lậ p trình hướ hướ ng ng đối tượ ng ng ........................................... .................................................................. ....................... 6 đối tượ 1.1. Quả Quả n lý họ học sinh ............................................. .................................................................... .............................................. .......................................... ................... 7 ..................................................................... .............................................. .............................................. ........................... .... 7 1.1.1. Đề bài .............................................. ướ ng ẫn gợ i ý ............................................. 1.1.2. H ướ ng d ẫ ..................................................................... ............................................... .................................. ........... 7 1.2. Thiế Thiết kế kế và cài đặ t lớ lớ p Phân số số .............................................. ..................................................................... .......................................... ................... 7 1.2.1. Đề bài .............................................. ..................................................................... .............................................. .............................................. ........................... .... 7 ướ ng ẫn gợ i ý ............................................. 1.2.2. H ướ ng d ẫ ..................................................................... ............................................... .................................. ........... 7 1.3. Quả Quả n lý họ học sinh - lớ lớ p ........................................... ................................................................... ............................................... .................................. ...........8 1.3.1. Đề bài .............................................. ..................................................................... .............................................. .............................................. ........................... .... 8 ướ ng ẫn cài đặt .............................................. 1.3.2. H ướ ng d ẫ ..................................................................... .............................................. ............................... ........ 8 1.4. Quả Quả n lý họ học sinh - lớ lớ p - khố khối lớ lớ p ........................................... .................................................................. .......................................... ................... 9 1.4.1. Đề bài .............................................. ..................................................................... .............................................. .............................................. ........................... .... 9 ướ ng ẫn gợ i ý ............................................. ..................................................................... ............................................... .................................. ........... 9 1.4.2. H ướ ng d ẫ 1.5. Thiế Thiết kế kế và cài đặ t lớ lớ p mả mả ng ng 1 chiề chiều ............................................. .................................................................... .................................. ........... 9 1.5.1. Đề bài .............................................. ..................................................................... .............................................. .............................................. ........................... .... 9 2. Phầ Phầ n 2: Làm quen vớ vớ i Contructor, Destructor, Operator ................................................... ....................................................... 10 2.1. Lớ Lớ p Phân số số ............................................ ................................................................... .............................................. .............................................. ........................... 10 ..................................................................... .............................................. .............................................. ........................... 10 2.1.1. Đề bài .............................................. ướ ng ẫn gợ i ý ............................................. 2.1.2. H ướ ng d ẫ ..................................................................... ............................................... ................................ ......... 10 2.2. Lớ Lớ p mả mả ng ng mộ một chiề chiều .............................................. ...................................................................... ............................................... ................................ ......... 10 ..................................................................... .............................................. .............................................. ........................... 10 2.2.1. Đề bài .............................................. ướ ng ẫn gợ i ý ............................................. 2.2.2. H ướ ng d ẫ ..................................................................... ............................................... ................................ ......... 10 2.3. Lớ Lớ p Số Số Phứ Phứ c ........................................... .................................................................. .............................................. .............................................. ........................... 10 2.3.1. Đề bài .............................................. ..................................................................... .............................................. .............................................. ........................... 10 ướ ng ẫn gợ i ý .............................................. 2.32. H ướ ng d ẫ ...................................................................... ............................................... ................................ ......... 10 2.4. Lớ Lớ p Điểm – Đườ ng ng Thẳ Thẳ ng ng ............................................ ................................................................... .............................................. ........................... 10 2.4.1. Đề bài .............................................. ..................................................................... .............................................. .............................................. ........................... 10 ướ ng ẫn gợ i ý ............................................. 2.4.2. H ướ ng d ẫ ..................................................................... ............................................... ................................ ......... 11 2.5 Lớ Lớ p Thờ Thờ i gian - CTime........................................... ................................................................... ............................................... ................................ ......... 11 2.5.1. Đề bài: ............................................. .................................................................... .............................................. .............................................. ........................... 11 ướ ng ẫn gợ i ý:............................................ .................................................................... ............................................... ................................ ......... 11 2.5.2. H ướ ng d ẫ 2.6 Lớ Lớ p Ngày Tháng - CDate ................................................... .......................................................................... ............................................ ..................... 11 2.6.1. Đề bài: ............................................. .................................................................... .............................................. .............................................. ........................... 11 ướ ng ẫn gợ i ý:............................................ 2.6.2. H ướ ng d ẫ .................................................................... ............................................... ................................ ......... 11 2.7 Lớ Lớ p CString ............................................. .................................................................... .............................................. .............................................. ........................... 11 .................................................................... .............................................. .............................................. ........................... 11 2.7.1. Đề bài: ............................................. ướ ng ẫn gợ i ý:............................................ 2.7.2. H ướ ng d ẫ .................................................................... ............................................... ................................ ......... 11 GV: Lươ ng Trầ n Hy Hiế n
Trang 2 / 21 21
05/2008
Bài tậ p thự c hành LTHDT
3/21
2.8 Lớ p CList........................................................................................................................11 2.8.1. Đề bài: .................................................................................................................... 11 gợ i ý:.................................................................................................... 11 2.8.2. H ướ ng d ẫn 3. Phầ n 3: Làm quen vớ i kế thừ a .............................................................................................. 12 3.1. Quả n lý “Lươ ng nhân viên” .......................................................................................... 12 3.1.1. Đề bài ..................................................................................................................... 12 gợ i ý ..................................................................................................... 12 3.1.2. H ướ ng d ẫn 3.2 Quả n lý “Nông Trạ i” ...................................................................................................... 13 3.2.1 Đề bài: ..................................................................................................................... 13 gợ i ý ..................................................................................................... 13 3.2.2. H ướ ng d ẫn 3.3 Quả n lý cá nhân .............................................................................................................. 14 3.3.1 Đề bài: ..................................................................................................................... 14 gợ i ý ..................................................................................................... 14 3.3.2. H ướ ng d ẫn 3.4. Quả n lý các đối tượ ng hình học ..................................................................................... 14 3.4.1. Đề bài ..................................................................................................................... 14 gợ i ý ..................................................................................................... 14 3.4.2. H ướ ng d ẫn 3.5. Quả n lý doanh số bán hàng............................................................................................ 14 3.5.1. Đề bài ..................................................................................................................... 14 gợ i ý ..................................................................................................... 15 3.5.2. H ướ ng d ẫn 3.6 Quả n lý Khách sạ n .......................................................................................................... 15 3.6.1. Đề bài ...................................................................................................................... 15 gợ i ý ..................................................................................................... 15 3.6.2. H ướ ng d ẫn 4. Phầ n 4: Làm quen template .................................................................................................. 16 4.1 Fucntion Template .......................................................................................................... 16 4.1.1 Khái ni ệm................................................................................................................. 16 4.1.2 Nhận xét ................................................................................................................... 16 4.1.3 Bài t ậ p ..................................................................................................................... 17 4.2 Class Template ............................................................................................................... 17 4.2.1 Khái ni ệm................................................................................................................. 17 4.2.2 Ví d ụ......................................................................................................................... 18 4.2.3 Bài t ậ p ..................................................................................................................... 19 4.3 STL String (sử dụng thư viện) ........................................................................................ 19 4.4 STL Vector (sử dụng thư viện) ....................................................................................... 19 5. Phầ n 5: Bài tậ p tổng hợ p (Project) ....................................................................................... 20 5.1. Lớ p Phân số ................................................................................................................... 20 5.1.1. Đề bài ..................................................................................................................... 20 gợ i ý:.................................................................................................... 20 5.1.2. H ướ ng d ẫn 5.2. Trò chơ i Caro.................................................................................................................20 5.2.1. Đề bài ..................................................................................................................... 20 gợ i ý ..................................................................................................... 20 5.2.2. H ướ ng d ẫn 5.3. Trò chơ i Minesweeper ................................................................................................... 21 5.3.1. Đề bài ..................................................................................................................... 21 gợ i ý ..................................................................................................... 21 5.3.2. H ướ ng d ẫn 5.4. Trò chơ i Cờ tướ ng ......................................................................................................... 21 5.4.1. Đề bài ..................................................................................................................... 21 gợ i ý ..................................................................................................... 21 5.4.2. H ướ ng d ẫn 5.5. Trò chơ i TETRIS...........................................................................................................21 5.5.1. Đề bài ..................................................................................................................... 21 gợ i ý ..................................................................................................... 21 5.5.2. H ướ ng d ẫn
GV: Lươ ng Trầ n Hy Hiế n
Trang 3 / 21
05/2008
Bài tậ p thự c hành LTHDT
4/21
0. Phần 0: Struct 0.1. Qu ản lý h ọc sinh 0.1.1. Đề bài
Viết chươ ng trình nhập thông tin họ tên học sinh, điểm thi 2 môn Văn, Toán. Tính điểm trung bình, in k ết quả ra màn hình theo format sau: CHUONG TRINH MINH HOA 1 Nhap ho ten hoc sinh: Nguyen Van A Toan: 8 Van: 7 Ket qua : Ho ten Van Toan Trung binh Nguyen Van A 7.0 8.0 7.5
gợ i ý 0.1.2. H ướ ng d ẫ n Tổ chứ c cấu trúc dữ liệu đượ c lư u trữ như sau: struct HocSinh { char HoTen[30]; float Van, Toan, DTB; }; •
Viết hàm nhậ p thông tin HocSinh theo prototype sau: void Nhap(HocSinh &hs);
•
Viết hàm xuấ t thông tin HocSinh theo prototype sau: void Xuat(HocSinh hs);
•
Viết hàm tính điểm trung bình học sinh theo prototype sau: void TinhTB(HocSinh &hs);
•
Viết chươ ng trình nhậ p thông tin học sinh, tính điểm trung bình và in kết quả học sinh ra màn hình.
0.2. Qu ản lý h ọc sinh - l ớp 0.2.1. Đề bài Viết chươ ng trình nhập thông tin c ủa một lớ p học gồm N học sinh (N<=50), vớ i mỗi học sinh nh ập họ tên học sinh, điểm thi 2 môn V ăn, Toán. Tính điểm trung bình c ủa m ỗi học sinh và in k ết qu ả ra màn hình theo format sau CHUONG TRINH MINH HOA 2 Nhap thong tin hoc sinh thu 1: Ho ten hoc sinh: Nguyen Van A Toan: 8 Van: 7 Nhap thong tin hoc sinh thu 2: Ho ten hoc sinh: Nguyen Van B Toan: 8.5 Van: 7.5
GV: Lươ ng Trầ n Hy Hiế n
Trang 4 / 21
05/2008
Bài tậ p thự c hành LTHDT
5/21
KET QUA Ho ten Nguyen Van A Nguyen Van B
Van 7.0 7.5
Toan Trung binh 8.0 7.5 8.5 8.0
0.2.2. H ướ ng d ẫ n cài đặ t
Tổ chứ c cấ u trúc dữ liệu như sau: struct HocSinh { char HoTen[30]; float Van, Toan, DTB; }; struct LopHoc { char TenLop[30]; HocSinh hs[50]; int SiSo;
}; Bổ sung thêm bài tậ p “Quả n lý học sinh” các hàm sau Viết hàm nhậ p thông tin học sinh của một lớ p lớ p theo prototype sau: • void Nhap(LopHoc &l); •
Viết hàm xuấ t thông tin học sinh của một lớ p lớ p theo prototype sau: void Xuat(LopHoc l);
•
Viết hàm tính điểm trung bình học sinh một lớ p theo prototype sau: void TinhTB(LopHoc &l);
•
Viết chươ ng trình nhậ p thông tin học sinh, tính điểm trung bình và in kết quả lớ p học ra màn hình.
0.3. Qu ản lý h ọc sinh - l ớp - kh ối l ớ p 0.3.1. Đề bài
Viết chươ ng trình nhập thông tin của một khối gồm có N (N<50) lớ p học, mỗi lớ p học gồm N học sinh (N<=50), vớ i mỗi học sinh nhập họ tên học sinh, điểm thi 2 môn Văn, Toán. Tính điểm trung bình của mỗi học sinh và in kết quả ra màn hình. 0.3.2. H ướ ng d ẫ n gợ i ý
Bổ sung thêm bài tậ p “Quả n lý học sinh - lớ p” vớ i cấ u trúc Khoi và các hàm sau: struct Khoi { char TenKhoi[30]; LopHoc lh[50]; int SiSo;
} •
Viết hàm nhậ p thông tin học sinh của một khối theo prototype sau: void Nhap(Khoi &k);
•
Viết hàm xuấ t thông tin học sinh của một khối theo prototype sau: void Xuat(Khoi k);
•
Viết hàm tính điểm trung bình học sinh của một khối theo prototype: void TinhTB(Khoi &k);
•
Viết chươ ng trình nhậ p thông tin học sinh, tính điểm trung bình và in kết quả học sinh của một khối ra màn hình.
GV: Lươ ng Trầ n Hy Hiế n
Trang 5 / 21
05/2008
Bài tậ p thự c hành LTHDT
6/21
0.4. C ấ u trúc Phân s ố 0.4.1. Đề bài
Viết ch ươ ng trình nhập vào dãy phân số. Xuất k ết quả dãy phân số. Sau đó tiến hành tối giản các phân số và Sắp xếp tăng dần, in ra kết quả sau khi sắp xếp. 0.4.2. H ướ ng d ẫ n gợ i ý Tổ chứ c cấu trúc dữ liệu đượ c lư u trữ như sau: struct PhanSo { int TuSo, MauSo; }; •
Viết hàm nhậ p thông tin PhanSo theo prototype sau: void NhapMangPS(PhanSo af[], int n);
•
Viết hàm xuấ t thông tin PhanSo theo prototype sau: void XuatMangPS(PhanSo af[], int n);
•
Viết hàm tối giả n PhanSo theo prototype sau: void ToiGian(PhanSo &ps);
•
Viết hàm so sánh lớ n hơ n 2 phân số theo prototype như sau: bool operator > (PhanSo a, PhanSo b);
•
Viết hàm sắ p xếp mả ng PhanSo theo prototype sau: void SapXepMangPS(PhanSp af[], int n);
0.5. C ấ u trúc Đi ểm – Đo ạn Th ẳng – Tam Giác 0.5.1. Đề bài
Hãy định ngh ĩ a một cấ u trúc DIEM để biểu diễn một điểm trong hệ tọa độ Oxy (gồm 2 tọa độ thự c). Sau đó định ngh ĩ a cấ u trúc DOANTHANG để biểu diễn một đoạ n thẳ ng gồm 2 điểm đầ u mút. Kế tiếp định ngh ĩ a một cấ u trúc TAMGIAC để biểu diễn một tam giác gồm 3 điểm. Sau đó, xây dự ng các hàm sau: Hàm nhậ p một điểm Hàm xuấ t một điểm Hàm nhậ p một đườ ng thẳ ng (bằ ng cách nhậ p 2 điểm đầ u mút) Hàm nhậ p một tam giác (bằ ng cách nhậ p 3 đỉnh) Hàm tính độ dài đoạ n thẳ ng Hàm tính khoả ng cách từ một điểm đến một đoạ n thẳ ng Hàm tính diện tích tam giác Hàm tính chu vi tam giác
gợ i ý 0.5.2. H ướ ng d ẫ n
GV: Lươ ng Trầ n Hy Hiế n
Trang 6 / 21
05/2008
Bài tậ p thự c hành LTHDT
7/21
1. Phần 1: Làm quen với lập trình hướng đối tượng 1.1. Qu ản lý h ọc sinh 1.1.1. Đề bài
Viết chươ ng trình nhập thông tin họ tên học sinh, điểm thi 2 môn Văn, Toán. Tính điểm trung bình, in k ết quả ra màn hình theo format sau: CHUONG TRINH MINH HOA 1 Nhap ho ten hoc sinh: Nguyen Van A Toan: 8 Van: 7 Ket qua : Ho ten Van Toan Trung binh Nguyen Van A 7.0 8.0 7.5
1.1.2. H ướ ng d ẫ n gợ i ý
Tổ chứ c class CHocSinh class CHocSinh { protected: char HoTen[30]; float Van, Toan, DTB; public: void Nhap(); void Xuat(); void TinhTB(); }; • • • •
Viết hàm nhậ p thông tin trong class HocSinh. Viết hàm xuấ t thông tin trong class HocSinh. Viết hàm tính điểm trung bình học sinh trong class HocSinh. Viết chươ ng trình sử dụng class HocSinh để nhậ p thông tin học sinh, tính điểm trung bình và in kết quả học sinh ra màn hình.
1.2. Thi ết k ế và cài đặt l ớp Phân s ố 1.2.1. Đề bài
Thiết kế và cài đặt lớ p phân số. Viết chươ ng trình minh họa từ ng bướ c bốn phép toán c ộng, trừ , nhân, chia 2 phân s ố. 1.2.2. H ướ ng d ẫ n gợ i ý
Thiết kế và cài đặ t lớ p phân số vớ i các thành phầ n như sau: Thành phầ n thuộc tính • Tử số: số nguyên • Mẫ u số: số nguyên Thành phầ n xử lý: Nhóm khở i tạ o • o Nhậ p từ bàn phím o Xuấ t phân số ra màn hình GV: Lươ ng Trầ n Hy Hiế n
Trang 7 / 21
05/2008
Bài tậ p thự c hành LTHDT •
•
8/21
Nhóm cậ p nhậ t: o Cậ p nhậ t tử số o Cậ p nhậ t mẫ u số o Rút gọn phân số Nhóm xử lý tính toán: o Cộng 2 phân số o Trừ 2 phân số o Nhân 2 phân số o Chia 2 phân số
1.3. Qu ản lý h ọc sinh - l ớp 1.3.1. Đề bài Viết chươ ng trình nhập thông tin c ủa một lớ p học gồm N học sinh (N<=50), vớ i mỗi học sinh nh ập họ tên học sinh, điểm thi 2 môn V ăn, Toán. Tính điểm trung bình c ủa m ỗi học sinh và in k ết qu ả ra màn hình theo format sau CHUONG TRINH MINH HOA 2 Nhap thong tin hoc sinh thu 1: Ho ten hoc sinh: Nguyen Van A Toan: 8 Van: 7 Nhap thong tin hoc sinh thu 2: Ho ten hoc sinh: Nguyen Van B Toan: 8.5 Van: 7.5 KET QUA Ho ten Van Toan Trung binh Nguyen Van A 7.0 8.0 7.5 Nguyen Van B 7.5 8.5 8.0
1.3.2. H ướ ng d ẫ n cài đặ t
Bổ sung thêm bài tậ p “Quản lý học sinh” class LopHoc như sau: class LopHoc { protected: char TenLop[30]; HocSinh hs[50]; int SiSo; public: void Nhap(); void Xuat(); void TinhTB();
} Bổ sung thêm bài tậ p “Quả n lý học sinh” các hàm sau • Viết hàm nhậ p thông tin học sinh của một lớ p lớ p trong class LopHoc. • Viết hàm xuấ t thông tin học sinh của một lớ p lớ p trong class LopHoc • Viết hàm tính điểm trung bình học sinh một lớ p lớ p trong class LopHoc. GV: Lươ ng Trầ n Hy Hiế n
Trang 8 / 21
05/2008
Bài tậ p thự c hành LTHDT
9/21
Viết chươ ng trình sử dụng class LopHoc để nhậ p thông tin học sinh, tính điểm trung bình và in kết quả lớ p học ra màn hình. 1.4. Qu ản lý h ọc sinh - l ớp - kh ối l ớ p 1.4.1. Đề bài
Viết chươ ng trình nhập thông tin của một khối gồm có N (N<50) lớ p học, mỗi lớ p h ọc gồm Nh ọc sinh (N<=50), vớ i mỗi học sinh nhập h ọ tên học sinh, điểm thi 2 môn Văn, Toán. Tính điểm trung bình của mỗi học sinh và in kết quả ra màn hình. 1.4.2. H ướ ng d ẫ n gợ i ý
Bổ sung thêm bài tậ p “Quả n lý học sinh - lớ p” class Khoi và các hàm sau class Khoi { protected: char TenKhoi[30]; LopHoc lh[20]; int SiSo; public: void Nhap(); void Xuat(); void TinhTB();
} • • • •
Viết hàm nhậ p thông tin học sinh của một khối trong class Khoi Viết hàm xuấ t thông tin học sinh của một khối trong class Khoi Viết hàm tính điểm trung bình học sinh của một khối trong class Khoi Viết chươ ng trình sử dụng class Khoi để nhậ p thông tin học sinh, tính điểm trung bình và in kết quả học sinh của một khối ra màn hình.
1.5. Thi ết k ế và cài đặt l ớp m ảng 1 chi ều 1.5.1. Đề bài
Thiết kế và cài đặt lớ p mảng một chiều có n phần tử (số lượ ng phần tử đượ c cấp phát động), mỗi phần tử là một số nguyên. Viết chươ ng trình minh họa các thao tác cơ bả n trong mả ng: • Nhậ p mả ng • Phát sinh mả ng • Đọc từ file • Xuấ t mả ng Ghi ra file • Tìm kiếm 01 phầ n tử trong mả ng: • o Tìm tuầ n tự o Tìm nhị phân • Sắ p xếp các phầ n tử trong mả ng theo 01 thứ tự tă ng giả m: o Sắ p xếp đổi chỗ trự c tiếp. o Sắ p xếp chọn trự c tiếp o Sắ p xếp chèn trự c tiếp Thêm/chèn phầ n tử • Xóa phầ n tử trong mả ng • GV: Lươ ng Trầ n Hy Hiế n
Trang 9 / 21
05/2008
Bài tậ p thự c hành LTHDT • • •
10/21
Kiểm tra mả ng con Nối mả ng Tính toán : o Tổng các phầ n tử o Tổng các phầ n tử chẵ n o Tổng các phầ n tử lẻ o Tổng các phầ n tử nguyên tố
2. Phần 2: Làm quen với Contructor, Destructor, Operator 2.1. Lớ p Phân s ố 2.1.1. Đề bài
Bổ sung các xử lý thuộc loạ i Constructor, Destructor, Operator (+, -, *, /, ==, !=, !, >>, <<).
gợ i ý 2.1.2. H ướ ng d ẫ n 2.2. Lớ p m ảng m ột chi ều 2.2.1. Đề bài
Bổ sung các xử lý thuộc loạ i Constructor, Destructor, Constructor copy, Operator (+, -, *, /, >>, <<).
gợ i ý 2.2.2. H ướ ng d ẫ n 2.3. Lớ p S ố Ph ứ c 2.3.1. Đề bài
Xây dự ng lớ p biểu diễn khái niệm số phứ c vớ i hai thành phầ n dữ liệu thự c, ảo và các hàm thành phầ n xuất, nhập, định giá trị cho số phứ c, cộng, trừ , nhân, chia hai số phứ c. Viết chươ ng trình cho phép nhậ p vào hai số phứ c, in ra kết quả các phép toán cộng, trừ , nhân, chia hai số phứ c kể trên (có sử dụng toán tử +, -, *, /, ==, !=, !, >>, <<).
gợ i ý 2.32. H ướ ng d ẫ n
Ký hiệu (a, b) = a + b*i thì ta có các phép toán sau: • • •
(a1, b1) ± (a2, b2) = (a1 ± a2, b1 ± b2) (a,b) * (c,d) = (a*c-b*d,a*d+b*c)
(a, b) a * c + b * d b * c - a * d =( , ) (c, d) c * c + d * d c * c +d * d
2.4. Lớ p Đi ểm – Đườ ng Th ẳng 2.4.1. Đề bài
Xây dự ng lớ p biểu diễn khái niệm Điểm vớ i hai thành phầ n dữ liệu tung độ, hoành độ và các hàm thành phầ n xuất, nhập. GV: Lươ ng Trầ n Hy Hiế n
Trang 10 / 21
05/2008
Bài tậ p thự c hành LTHDT
11/21
Viết các hàm thành phầ n cho phép thay đổi nội dung của điểm, lấ y hoành độ, tung độ, tịnh tiến, nhậ p, xuấ t một điểm. Xây dự ng lớ p biểu diễn khái niệm Đườ ng Thẳng vớ i thành phầ n dữ liệu Điểm và các hàm thành phầ n xuất, nhập, tính độ dài, tịnh tiến. Viết chươ ng trình cho phép nhậ p vào hai điểm, đườ ng thẳ ng, in ra kết quả các phép toán thự c hiện đượ c.
gợ i ý 2.4.2. H ướ ng d ẫ n 2.5 Lớ p Th ời gian - CTime 2.5.1. Đề bài:
Viết định ngh ĩ a lớ p biểu diễn khái niệm thờ i gian vớ i các thành phầ n dữ liệu giờ , phút, giây vớ i các thao tác thích hợ p: Các phép toán +, - (thêm một số giây), - (phép trừ 2 CTime), ++, -(thêm/bớ t 1 giây), <<, >> (nhậ p/xuấ t dữ liệu dạ ng CTime). Áp dụng tạ o đồng hồ thờ i gian.
gợ i ý: 2.5.2. H ướ ng d ẫ n 2.6 Lớ p Ngày Tháng - CDate 2.6.1. Đề bài:
Viết định ngh ĩ a lớ p biểu diễn khái niệm vớ i các thành phầ n dữ liệu ngày, tháng, n ăm vớ i các phép toán +, - (cộng/trừ thêm 1 số ngày), ++, -- (thêm/bớ t 1 ngày), - (phép trừ giữ a 2 CDate tính bằ ng ngày), <<, >>. Áp dụng cho bài toán tính lãi ngân hàng.
gợ i ý: 2.6.2. H ướ ng d ẫ n 2.7 Lớ p CString 2.7.1. Đề bài:
Viết định ngh ĩ a lớ p biểu diễn khái niệm chuỗi ký tự vớ i các phươ ng thứ c thiết lậ p, hủy bỏ, các hàm thành phầ n tính chiều dài chuỗi, nối 2 chuỗi, đả o chuỗi, nhậ p xuấ t chuỗi; các phép toán +, gán =, so sánh 2 chuỗi ==. 2.7.2. H ướ ng d ẫ n gợ i ý:
2.8 Lớ p CList 2.8.1. Đề bài:
Viết định ngh ĩ a lớ p biểu diễn khái niệm danh sách liên kết đơ n các số nguyên vớ i các phươ ng thứ c thiết lậ p và hủy bỏ, các hàm thành phầ n xuấ t, nhậ p, thêm đầ u, thêm cuối. 2.8.2. H ướ ng d ẫ n gợ i ý:
GV: Lươ ng Trầ n Hy Hiế n
Trang 11 / 21
05/2008
Bài tậ p thự c hành LTHDT
12/21
3. Phần 3: Làm quen với kế thừa 3.1. Qu ản lý “Lươ ng nhân viên” 3.1.1. Đề bài
Một công ty cầ n tin học hóa công việc tính tiền thưở ng trong nă m cho nhân viên trong toàn công ty. Nội dung yêu cầ u như sau: Cầ n lư u danh sách các nhân viên (tối đa 200 nhân viên), trong đó mỗi nhân viên có ít nhấ t các thông tin: o Mã số nhân viên o Họ tên o Mứ c lươ ng o Loạ i nhân viên: nhân viên vă n phòng, nhân viên bán hàng, nhân viên sả n xuấ t. Tiền thưở ng cho mỗi nhân viên trong công ty đượ c tính theo quy tắ c sau: Đối vớ i nhân viên vă n phòng: • Nếu thờ i gian công tác < 6 tháng thì o Tiền thưở ng = 100000 Nếu thờ i gian công tác ≥ 6 • o Tiền thưở ng = 200000 + Mứ c lươ ng *10% * thờ i gian công tác/6 Trong đó thờ i gian công tác (đượ c tính theo đơ n vị tháng) là số tháng mà nhân viên làm việc tạ i công ty. Đối vớ i nhân viên bán hàng Tiền thưở ng = 150000 * hệ số thưở ng • Mỗi nhân viên bán hàng có một hệ số thưở ng riêng. Đối vớ i nhân viên sả n xuấ t. Tiền thưở ng = 20000 * tổng số sả n phẩ m tính từ đầ u nă m. • Vớ i nhữ ng mô tả trên, yêu cầ u: a) Khai báo các lớ p dữ liệu cầ n cho bài toán, biểu diễn cây kế thừ a (nếu có). b) Trong mỗi lớ p ở câu a), a. Khai báo và cài đặ t phươ ng phứ c tính tiền thưở ng cho mỗi nhân viên. b. Khai báo và cài đặ t phươ ng thứ c hiển thị thông tin của mỗi nhân viên c) Cài đặ t một hàm hiển thị danh sách nhân viên vớ i prototype như sau: void HienThi(NHANVIEN *pnv[], int n) ;
Trong đó: là một mả ng các con trỏ mà mỗi phầ n tử lư u địa chỉ của một đối tượ ng thuộc 1 trong 3 loạ i nhân viên kể trên. n là tổng số nhân viên. d) Tìm và xuấ t thông tin của nhân viên có lươ ng cao nhấ t công ty. e) Tính tổng lươ ng tấ t cả các nhân viên của công ty.
pnv
gợ i ý 3.1.2. H ướ ng d ẫ n
GV: Lươ ng Trầ n Hy Hiế n
Trang 12 / 21
05/2008
Bài tậ p thự c hành LTHDT
13/21
3.2 Qu ản lý “Nông Tr ại” 3.2.1 Đề bài:
Một nông trạ i chă n nuôi có 3 loạ i gia súc: bò, cừ u, và dê. Mỗi loạ i gia súc đều có thể sinh con, cho sữ a và phát ra tiếng kêu riêng của chúng. Khi đói, các gia súc sẽ phát ra tiếng kêu để đòi ă n. Áp dụng các k ỹ thuậ t hướ ng đối tượ ng, xây dự ng chươ ng trình cho phép ngườ i chủ nông trạ i thự c hiện các chứ c nă ng sau: a. Nhậ p vào số lượ ng gia súc ban đầ u ở mỗi loạ i (bàn phím hoặ c từ file). Nếu là file, định dạ ng file như sau: Tên file: “input.txt” Nội dung file: L1 T1 G1 L2 T2 G2 L3 T3 G3 … … … Ln Tn Gn Trong đó mỗi dòng là thông tin của một loạ i gia súc cụ thể. L: Loài (0: bò, 1: cừ u, 2: dê) T: Tuổi ( >= 1) G: Giớ i tính (0: cái, 1: đự c) Ví dụ tậ p tin “input.txt” có nội dung sau: 1 2 1 Cừ u, 2 tuổi, con đự c 0 3 0 Bò, 3 tuổi, con cái 3 2 0 Dê, 2 tuổi, con cái b. Một hôm ngườ i chủ nông trạ i đi vắ ng, tấ t cả gia súc trong nông trạ i đều đói. Hãy cho biết nhữ ng tiếng kêu nghe đượ c trong nông trạ i. c. Chươ ng trình sẽ đư a ra thống kê xem trong nông trạ i có bao nhiêu gia súc ở mỗi loạ i và tổng số lít sữ a mà tấ t cả các gia súc của ông đã cho từ lúc mua cho đến hiện tạ i sau một lứ a sinh. Biết rằ ng: - Tấ t cả gia súc cái ở mỗi loạ i đều sinh con. (Cứ mỗi nă m sinh 1 lầ n, con mớ i sinh ra có tuổi bằ ng 0). - Số lượ ng sinh của mỗi gia súc là ngẫ u nhiên trong giớ i hạ n sau: • Bò: 1 – 2 con • Cừ u: 1 – 3 con • Dê: 1 – 4 con - Tấ t cả gia súc cái ở mỗi loạ i đều cho sữ a. - Số lít sữ a mỗi gia súc cho là ngẫ u nhiên trong giớ i hạ n sau: • Bò: 0 – 20 lít. • Cừ u: 0 – 5 lít. • Dê: 0 – 10 lít. - Độ tuổi sinh con và cho sữ a của mỗi loạ i như sau: Bò: 2 tuổi • Cừ u: 3 tuổi • Dê: 4 tuổi •
gợ i ý 3.2.2. H ướ ng d ẫ n GV: Lươ ng Trầ n Hy Hiế n
Trang 13 / 21
05/2008
Bài tậ p thự c hành LTHDT
14/21
3.3 Qu ản lý cá nhân 3.3.1 Đề bài:
Xây dự ng các loạ i đối tượ ng sinh viên, học sinh, công nhân, nghệ s ĩ , ca s ĩ . Viết chươ ng trình cho phép nhậ p vào một trong các loạ i đối tượ ng kể trên. In thông tin đối tượ ng đó. 3.3.2. H ướ ng d ẫ n gợ i ý
3.4. Qu ản lý các đối t ượ ng hình h ọc 3.4.1. Đề bài
Xây dự ng (vẽ) cây kế thừ a biểu diễn các lớ p Hình chữ nhậ t, ellipse, hình tròn, hình vuông, hình trụ, hình cầ u. Tính diện tích mỗi hình.
gợ i ý 3.4.2. H ướ ng d ẫ n 3.5. Qu ản lý doanh s ố bán hàng 3.5.1. Đề bài
Công ty MC quả n lý việc mua hàng của 3 loạ i khách hàng: - Loạ i A: Khách hàng bình thườ ng (gồm x khách hàng): Số tiền khách hàng trả = Số lượ ng hàng * đơ n giá hàng + Thuế VAT (10%) - Loạ i B: Khách hàng thân thiết (gồm y khách hàng): Phầ n tră m khuyến mãi = MAX( Số nă m thân thiết * 5%, 50%) Số tiền khách hàng trả = (Số lượ ng hàng * đơ n giá hàng ) * (100% - Phầ n tră m khuyến mãi) + Thuế VAT (10%) - Loạ i C: Khách hàng đặ c biệt (gồm z khách hàng): Số tiền khách hàng trả = (Số lượ ng hàng * đơ n giá hàng) *50% + Thuế VAT (10%) Viế t chươ ng trình thự c hiện các yêu cầ u sau:
1) (20%) Nhậ p danh sách khách hàng từ file vă n bả n XYZ.INP. 0 < x, y, z < 1000. 2) (30%) Sử dụng con trỏ hàm để tính Tổng số tiền mỗi khách hàng trong danh sách phả i trả . Xuấ t kết quả ra file XYZ.OUT dướ i định dạ ng theo quy định. 3) (50%)Thiết kế và xây dự ng các lớ p để giả i quyết bài toán tính Tổng số tiền công ty thu đượ c. Xuấ t kết quả ra file XYZ.OUT dướ i định dạ ng theo quy định. XYZ.INP
XYZ.OUT
x y z
x y z
TenKhachHangA1 SoLuongHangA1 DonGiaHangA1 ……… TenKhachHangAx SoLuongHangAx DonGiaHangAx TenKhachHangB1 SoLuongHangB1 DonGiaHangB1 SoNamThanThietB1 ………
TenKhachHangA1 SoTienPhaiTraA1 ……………… TenKhachHangAx SoTienPhaiTraAx TenKhachHangB1 SoTienPhaiTraB1 ……………… TenKhachHangBy SoTienPhaiTraBy TenKhachHangC1 SoTienPhaiTraC1
Thông tin của x khách hàng Loạ i A
Thông tin của y khách hàng Loạ i B
GV: Lươ ng Trầ n Hy Hiế n
Trang 14 / 21
05/2008
Bài tậ p thự c hành LTHDT
TenKhachHangBy SoLuongHangBy DonGiaHangBy SoNamThanThietBy TenKhachHangC1 SoLuongHangC1 DonGiaHangC1 ……… TenKhachHangCz SoLuongHangCz DonGiaHangCz
15/21
……………… TenKhachHangCz SoTienPhaiTraCz TongSoTienCongTyThuDuoc
Thông tin của z khách hàng Loạ i C
gợ i ý 3.5.2. H ướ ng d ẫ n 3.6 Qu ản lý Khách s ạn 3.6.1. Đề bài
Khách sạ n NGỌC HÂN có 3 loạ i phòng vớ i doanh thu phòng của tháng đượ c tính như sau: - Loạ i Deluxe: doanh thu phòng = (Số đêm * 750000 + Phí dịch vụ) * (100% + Phí phục vụ) - Loạ i Premium: doanh thu phòng = (Số đêm * 500000 + Phí dịch vụ) * 105% - Loạ i Business: doanh thu phòng = Số đêm * 300000 Viết chươ ng trình thự c hiện các yêu cầ u sau: 1) (20%) Nhậ p danh sách các phòng đượ c sử dụng từ tậ p tin vă n bả n SOFITEL.INP. d : số phòng loạ i Deluxe, p: số phòng loạ i Premium, b: số phòng loạ i Business (0= Doanh thu tháng trướ c * 125% Xuấ t kết quả ra file NGOCHAN.OUT dướ i định dạ ng theo quy định. NGOCHAN.INP
NGOCHAN.OUT
dpb MaPhongD1 SoDemD1 PhiDichVuD1 PhiPhucVuD1 … MaPhongDd SoDemDd PhiDichVuDd PhiPhucVuDd MaPhongP1 SoDemP1 PhiDichVuP1 … MaPhongPp SoDemPp PhiDichVuPp MaPhongB1 SoDemB1 … MaPhongBb SoDemBb
dpb TongDoanhThuLoaiPhongDeluxe TongDoanhThuLoaiPhongPremium TongDoanhThuLoaiPhongBusiness SoPhongVuotTroi MaPhongVuotTroi1 MaPhongVuotTroi2 MaPhongVuotTroi3 …
Thông tin của d phòng Loạ i Deluxe
Thông tin của p phòng Loạ i Premium
Thông tin của b phòng Loạ i Business
gợ i ý 3.6.2. H ướ ng d ẫ n GV: Lươ ng Trầ n Hy Hiế n
Trang 15 / 21
05/2008
Bài tậ p thự c hành LTHDT
16/21
4. Phần 4: Làm quen template 4.1 Fucntion Template 4.1.1 Khái niệ m
Xét ví dụ hàm tìm Min giữ a 2 số cho nhiều kiểu dữ liệu khác nhau: // min for ints. int min(int a, int b) { return (a < b) ? a : b; } // min for floats. float min(float a, float b) { return (a < b) ? a : b; } // min for chars. char min(char a, char b) { return (a < b) ? a : b; } Vớ i mỗi kiểu dữ liệu khác nhau (int, float, char…) chúng ta phả i viết hàm tìm Min tươ ng ứ ng vớ i kiểu dữ liệu đó (overload). Điều này gây ra sự dư thừ a không đáng có trong chươ ng trình. Và hơ n nữ a các hàm trên vẫ n không đủ dùng trong mọi trườ ng hợ p. => Dùng Function Template.
Function Template là hàm tổng quát cho phép dùng nhiều kiểu dữ liệu khác nhau cho tham số và kết quả trả về của nó. Chúng ta không phả i viết nhiều hàm cho từ ng kiểu dữ liệu cụ thể. template < template-argument-list > declaration
Tấ t cả các function template đượ c định ngh ĩ a bắ t đầ u vớ i từ khóa template theo sau là một danh sách các tham số hình thứ c vây quanh trong cặ p dấ u (< và >). Mỗi tham số hình thứ c đượ c đặ t trướ c bở i từ khóa class và đượ c phân cách bở i dấ u phẩ y: template hoặ c template Lúc này các hàm tìm Min có thể đượ c thay thế bở i một hàm Function Template duy nhấ t: template T min(T a, T b) { return (a < b) ? a : b; } 4.1.2 Nhậ n xét
Dùng function template chúng ta chỉ cầ n viết một hàm duy nhấ t cho nhiều kiểu dữ liệu khác nhau thay vì phả i viết nhiều hàm cho từ ng kiểu dữ liệu cụ thể. Dùng function template giúp giả m đượ c kích thướ c và tă ng tính linh động của chươ ng trình.
GV: Lươ ng Trầ n Hy Hiế n
Trang 16 / 21
05/2008
Bài tậ p thự c hành LTHDT
17/21
4.1.3 Bài tậ p
Áp dụng function template để giả i các bài tậ p sau: o Tìm min, max giữ a 2 phầ n tử kiểu T (int, float, PhanSo, …). o Tìm phầ n tử dươ ng lớ n nhấ t trong mả ng kiểu T (int, float, PhanSo, …). o Sắ p xếp tă ng dầ n mả ng kiểu T (int, float, PhanSo, ...). o Sắ p xếp mả ng giả m dầ n theo trị tuyệt đối kiểu T (int, float, PhanSo,…) o Tính tổng các phầ n tử kiểu T trong mả ng. 4.2 Class Template 4.2.1 Khái niệ m
Xét ví dụ xây dự ng lớ p mả ng cho nhiều kiểu dữ liệu khác nhau. // Mang so nguyen. class IntegerArray { private: int *m_pElement; // Viet cai dat cho lop. }; // Mang so thuc. class FloatArray { private: float *m_pElement; // Viet cai dat cho lop. }; // Mang ky tu. class CharArray { private: char *m_pElement; // Viet cai dat cho lop. }; Vớ i mỗi kiểu dữ liệu khác nhau (int, float, char…) chúng ta phả i xây dự ng lớ p mả ng tươ ng ứ ng cho kiểu dữ liệu đó. Điều này gây ra sự dư thừ a không đáng có trong chươ ng trình. Và hơ n nữ a các lớ p trên vẫ n không đủ dùng trong mọi trườ ng hợ p. => Dùng Class Template.
Class Template là lớ p đối tượ ng tổng quát cho phép dùng nhiều kiểu dữ liệu khác nhau cho các thuộc tính và phươ ng thứ c của lớ p. Tươ ng tự như Function Template, Class Template đượ c khai báo bắ t đầ u bằ ng từ khóa “template”. template class SampleClass { // Viet cai dat. }; GV: Lươ ng Trầ n Hy Hiế n
Trang 17 / 21
05/2008
Bài tậ p thự c hành LTHDT
18/21
4.2.2 Ví d ụ
Để hiểu rõ hơ n về Class Template, chúng ta xét ví dụ xây dự ng lớ p mả ng cho nhiều kiểu dữ liệu khác nhau Array. Bướ c 1: vào VC++, tạ o project dạ ng
Console Application.
Bướ c 2: thêm vào project file Array.h, viết khai báo và cài đặ t cho lớ p Array
như sau: template class Array { private: T *m_pElement; int m_iLength; public: Array(int iLength) { if (iLength < 0) { cout << "Loi: chieu dai mang la so am."; return; } m_iLength = iLength; m_pElement = new T[m_iLength]; } Array(const Array &obj) { m_iLength = obj.m_iLength; m_pElement = new T[m_iLength]; // Sao chep vung nho da cap phat cho m_pElement cua obj. for (int i = 0; i < m_iLength; i++) m_pElement[i] = obj.m_pElement[i]; } int GetLength() { return m_iLength; } T & ElementAt(int iIndex) { if (iIndex < 0 || iIndex >= m_iLength) cout << "Loi: truy xuat phan tu ngoai pham vi mang."; return m_pElement[iIndex]; } T & operator [](int iIndex) GV: Lươ ng Trầ n Hy Hiế n
Trang 18 / 21
05/2008
Bài tậ p thự c hành LTHDT
19/21
{ return ElementAt(iIndex); } Array & operator =(const Array &obj) { m_iLength = obj.m_iLength; m_pElement = new T[m_iLength]; // Sao chep vung nho da cap phat cho m_pElement cua obj. for (int i = 0; i < m_iLength; i++) m_pElement[i] = obj.m_pElement[i]; return *this; } virtual ~Array() { if (m_pElement != NULL) delete []m_pElement; } }; Bướ c 4: thêm vào project file main.cpp và viết đoạ n chươ ng trình sử dụng lớ p
Array vừ a tao như sau: #include "Array.h" void main() { Array
a(3);
a[0] = 0; a[1] = 1; a[2] = 2; for (int i = 0; i < a.GetLength(); i++) cout << a[i] << endl; } Bướ c 5: biên dịch và chạ y thử chươ ng trình.
4.2.3 Bài tậ p
Xây dự ng Template cho lớ p mảng.
4.3 STL String (s ử d ụn g th ư vi ện) 4.4 STL Vector (s ử d ụn g th ư vi ện)
GV: Lươ ng Trầ n Hy Hiế n
Trang 19 / 21
05/2008
Bài tậ p thự c hành LTHDT
20/21
5. Phần 5: Bài tập tổng hợp (Project) Sinh viên có thể sử dụng các ngôn ngữ lậ p trình hướ ng đối tượ ng để cài đặ t ứ ng dụng. Các ngôn ngữ cho phép: C++, C#, Java. 5.1. Lớ p Phân s ố 5.1.1. Đề bài
Xây dự ng chươ ng trình minh họa các phép toán cộng, trừ , nhân, chia trên phân số
gợ i ý: 5.1.2. H ướ ng d ẫ n 5.2. Trò ch ơ i Caro 5.2.1. Đề bài
Viết chươ ng trình trò chơ i Caro cho phép 2 ngườ i cùng chơ i, máy tính đóng vai trò trọng tài
gợ i ý 5.2.2. H ướ ng d ẫ n GV: Lươ ng Trầ n Hy Hiế n
Trang 20 / 21
05/2008
Bài tậ p thự c hành LTHDT
21/21
5.3. Trò ch ơ i Minesweeper 5.3.1. Đề bài
Viết chươ ng trình trò chơ i gỡ mìn tươ ng tự trò chơ i gỡ mìn trong Windows
gợ i ý 5.3.2. H ướ ng d ẫ n 5.4. Trò ch ơ i C ờ t ướ ng 5.4.1. Đề bài
Viết chươ ng trình trò chơ i Cờ tướ ng cho phép 2 ngườ i cùng chơ i, máy tính đóng vai trò trọng tài 5.4.2. H ướ ng d ẫ n gợ i ý
5.5. Trò ch ơ i TETRIS 5.5.1. Đề bài
Viết chươ ng trình trò chơ i TETRIS cho phép ngườ i chơ i chọn nhiều mứ c độ khác nhau
gợ i ý 5.5.2. H ướ ng d ẫ n
GV: Lươ ng Trầ n Hy Hiế n
Trang 21 / 21
05/2008