Đề cương thực hành Lập trình hướng đối tượng và C++
Một nông trại có nuôi một số các con vật như sau: bò, heo, gà, dê.
Tất cả các con vật trên đều có những thông tin chung như : giống, màu lông, cân nặng,
nhưng tiếng kêu của các con vật là khác nhau.
Viết hàm main() thực hiện các công việc sau:
+ Tạo ra n con vật bất kỳ gồm cả 4 loài vật trên. Nhập thông tin cho các con vật.
+ Cho n con vật đó kêu.
Yêu cầu đặt ra : Thiết kế các lớp sao cho sau này, nếu nông trại có nuôi thêm các loài vật khác
sẽ không ảnh hưởng đến thiết kế chung của chương trình.
6 trang |
Chia sẻ: tuanhd28 | Lượt xem: 3900 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Đề cương thực hành Lập trình hướng đối tượng và C++, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Đề cương thực hành Lập trình hướng đối tượng và C++ (CT114)
Bộ môn Mạng MT và TT Trang 1
ĐỀ CƯƠNG THỰC HÀNH
Môn : Lập trình hướng đối tượng và C++ (CT114)
Số tiết: 30 tiết - Số buổi thực hành: 5 buổi
Áp dụng cho học kỳ 1, năm học 2014-2015
Chú ý: Sinh viên phải thực hiện tất cả các chủ điểm được quy định trong từng buổi thực hành,
nhưng không yêu cầu thực hiện tất cả các bài trong mỗi buổi.
1. Buổi 1 :
o Mục đích :
Sinh viên tập làm quen với phong cách lập trình hướng đối tượng.
Cài đặt 1 số lớp đơn giản. Viết các phương thức và hàm xây dựng của lớp.
Sử dụng các lớp vừa định nghĩa.
o Yêu cầu :
Bài 1 : Cài đặt lớp Diem (Điểm trong không gian 2 chiều) gồm:
Thuộc tính: x, y là số nguyên.
Các phương thức bao gồm :
+ Hàm xây dựng: Diem(int h=0, int t=0);
+ Nhập tọa độ cho điểm từ bàn phím: void NhapDiem();
+ In ra màn hình tọa độ điểm theo dạng (x,y): void InDiem();
+ Lấy ra giá trị hoành độ của điểm: int GiaTriX();
+ Lấy ra giá trị tung độ của điểm: int GiaiTriY();
+ Tính khoảng cách từ điểm đó đến 1 điểm khác: float KhoangCach(Diem m);
Viết hàm main() khai thác lớp vừa định nghĩa :
+ Tạo ra điểm A tọa độ (3,4). In tọa độ điểm A ra màn hình.
+ Tạo ra điểm B với giá trị nhập từ bàn phím. In tọa độ điểm B ra màn hình.
+ Tạo ra điểm C đối xứng với điểm B qua gốc tọa độ. In tọa độ điểm C ra màn hình.
+ Hiển thị ra màn hình khoảng cách từ điểm B đến tâm O.
+ Tính khoảng cách từ điểm C đến điểm B.
Bài 2 : Cài đặt lớp Clock gồm:
Các thuộc tính: giờ, phút, giây kiểu int.
Các hàm xây dựng:
+ Hàm xây dựng mặc nhiên: Clock();
+ Hàm xây dựng có nhiều đối số: Clock(int h, int m, int s);
Các hàm thành viên gồm :
+ Hàm nhập giá trị từ bàn phím
+ Hàm hiển thị thông tin ra màn hình dạng: giờ:phút:giây
+ Hàm làm tròn thời gian: void LamTron();
Chẳng hạn: 13:67:150 sẽ làm tròn thành 14:09:30
+ Viết hàm cộng 1 Clock với n phút nào đó: Clock Cong(int n);
Viết hàm main() khai thác lớp vừa định nghĩa:
+ Tạo 1 Clock a có giá trị là 9:15:38. In giá trị đó ra màn hình.
+ Tạo 1 Clock b có giá trị mặc định. Nhập giá trị cho đối tượng b. In ra màn hình.
+ Cộng 45 phút cho Clock b. Làm tròn b và in ra màn hình.
Bài 3 : Cài đặt lớp Date gồm :
Các thuộc tính: ngay, thang, nam.
Các hàm thành viên gồm :
+ Hàm xây dựng.
+ Hàm nhập giá trị và hàm hiện thông tin ngày ra màn hình.
+ Hàm kiểm tra xem ngày có hợp lệ hay không ? int HopLe();
Chẳng hạn: Ngày 31/6/2000 hay 29/2/1999 là không hợp lệ.
+ Hàm cộng 1 Date với 1 ngày, kết quả là ngày hôm sau: Date Cong();
Ví dụ: Gọi hàm Cong() trên đối tượng ngày 30/06/2007 là 01/07/2007
Đề cương thực hành Lập trình hướng đối tượng và C++ (CT114)
Bộ môn Mạng MT và TT Trang 2
+ Hàm cộng 1 Date với số ngày n nào đó: Date Cong(int n);
Ví dụ: ngày 15/6/2000 cộng thêm 20 ngày là ngày 05/7/2000
Viết hàm main() khai thác lớp vừa định nghĩa.
2. Buổi 2 :
o Mục đích :
Sinh viên tiếp tục thực tập cài đặt lớp, viết các hàm phức tạp hơn.
Định nghĩa hàm xây dựng, hàm xây dựng sao chép, hàm hủy.
Dùng nhiều cách khác nhau để khởi tạo đối tượng.
o Yêu cầu :
Bài 1 : Thiết kế lớp PhanSo ( Phân số ) gồm:
Các thuộc tính : tử số và mẫu số kiểu int.
Các hàm xây dựng gồm :
+ Hàm xây dựng mặc nhiên : PhanSo();
+ Hàm xây dựng gồm nhiều đối số : PhanSo(int tu , int mau);
Các hàm thành viên gồm :
+ Hàm nhập giá trị cho 1 phân số. Nếu phân số vừa nhập có mẫu số = 0 thì yêu cầu nhập lại.
+ Hàm hiển thị phân số theo dạng tu / mau hoặc -tu/mau.
Yêu cầu: nếu tử số =0 thì chỉ in ra số 0, nếu mẫu số =1 thì chỉ in ra tử số.
+ Hàm nghịch đảo bản thân phân số void NghichDao();
+ Hàm tìm ra phân số nghịch đảo của 1 phân số PhanSo GiaTriNghichDao();
+ Hàm tính giá trị thực của phân số. Chẳng hạn phân số 1/2 có giá trị là 0.5
+ Hàm so sánh giá trị phân số với phân số a . int SoSanh(PhanSo a);
Kết quả = 0: nếu 2 phân số bằng nhau,
> 0: nếu phân số đang xét lớn hơn a.
< 0: nếu phân số đang xét nhỏ hơn a.
+ Hàm cộng, trừ, nhân, chia phân số với 1 phân số a. Kết quả của hàm là 1 phân số.
Chẳng hạn: PhanSo Cong(PhanSo a);
Viết hàm main() sử dụng lớp PhanSo :
+ Tạo phân số a = 3/7 , b = 4/9 . In giá trị chúng ra màn hình.
+ Tạo 2 phân số x và y . Nhập giá trị cho x và y từ bàn phím.
+ In giá trị nghịch đảo của phân số x ra màn hình (không làm thay đổi giá trị của x).
+ Tính tổng của x + y và in kết quả ra màn hình.
+ Nhập vào 1 danh sách gồm n phân số ( n : nhập từ bàn phím ).
+ Tính tổng n phân số đó.
+ Tìm phân số lớn nhất trong danh sách phân số trên.
+ Sắp xếp danh sách phân số theo thứ tự tăng dần.
Bài 2 : Cài đặt lớp ThueBaoDT (thuê bao điện thoại) gồm các thông tin sau :
- Số điện thoại: kiểu char[11]
- Họ và tên người thuê bao: kiểu char*
- Địa chỉ của nơi đặt điện thoại: kiểu char*
- Số phút gọi nội hạt trong 1 tháng: kiểu int.
Viết các hàm :
+ Hàm xây dựng, hàm hủy, phép gán (=).
+ Hàm nhập và hiển thị thông tin của người thuê bao.
+ Hàm lấy ra giá trị dữ liệu thành viên. Chẳng hạn: char* LayHoTen();
+ Hàm tính cước điện thoại nội hạt trong tháng.
Biết rằng :
- Thuê bao mỗi tháng là: 20.000 đ.
- Cước gọi mỗi phút: 200 đ.
Viết hàm main thực hiện các công việc sau :
+ Nhập vào danh sách gồm n người thuê bao điện thoại.
+ Tính cước cho tất cả số thuê bao trên .
Đề cương thực hành Lập trình hướng đối tượng và C++ (CT114)
Bộ môn Mạng MT và TT Trang 3
+ In danh sách trên và tính tổng số tiền thu được .
+ Nhập 1 họ tên, tìm số điện thoại của người có họ tên vừa nhập trong danh sách.
+ In danh sách thuê bao theo thứ tự Alphabe của tên người thuê bao.
Gợi ý: Cần định nghĩa 1 hàm độc lập dùng để tách tên của 1 họ tên tổng quát.
Bài 3: Tách tất cả các lớp trên thành 2 phần :
+ .hpp chứa phần khai báo của lớp.
+ .cpp chứa các định nghĩa hàm của lớp.
Định nghĩa hàm main() trong 1 file riêng dùng để sử dụng các lớp đã được định nghĩa trong các
file khác. Chú ý: áp dụng cách viết tránh định nghĩa nhiều lần một lớp.
3. Buổi 3 :
o Mục đích :
Sinh viên tiếp tục thực tập cài đặt lớp và định nghĩa hàm.
Sử dụng thêm các kỹ thuật như : hàm bạn, định nghĩa các toán tử, nhập xuất file.
o Yêu cầu :
Bài 1: Cài đặt lớp Gach (gạch lót nền) như sau:
Thuộc tính:
+ mã số, màu: kiểu char*
+ số lượng viên trong 1 hộp, chiều dài, chiều ngang viên gạch (đv tính cm): kiểu int
+ giá bán 1 hộp: kiểu float
Phương thức:
+ Hàm xây dựng mặc nhiên
+ Hàm xây dựng có nhiều đối số
+ Hàm xây dựng sao chép
+ Phép gán
+ Hàm hủy
+ Tái định nghĩa toán tử nhập (>>) cho hộp gạch.
+ Tái định nghĩa toán tử xuất (<<) cho hộp gạch.
+ Hàm tính ra giá bán lẻ 1 viên gạch: float GiaBanLe();
Biết rằng: giá bán lẻ sẽ cao hơn bán nguyên hộp là 20%.
+ Hàm tính ra diện tích nền tối đa có thể lót được của hộp gạch.
Viết hàm độc lập: int SoLuong(Gach G, int X, int Y); đv tính cm
để tính số lượng hộp gạch G cần để lót được 1 diện tích sàn có chiều ngang X và chiều dài Y
với quy định chỉ lót theo đúng chiều gạch (chiều ngang gạch lót theo chiều ngang diện tích).
Viết hàm main() thực hiện các công việc sau:
+ Nhập 1 danh sách gồm n loại gạch lót nền (với n được nhập từ bàn phím).
+ In ra màn hình thông tin các loại gách cùng với diện tích lót tương ứng.
+ Đếm số lượng gạch có màu “Xám”.
+ In ra màn hình loại gạch có chi phí lót thấp nhất (giá tiền / đơn vị diện tích).
+ Tính ra số lượng hộp gạch của từng loại gạch dùng để lót 1 diện tích chiều ngang là 6 m
và chiều dài là 20m.
Bài 2 : Thiết kế lớp ThiSinh (thí sinh thi đại học) gồm các thông tin sau :
- Số báo danh: kiểu char[10] (ví dụ: TCT123456)
- Họ và tên: kiểu char* (ví dụ: Nguyen Van A)
- Mã ngành: kiểu int (ví dụ: 301)
- Khu vực: kiểu int (ví dụ: 1)
- Điểm thi: kiểu float[3] (vi dụ: 5; 6.5; 3.5)
Viết các hàm :
+ Các hàm xây dựng, hàm hủy, phép gán (=).
+ Hàm nhập thông tin cơ bản của 1 thí sinh từ bàn phím
+ Hàm hiển thị thông tin cơ bản của 1 thí sinh ra màn hình.
+ Hàm nhập điểm thi cho thí sinh. Lưu ý: chỉ cho phép nhập điểm lẻ đến 0.5
+ Tái định nghĩa phép toán xuất (>) thông tin của 1 thí sinh (dùng cho file).
Đề cương thực hành Lập trình hướng đối tượng và C++ (CT114)
Bộ môn Mạng MT và TT Trang 4
+ Hàm kiểm tra xem thí sinh có bị điểm liệt hay không: int BiDiemLiet();
Kết quả của hàm =1 nếu thí sinh có 1 điểm thi =0; kết quả =0 nếu tất cả các điểm thi >0.
+ Hàm xác định thí sinh có trúng tuyển hay không:
int TrungTuyen(float diemchuan, int nganh);
Giả sử: điểm chuẩn được tính cho khu vực 1 và các khu vực sau sẽ giảm từng bước 0.5 đ.
Thiết kế hàm main thực hiện các công việc sau :
+ Nhập vào danh sách gồm n thí sinh (với n được nhập từ bàn phím).
+ Sau khi nhập thông tin xong, nhập điểm thi của từng thí sinh dựa theo số báo danh.
+ Hiển thị ra màn hình các thí sinh bị điểm liệt.
+ Với điểm chuẩn của ngành 108 là 18 điểm, in ra màn hình danh sách trúng tuyển của ngành.
+ Tìm thí sinh là thủ khoa của kỳ thi tuyển sinh trên.
+ Lưu thông tin danh sách thí sinh trên vào 1 file (chẳng hạn TSDH.txt).
+ Lấy thông tin các thí sinh có trong file vừa lưu ở trên và hiển thị ra màn hình.
Bài 3 : Chỉnh lại lớp PhanSo, dùng cách định nghĩa toán tử để tái định nghĩa các phép toán như :
+ , - , * , / (Thay vì định nghĩa bằng các hàm như trong bài 2 buổi 3 phía trên).
Định nghĩa thêm phép gán (dấu =), phép so sánh bằng (= =), phép so sánh khác (!=)
Định nghĩa phép toán so sánh lớn hơn ( > )
Viết hàm độc lập : void SapXep(PhanSo* ds, int soluong);
dùng để sắp xếp 1 danh sách phân số theo thứ tự tăng dần.
Viết lại hàm main() với cách dùng toán tử đã định nghĩa.
Thực hiện thêm trong hàm main() :
+ Tìm phân số lớn nhất và in ra vị trí hiện tại của phân số lớn nhất đó trong danh sách.
+ Sắp xếp danh sách phân số đó theo thứ tự giảm dần.
4. Buổi 4 :
o Mục đích :
Sinh viên cài đặt lớp theo dạng : thuộc tính của 1 lớp là 1 đối tượng của lớp khác.
o Yêu cầu :
Điều chỉnh các lớp Clock và Date (đã định nghĩa phía trước) theo dạng sau:
class Clock {
int gio, phut, giay;
public:
Clock(int=0, int=0, int=0);
void In();
void Nhap();
int operator > (Clock);
Clock operator + (int sophut);
Clock operator + (Clock );
};
class Date {
int ngay, thang, nam;
public:
Date(int=0, int=0, int=0);
void In();
void Nhap();
int operator > (Date);
Date operator + (int songay);
Date operator + (Date );
};
Bài 1 : Cài đặt lớp CauThuBD (Cầu thủ bóng đá) gồm :
+ Thuộc tính:
- mã số cầu thủ: kiểu char[7]
- Họ tên, câu lạc bộ: kiểu char*
- ngày sinh: kiểu Date
- chiều cao: kiểu float
+ Các hàm xây dựng, hàm hủy, phép gán.
+ Các hàm thành viên: Nhập, In thông tin, ...
+ Hàm kiểm tra xem cầu thủ có sinh sau ngày d hay không: int Test(Date d);
+ Các hàm dùng để lấy ra giá trị các thuộc tính của lớp
Viết hàm main() thực hiện công việc như sau:
+ Nhập 1 danh sách gồm n cầu thủ tham gia giải
+ Tìm cầu thủ có chiều cao nhất giải.
Đề cương thực hành Lập trình hướng đối tượng và C++ (CT114)
Bộ môn Mạng MT và TT Trang 5
+ Đếm xem có bao nhiêu cầu thủ vẫn còn đủ tuổi để thi đấu cho đội tuyển U23.
+ Tìm câu lạc bộ nào có nhiều cầu thủ trong danh sách nhất.
Bài 2 : Cài đặt lớp ThueBaoDD (thuê bao di động trả trước) gồm :
+ Thuộc tính:
- số điện thoại: kiểu char[12]
- Số CMND thuê bao: kiểu char[10]
- Họ tên thuê bao: kiểu char*
- ngày hết hạn gọi: kiểu Date
- số tiền trong tài khoản: kiểu long
+ Các hàm xây dựng, hàm hủy, phép gán.
+ Các hàm thành viên: Nhập, In thông tin, ...
+ Hàm kiểm tra xem thuê bao còn sử dụng được không: int ConSD(Date homnay);
+ Hàm nạp tiền vào tài khoản: void NapTien(Date ngaynap, long sotien);
Biết rằng: thẻ 100, 200, 300, 500 ngàn có thời hạn gọi tương ứng là 30, 70, 115, 215 ngày.
+ Hàm tính ra ngày hết hạn nghe của tài khoản.
Biết rằng: thời hạn nghe = thời hạn gọi + 10 ngày
+ Hàm dùng để tính tiền gọi: long Goi(int sogiay);
Biết rằng: cước 6 giây đầu là 138 đ, mỗi giây tiếp theo có giá là 23 đ.
+ Các hàm dùng để lấy ra giá trị các thuộc tính của lớp
Viết hàm main() thực hiện công việc như sau:
+ Nhập thông tin cho thuê bao di động
+ Nạp tiền cho tài khoản.
+ Cho tài khoản gọi 5 cuộc gọi, tính lại số tiền trong tài khoản.
Bài 3 : Cài đặt lớp DoanThang (đoạn thẳng) gồm :
+ Thuộc tính:
d1, d2 là 2 điểm đầu mút là đối tượng thuộc lớp Diem (đã có sẵn).
+ Các hàm xây dựng:
DoanThang();
DoanThang(Diem, Diem);
DoanThang(int ax, int ay, int bx, int by);
+ Các hàm thành viên:
- Nhập tọa độ của đoạn thẳng.
- In giá trị 2 đầu mút của đoạn thẳng.
- Tính độ dài của đoạn thẳng.
- Tính góc của đoạn thẳng với trục hoành.
- Hàm tịnh tiến đoạn thẳng đi 1 dộ dời (dx, dy) nào đó.
Thiết kế hàm main thực hiện các công việc sau :
+ Tạo 2 điểm là A(2, 5), B(20, 35). Tạo đoạn thẳng AB. Tịnh tiến AB đi đoạn (5,3) .
+ Tạo một đoạn thẳng bất kỳ CD . Nhập giá trị cho đoạn thẳng CD đó .
+ Hiển thị ra màn hình độ dài CD, góc CD với trục hoành.
Bài 4 : Thiết kế lớp HinhAnh ( Hình ảnh) gồm :
+ Thuộc tính : Diem* ds; // Tập hợp các điểm
int vitri; // Số lượng điểm hiện có trong hình
int max; // Số lượng điểm tối đa trong hình
+ Hàm xây dựng : HinhAnh(int maxdiem=100); // Tạo 1 ảnh gồm tối đa maxdiem
+ Hàm xây dựng sao chép
+ Phép gán.
+ Hàm hủy
+ Các hàm thành viên như :
- Thêm 1 điểm vào hình ảnh (nếu vượt quá số lượng điểm tối đa thì tăng max lên 2 lần).
- Bỏ 1 điểm ở vị trí cuối cùng ra khỏi ảnh.
- Bỏ 1 điểm ở vị trí bất kỳ trong ảnh.
Đề cương thực hành Lập trình hướng đối tượng và C++ (CT114)
Bộ môn Mạng MT và TT Trang 6
- Bỏ tất cả điểm có giá trị là d ra khỏi ảnh.
- Hiển thị tọa độ toàn bộ các điểm có trong ảnh.
- Xuất ra giá trị của điểm ở vị trí thứ i trong ảnh (có thể dùng cách tái ĐN phép toán []).
Viết hàm main() sử dụng lớp trên để kiểm tra tính đúng đắn của các hàm thành viên đã ĐN.
5. Buổi 5 :
o Mục đích :
Sinh viên thiết kế lớp theo dạng thừa kế.
Sử dụng các tính chất của thừa kế.
o Yêu cầu :
Bài 1 : Thiết kế lớp DiemMau ( Điểm có màu) thừa kế từ lớp Diem và có thêm thuộc tính màu.
Bài 2 : Một trường phổ thông cần quản lý thông tin giáo viên và học sinh của trường mình .
Trong đó : tất cả các thành viên (Người) trên đều có những thông tin chung như :
Họ và tên, Giới tính, Năm sinh, Nơi sinh, Địa chỉ.
Giáo viên còn có thêm những thông tin riêng của mình như :
+ Năm bắt đầu giảng dạy.
+ Chuyên môn.
Và Học sinh có những thông tin riêng như :
+ Điểm 3 môn chính: Văn, Toán, Ngoại ngữ.
+ Xếp loại theo tiêu chuẩn sau :
Giỏi : ĐTB trên 8 và không có môn dưới 6.5.
Khá : ĐTB trên 6.5 và không có môn dưới 5.
Trung Bình : ĐTB trên 5 và không có môn dưới 3 .
Kém : ĐTB dưới 5 .
Hãy thiết kế các lớp sao cho việc quản lý nhân sự trên được hiệu quả nhất .
Thiết kế hàm main thực hiện các công việc sau :
+ Nhập vào danh sách gồm n Học sinh ( n : nhập vào từ bàn phím).
+ Nhập vào danh sách gồm m Giáo viên ( m : nhập vào từ bàn phím).
+ In các danh sách đó ra.
+ In danh sách Học sinh được xếp loại Khá và Giỏi .
+ In danh sách Giáo viên có thâm niên trên 10 năm và chuyên môn là Toán hoặc Lý.
Bài 3: Một nông trại có nuôi một số các con vật như sau: bò, heo, gà, dê.
Tất cả các con vật trên đều có những thông tin chung như : giống, màu lông, cân nặng,
nhưng tiếng kêu của các con vật là khác nhau.
Viết hàm main() thực hiện các công việc sau:
+ Tạo ra n con vật bất kỳ gồm cả 4 loài vật trên. Nhập thông tin cho các con vật.
+ Cho n con vật đó kêu.
Yêu cầu đặt ra : Thiết kế các lớp sao cho sau này, nếu nông trại có nuôi thêm các loài vật khác
sẽ không ảnh hưởng đến thiết kế chung của chương trình.
Các file đính kèm theo tài liệu này:
- ct114_134_de_cuong_thuc_hanh_3071.pdf