bt laptrinhc

21

Upload: thu-khuc

Post on 03-Aug-2015

76 views

Category:

Documents


2 download

DESCRIPTION

Lap trinh C

TRANSCRIPT

Page 1: BT LaptrinhC

�������������������������� ������ ����������������������������� ���!"��!#$%&�� "��'(��)$�*'"+�!*,'�+�-'�.�!��&�/�!�&�'(��011234456107085927:;97<=�

Page 2: BT LaptrinhC

Bài tập thực hành LTHDT 2/21

GV: Lương Trần Hy Hiến Trang 2/21 05/2008

MỤC LỤC

0. Phần 0: Struct ......................................................................................................................... 4

0.1. Quản lý học sinh .............................................................................................................. 4 0.1.1. Đề bài ....................................................................................................................... 4 0.1.2. Hướng dẫn gợi ý ....................................................................................................... 4

0.2. Quản lý học sinh - lớp ..................................................................................................... 4 0.2.1. Đề bài ....................................................................................................................... 4 0.2.2. Hướng dẫn cài đặt .................................................................................................... 5

0.3. Quản lý học sinh - lớp - khối lớp ..................................................................................... 5 0.3.1. Đề bài ....................................................................................................................... 5 0.3.2. Hướng dẫn gợi ý ....................................................................................................... 5

0.4. Cấu trúc Phân số .............................................................................................................. 6 0.4.1. Đề bài ....................................................................................................................... 6 0.4.2. Hướng dẫn gợi ý ....................................................................................................... 6

1. Phần 1: Làm quen với lập trình hướng đối tượng .................................................................. 6 1.1. Quản lý học sinh .............................................................................................................. 7

1.1.1. Đề bài ....................................................................................................................... 7 1.1.2. Hướng dẫn gợi ý ....................................................................................................... 7

1.2. Thiết kế và cài đặt lớp Phân số ........................................................................................ 7 1.2.1. Đề bài ....................................................................................................................... 7 1.2.2. Hướng dẫn gợi ý ....................................................................................................... 7

1.3. Quản lý học sinh - lớp ..................................................................................................... 8 1.3.1. Đề bài ....................................................................................................................... 8 1.3.2. Hướng dẫn cài đặt .................................................................................................... 8

1.4. Quản lý học sinh - lớp - khối lớp ..................................................................................... 9

1.4.1. Đề bài ....................................................................................................................... 9 1.4.2. Hướng dẫn gợi ý ....................................................................................................... 9

1.5. Thiết kế và cài đặt lớp mảng 1 chiều ............................................................................... 9

1.5.1. Đề bài ....................................................................................................................... 9 2. Phần 2: Làm quen với Contructor, Destructor, Operator ..................................................... 10

2.1. Lớp Phân số ................................................................................................................... 10 2.1.1. Đề bài ..................................................................................................................... 10 2.1.2. Hướng dẫn gợi ý ..................................................................................................... 10

2.2. Lớp mảng một chiều ...................................................................................................... 10 2.2.1. Đề bài ..................................................................................................................... 10 2.2.2. Hướng dẫn gợi ý ..................................................................................................... 10

2.3. Lớp Số Phức .................................................................................................................. 10 2.3.1. Đề bài ..................................................................................................................... 10 2.32. Hướng dẫn gợi ý ...................................................................................................... 10

2.4. Lớp Điểm – Đường Thẳng ............................................................................................ 10 2.4.1. Đề bài ..................................................................................................................... 10 2.4.2. Hướng dẫn gợi ý ..................................................................................................... 11

2.5 Lớp Thời gian - CTime ................................................................................................... 11 2.5.1. Đề bài: .................................................................................................................... 11 2.5.2. Hướng dẫn gợi ý: .................................................................................................... 11

2.6 Lớp Ngày Tháng - CDate ............................................................................................... 11 2.6.1. Đề bài: .................................................................................................................... 11 2.6.2. Hướng dẫn gợi ý: .................................................................................................... 11

2.7 Lớp CString .................................................................................................................... 11 2.7.1. Đề bài: .................................................................................................................... 11 2.7.2. Hướng dẫn gợi ý: .................................................................................................... 11

Page 3: BT LaptrinhC

Bài tập thực hành LTHDT 3/21

GV: Lương Trần Hy Hiến Trang 3/21 05/2008

2.8 Lớp CList ........................................................................................................................ 11 2.8.1. Đề bài: .................................................................................................................... 11 2.8.2. Hướng dẫn gợi ý: .................................................................................................... 11

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 3.1.2. Hướng dẫn gợi ý ..................................................................................................... 12

3.2 Quản lý “Nông Trại” ...................................................................................................... 13 3.2.1 Đề bài: ..................................................................................................................... 13 3.2.2. Hướng dẫn gợi ý ..................................................................................................... 13

3.3 Quản lý cá nhân .............................................................................................................. 14 3.3.1 Đề bài: ..................................................................................................................... 14 3.3.2. Hướng dẫn gợi ý ..................................................................................................... 14

3.4. Quản lý các đối tượng hình học ..................................................................................... 14 3.4.1. Đề bài ..................................................................................................................... 14 3.4.2. Hướng dẫn gợi ý ..................................................................................................... 14

3.5. Quản lý doanh số bán hàng............................................................................................ 14 3.5.1. Đề bài ..................................................................................................................... 14 3.5.2. Hướng dẫn gợi ý ..................................................................................................... 15

3.6 Quản lý Khách sạn .......................................................................................................... 15 3.6.1.Đề bài ...................................................................................................................... 15 3.6.2. Hướng dẫn gợi ý ..................................................................................................... 15

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 5.1.2. Hướng dẫn gợi ý: .................................................................................................... 20

5.2. Trò chơi Caro ................................................................................................................. 20 5.2.1. Đề bài ..................................................................................................................... 20 5.2.2. Hướng dẫn gợi ý ..................................................................................................... 20

5.3. Trò chơi Minesweeper ................................................................................................... 21 5.3.1. Đề bài ..................................................................................................................... 21 5.3.2. Hướng dẫn gợi ý ..................................................................................................... 21

5.4. Trò chơi Cờ tướng ......................................................................................................... 21 5.4.1. Đề bài ..................................................................................................................... 21 5.4.2. Hướng dẫn gợi ý ..................................................................................................... 21

5.5. Trò chơi TETRIS ........................................................................................................... 21 5.5.1. Đề bài ..................................................................................................................... 21 5.5.2. Hướng dẫn gợi ý ..................................................................................................... 21

Page 4: BT LaptrinhC

Bài tập thực hành LTHDT 4/21

GV: Lương Trần Hy Hiến Trang 4/21 05/2008

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

0.1.2. Hướng dẫn gợi ý 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

Page 5: BT LaptrinhC

Bài tập thực hành LTHDT 5/21

GV: Lương Trần Hy Hiến Trang 5/21 05/2008

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

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.

Page 6: BT LaptrinhC

Bài tập thực hành LTHDT 6/21

GV: Lương Trần Hy Hiến Trang 6/21 05/2008

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

0.5.2. Hướng dẫn gợi ý

Page 7: BT LaptrinhC

Bài tập thực hành LTHDT 7/21

GV: Lương Trần Hy Hiến Trang 7/21 05/2008

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

Page 8: BT LaptrinhC

Bài tập thực hành LTHDT 8/21

GV: Lương Trần Hy Hiến Trang 8/21 05/2008

• 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.

Page 9: BT LaptrinhC

Bài tập thực hành LTHDT 9/21

GV: Lương Trần Hy Hiến Trang 9/21 05/2008

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

Page 10: BT LaptrinhC

Bài tập thực hành LTHDT 10/21

GV: Lương Trần Hy Hiến Trang 10/21 05/2008

• 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 (+, -, *, /, ==, !=, !, >>, <<).

2.1.2. Hướng dẫn gợi ý

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 (+, -, *, /, >>, <<).

2.2.2. Hướng dẫn gợi ý

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ử +, -, *, /, ==, !=, !, >>, <<).

2.32. Hướng dẫn gợi ý 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)

• )d*d c*cd*a - c*b

,d*d + c*cd*b+c*a

( = d)(c,b)a,(

+

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.

Page 11: BT LaptrinhC

Bài tập thực hành LTHDT 11/21

GV: Lương Trần Hy Hiến Trang 11/21 05/2008

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.

2.4.2. Hướng dẫn gợi ý

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.

2.5.2. Hướng dẫn gợi ý:

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.

2.6.2. Hướng dẫn gợi ý:

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 ý:

Page 12: BT LaptrinhC

Bài tập thực hành LTHDT 12/21

GV: Lương Trần Hy Hiến Trang 12/21 05/2008

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 đó: � pnv 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.

3.1.2. Hướng dẫn gợi ý

Page 13: BT LaptrinhC

Bài tập thực hành LTHDT 13/21

GV: Lương Trần Hy Hiến Trang 13/21 05/2008

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

3.2.2. Hướng dẫn gợi ý

Page 14: BT LaptrinhC

Bài tập thực hành LTHDT 14/21

GV: Lương Trần Hy Hiến Trang 14/21 05/2008

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.

3.4.2. Hướng dẫn gợi ý

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 TenKhachHangA1 SoLuongHangA1 DonGiaHangA1 ……… TenKhachHangAx SoLuongHangAx DonGiaHangAx TenKhachHangB1 SoLuongHangB1 DonGiaHangB1 SoNamThanThietB1 ………

x y z 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

Page 15: BT LaptrinhC

Bài tập thực hành LTHDT 15/21

GV: Lương Trần Hy Hiến Trang 15/21 05/2008

TenKhachHangBy SoLuongHangBy DonGiaHangBy SoNamThanThietBy TenKhachHangC1 SoLuongHangC1 DonGiaHangC1 ……… TenKhachHangCz SoLuongHangCz DonGiaHangCz

……………… TenKhachHangCz SoTienPhaiTraCz TongSoTienCongTyThuDuoc

3.5.2. Hướng dẫn gợi ý

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<d,p,b<1000) 2) (30%) Sử dụng con trỏ hàm để tính doanh thu từng loại phòng khách sạn thu được . Xuất

kết quả ra file NGOCHAN.OUT dưới định dạng theo quy định. 3) (50%) Thiết kế và xây dựng các lớp để liệt kê phòng có doanh thu vượt trội. Biết phòng

có doanh thu vượt trội thỏa tính chất: Doanh thu tháng >= 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 d p b MaPhongD1 SoDemD1 PhiDichVuD1 PhiPhucVuD1 … MaPhongDd SoDemDd PhiDichVuDd PhiPhucVuDd MaPhongP1 SoDemP1 PhiDichVuP1 … MaPhongPp SoDemPp PhiDichVuPp MaPhongB1 SoDemB1 … MaPhongBb SoDemBb

d p b TongDoanhThuLoaiPhongDeluxe TongDoanhThuLoaiPhongPremium TongDoanhThuLoaiPhongBusiness SoPhongVuotTroi MaPhongVuotTroi1 MaPhongVuotTroi2 MaPhongVuotTroi3 …

3.6.2. Hướng dẫn gợi ý

Thông tin của z khách hàng Loại C

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

Page 16: BT LaptrinhC

Bài tập thực hành LTHDT 16/21

GV: Lương Trần Hy Hiến Trang 16/21 05/2008

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 <class T> hoặc template <class T1, class T2,…> 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 <class T> 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.

Page 17: BT LaptrinhC

Bài tập thực hành LTHDT 17/21

GV: Lương Trần Hy Hiến Trang 17/21 05/2008

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 T> class SampleClass { // Viet cai dat. };

Page 18: BT LaptrinhC

Bài tập thực hành LTHDT 18/21

GV: Lương Trần Hy Hiến Trang 18/21 05/2008

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 T> 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)

Page 19: BT LaptrinhC

Bài tập thực hành LTHDT 19/21

GV: Lương Trần Hy Hiến Trang 19/21 05/2008

{ 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<int> 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ụng th ư viện)

4.4 STL Vector (s ử dụng th ư viện)

Page 20: BT LaptrinhC

Bài tập thực hành LTHDT 20/21

GV: Lương Trần Hy Hiến Trang 20/21 05/2008

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ố

5.1.2. Hướng dẫn gợi ý:

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

5.2.2. Hướng dẫn gợi ý

Page 21: BT LaptrinhC

Bài tập thực hành LTHDT 21/21

GV: Lương Trần Hy Hiến Trang 21/21 05/2008

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

5.3.2. Hướng dẫn gợi ý

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

5.5.2. Hướng dẫn gợi ý