Đề thi kết thúc học kỳ I môn Phương pháp lập trình hướng đối tượng - Năm học 2016-2017 - Đại học Khoa học Tự nhiên thành phố Hồ Chí Minh

MÃ LƯU TRỮ  
(do phòng KT-ĐBCL ghi)  
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN, ĐHQG-HCM  
ĐỀ THI KẾT THÚC HỌC PHẦN  
Học kỳ I – Năm học 2016-2017  
Tên học phần:  
Phương pháp Lập trình Hướng đối tượng  
Mã HP: CTT006  
Ngày thi: 14/01/2017  
Thời gian làm bài: 110 phút  
☑
Ghi chú: Sinh viên [ ¨ được phép / không được phép] sử dụng tài liệu khi làm bài.  
Câu 1 (05 điểm)  
01 #include <iostream>  
02 #include <sstream>  
03 #include <string>  
04 #include <typeinfo>  
05 using namespace std;  
06 const double PI = 3.1415928;  
07 class Shape  
51 class Ellipse : public Shape  
52 {  
53 private:  
54 float majorR, minorR;  
55 public:  
56 Ellipse(float a, float b)  
57  
58  
59  
60  
:Shape(), majorR(a), minorR(b)  
08 {  
09 public:  
{
}
cerr << "construct Ellipse" << endl;  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27 };  
28  
Shape(){ cerr<<"construct Shape"<<endl; }  
virtual string Description() {  
stringstream ss;  
61 string Description() {  
62  
stringstream ss;  
ss<<"Shape(area=" << this->Area() << ")"; 63  
ss << "Ellipse(a=" << this->majorR  
<< ", b=" << this->minorR << ")";  
return ss.str();  
return ss.str();  
}
virtual float Area() = 0;  
virtual void Scale(float scaleFactor) = 0; 67 float Area(){ return PI*majorR*minorR; }  
const type_info& InterfaceType() {  
return typeid(Shape);  
64  
65  
66  
}
68 void Scale(float scaleFactor) {  
69  
70  
71  
this->majorR *= scaleFactor;  
this->minorR *= scaleFactor;  
}
const type_info& ImplementationType() {  
return typeid(*this);  
}
virtual ~Shape(){  
cerr<<"destruct Shape"<<endl;  
}
}
72 void Scale(float sa, float sb) {  
73  
74  
75  
this->majorR *= sa;  
this->minorR *= sb;  
}
76 const type_info& InterfaceType() {  
77  
78  
return typeid(Ellipse);  
}
29 class Circle : public Shape  
30 {  
31 private:  
79 ~Ellipse(){  
80  
81  
cerr<<"destruct Ellipse"<<endl;  
}
32  
33 public:  
Circle(float r) :Shape(), radius(r) {  
cerr << "construct Circle" << endl;  
float radius;  
82 };  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50 };  
}
string Description() {  
stringstream ss;  
ss << "Circle(r=" << this->radius << ")";  
return ss.str();  
}
float Area() { return PI*radius*radius; }  
void Scale(float scaleFactor) {  
this->radius *= scaleFactor;  
}
const type_info& InterfaceType() {  
return typeid(Circle);  
}
~Circle(){ cerr<<"destruct Circle"<<endl; }  
(Đề thi gồm 4 trang)  
[Trang 1/4]  
Họ tên người ra đề/MSCB: .........................................................Chữ ký: .................  
Họ tên người duyệt đề: ..............................................................Chữ ký:..................  
MÃ LƯU TRỮ  
(do phòng KT-ĐBCL ghi)  
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN, ĐHQG-HCM  
ĐỀ THI KẾT THÚC HỌC PHẦN  
Học kỳ I – Năm học 2016-2017  
83 int main()  
84 {  
85  
86  
87  
88  
89  
90  
91  
92  
93  
94  
95  
96  
97  
98  
99  
Ellipse ellipse(2.0/3, 6);  
Shape *shape = &ellipse;  
shape->Scale(1.0/2);  
//shape->Scale(3, 1.0/3);  
cout << "ellipse: " << endl;  
cout << ellipse.Description() << endl;  
cout << ellipse.Area() << endl;  
cout << ellipse.InterfaceType().name() << endl;  
cout << ellipse.ImplementationType().name() << endl;  
cout << "shape = &ellipse: " << endl;  
cout << shape->Description() << endl;  
cout << shape->Area() << endl;  
cout << shape->InterfaceType().name() << endl;  
100 cout << shape->ImplementationType().name() << endl;  
101  
102 //Shape ashape;  
103 //cout << ashape.Description() << endl;  
104  
105 return 0; //no error  
106}  
Chú thích về chương trình C++ bên trên:  
• cerrvà coutlà 2 luồng xuất chuẩn đều xuất ra màn hình console.  
•
typeidlà toán tử tính kiểu của một biểu thức, trả về đối tượng type_info.  
VD: class X; typeid(X).name()=="X";  
X *a; typeid(a).name()=="X*";  
Hãy trả lời những câu hỏi liên quan tới chương trình bên trên:  
a) Hãy viết kết quả xuất ra màn hình sau khi chương trình chạy xong.  
b) Trong chương trình có nhiều hàm có cùng tên, chúng có quan hệ gì với nhau (hay không có  
quan hệ gì hết)? Hãy giải thích quan hệ giữa 2 hàm trong những cặp trùng tên sau: (Nêu tên  
quan hệ nếu có, nêu ý nghĩa và ứng dụng của quan hệ đó.)  
•
•
•
•
Shape::Description()và Circle::Description()  
Ellipse::Scale(float)và Ellipse::Scale(float, float)  
Shape::InterfaceType() và Circle::InterfaceType()  
Circle::InterfaceType() và Ellipse::InterfaceType()  
c) Nếu bỏ dấu comment (//) của các dòng 88, 102 và 103 ra thì chương trình gặp lỗi gì?  
d) [*] Phải thay thế vào chỗ của các dòng bị comment (88, 102 và 103) những dòng code như thế  
nào để thực hiện được ý đồ của các dòng code đó:  
• Ở dòng 88 muốn gọi phương thức Ellipse::Scale(float, float) thông qua con trỏ  
shape(chứ không phải thông qua biến đối tượng ellipse).  
• Ở dòng 102 và 103 muốn gọi được phương thức Shape::Description().  
* Lưu ý: Những câu đánh dấu sao [*] là không bắt buộc (tính điểm cộng).  
(Đề thi gồm 4 trang)  
Họ tên người ra đề/MSCB: .........................................................Chữ ký: .................  
Họ tên người duyệt đề: ..............................................................Chữ ký:..................  
[Trang 2/4]  
MÃ LƯU TRỮ  
(do phòng KT-ĐBCL ghi)  
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN, ĐHQG-HCM  
ĐỀ THI KẾT THÚC HỌC PHẦN  
Học kỳ I – Năm học 2016-2017  
Câu 2 (05 điểm)  
Bệnh viện Nhân dân 115 là một trong những bệnh viện lớn tại TP.HCM. Hiện bệnh viện đang  
có nhu cầu xây dựng hệ thống quản lý hoạt động khám chữa bệnh của các bệnh nhân. Mỗi bệnh  
nhân được cấp 1 mã số (MSBN) để tiện việc quản lý danh sách các bệnh nhân. Bệnh viện cho phép  
khám điều trị nội trú và ngoại trú. Nếu cùng 1 người có cả hoạt động khám ngoại trú lẫn điều trị nội  
trú thì sẽ được cấp 2 mã số khác nhau và được quản lý riêng như 2 người khác nhau. Viện phí của  
từng bệnh nhân được tính như sau:  
Với bệnh nhân ngoại trú: Bệnh viện thu một mức phí nhất định cho mỗi lần khám tùy theo mỗi  
loại bệnh lý.  
Với bệnh nhân nội trú: Tiền khám chữa bệnh = số ngày nằm viện * (phí khám bệnh mỗi ngày +  
đơn giá phòng).  
Có 3 loại phòng cho bệnh nhân điều trị nội trú chọn lựa với đơn giá:  
• Phòng loại C, đơn giá 600.000 đ/ngày.  
• Phòng loại B, đơn giá 900.000 đ/ngày.  
• Phòng loại A, đơn giá 1.400.000 đ/ngày.  
Mỗi hoạt động khám chữa bệnh điều được ghi nhận lại dưới dạng nhật ký (log hoạt động) theo  
tháng. Tùy theo từng loại hoạt động, mỗi dòng log sẽ có các thông tin tương ứng như sau:  
-
-
-
-
BN ngoại trú khám bệnh: Ngày, MSBN, "KB", phí khám chữa bệnh.  
BN nội trú nhập viện: Ngày, MSBN, "NV", phí khám chữa bệnh mỗi ngày, loại phòng.  
BN nội trú xuất viện: Ngày, MSBN, "XV".  
Tổng kết viện phí (cuối cùng trong log): Ngày, -1, "TKVP".  
Trong đó:  
-
-
-
Ngày là một số nguyên từ 1 tới 31 thể hiện ngày trong tháng.  
MSBN là một số tự nhiên, được đánh số liên tiếp từ 1.  
"KB", "NV", "XV", "TKVP" là các chuỗi ký tự thể hiện loại hoạt động.  
Ví dụ một log họat động 8 ngày đầu tiên của tháng 12:  
(Giả sử chưa có bệnh nhân nào trong danh sách.)  
(Đề thi gồm 4 trang)  
[Trang 3/4]  
Họ tên người ra đề/MSCB: .........................................................Chữ ký: .................  
Họ tên người duyệt đề: ..............................................................Chữ ký:..................  
MÃ LƯU TRỮ  
(do phòng KT-ĐBCL ghi)  
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN, ĐHQG-HCM  
ĐỀ THI KẾT THÚC HỌC PHẦN  
Học kỳ I – Năm học 2016-2017  
Nội dung tập tin log hoạt động  
1 001 KB 20000  
Giải thích ý nghĩa & Viện phí tới ngày hôm đó (VPTL)  
new BN[MSBN=001] khám bệnh => VPTL = 20kđ  
1 002 NV 100000 B  
new BN[MSBN=002] nhập viện vào phòng loại B, mỗi ngày  
khám chữa bệnh hết 100kđ  
6 003 KB 50000  
6 001 KB 30000  
6 004 NV 300000 C  
new BN[MSBN=003] khám bệnh => VPTL = 50kđ  
BN[MSBN=001] khám bệnh => VPTL = 20kđ + 30kđ = 50kđ  
new BN[MSBN=004] nhập viện vào phòng loại C, mỗi ngày  
khám chữa bệnh hết 300kđ  
7 004 XV  
BN[MSBN=004] xuất viện => VPTL = 1*(300k+600kđ) =  
900kđ  
8 -1 TKVP  
Tổng kết viện phí:  
+ BN[MSBN=001] => VPTL = 50kđ  
+ BN[MSBN=002] đã nằm 7 ngày ở phòng loại B  
=> VPTL = 7*(100kđ+900kđ) = 7000kđ  
+ BN[MSBN=003] => VPTL = 50kđ  
+ BN[MSBN=004] => VPTL = 900kđ  
= => Tổng viện phí = 50kđ + 7000kđ + 50kđ + 900kđ =  
8000kđ  
a) Hãy áp dụng các tính chất hướng đối tượng đã học để vẽ sơ đồ lớp (cả chi tiết các thành  
phần trong lớp lẫn quan hệ giữa các lớp) cho chương trình thực hiện các việc sau:  
• Đọc dữ liệu các bệnh nhân từ tập tin nhật ký hoạt động để lập danh sách bệnh nhân  
(thay cho việc nhập liệu từ bàn phím như thông thường).  
•
In ra màn hình bảng thống kê viện phí của từng bệnh nhân và tổng viện phí bệnh viện  
thu vào trong tháng.  
•
Cho biết bệnh viện có bao nhiêu bệnh nhân nội trú và bao nhiêu bệnh nhân ngoại trú.  
b) Viết chương trình cài đặt cho thiết kế ở câu a. (Cài đặt ngay trong khai báo lớp, không cần  
tách riêng khai báo lớp với định nghĩa hàm. Được phép sử dụng bộ thư viện chuẩn STL:  
string, vector, v.v…)  
c) [*] Để việc điều trị hiệu quả hơn, các bác sĩ cần biết được lịch sử điều trị của từng bệnh  
nhân. Hãy nâng cấp hệ thống để bổ sung thêm hoạt động Lập hồ sơ bệnh án cho bệnh nhân.  
Hồ sơ bệnh án của mỗi bệnh nhân sẽ ghi lại mọi hoạt động của bệnh nhân đó trong tháng để  
có thể tra cứu lại các hoạt động khi cần thiết. Bạn sẽ thay đổi hay bổ sung thêm cho các lớp  
đối tượng như thế nào? Hãy giải thích và minh họa thêm trên sơ đồ lớp ở câu a.  
* Lưu ý: Những câu đánh dấu sao [*] là không bắt buộc (tính điểm cộng).  
(Đề thi gồm 4 trang)  
Họ tên người ra đề/MSCB: .........................................................Chữ ký: .................  
Họ tên người duyệt đề: ..............................................................Chữ ký:..................  
[Trang 4/4]  
pdf 4 trang myanh 21000 Free
Bạn đang xem tài liệu "Đề thi kết thúc học kỳ I môn Phương pháp lập trình hướng đối tượng - Năm học 2016-2017 - Đại học Khoa học Tự nhiên thành phố Hồ Chí Minh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfde_thi_ket_thuc_hoc_ky_i_mon_phuong_phap_lap_trinh_huong_doi.pdf