THỜI GIAN: 120 PHÚT
(Không sử dụng tài liệu)
CÂU 1:
Máy lọc ly tâm là một loại máy lọc nước hoạt động bằng xăng. Người ta thuê máy sử dụng với đơn giá
thuê 50.000 đồng/h. Mỗi máy lọc ly tâm có công suất lọc (m3/h) và tốc độ hao xăng (lít/h) khác nhau
nhưng không đổi trong suốt thời gian hoạt động (h) của máy. Đơn giá xăng là 20.000 đồng/lít.
#include <iostream>
using namespace std;
class MayLoc {
private:
float m_tgian;
protected:
virtual float congSuat();
void setTgian(float t);
public:
MayLoc();
float tinhLuongNuoc();
};
MayLoc::MayLoc() {
this->m_tgian = 0;
}
void MayLoc::setTgian(float t) {
this->m_tgian = t;
}
float MayLoc::tinhLuongNuoc() {
return congSuat()* m_tgian;
}
float MayLoc::congSuat() {
return 0;
}
class MayLyTam: public MayLoc {
private:
float m_cs;
protected:
float congSuat();
public:
MayLyTam(float cs, float t);
};
MayLyTam::MayLyTam(float cs, float t) {
this->m_cs = cs;
this->m_tgian = t;
/*1*/
}
float MayLoc::congSuat() {
return this->cs;
}
01: void main() {
02:
MayLoc *pm = new MayLoc();
03:
if (pm->congSuat() < 5) /*2*/
04:
{
05:
MayLyTam ml(81.9, 10);
06:
pm = &ml;
/*3*/
07:
cout << "Luong nuoc = "
08:
<< pm->tinhLuongNuoc();
09:
}
10:
delete pm;
/*4*/
11: }
Xem xét đoạn chương trình trên và trả lời những câu hỏi sau:
a) Hãy cho biết trong hàm main(), có những constructor (phương thức khởi tạo/thiết lập) và
destructor (phương thức hủy) nào được gọi, ở những dòng nào?
b) Hãy cho biết các dòng có chú thích từ /*1*/ đến /*4*/ có những lỗi (cú pháp, thực thi) gì?
c) Hãy sửa lại dòng /*1*/ cho hết lỗi mà vẫn thực hiện được việc cập nhật tgian.
d) Nếu xoá đi dòng /*2*/ (cho hết lỗi) rồi chạy chương trình, kết quả xuất ra màn hình là gì?
e) Hãy dời vị trí dòng /*4*/ sao cho đối tượng đã tạo bằng toán tử new được giải phóng bộ nhớ
một cách an toàn (chỉ dời dòng, không sửa nội dung).
Trang 1
CuuDuongThanCong.com
/>
CÂU 2:
Máy lọc xúc tác là một loại máy lọc nước hoạt động bằng hóa chất. Người ta thuê máy với đơn giá
thuê 80.000 đồng/h. Mỗi máy có công suất lọc (m3/h) khác nhau. Để lọc nước, ta cho một lượng hóa
chất (g) vào từ đầu và sử dụng trong suốt thời gian sử dụng (h) của máy. Công suất lọc thực tế được
tính theo hai trường hợp như sau:
• công suất lọc * (lượng hóa chất / 100g) nếu thời gian sử dụng < 10h, hoặc
• công suất lọc * (lượng hóa chất / 100g) / (thời gian hoạt động / 10h) nếu thời gian hoạt động ≥
10h.
Lượng nước mỗi máy lọc được = công suất lọc thực tế * thời gian hoạt động.
Chi phí thuê mỗi máy = đơn giá thuê * thời gian hoạt động.
Chi phí sử dụng máy = chi phí thuê + chi phí nhiên/vật liệu (đơn giá hóa chất là 10.000 đồng/g).
Hãy cài đặt lớp đối tượng cần thiết với thuộc tính và phương thức vừa đủ để đoạn chương trình sau có
thể hoạt động được theo đúng những gì đã mô tả.
#include <iostream>
using namespace std;
void main() {
cout << "Don gia hoa chat: " <<
MayXucTac m;
m.nhap(); // Nhập thông tin sử
cout << "Chi phi su dung may: "
cout << "Luong nuoc loc duoc: "
}
MayXucTac::DON_GIA_HOA_CHAT << endl;
dụng của máy xúc tác này
<< m.tinhChiPhi() << endl;
<< m.tinhLuongNuoc() << endl;
CÂU 3:
Một cái ao chứa M mét khối (m3) nước. Để lọc nước trong ao, người ta thuê N máy lọc (vừa xúc tác
vừa ly tâm) để sử dụng. Thông tin các loại máy lọc và các công thức tính như đã được mô tả ở các câu
1 và 2 bên trên.
Bảng tóm tắt thông tin các loại máy lọc:
Loại máy
Đơn giá thuê
Công suất lọc
Máy ly tâm
50.000 đồng/h Không đổi
Máy xúc tác 80.000 đồng/h Thay đổi theo lượng hóa chất và thời
gian sử dụng hóa chất
Chi phí nhiên/vật liệu
Lượng xăng * 20.000
Lượng hóa chất * 10.000
Áp dụng các tính chất hướng đối tượng (đóng gói, kế thừa, đa hình) để thực hiện những việc sau:
a. Vẽ sơ đồ lớp thiết kế chương trình có tính tái sử dụng (reuse) và khả năng mở rộng (scalable).
b. Xây dựng chương trình cho phép:
i.
Nhập vào danh sách N máy lọc (với đầy đủ thông tin sử dụng).
ii.
Nhập vào lượng nước M (số m3) trong ao. Chương trình cho biết với số máy lọc được
sử dụng, ao có được lọc hết hay không, và tính tổng chi phí sử dụng các máy lọc.
- HẾT -
Trang 2
CuuDuongThanCong.com
/>