Đề cương OOP Lập trình hướng đối tượng - Nhập môn lập trình | Trường Đại học CNTT Thành Phố Hồ Chí Minh

Đề cương OOP Lập trình hướng đối tượng - Nhập môn lập trình | Trường Đại học CNTT Thành Phố Hồ Chí Minh được được sưu tầm và soạn thảo dưới dạng file PDF để gửi tới các bạn sinh viên cùng tham khảo, ôn tập đầy đủ kiến thức, chuẩn bị cho các buổi học thật tốt. Mời bạn đọc đón xem!

lOMoARcPSD| 40551442
Nội dung CÂU 1 ........................................................................................ Error! Bookmark not dened.
[2013-2014] .............................................................................................................................................. 2
Gii: ....................................................................................................................................................... 2
[2014-2015] .............................................................................................................................................. 5
Gii: ....................................................................................................................................................... 5
[2015-2016] .............................................................................................................................................. 6
Gii: ....................................................................................................................................................... 6
[2016-2017] .............................................................................................................................................. 8
Gii: ....................................................................................................................................................... 9
[2017-2018] ............................................................................................................................................ 14
Gii: ..................................................................................................................................................... 14
[2018-2019] ............................................................................................................................................ 16
Gii: ..................................................................................................................................................... 16
[2019-2020] ............................................................................................................................................ 18
Gii: ..................................................................................................................................................... 18
CÂU 2 .......................................................................................................................................................... 21
[2013-2014] ............................................................................................................................................ 21
Gii: ..................................................................................................................................................... 23
[2014-2015] ............................................................................................................................................ 26
Gii: ..................................................................................................................................................... 26
[2015-2016] ............................................................................................................................................ 27
Gii: ..................................................................................................................................................... 28
[2016-2017] ............................................................................................................................................ 31
Gii: ..................................................................................................................................................... 32
[2017-2018] ............................................................................................................................................ 36
Gii: ..................................................................................................................................................... 36
[2018-2019] ............................................................................................................................................ 39
Gii: ..................................................................................................................................................... 39
[2019-2020] ............................................................................................................................................ 43
Gii: ..................................................................................................................................................... 44
CÂU 3 .......................................................................................................................................................... 46
[2013-2014] ............................................................................................................................................ 46
Gii: ..................................................................................................................................................... 47
[2014-2015] ............................................................................................................................................ 52
Gii: ..................................................................................................................................................... 53
lOMoARcPSD| 40551442
TuanDM-HTTT2020
2
[2015-2016] ............................................................................................................................................ 57
Gii: ..................................................................................................................................................... 61
[2016-2017] ............................................................................................................................................ 71
Gii: ..................................................................................................................................................... 77
[2017-2018] ............................................................................................................................................ 91
Gii: ..................................................................................................................................................... 94
[2018-2019] .......................................................................................................................................... 100
Gii: ................................................................................................................................................... 104
[2019-2020] .......................................................................................................................................... 110
Gii: ................................................................................................................................................... 111
CÂU 1.
[2013-2014]
HK1
a. Phân bit các phm vi truy cp private, protected, public và cho d
minh ha.
b. Nêu khái nim v s kế tha những °u iểm ca kế tha trong vic lp
trình. Cho ví d minh ha.
HK2
a. Nêu khái nim Constructor và Destructor. Phân bit Constructor mặc ịnh
Constructor khác.
b. Phân bit các kiu kế tha private, protected, public.
Gii:
HK1
a.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
3
- Thành phn private á lp cha thì không truy xuất °ợc á lp con
- Kế tha public: Lp con kế tha public t lp cha thì các thành phn protected ca
lp cha trá thành protected ca lp con, các thành phn public ca lp cha trá
thành public ca lp con.
- Kế tha private: Lp con kế tha private t lp cha thì các thành phn protected
public ca lp cha trá thành private ca lp con.
- Kế tha protected: Lp con kế tha protected t lp cha thì các thành phn
protected và public ca lp cha trá thành protected ca lp con. b.
- Khái nim:
K¿ tha trong lÁp trình là cách 1 lp có th thừa h°ởng li nhng thuc nh,
ph°¢ng thức t 1 lp khác và s dụng chúng nh° là ca bn thân mình.
Một ịnh nghĩa trừu t°ợng h¡n về kế tha: là mt ặc iểm ca ngôn ng h°ớng i t°ợng
dùng ể biu din mi quan h c bit hoá tng quát h gia các lp.
- ¯u iểm:
Cho phép xây dng 1 lp mi t lớp ã có.
Lp mi gi là lp con (subclass) hay lp d¿n xut (derived class).
Lớp ã có gọi là lp cha (superclass) hay lớp c¢ sở (base class).
Cho phép chia s các thông n chung nhm tái s dụng và ồng thßi giúp ta d
dàng nâng cp, d dàng bo trì.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
4
Định nghĩa sự t°¡ng thích giữa các lp, nhß ó ta có th chuyn kiu t ng.
HK2
a.
- Khái nim:
Ph°¢ng thức khi to (Constructor) một ph°¡ng thức c biệt °ợc gi t ng ti
thßi iểm ối t°ợng °ợc to. Các hàm khái to nhim v khái to thông n ban ầu
cho các ối t°ợng thuc v lớp ngay khi ối t°ợng °ợc khai báo.
Ph°¢ng thức phá hy (Destructor) có nhim v dn dẹp <xác chết= của ối t°ợng
khi ối t°ợng < i bán mui=. Nói một cách khác, ph°¡ng thức phá hy có nhim v
thu hi li tt c các tài nguyên ã cấp phát cho ối t°ợng khi ối t°ng hết phm vi
hoạt ộng.
- Constructor mặc ịnh khác vi các Constructor khác á các iểm:
Không có tham s u vào.
b.
- Thành phn private á lp cha thì không truy xuất °ợc á lp con
- Kế tha public: Lp con kế tha public t lp cha thì các thành phn protected ca
lp cha trá thành protected ca lp con, các thành phn public ca lp cha trá
thành public ca lp con.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
5
- Kế tha private: Lp con kế tha private t lp cha thì các thành phn protected
public ca lp cha trá thành private ca lp con.
- Kế tha protected: Lp con kế tha protected t lp cha thì các thành phn
protected và public ca lp cha trá thành protected ca lp con.
_________________________________
[2014-2015]
HK2
Phân bit các kiu kế tha private, protected, public (2 iểm)
Gii:
HK2
- Thành phn private á lp cha thì không truy xuất °ợc á lp con
- Kế tha public: Lp con kế tha public t lp cha thì các thành phn protected ca
lp cha trá thành protected ca lp con, các thành phn public ca lp cha trá
thành public ca lp con.
- Kế tha private: Lp con kế tha private t lp cha thì các thành phn protected
public ca lp cha trá thành private ca lp con.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
6
- Kế tha protected: Lp con kế tha protected t lp cha thì các thành phn
protected và public ca lp cha trá thành protected ca lp con.
_________________________________
[2015-2016]
HK2
a. Phân bit các kiu kế tha private, protected, public. (1 iểm)
b. Tnh bày các ặc iểm quan trng ca lập trình h°ớngi t°ợng. (1 im)
HK3
a. Định nghĩa constructor (ph°¡ng thức khái to) và default constructor
(ph°¡ng thức khái to mặc ịnh) (1 iểm)
b. Phân bit các kiu kế tha private, protected, public (1 iểm)
Gii:
HK2
a.
- Thành phn private á lp cha thì không truy xuất °ợc á lp con
lOMoARcPSD| 40551442
TuanDM-HTTT2020
7
- Kế tha public: Lp con kế tha public t lp cha thì các thành phn protected ca
lp cha trá thành protected ca lp con, các thành phn public ca lp cha trá
thành public ca lp con.
- Kế tha private: Lp con kế tha private t lp cha thì các thành phn protected
public ca lp cha trá thành private ca lp con.
- Kế tha protected: Lp con kế tha protected t lp cha thì các thành phn
protected và public ca lp cha trá thành protected ca lp con. b.
- Trừu t°ợng hóa Abstracon Cách nhìn khái quát hóa v mt tập các i t°ợng
chung các ặc iểm °ợc quan tâm (và b qua nhng chi ết không cn thiết).
- Đóng gói Encapsulaon Nhóm nhng liên quan vi nhau vào làm mt,
sau y th dùng một cái tên gọi ến. Vd: các hàm/ th tục óng gói các câu lệnh,
các ối t°ợng óng gói dữ liu ca chúng và các th tc có liên quan.
- Tha kế - Inheritance cho phép mt lớp D °ợc các thuc nh thao tác ca lớp
C, nh° thể các thuộc tính thao tác ó ã °ợc ịnh nghĩa tại lp D. Cho phép cài t
nhiu quan h gia các ối t°ợng: Đặc bit hóa Tng quát hóa.
- Đa hình – Polymorphism Là c¡ chế cho phép mt tên thao tác hoc thuc nh có
th °ợc ịnh nghĩa tại nhiu lp th có nhiều cài t khác nhau ti mi lp trong
các lớp ó.
HK3
a.
Ph°¢ng thức khi to (Constructor) một ph°¡ng thức c biệt °ợc gi t ng ti
thßi iểm ối t°ợng °ợc to. Các ph°¡ng thức khái to nhim v khái to thông tin
ban ầu cho các i t°ợng thuc v lớp ngay khi ối t°ợng °ợc khai báo.
Ph°¢ng thức khi to mặc nh (Default Constructor) ph°¡ng thức thiết lp các
thông n ban ầu cho ối t°ợng thuc v lp bng nhng giá tr mặc nh. Khi s dng
mt constructor, nếu không giá tr khái tạo nào do ng°ßi dùng cung cp °ợc truyn
cho constructor này, thì constructor mặc ịnh s °ợc gi. b.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
8
- Thành phn private á lp cha thì không truy xuất °ợc á lp con
- Kế tha public: Lp con kế tha public t lp cha thì các thành phn protected ca
lp cha trá thành protected ca lp con, các thành phn public ca lp cha trá
thành public ca lp con.
- Kế tha private: Lp con kế tha private t lp cha thì các thành phn protected
public ca lp cha trá thành private ca lp con.
- Kế tha protected: Lp con kế tha protected t lp cha thì các thành phn
protected public ca lp cha trá thành protected ca lp con.
_________________________________
[2016-2017]
HK1
a. Nêu khái nim v s kế tha và những °u iểm ca kế tha trong vic lp
trình. Cho ví d minh ha. (2 iểm) b. Xét oạn ch°¡ng trình sau:
class A{
A(int i);
}; void
main(){
A a1;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
9
A b2(5);
}
Hãy cho biết oạn ch°¡ng trình trên lỗi xy ra hay không? Nếu hãy gii
thích và ch ra cách sa li. (1 iểm)
HK2
a. Trình y khái nim ca lớp c¡ tru t°ợng (abstract class). Lớp c¡ sá trừu
t°ợng °ợc cài t trong C++ nh° thế nào? (1 iểm) b. Xét oạn ch°¡ng trình sau:
#include <iostream> using
namespace std; class
Array{
int A[100];
int n; public:
Array(int n) {
//....
}
//....
};
void main()
{
Array M1; Array
M2(10);
cout<<M.A[3];
}
Cho biết oạn ch°¡ng trình trên khi biên dịch có li xy ra hay không? Nếu có
li, hãy ch ra các lỗi ó và sửa lỗi ể ch°¡ng trình có thể thc thi °ợc. (1.5 iểm)
HK3
a. Phân bit private, protected, public. (1 iểm)
b. Trình bày v constructor. (1 iểm)
Gii:
HK1
a.
- Khái nim:
K¿ tha trong lÁp trình là cách 1 lp có th thừa h°ởng li nhng thuc nh,
ph°¢ng thức t 1 lp khác và s dụng chúng nh° là ca bn thân mình.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
10
Một ịnh nghĩa trừu t°ợng h¡n về kế tha: là mt ặc iểm ca ngôn ng h°ớng i t°ợng
dùng ể biu din mi quan h c bit hoá tng quát h gia các lp.
- ¯u iểm:
Cho phép xây dng 1 lp mi t lớp ã có.
Lp mi gi là lp con (subclass) hay lp d¿n xut (derived class).
Lớp ã có gọi là lp cha (superclass) hay lp c¢ sở (base class).
Cho phép chia s các thông n chung nhm tái s dụng và ồng thßi giúp ta d
dàng nâng cp, d dàng bo trì.
Định nghĩa sự t°¡ng thích giữa các lp, nhß ó ta có thể chuyn kiu t ng. b.
- Đoạn ch°¡ng trình trên có lỗi xy ra vì thiếu t khóa dn xut (á ây public cho
hàm thành phn trong th truy xut °ợc trong hàm main), thiếu các hàm khái
to (hàm khi to mc nh và hàm khi to nhÁn tham s u vào) bên trong lp.
- Sa:
class A{ public:
A(){
}
A(int i){
}
}; void
main(){
A a1;
A b2(5);
}
HK2
a.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
11
Lớp c¡ trừu t°ợng (Abstract Class): lp có ít nhất 1 ph°¡ng thức °ợc khai báo
là hàm thun o (pure virtual), hàm thun ảo °ợc xác ịnh là mt hàm virtual
có kết thúc khai báo hàm là <= 0=. Ví d: virtual double nhChuVi () = 0;
Trong tr°ßng hp lp c¡ sá trừu t°ợng có tt c các ph°¡ng thức là thun o thì
°ợc gi là interface (giao din).
class Xe {
private:
string id;
string loai; double
gia_en; public:
virtual void Nhap() = 0; virtual
double TinhGiaen() = 0;
};
b.
- Đoạn ch°¡ng trình trên có lỗi xy ra vì:
Sai dòng A a; Array M1; vì ch°a có ph°¡ng thức khái to mặc ịnh.
Sai dòng cout<<M.A[3]; ch°a khai báo ối t°ợng M, mảng A °ợc khai báo bên
ngoài t khóa dn xut public nên không th truy xuất °ợc trong hàm main.
- Sa:
#include <iostream>
using namespace
std; class Array{
public:
int A[100];
int n; Array()
lOMoARcPSD| 40551442
TuanDM-HTTT2020
12
{
}
Array(int n)
{
//....
}
//....
}; void
main()
{
Array M1;
Array M2(10); Array
M; cout<<M.A[3];
}
HK3
a.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
13
- Thành phn private á lp cha thì không truy xuất °ợc á lp con
- Kế tha public: Lp con kế tha public t lp cha thì các thành phn protected ca
lp cha trá thành protected ca lp con, các thành phn public ca lp cha trá
thành public ca lp con.
- Kế tha private: Lp con kế tha private t lp cha thì các thành phn protected
public ca lp cha trá thành private ca lp con.
- Kế tha protected: Lp con kế tha protected t lp cha thì các thành phn
protected và public ca lp cha trá thành protected ca lp con. b.
Ph°¢ng thức thi¿t lÁp (Constructor) một ph°¡ng thức c biệt °ợc gi t ng ti
thßi iểm ối t°ợng °ợc to. Các ph°¡ng thức thiết lp nhim v thiết lp thông tin
ban ầu cho các i t°ợng thuc v lớp ngay khi ối t°ợng °ợc khai báo.
Đặc iểm:
Có tên trùng vi tên lp.
Không có kiu d liu tr v.
Đ°ợc t ng gi thc hin ngay khi một ối t°ợng °ợc khai báo.
Có th có nhiều ph°¡ng thức thiết lp trong 1 lp.
Trong mt quá trình sng của ối t°ợng thì ch 1 ln duy nht mt ph°¡ng
thc thiết lp °ợc gi thc hiện mà thôi, ó là khi ối t°ợng ra ßi.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
14
Các ph°¡ng thức thiết lp ca lp thuộc nhóm các ph°¡ng thức khái to.
_________________________________
[2017-2018]
HK1
a. Phân bit các phm vi truy cp private, protected và public. (1 iểm)
b. Cho biết ý nghĩa và mc ích ca các hàm get/set trong mt lp. (1 iểm)
HK2
a. Hàm thun o là gì? Lp tru t°ợng là gì? Cho ví d minh ha. (1 iểm)
b. Hãy nêu các ặc iểm quan trng ca lập trình h°ớng ối t°ợng. (1 iểm)
Gii:
HK1
a.
- Thành phn private á lp cha thì không truy xuất °ợc á lp con
- Kế tha public: Lp con kế tha public t lp cha thì các thành phn protected ca
lp cha trá thành protected ca lp con, các thành phn public ca lp cha trá
thành public ca lp con.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
15
- Kế tha private: Lp con kế tha private t lp cha thì các thành phn protected
public ca lp cha trá thành private ca lp con.
- Kế tha protected: Lp con kế tha protected t lp cha thì các thành phn
protected và public ca lp cha trá thành protected ca lp con. b.
Hàm get: truy vn d liu private t các ối t°ợng ( ọc giá tr các thành viên d liu).
Đặc iểm quan trng của ph°¡ng thức truy vn là nó không nên thay i trng thái hin
ti của ối t°ợng.
Hàm set: cp nht d liu private t các ối t°ợng (ghi giá tr cho các thành viên d
liu). Ph°¡ng thức cp nhật th°ßng ể thay ổi trng thái của ối t°ợng bng cách sửa ổi
mt hoc nhiu thành viên d liu của ối t°ợng ó.
HK2
a.
Hàm thun ảo (Ph°¢ng thức o thun tuý) ý nghĩa cho việc t chức phân
cp các lớp, nó óng vai trò chừa sn ch trng cho các lớp con iền vào vi phiên bn
phù hợp. Ph°¡ng thức o thuần tuý ph°¡ng thức o không ni dung, °ợc khai
báo vi t khóa virtual và °ợc gán giá tr =0.
Khi lớp có ph°¡ng thức o thun tuý, lp trá thành lớp c¡ trừu t°ợng. Lớp trừu
t°ợng không có i t°ợng nào thuc chính nó.
class Shape //Abstract
{ public
:
//Pure virtual Funcon virtual
void draw() = 0;
}
Trong d trên, các hàm thành phn trong lớp Shape là ph°¡ng thức o thun tuý
lp Shape là lớp c¡ trừu t°ợng. Nó bảo m không th tạo °ợc ối t°ợng thuc lp
Shape. b.
- Trừu t°ợng hóa Abstracon: Cách nhìn khái quát hóa v mt tập các ối t°ợng
có chung các ặc iểm °ợc quan tâm (và b qua nhng chi ết không cn thiết).
lOMoARcPSD| 40551442
TuanDM-HTTT2020
16
- Đóng gói Encapsulaon: Nhóm nhng liên quan vi nhau vào làm một,
sau y th dùng một cái tên gọi ến. Vd: các hàm/ th tục óng gói các câu
lệnh, các ối t°ợng óng gói dữ liu ca chúng và các th tc có liên quan.
- Tha kế - Inheritance: Cho phép mt lớp D có °ợc các thuc nh và thao tác
ca lớp C, nh° thể các thuộc tính và thao tác ó ã °ợc ịnh nghĩa tại lp D. Cho phép
cài ặt nhiu quan h giữa các ối t°ợng: Đặc bit hóa Tng quát hóa
- Đa hình Polymorphism: chế cho phép mt tên thao tác hoc thuc
nh th °ợc ịnh nghĩa tại nhiu lp có th nhiều cài t khác nhau ti mi lp
trong các lớp ó.
_________________________________
[2018-2019]
HK1
a. Phân bit khái nim lớp ối t°ợng trong lập trình h°ớng ối t°ợng. (1
iểm)
b. Trình bày khái niệm a hình trong lập trình h°ớng ối t°ợng (1 iểm). Cho
ví d (0.5 iểm).
HK2
a. Phân bit khái nim overload (ti chồng) và override (ghi è). (1 iểm)
b. Phân bit các kiu kế tha private, protected public. (1 iểm)
Gii:
HK1
a.
Lp là mt mô t trừu t°ợng của nhóm các ối t°ợng cùng bn chất, ng°ợc li
mi mt ối t°ợng là mt th hin c th cho nhng mô t trừu t°ợng ó.
Lpcái ta thiết kế và lp trình. Đối t°ợngcái ta to (t mt lp) ti thßi
gian chy.
b.
Đa hình: Là hiện t°ợng các ối t°ợng thuc các lp khác nhau có kh năng hiểu cùng
một thông iệp theo các cách khác nhau.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
17
d: Nhận °ợc cùng một thông iệp <nhảy=, mt con kangaroo mt con cóc nhy
theo hai kiểu khác nhau: chúng cùng có hành vi <nhảy= nh°ng hành vi này ni
dung khác nhau.
HK2
a.
Override
Overload
Khái
nim
một tính năng cho phép một lp
con hoc lp con cung cp mt
trin khai c th ca mt ph°¡ng
thức ã °ợc cung cp bái mt trong
các lp siêu hoc các lp cha ca
nó. Nói cách khác, nếu lp con
cung cp trình trin khai c th
ca ph°¡ng thức ã °ợc cung cp
bái mt trong các lp cha ca nó,
thì ó là ghi è ph°¡ng thức.
Np chồng ph°¡ng thức ¡n giản
vài ph°¡ng thức trùng tên nh°ng
khác nhau v i s. Cài chng
ph°¡ng thức cho phép ta to nhiu
phiên bn ca mt ph°¡ng thức,
mi phiên bn chp nhn mt
danh sách i s khác nhau, nhm
to thun li cho vic gọi ph°¡ng
thức.
Hành vi
Thay i hành vi hin ti ca ph°¡ng
thc.
Thêm hoc má rng cho hành vi
ca ph°¡ng thức.
Đa hình
Th hiện tính a hình tại run me.
Th hiện tính a hình tại compile
Danh
sách
tham s
Danh sách tham s phi ging
nhau.
Danh sách tham s khác nhau (s
l°ợng, th t, kiu d liu)
Giá tr
tr vÁ
Kiu tr v bt buc phi ging
nhau.
Kiu tr v có th khác nhau.
Phm vi
Xy ra gia 2 class có quan h kế
tha
Xy ra trong phm vi cùng 1 class.
b.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
18
- Thành phn private á lp cha thì không truy xuất °ợc á lp con
- Kế tha public: Lp con kế tha public t lp cha thì các thành phn protected ca
lp cha trá thành protected ca lp con, các thành phn public ca lp cha trá
thành public ca lp con.
- Kế tha private: Lp con kế tha private t lp cha thì các thành phn protected
public ca lp cha trá thành private ca lp con.
- Kế tha protected: Lp con kế tha protected t lp cha thì các thành phn
protected và public ca lp cha trá thành protected ca lp con.
_________________________________
[2019-2020]
HK2
a. Hãy trình bày những ặc iểm của tính óng gói (encapsulation) lập trình
h°ớng ối t°ợng. Tr°ßng hp nào thì th vi phạm tính óng gói? Cho d
minh ha. (1 iểm)
b. y trình bày những °u im ca kế tha trong vic lập trình h°ớng i
t°ợng và cho ví d minh ha. (1 iểm)
Gii:
a.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
19
- Đóng gói Encapsulaon: Nhóm nhng liên quan vi nhau vào làm mt,
sau này th dùng một cái tên gi ến. Tính óng gói " óng gói" thuộc nh
ph°¡ng thức của ối t°ợng (hoc lp) thông qua vic gii hn quyn truy cp (hoặc
thay i) giá tr ca thuc nh hoc quyn gọi ph°¡ng thức. Nói cách khác tính óng
gói cho phép kiểm soát quyn truy cập (và thay i) giá tr ca thuc nh hoc quyn
gọi ph°¡ng thức của ối t°ợng (hoc lớp) và ối t°ợng (hoc lp) con.
- Tr°ßng hp có th vi phạm tính óng gói: khi khai báo lp con là bn ca lp cha.
Ví d:
class Nguoi
{
friend class SinhVien;
char *HoTen; int
NamSinh; public:
//…
}; class SinhVien : public Nguoi{
char *MaSo; public:
//…
void Xuat() const{ cout<<"Sinh vien, ma so: "<<MaSo<<",
ho ten: "<<HoTen;
}
};
Khai báo lp bạn như trên, lớp SinhVien có th truy xut các thành phn private ca
lp Nguoi. b.
- ¯u iểm:
Cho phép xây dng 1 lp mi t lớp ã có.
Lp mi gi là lp con (subclass) hay lp d¿n xut (derived class).
Lớp ã có gọi là lp cha (superclass) hay lớp c¢ sở (base class).
lOMoARcPSD| 40551442
TuanDM-HTTT2020
20
Cho phép chia s các thông n chung nhm tái s dụng và ồng thßi giúp ta d
dàng nâng cp, d dàng bo trì.
Định nghĩa sự t°¡ng thích giữa các lp, nhß ó ta có thể chuyn kiu t ng.
__________________________________________________________________
lOMoARcPSD| 40551442
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
CÂU 2.
[2013-2014]
HK1
a. Xét oạn ch°¡ng trình sau:
#include <iostream> using
namespace std;
class A { public:
A( ) { cout << "Construcng A ";
}
~A( ) { cout << "Destrucng A ";
} }; class B: public A { public:
B( ) { cout << "Construcng B ";
}
~B( ) { cout << "Destrucng B ";
} }; int main() { B b1; return 0;
}
Hãy cho biết kết qu xut ra màn hình khi thực thi oạn ch°¡ng trình trên. Gii
thích ngn gn ti sao có kết qu ó. (1.5 iểm) b. Xét oạn ch°¡ng trình sau:
#include <iostream> using
namespace std;
class A {
private: int
x;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
22
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
public:
A(int t) { x
= t;
}
stac void f() { cout<<x;
} int f2() {
return x;
} };
void main() { A
a; f2(a);
}
Cho biết oạn ch°¡ng trình trên khi biên dịch có li xy ra hay không? Nếu có
li, hãy ch ra các lỗi ó và sửa lỗi ể ch°¡ng trình có thể thực thi °ợc. (1.5 iểm)
HK2
a. Xét lp phân s °ợc khai báo nh° sau:
class PhanSo{
private: int ts,
ms; public:
PhanSo (int ts=0, int ms=1);
PhanSo operator +(PhanSo);
};
Hãy cho biết trong các dòng lnh sau ây, dòng nào lỗi xy ra, gii thích
sa li nếu có:
PhanSo a, b(3, 4), c(2, 5);
a = b + c; a = b + 3; a = 5
+ c;
b. Xét oạn ch°¡ng trình sau:
lOMoARcPSD| 40551442
TuanDM-HTTT2020
23
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
#include <iostream> using
namespace std;
class A { public:
A( ) { cout << "\nHam dung mac dinh lop A "; }
~A( ) { cout << "\nHam huy lop A ";
} }; class B { public:
B( ) { cout << "\nHam dung mac dinh lop B "; }
~B( ) { cout << "\nHam huy lop B ";
} }; class C: public A, private B { public:
C( ) { cout << "\nHam dung mac dinh lop C "; }
~C( ) { cout << "\nHam huy lop C ";
} };
void main() {
C c; }
Hãy cho biết kết qu xut ra màn hình khi thực thi oạn ch°¡ng trình trên.
Gii thích ngn gn ti sao có kết qu ó.
Gii:
HK1
lOMoARcPSD| 40551442
TuanDM-HTTT2020
24
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
a.
- Kết qu xut ra màn hình:
Construcng A Construcng B Destrucng B Destrucng A -
Gii thích:
Các lớp luôn °ợc xây dựng tr°ớc các thành viên d liu. Các thành viên d liệu
°ợc xây dng theo th t chúng °ợc khai báo trong lp. Th t này không có gì
làm vi danh sách khái to. Khi mt thành viên d liệu ang °ợc khái to, nó s xem
qua danh sách khái to ca bạn biết các tham s gi hàm to mc nh nếu không
có kết qu khp. Hàm hy cho các thành viên d liệu luôn °c gi theo th t ng°ợc
li. b.
- Đoạn ch°¡ng trình trên có lỗi xy ra vì:
Sai dòng static void f() { cout<<x; } vì ph°¡ng thức stac ch dùng biến stac.
Có th sa li bng cách khai báo x bên trong ph°¡ng thức f.
Sai dòng A a; vì ch°a có ph°¡ng thc khái to mặc ịnh.
Sai dòng f2(a); hàm f2 ph°¡ng thức thuc class A. pháp gi mt
ph°¡ng thức thuc lp phi là: <object>.method - Sa:
#include <iostream>
using namespace
std; class A { private:
int x; public:
A()
{
}
A(int t)
{
x = t;
}
lOMoARcPSD| 40551442
TuanDM-HTTT2020
25
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
stac void f(int x)
{
cout << x;
}
int f2()
{
return x;
}
}; void
main() {
A a;
a.f2();
}
HK2
a.
- Dòng lnh: a = 5 + c; li ch°a y dựng ph°¡ng thức cng (operator +) cng
mt s nguyên vi mt phân s và tr v phân s. Trong C++, x + y (tr°ßng hp trên)
°ợc dch theo kiu: x.operator+(y). Khi gi operator. trong x. thì x không °ợc chuyn
kiu t ng; y có th chuyn ngầm °ợc vì class ca x ã °ợc xác nh, s l°ợng hàm cn
kim th chuyn kiu t ng cho y là nh.
- Sa: a = c + 5;
b.
- Kết qu xut ra màn hình:
Ham dung mac dinh lop A
Ham dung mac dinh lop B
Ham dung mac dinh lop C
lOMoARcPSD| 40551442
TuanDM-HTTT2020
26
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Ham huy lop C
Ham huy lop B Ham
huy lop A
- Gii thích:
Các lớp luôn °ợc xây dựng tr°ớc các thành viên d liu. Các thành viên d liệu
°ợc xây dng theo th t chúng °ợc khai báo trong lp. Th t này không có gì
làm vi danh sách khái to. Khi mt thành viên d liệu ang °ợc khái to, nó s xem
qua danh sách khái to ca bạn biết các tham s gi hàm to mc nh nếu không
có kết qu khp. Hàm hy cho các thành viên d liệu luôn °c gi theo th t ng°ợc
li.
_________________________________
[2014-2015]
HK2
Xây dng lớp a thức bc nhất th hiện các a thức bt nht có dng:
F(x)= ax + b (a luôn khác 0)
Xây dựng các ph°¡ng thức: (3 im)
a. Ph°¡ng thức cho phép xác ịnh giá tr của a thức ng vi x=xo (nh F(xo)
).
b. Ph°¡ng thức tr v nghiệm a thức bậc 1 (nghĩa là F(x)=0).
c. Phép toán cộng (operator +) ể cộng hai a thức bc nht.
Gii:
class DaThucBacNhat
{ private:
float a;
float b;
public:
DaThucBacN
hat();
DaThucBacNhat(float a1, float b1);
DaThucBacNhat(DaThucBacNhat& dt);
lOMoARcPSD| 40551442
TuanDM-HTTT2020
27
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
float TinhGiaTri(DaThucBacNhat dt, float x0);
float Nghiem(DaThucBacNhat dt);
DaThucBacNhat operator+(const DaThucBacNhat&);
};
DaThucBacNhat::DaThucBacNhat()
{ a =
1; b =
0; }
DaThucBacNhat::DaThucBacNhat(float a1, float b1)
{ a =
a1; b =
b1; }
DaThucBacNhat::DaThucBacNhat(DaThucBacNhat& dt)
{ a = dt.a; b = dt.b; } float
DaThucBacNhat::TinhGiaTri(DaThucBacNhat dt, float x0)
{
return a * x0 + b;
} float DaThucBacNhat::Nghiem(DaThucBacNhat
dt)
{ if (b == 0)
return 0; else
return -b / a;
}
DaThucBacNhat DaThucBacNhat::operator+(const DaThucBacNhat& dt)
{
DaThucBacNhat tong;
tong.a = this->a + dt.a;
tong.b = this->b + dt.b;
return tong;
}
_________________________________
[2015-2016]
HK2
Xây dng lp Thßi gian (giß, phút, giây) (1 iểm).
Định nghĩa các phép toán:
++ ể tăng thßi gian thêm 1 giây (1 iểm).
>> và << ể nhp, xut d liu thßi gian (1 iểm).
HK3
Xây dng lp Phân s (1 iểm). Định nghĩa các phép toán +, - thc
hin phép cng và tr gia hai phân s (1 iểm).
lOMoARcPSD| 40551442
TuanDM-HTTT2020
28
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
>> và << ể nhp, xut d liu phân s (1 iểm).
Gii:
HK2
class CTime {
private:
int gio;
int phut;
int giay;
public:
CTime();
CTime(int h, int m, int s);
~CTime();
friend ostream& operator<<(ostream& os, const CTime& T);
friend istream& operator>>(istream& is, CTime& T);
CTime operator+(int a);
CTime operator++();
CTime operator++(int);
};
CTime::CTime() {
this->gio = this->phut = this->giay = 0; }
CTime::CTime(int h, int m, int s)
{
this->gio = h; this-
>phut = m; this->giay =
s;
}
CTime::~CTime()
{
}
istream& operator>>(istream& is, CTime& T)
{
cout << "Nhap gio: ";
is >> T.gio; cout
<< "Nhap phut: "; is
>> T.phut; cout <<
"Nhap giay: "; is >>
T.giay; return is;
}
ostream& operator<<(ostream& os, const CTime& T)
{
os << T.gio << " gio " << T.phut << " phut " << T.giay << " giay ";
return os;
}
long CTime::GetTong()
{
lOMoARcPSD| 40551442
TuanDM-HTTT2020
29
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
return this->giay + this->phut * 60 + this->gio * 60 * 60; }long
CTime::GetTong()
{ return this->giay + this->phut * 60 + this->gio * 60 *
60; }
CTime CTime::operator+(int a)
{
CTime Time;
Time.gio = (this->GetTong() + a) / 3600;
Time.phut = ((this->GetTong() + a - Time.gio * 3600) / 60) % 60;
Time.giay = (this->GetTong() + a) % 60;
return Time; }
CTime CTime::operator++()
{ return *this +
1;
}
CTime CTime::operator++(int a)
{
CTime temp;
temp = *this;
*this + 1;
return temp;
}
HK3
class PhanSo
{ private:
int ts, ms;
public:
PhanSo();
PhanSo(int a); void
Reduce();
PhanSo operator+(const PhanSo&);
PhanSo operator-(const PhanSo&);
PhanSo operator*(const PhanSo&);
PhanSo operator/(const PhanSo&); bool
operator==(PhanSo&); bool operator!=(PhanSo&);
bool operator>(PhanSo&); bool operator>=(PhanSo&);
bool operator<(PhanSo&); bool operator<=(PhanSo&);
friend istream& operator>>(istream& is, PhanSo& x);
friend ostream& operator<<(ostream& os, const PhanSo& x);
~PhanSo();
};
PhanSo::PhanSo(){
ts = 0; ms
= 1;
}
PhanSo::PhanSo(int a)
{
lOMoARcPSD| 40551442
TuanDM-HTTT2020
30
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
ts = a;
ms = 1;
} void PhanSo::Reduce()
{
int ucln;
int a = abs(ts);
int b = abs(ms);
if (ts == 0 && ms == 0) {
ucln = ts + ms;
}
else {
while (a != b) {
if (a > b) {
a -= b;
}
else
{
b -= a;
}
}
ucln = a;
}
ts /= ucln;
ms /= ucln;
}
PhanSo::~PhanSo()
{
}
istream& operator>>(istream& is, PhanSo& x)
{
cout << "Nhap tu so: ";
is >> x.ts; cout << "Nhap mau
so: "; is >> x.ms;
return is;
}
ostream& operator<<(ostream& os, const PhanSo& x)
{
os << "Tu so: ";
os << x.ts; os << " Mau
so: "; os << x.ms;
return os;
}
PhanSo PhanSo::operator+(const PhanSo& y)
{
PhanSo temp;
temp.ts = this->ts * y.ms + y.ts * this->ms;
temp.ms = this->ms * y.ms;
temp.Reduce();
return temp;
}
PhanSo PhanSo::operator-(const PhanSo& y)
{
lOMoARcPSD| 40551442
TuanDM-HTTT2020
31
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
PhanSo temp;
temp.ts = this->ts * y.ms - y.ts * this->ms;
temp.ms = this->ms * y.ms;
temp.Reduce();
return temp;
}
_________________________________
[2016-2017]
HK1
Cho oạn ch°¡ng trình tính toán với phân s nh° sau:
Hãy khai báo cài t lp phân s thích hợp ch°¡ng trình chạy úng. L°u ý
rng không °ợc chnh sa hàm main sinh viên cn viết các lnh #include
thích hp. (2 iểm)
HK2
Xây dng lp Thßi gian (giß, phút, giây) (0.5 iểm).
Định nghĩa các phép toán:
>> và << nhp, xut d liu thßi gian (1 iểm)
-- thc hin gim thßi gian i 1 giây (1 iểm)
HK3
Xây dng lớp a thức bc hai (1 iểm) th hiện các a thức bt hai có dng:
F(x)= ax
2
+ bx + c (a luôn khác 0)
Xây dựng các ph°¡ng thức: (2 iểm)
lOMoARcPSD| 40551442
TuanDM-HTTT2020
32
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
a. Ph°¡ng thức cho phép xác ịnh giá tr của a thc ng vi x=xo (nh F(xo)
).
b. Phép toán cộng (operator +) ể cộng hai a thức bc hai.
Gii:
HK1
#include<iostream>
using namespace std;
#pragma once class
PhanSo
{ private:
int ts, ms;
public:
void Xuat();
PhanSo();
PhanSo(int a, int
b); PhanSo(int a);
void Reduce();
PhanSo operator+(const PhanSo&);
};
#include "PhanSo.h"
PhanSo::PhanSo()
{
ts = 0;
ms = 1;
}
PhanSo::PhanSo(int a, int b)
{
ts = a;
ms = b;
}
PhanSo::PhanSo(int a)
{
ts = a;
ms = 1;
} void PhanSo::Reduce()
{
int ucln;
int a = abs(ts);
int b = abs(ms);
if (ts == 0 && ms == 0) {
ucln = ts + ms;
}
else {
while (a != b) {
if (a > b) {
a -= b;
}
else
lOMoARcPSD| 40551442
TuanDM-HTTT2020
33
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
{
b -= a;
}
}
ucln = a;
}
ts /= ucln;
ms /= ucln;
}
PhanSo::~PhanSo()
{
}
PhanSo PhanSo::operator + (const PhanSo& y)
{
PhanSo temp;
temp.ts = this->ts * y.ms + y.ts * this-
>ms; temp.ms = this->ms * y.ms;
temp.Reduce();
return temp;
}
void PhanSo::Xuat()
{
cout << "\nTu so: " << TuSo;
cout << "\nMau so: " << MauSo << endl;
}
HK2
class CTime {
private:
int gio;
int phut;
int giay;
public:
CTime();
CTime(int h, int m, int s);
~CTime();
friend ostream& operator<<(ostream& os, const CTime& T);
friend istream& operator>>(istream& is, CTime& T);
CTime operator-(int a);
CTime operator--();
CTime operator--(int);
};
CTime::CTime() {
this->gio = this->phut = this->giay = 0; }
CTime::CTime(int h, int m, int s)
{ this->gio =
h; this->phut =
lOMoARcPSD| 40551442
TuanDM-HTTT2020
34
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
m; this->giay =
s; }
CTime::~CTime()
{ }
istream& operator>>(istream& is, CTime& T)
{ cout << "Nhap gio:
"; is >> T.gio;
cout << "Nhap phut: ";
is >> T.phut; cout <<
"Nhap giay: "; is >>
T.giay; return is;
}
ostream& operator<<(ostream& os, const CTime& T)
{
os << T.gio << " gio " << T.phut << " phut " << T.giay << " giay ";
return os;
}
long CTime::GetTong()
{
return this->giay + this->phut * 60 + this->gio * 60 * 60; }long
CTime::GetTong()
{ return this->giay + this->phut * 60 + this->gio * 60 *
60; }
CTime CTime::operator-(int a)
{
CTime Time;
if (this->GetTong() - a < 0)
{
cout << "Loi!" << endl;
return Time;
}
else {
Time.gio =
(this-
>GetTong()
- a) /
3600;
Time.phut = ((this->GetTong() - a - Time.gio * 3600) / 60) % 60;
Time.giay = (this->GetTong() - a) % 60;
return Time;
}
}
CTime CTime::operator--()
{ return *this -
1;
}
CTime CTime::operator--(int a)
{
CTime temp;
temp = *this;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
35
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
*this - 1;
return temp;
}
HK3
class DaThucBacHai
{ private:
float a;
float b;
float c;
public:
DaThucBacHai();
DaThucBacHai(float a1, float b1, float c1);
DaThucBacHai(DaThucBacHai& dt);
float TinhGiaTri(DaThucBacHai dt, float
x0); DaThucBacHai operator+(const
DaThucBacHai&);
};
DaThucBacHai::DaThucBacHai()
{ a =
1; b =
0; c =
0;
}
DaThucBacHai::DaThucBacHai(float a1, float b1, float c1)
{ a =
a1; b =
b1; c =
c1; }
DaThucBacHai::DaThucBacHai(DaThucBacHai& dt)
{ a =
dt.a; b =
dt.b; c =
dt.c; }
float DaThucBacHai::TinhGiaTri(DaThucBacHai dt, float x0)
{ return a * pow(x0, 2) + b * x0 +
c;
}
DaThucBacHai DaThucBacHai::operator+(const DaThucBacHai& dt)
{
DaThucBacHai tong;
tong.a = this->a + dt.a;
tong.b = this->b + dt.b;
tong.c = this->c + dt.c;
return tong;
}
_________________________________
lOMoARcPSD| 40551442
TuanDM-HTTT2020
36
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
[2017-2018]
HK1
void main()
{ cNgay ng1; // ng1 s có giá trngày 1 tháng 1 năm 1 cNgay ng2(2017, 1);
// ng2 s có giá tr là ngày 1 tháng 1 năm 2017 cNgay ng3(2017, 1, 7);
// ng3 s có giá tr là ngày 7 tháng 1 năm 2017 cin>>ng1; cout<<ng1;
if(ng1 < ng2) cout << "Ngay 1 truoc ngay 2" << endl;
else cout << "Ngay 1 khong truoc ngay 2" << endl; }
Hãy ịnh nghĩa lớp cNgay thích hợp ch°¡ng trình không bị li biên dch
chy úng. L°u ý rằng không °ợc chnh sa hàm main và sinh viên cn viết c
các lnh #include thích hp. (3 iểm)
HK2
Xây dng lớp Đa thức bc n vi các toán t >>, <<, +. (3 iểm)
Gii:
HK1
#include<iostream>
using namespace std;
#pragma once class
cNgay
{ private: int nam,
thang, ngay; public:
cNgay();
cNgay(int a, int b); cNgay(int a, int b, int c);
friend istream& operator>>(std::istream&, cNgay&); friend
ostream& operator<<(std::ostream&, const cNgay);
bool operator<(cNgay&);
};
#include "Ngay.h" cNgay::cNgay()
{
nam = 1;
thang = 1;
ngay = 1;
} cNgay::cNgay(int a, int
b)
{
nam = a;
thang = b;
} cNgay::cNgay(int a, int b, int
c)
{
nam = a;
thang = b;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
37
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
nam = c;
} istream& operator>>(std::istream& is, cNgay&
x)
{
cout << "\nNhap nam :";
is >> x.nam; cout <<
"\nNhap thang :"; is >>
x.thang; cout << "\nNhap
ngay :"; is >> x.ngay;
return is;
} ostream& operator<<(std::ostream& os, const cNgay
x)
{
os << "\nNgay " << x.ngay << " thang " << x.thang << " nam " << x.nam << endl;
return os;
} bool cNgay::operator<(cNgay&
b)
{
if (nam <= b.nam)
{
if (nam < b.nam)
return true;
else
{
if (thang <= b.thang)
{
if (thang < b.thang)
return true;
else
{
if (ngay < b.ngay)
return true;
}
}
}
}
return false;
}
HK2
#include<iostream>
using namespace std;
#pragma once class
DaThuc { private:
int n;
int* arr; public:
DaThuc();
friend istream& operator>>(std::istream&, DaThuc&);
friend ostream& operator<<(std::ostream&, const DaThuc);
DaThuc operator+(const DaThuc&);
lOMoARcPSD| 40551442
TuanDM-HTTT2020
38
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
};
#include "DaThuc.h"
DaThuc::DaThuc()
{
int n = 1; arr
= new int[1];
arr[0] = 1;
} istream& operator>>(std::istream& is, DaThuc&
y)
{
cout << "\nNhap bac cua da thuc
:"; int m; is >> m; y.n =
m;
y.arr = new int[y.n + 1];
for (int i = y.n; i >= 0; i--)
{
cout << "\nNhap he bac " << i << " :";
cin >> y.arr[i];
}
return is;
} ostream& operator<<(std::ostream& os, const DaThuc
y) {
os << "\nHe so cua bac giam dan la:";
for (int i = y.n; i >= 0; i--)
{
os << y.arr[i] << " ";
}
return os;
}
DaThuc DaThuc::operator+(const DaThuc &y)
{
DaThuc z; if
(this->n > y.n)
{
z.n = this->n;
z.arr = new int[z.n + 1];
for (int i = y.n; i >= 0; i--)
{
z.arr[i] = this->arr[i] + y.arr[i];
}
int j = this->n;
while (j > y.n)
{
z.arr[j] = this->arr[j];
j--;
}
return z;
}
if (this->n < y.n)
{
DaThuc z;
z.n = y.n;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
39
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
//z = z.KhoiTao(y.n);
z.arr = new int[y.n + 1];
for (int i = this->n; i >= 0; i--)
{
z.arr[i] = this->arr[i] + y.arr[i];
}
int j = z.n;
while (j > this->n)
{
z.arr[j] = y.arr[j];
j--;
}
return z;
}
if (this->n == y.n)
{
DaThuc z;
z.n = this->n;
z.arr = new int[this->n + 1];
//z = z.KhoiTao(x.n);
for (int i = y.n; i >= 0; i--)
{
z.arr[i] = this->arr[i] + y.arr[i];
}
return z;
}
}
_________________________________
[2018-2019]
HK1
Định nghĩa lớp CDate biu din khái niệm ngày, tháng, năm (0.5 iểm) vi các
phép toán ++ (thêm mt ngày) theo dng prex ++a posix a++ (1 iểm).
Phép toán <<, >> xut, nhp d liu Cdate (1 iểm).
HK2
Xây dng lp thßi gian (giß, phút, giây) vi các toán t >>, << nhp xut
toán t ++ ể tăng thßi gian thêm 1 giây. (3 iểm)
Gii:
HK1
#include<iostream>
using namespace std;
#pragma once class
CDate
lOMoARcPSD| 40551442
TuanDM-HTTT2020
40
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
{ private: int ngay,
thang, nam; public:
CDate();
friend std::istream& operator>>(std::istream&, CDate&);
friend std::ostream& operator<<(std::ostream&, const CDate);
friend CDate operator+(const CDate, const int);
CDate& operator++();
CDate operator++(int);
bool ktNamNhuan(); long
long TongNgay(); long
operator-(CDate& y);
};
#include "CDate.h"
#include<iostream> using
namespace std;
CDate::CDate()
{ ngay =
0; thang =
0; nam =
0;
}
std::istream& operator>>(std::istream& is, CDate& x)
{
cout << "\nNhap ngay :";
is >> x.ngay; cout <<
"\nNhap thang :"; is >>
x.thang; cout << "\nNhap
nam :"; is >> x.nam;
return is;
}
std::ostream& operator<<(std::ostream& os, const CDate x)
{
os << "\nNgay " << x.ngay << " thang " << x.thang << " nam " << x.nam;
return os;
}
CDate& CDate::operator++()
{ int k = ngay +
1; do {
switch (thang)
{ case 1:case 3:case 5: case 7:case 8: case
10: case 12: if (k > 31) {
thang++; if (thang == 13)
{ thang = 1;
nam++; } k -= 31; }
else { ngay = k; k =
0; } break; case 4:case 6: case 9:
case 11: if (k > 30) {
thang++; k -= 30; } else
lOMoARcPSD| 40551442
TuanDM-HTTT2020
41
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
{ ngay = k; k = 0; }
break; case 2: if (nam % 400 == 0 || (nam % 4
== 0 && nam % 100 != 0)) {
if (k > 29)
{
thang++;
k -= 29; }
else {
ngay = k;
k = 0;
}
} else
{ if (k > 28)
{
thang++;
k -= 28; }
else {
ngay = k;
k = 0;
}
} break;
} } while (k >
0); return
*this;
}
CDate CDate::operator++(int y)
{
CDate temp; temp.nam
= this->nam; temp.thang =
this->thang; temp.ngay =
this->ngay; int k = ngay
+ 1; do {
switch (thang) { case 1:case 3:case 5:
case 7:case 8: case 10: case 12: if (k > 31)
{ thang++; if (thang == 13)
{
thang = 1;
nam++; }
k -= 31; }
else {
ngay = k;
k = 0; } break;
case 4:case 6: case 9: case 11: if (k > 30)
{ thang++; k -= 30; }
else { ngay = k; k =
0; } break; case 2: if
(nam % 400 == 0 || (nam % 4 == 0 && nam % 100 != 0))
{
if (k > 29)
{
thang++;
k -= 29; }
lOMoARcPSD| 40551442
TuanDM-HTTT2020
42
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
else {
ngay = k;
k = 0;
}
} else
{
if (k > 28)
{
thang++;
k -= 28; }
else {
ngay = k;
k = 0;
}
} break;
} } while (k >
0); return temp;
}
HK2
class CTime {
private:
int gio;
int phut;
int giay;
public:
CTime();
CTime(int h, int m, int s);
~CTime();
friend ostream& operator<<(ostream& os, const CTime& T);
friend istream& operator>>(istream& is, CTime& T);
CTime operator+(int a);
CTime operator++();
CTime operator++(int);
};
CTime::CTime() {
this->gio = this->phut = this->giay = 0; }
CTime::CTime(int h, int m, int s)
{ this->gio =
h; this->phut =
m; this->giay =
s; }
CTime::~CTime()
{
}
istream& operator>>(istream& is, CTime& T)
{ cout << "Nhap gio:
"; is >> T.gio;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
43
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
cout << "Nhap phut: ";
is >> T.phut; cout <<
"Nhap giay: "; is >>
T.giay; return is;
}
ostream& operator<<(ostream& os, const CTime& T)
{
os << T.gio << " gio " << T.phut << " phut " << T.giay << " giay ";
return os;
}
long CTime::GetTong()
{
return this->giay + this->phut * 60 + this->gio * 60 * 60; }long
CTime::GetTong()
{ return this->giay + this->phut * 60 + this->gio * 60 *
60; }
CTime CTime::operator+(int a)
{
CTime Time;
Time.gio = (this->GetTong() + a) / 3600;
Time.phut = ((this->GetTong() + a - Time.gio * 3600) / 60) % 60;
Time.giay = (this->GetTong() + a) % 60;
return Time; }
CTime CTime::operator++()
{ return *this +
1;
}
CTime CTime::operator++(int a)
{
CTime temp;
temp = *this;
*this + 1;
return temp;
}
_________________________________
[2019-2020]
HK2
Cho lp Phân s (CPhanSo). Hãy khai báo ịnh nghĩa các ph°¡ng thức cn
thiết ể các ối t°ợng thuc lp CPhanSo có th thc hiện °ợc các câu lnh sau:
CPhanSo a(5, 3); CPhanSo b, c, kq; cin>>b>> c;
kq = a + b + 5 + c; cout<<"Ket qua la: "<<kq; if (
lOMoARcPSD| 40551442
TuanDM-HTTT2020
44
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
a==b ) cout<<"Phan so a bang phan so
b"<<endl;
Gii:
HK2
#include<iostream>
using namespace std;
#pragma once class
PhanSo
{ private:
int ts,
ms;
public:
PhanSo();
PhanSo(int a); void
Reduce();
PhanSo operator+(const PhanSo&); bool
operator==(PhanSo&); friend istream&
operator>>(istream& is, PhanSo& x);
friend ostream& operator<<(ostream& os, const PhanSo& x);
~PhanSo();
};
#include "PhanSo.h"
PhanSo::PhanSo() {
ts = 0; ms =
1;
}
PhanSo::PhanSo(int a)
{
ts = a;
ms = 1;
} void PhanSo::Reduce()
{
int ucln;
int a = abs(ts);
int b = abs(ms);
if (ts == 0 && ms == 0) {
ucln = ts + ms;
}
else {
while (a != b) {
if (a > b) {
a -= b;
}
else
{
b -= a;
}
}
ucln = a;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
45
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
}
ts /= ucln;
ms /= ucln;
}
PhanSo::~PhanSo()
{
}
PhanSo PhanSo::operator + (const PhanSo& y)
{
PhanSo temp;
temp.ts = this->ts * y.ms + y.ts * this->ms;
temp.ms = this->ms * y.ms;
temp.Reduce();
return temp;
}
bool PhanSo::operator ==(PhanSo& y)
{
float s1 = this->ts / this->ms;
float s2 = y.ts / y.ms;
if (s1 == s2)
return true;
return false;
} istream& operator>>(istream& is, PhanSo&
x)
{
cout << "Nhap tu so: ";
is >> x.ts; cout << "Nhap mau
so: "; is >> x.ms;
return is;
} ostream& operator<<(ostream& os, const PhanSo&
x)
{
os << "Tu so: ";
os << x.ts; os << " Mau
so: "; os << x.ms;
return os;
}
__________________________________________________________________
lOMoARcPSD| 40551442
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
CÂU 3.
[2013-2014]
HK1
Gi s Tr°ßng ĐH CNTT TP.HCM ào tạo sinh viên theo 2 h là h cao ẳng
h i hc. Thông n cn qun ca một sinh viên cao ng bao gm: s
sinh viên, h tên, a ch, tng s n chỉ, iểm trung bình, iểm thi tt nghip.
Thông n cn qun ca một sinh viên i hc bao gm: s sinh viên, h
tên, ịa ch, tng s n ch, iểm trung bình, tên luận văn, iểm lun văn.
Cách xét tt nghip ca sinh viên mi h là khác nhau:
- Sinh viên h cao ng tt nghip khi tng s n ch t 120 trá lên, iểm
trung bình t 5 trá lên và iểm thi tt nghip phải ạt t 5 trá lên.
- Sinh viên h i hc tt nghip khi có tng s n ch t 170 trá lên, iểm trung
bình t 5 trá lên và phi bo v luận văn với iểm s ạt °ợc t 5 iểm trá lên.
Bạn hãy ề xut thiết kế các lớp ối t°ợng cn thiết ể qun lý danh sách các sinh
viên của Tr°ßng và h tr xét tt nghip cho các sinh viên theo êu chí ặt ra
nh° trên.
Hãy viết ch°¡ng trình bằng C++ cho phép thc hin các yêu cu sau (5 iểm):
- Nhp vào danh sách sinh viên, có th s dng string cho các chui kí t.
- Cho biết s l°ợng sinh viên ủ iều kin tt nghip?
- Cho biết sinh viên ại hc nào có iểm trung bình cao nht?
HK2
Mùa lại ến, công viên văn hóa Đầm Sen hân hoan ón chào các em thiếu
nhi, các bn hc sinh, sinh viên và toàn th quí khách ến tham quan và tham
d các trò ch¡i thú y hp dn. Gi s trên mi chiếc công viên
phát hành, u ghi li (chui), h tên ng°ßi ch vé (chuỗi), năm sinh
của ng°ßi ó (số nguyên) s trò ch¡i ng°ßi ó tham dự (s nguyên). Để
phc v tối a cho lợi ích khách hàng, công viên phát hành 2 loi vé là vé trn
gói và vé tng phn. Giá vé trn gói là 200.000 VNĐ. Ng°ßi ch¡i mua vé trn
gói có th ch¡i tất c 30 trò ch¡i có trong công viên. Đi vi vé tng phần, giá
vé là 70.000 VNĐ (giá vé vào cổng), ngoài ra, khi ng°ßi ch¡i tham d một trò
ch¡i nào thì cần tr thêm 20.000 VNĐ cho trò ch¡i ó. y viết ch°¡ng trình
lOMoARcPSD| 40551442
TuanDM-HTTT2020
47
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
bằng C++ cho phép thc hin các chức năng sau: a. Nhp vào danh sách các
vé.
b. Tính tng ền vé mà công viên thu °ợc.
c. Hãy cho biết, có bao nhiêu vé ã bán là vé từng phn.
Yêu cu:
S dng nh cht kế tha và a hình. Vẽ lp: mô t các lp, các thuc nh,
các ph°¡ng thức mi liên h các lp (2 iểm). Lp trình các chức năng °ợc
yêu cu (3 iểm).
Gii:
HK1
- S¡ ồ lớp ối t°ợng:
- Ch°¡ng trình:
#include <bits/stdc++.h>
using namespace
std;
class SinhVien
{ protected: int
MSSV; string
HoTen; string
DiaChi; float
DTB; int
TongSoTinChi;
public:
SinhVien() {} ~SinhVien() {}
virtual void Nhap(); virtual
void Xuat(); virtual bool
XetTotNghiep() = 0; float
getDTB() { return DTB; }
};
void SinhVien::Nhap()
{ cout << "Nhap thong tin sinh
vien\n"; cout << "Nhap MSSV: ";
cin >> MSSV; cout << "Nhap HoTen: ";
cin >> HoTen; cout << "Nhap DiaChi:
"; cin >> DiaChi; cout << "Nhap
DTB: "; cin >> DTB; cout << "Nhap
So Tin Chi: "; cin >> TongSoTinChi;
}
lOMoARcPSD| 40551442
TuanDM-HTTT2020
48
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
void SinhVien::Xuat()
{ cout << "Thong tin sinh vien\n";
cout << "MSSV: " << MSSV << "\n";
cout << "HoTen: " << HoTen << "\n";
cout << "DiaChi: " << DiaChi << "\n";
cout << "DTB: " << DTB << "\n";
cout << "Tong So Tin Chi: " << TongSoTinChi << "\n";
}
class SinhVienCaoDang : public SinhVien
{ protected: float
DiemTotNghiep;
public:
SinhVienCaoDang() {}
~SinhVienCaoDang() {}
void Nhap(); void
Xuat(); bool
XetTotNghiep();
}; void
SinhVienCaoDang::Nhap()
{
SinhVien::Nhap(); cout
<< "Diem tot nghiep: "; cin
>> DiemTotNghiep;
} void
SinhVienCaoDang::Xuat()
{
SinhVien::Xuat();
cout << "Diem tot nghiep: " << DiemTotNghiep << "\n";
} bool
SinhVienCaoDang::XetTotNghiep()
{
if (TongSoTinChi >= 120 and DTB >= 5)
return true; else
return false;
} class SinhVienDaiHoc : public
SinhVien
{ protected:
string TenLuanVan;
float DiemLuanVan;
public:
SinhVienDaiHoc() {}
~SinhVienDaiHoc() {}
void Nhap(); void
Xuat(); bool
XetTotNghiep();
};
void SinhVienDaiHoc::Nhap()
{
SinhVien::Nhap(); cout <<
"Nhap ten luan van: "; cin >>
TenLuanVan; cout << "Nhap diem
lOMoARcPSD| 40551442
TuanDM-HTTT2020
49
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
luan van: "; cin >>
DiemLuanVan;
}
void SinhVienDaiHoc::Xuat()
{
SinhVien::Xuat();
cout << "Ten luan van: " << TenLuanVan << "\n";
cout << "Diem luan van: " << DiemLuanVan << "\n";
}
bool SinhVienDaiHoc::XetTotNghiep()
{ if (TongSoTinChi >= 170 and DTB >= 5 and DiemLuanVan >=
5) return true; else return false;
} int main() { cout << "Hello
World!\n"; //TestCode
//cau 1 int SoLuongSinhVien;
cout << "Nhap so luong sinh vien: ";
cin >> SoLuongSinhVien; SinhVien*
arr[SoLuongSinhVien]; int loai;
for (int i = 0; i < SoLuongSinhVien; i++)
{
cout << "1. Sinh vien cao dang 2. Sinh vien dai hoc\n";
cout << "Nhap loai sinh vien: "; cin >> loai;
if (loai == 1)
arr[i] = new SinhVienCaoDang();
else
arr[i] = new SinhVienDaiHoc();
arr[i]->Nhap();
}
//cau 2
int SoLuongSinhVienTotNghiep = 0; for
(int i = 0; i < SoLuongSinhVien; i++)
{
if (arr[i]->XetTotNghiep() == true)
++SoLuongSinhVienTotNghiep;
}
cout << "SoLuongSinhVienTotNghiep: " << SoLuongSinhVienTotNghiep;
//cau 3
float DiemCaoNhat = -1.0;
int pos;
for (int i = 0; i < SoLuongSinhVien; i++)
{
if (arr[i]->getDTB() > DiemCaoNhat)
{
DiemCaoNhat = arr[i]->getDTB();
pos = i;
}
}
cout << "Diem trung binh cao nhat la: " << DiemCaoNhat << "\n";
cout << "Sinh vien do la: "; arr[pos]->Xuat(); return 0; }
(Source: anhkiet1227)
lOMoARcPSD| 40551442
TuanDM-HTTT2020
50
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
HK2
- S¡ ồ lớp ối t°ợng:
- Ch°¡ng trình:
#include <bits/stdc++.h> using
namespace std;
class Ve { protected:
string MaVe, HoTen; int
NamSinh, SoTroChoi; int
GiaVe; int
SoLuongTroChoi; public:
Ve() {} ~Ve() {}
virtual int getGiaVe() = 0;
virtual void Nhap();
virtual int getLoai() = 0;
}; void Ve::Nhap() { cout <<
"Nhap thong tin\n"; cout <<
"Ma Ve: "; cin >> MaVe;
cout << "Ho Ten: "; cin >>
HoTen; cout << "Nam Sinh: ";
cin >> NamSinh; cout << "So
luong tro choi: "; cin >>
SoLuongTroChoi;
}
class VeTronGoi : public Ve
{ public:
VeTronGoi() {}
~VeTronGoi() {}
int getGiaVe() {
return 200000; }
void Nhap() {
Ve::Nhap();
}
int getLoai() { return 1; }
};
class VeTungPhan : public Ve
{ public:
VeTungPhan() {}
~VeTungPhan() {}
int getGiaVe() {
return 70000 + 20000 * SoLuongTroChoi;
} void
Nhap() {
Ve::Nhap();
}
int getLoai() { return 2; }
}; int main() { cout <<
"Hello World!\n"; //cau A
lOMoARcPSD| 40551442
TuanDM-HTTT2020
51
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
int SoLuongVe; cout << "Nhap
so luong ve: "; cin >>
SoLuongVe; Ve*
arr[SoLuongVe];
int loai;
for (int i = 0; i < SoLuongVe; i++)
{
cout << "Nhap loai ve: 1 Ve tron goi 2 Ve tung phan\n";
cin >> loai; if (loai == 1)
{
arr[i] = new VeTronGoi();
}
if (loai == 2)
{
arr[i] = new VeTungPhan();
}
arr[i]->Nhap();
} //cau B
int TongTien = 0;
for (int i = 0; i < SoLuongVe; i++)
TongTien += arr[i]->getGiaVe();
cout << "Tong tien ve thu duoc: " << TongTien << "\n";
//cau C
int SoVeTungPhan = 0;
for (int i = 0; i < SoLuongVe; i++)
if (arr[i]->getLoai() == 2)
++SoVeTungPhan;
cout << "So luong ve tung phan: " << SoVeTungPhan << "\n";
return 0; }
(Source: anhkiet1227)
_________________________________
lOMoARcPSD| 40551442
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
[2014-2015]
HK2
Xây dựng ch°¡ng trình mô phỏng trò ch¡i cß t°ớng vi các mô t nh° sau:
Bàn cß là mt hình ch nhật do 9 °ßng dọc và 10 °ßng ngang ct nhau vuông
góc ti 90 iểm hp thành. Mt khong trng gi sông (hay hà) nm ngang
gia bàn cß, chia bàn cß thành hai phần ối xng bng nhau.
Mi bênmột cung T°ớng hình vuông (Cung) do 4 ô hp thành ti các °ßng
dc 4, 5, 6 k t °ßng ngang cui ca mi bên, trong 4 ô này v hai °ßng
chéo xuyên qua.
LuÁt ch¢i
Quân cß °ợc di chuyn theo lut sau:
1. T°ớng: Đi từng ô một, i ngang hoặc dọc. T°ớng luôn luôn phi á trong phm
vi cung không °ợc ra ngoài. Cung tức hình vuông 2X2 °ợc ánh du
bằng °ßng chéo hình ch X
2. Sĩ: Đi xéo 1 ô mỗiớc. Sĩ luôn luôn phải á trong cung nh° T°ớng.
3. T°ợng: Đi chéo 2 ô (ngang 2 và dọc 2) cho mỗi n°ớc i. T°ợng ch °ợc phép
á mt bên ca bàn cß, không °ợc di chuyn sang na bàn cß của ối ph°¡ng.
N°ớc i của t°ợng s không hp l khi có mt quân cß nm chn gia °ßng i.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
53
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
4. Xe: Đi ngang hay dọc trên bàn cß miễn ng b quân khác cản °ßng t iểm
i ến iểm ến.
5. Mã: Đi ngang 2 ô dọc 1 ô (hay dc 2 ô ngang 1 ô) cho mỗi n°ớc i. Nếu
có quân nm ngay bên cnh mã và cản °ßng ngang 2 (hay °ßng dc 2), mã
b cn không °ợc i °ßng ó.
6. Pháo: Đi ngang và dọc ging nh° xe. Điểm khác bit là nếu pháo mun ăn
quân, pháo phi nhảy qua úng 1 quân nào ó. Khi không ăn quân, tất c
những iểm t ch i ến ch ến phi không có quân cn.
7. Tốt: i một ô mỗi n°ớc. Nếu tốt ch°a v°ợt qua sông, ch th i thng
ến. Khi ã v°ợt sông ri, tt th i ngang 1 n°ớc hay i thẳng ến 1 b°ớc
mỗi n°ớc.
Áp dng kiến thc lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế chi
ết các lớp ối t°ợng (1.5 iểm), khai báo và ịnh nghĩa các lớp gm thuc tính
và ph°¡ng thức (1.5 iểm) thc hin các yêu cu sau:
1. To bàn cß ban ầu (vi các mô t nh° trên) (1 iểm).
2. Yêu cầu ng°ßi dùng chn mt quân cß, xuất cách i của quân cß t°¡ng ng (1
iểm).
Lưu ý: Trong tr°ßng hợp sinh viên không ch¡i trò ch¡i này tr°ớc ây thì phải c
k thông n v trò ch¡i trên (các thông tin trên sinh viên thc hin các yêu
cu ca thi) và nghiêm túc làm bài.
Gii:
HK2
- S¡ ồ lớp ối t°ợng:
- Ch°¡ng trình:
#include <bits/stdc++.h>
lOMoARcPSD| 40551442
TuanDM-HTTT2020
54
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
using namespace std;
class QuanCo
{ protected:
string mau;
int x, y;
public:
QuanCo(string mau, int x, int y)
{
this->mau = mau;
this->x = x; this->y
= y;
} virtual void
DiChuyen() = 0;
};
class Tuong_Vua : public QuanCo
{ public:
Tuong_Vua(string mau, int x, int y) : QuanCo(mau, x, y) {}
void DiChuyen()
{
cout << "Di tung o mot, di ngang hoac doc. Tuong luon lu n phai o trong pham vi
cung va khong đ±ợc ra ngoai. Cung tuc la hinh vuong 2X2 duoc danh dau bang duong cheo
hinh chu X\n";
}
}; class Si : public
QuanCo
{ public:
Si(string mau, int x, int y) : QuanCo(mau, x, y) {}
void DiChuyen()
{
cout << "Di cheo 1 o moi nuoc. Si luon luon phai o trong cung.\n";
}
};
class Tuong : public QuanCo
{ public:
Tuong(string mau, int x, int y) : QuanCo(mau, x, y) {}
void DiChuyen()
{
cout << "Di cheo 2 o (ngang 2 va doc 2) cho moi buoc di. Tuong chi duoc phep di
mot ben cua ban co khong duoc di chuyen sang nua ban co doi phuong. Nuoc di cua tuong se
khong hop le khi co mot quan nam giua duong di\n";
}
};
class Ma :public
QuanCo
{ public:
Ma(string mau, int x, int y) : QuanCo(mau, x, y) {}
lOMoARcPSD| 40551442
TuanDM-HTTT2020
55
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
void DiChuyen()
{
cout << "Di ngang 2 o va doc 1 o (hay doc 2 o va ngang 1 o) cho moi nuoc di. Neu
co quan nam ngay ben canh ma va can duong ngang 2 (hay duong doc 2), ma bi can khogn duoc
di duong do.\n";
}
}; class Xe : public
QuanCo
{ public:
Xe(string mau, int x, int y) : QuanCo(mau, x, y) {}
void DiChuyen()
{ cout << "Di ngang hay doc tren ban co mien la dung bi quan khac can duong
di den diem den.\n";
}
}; class Phao : public
QuanCo
{ public:
Phao(string mau, int x, int y) : QuanCo(mau, x, y) {}
void DiChuyen()
{
cout << "Di ngang va doc giong nhu xe. Diem khac biet la phao muon an quan co,
phao phai nhay qua 1 quan. Khi khong an quan, tat ca nhung diem tu cho di den den cho
phai den khong co quan can.\n";
}
}; class Tot : public
QuanCo
{ private:
string mau;
int x, y; public:
Tot(string mau, int x, int y) : QuanCo(mau, x, y) {}
void DiChuyen()
{ cout << "Di mot o moi nuoc. Neu tot chua vuot song chi co the di thang
tien. Khi da vuot song roi, tot co the di ngang hoac thang 1 buoc.\n";
}
}; int
main() {
// Cau 1 QuanCo* a[32];
string trang = "trang"; string den
= "den"; cout << "Khoi tao ban
co\n"; a[0] = new Tuong_Vua(trang,
1, 5); a[1] = new Tuong_Vua(den,
10, 5); a[2] = new Si(trang, 1,
4); a[3] = new Si(trang, 1, 6);
a[4] = new Si(den, 10, 4); a[5] =
new Si(den, 10, 6); a[6] = new
Ma(trang, 1, 2); a[7] = new
Ma(trang, 1, 8); a[8] = new
Ma(den, 10, 2); a[9] = new Ma(den,
lOMoARcPSD| 40551442
TuanDM-HTTT2020
56
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
10, 8); a[10] = new Xe(trang, 1,
1); a[11] = new Xe(trang, 1, 9);
a[12] = new Xe(den, 10, 1); a[13]
= new Xe(den, 10, 9); a[14] = new
Phao(trang, 3, 2); a[15] = new
Phao(trang, 3, 8); a[16] = new
Phao(den, 8, 2); a[17] = new
Phao(den, 8, 8); a[18] = new
Tot(trang, 4, 1); a[19] = new
Tot(trang, 4, 3); a[20] = new
Tot(trang, 4, 5); a[21] = new
Tot(trang, 4, 7); a[22] = new
Tot(trang, 4, 9); a[23] = new
Tot(den, 7, 1); a[24] = new
Tot(den, 7, 3); a[25] = new
Tot(den, 7, 5); a[26] = new
Tot(den, 7, 7); a[27] = new
Tot(den, 7, 9); a[28] = new
Tuong(trang, 1, 3); a[29] = new
Tuong(trang, 1, 7); a[30] = new
Tuong(den, 10, 3); a[31] = new
Tuong(den, 10, 7);
// Cau 2
cout << "Nhap quan co muon di chuyen, tu 0 - 31 \n";
int CoDuocChon; cin >> CoDuocChon;
a[CoDuocChon]->DiChuyen(); return 0; }
(Source: anhkiet1227)
_________________________________
lOMoARcPSD| 40551442
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
[2015-2016]
HK2
Xây dựng ch°¡ng trình phng biên son nhc vi các t kiu âm nhạc
nh° sau:
Nt nhc: là ký hiu trong bn nhạc dùng ể xác ịnh cao ộ ( ộ cao), trường (
dài, ộ ngân vang) ca từng âm thanh °ợc vang lên trong bn nhc.
7 ký hiu nt nhạc dùng xác
nh cao ộ theo th t t thấp ến
cao, ó Đô (C), (D), Mi (E),
Fa (F), Sol (G), La (A),Si (B).
Để xác ịnh tr°ßng ca nt nhạc cao k trên, ng°ßi ta cũng dùng 7 hình
nốt ể th hiện, ó là:
Du lng (Z - Zero) hiu cho biết phải ng°ng, không diễn tu âm thanh
(không cao ) trong mt thßi gian nào ó. Các du lng trong thßi gian t°¡ng
ng (giá tr tr°ßng ộ) vi dng du nhạc nào, thì cũng có tên gọi t°¡ng t.
Tr°ßng ộ
4
2
1
1/2
1/4
1/8
1/16
Ví d: Ký hiu bn nhc
lOMoARcPSD| 40551442
TuanDM-HTTT2020
58
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Tr°ờng
1
1/2
1/2
1/2
1
1/2
1
1
2
Cao ộ
C
C
A
G
Không
có (Z)
D
C
C
F
Nt
Đô
en
Đô
móc
¡n
La móc
¡n
Sol
móc
¡n
Du
lng
en
Rê
móc
¡n
Đô
en
Đô
en
Fa
trng
Áp dng kiến thc lập trình h°ớng ối t°ợng (kế thừa, a nh) thiết kế chi
ết các lớp ối t°ợng (1.5 iểm) và y dựng ch°¡ng trình thực hin các yêu cu
sau:
1. Son mt bn nhc. (1.5 iểm)
2. Tìm và ếm có bao nhiêu du lặng en (Q) trong bản nhc. (1 iểm)
3. Cho biết nt nhạc có cao ộ cao nht trong bn nhc. (1 iểm)
Lưu ý: Trong tr°ßng hp sinh viên không biết v nhạc tr°ớc ây tphải c
k thông tin trên (các thông tin trên sinh viên thc hin các yêu cu của
thi) và nghiêm túc làm bài. Giám th coi thi không gii thích gì thêm.
HK3
Xây dựng ch°¡ng trình mô phỏng game võ lâm truyn kì vi các mô t nh° sau:
Võ lâm truyn mt ta game theo phong cách nhp vai kiếm hip xut
hin t những ngày u trên th tr°ßng game online Vit Nam. Trong game,
ng°ßi ch¡i có thể t°¡ng tác với nhau gii trí hoc êu dit quái vật ể phát trin
nhân vt ca mình.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
59
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Nhân vật: Đ°ợc xem nh° i din cho một ng°ßi ch¡i. Mỗi nhân vt thuc v
mt môn phái nào ó trong tổng s 10 môn phái ca game. Mt nhân vt
mt giá tr th hin cấp ộ và mc sát th°¡ng. Trong ó Sát th°¡ng = Cấp ộ x 5
Quái vật: Để gia tăng cấp nhân vt ca mình, mỗi ng°ßi ch¡i sẽ thông qua
vic êu dit các quái vt. hai loi quái vật : thông th°ßng ầu lĩnh. Các
quái vật cũng s kh năng tấn công lại ng°ßi ch¡i. Quái vật thông th°ßng:
Sát th°¡ng = Cấp x 3. Quái vật ầu lĩnh: Sát th°¡ng = Cấp ộ x 7.
Một nét c sc của game ó hệ thống ngũ hành t°¡ng sinh t°¡ng khắc, mi
mt môn phái quái vt s thuc v một <hành= nhất ịnh t°¡ng tác giữa
các ng°ßi ch¡i với nhau, giữa ng°ßi ch¡i với quái vật u da trên các quy tc
v ngũ hành.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
60
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Quy tắc tương sinh: (S) Sát th°¡ng gây ra cho ng°ßi ch¡i hoặc quái vt + 10
%
d: Ho sinh thổ, sát th°¡ng ng°ßi ch¡i (hoặc quái vt ) h ho y ra cho
ng°ßi ch¡i (hoặc quái vt) h th + 10 %
Quy tắc tương khc: (K) Sát th°¡ng gây ra cho ng°ßi ch¡i hoặc quái vt ± 20 %
d: Mc khc thổ, sát th°¡ng ng°ßi ch¡i (hoặc quái vt ) h mc gây ra cho
ng°ßi ch¡i (hoc quái vt) h th + 20 %. Ng°ợc lại, sát th°¡ng ng°ßi ch¡i (hoặc
quái vt) h th gây ra cho ng°ßi ch¡i (hoặc quái vt) h mc - 20
%
Áp dng kiến thc lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế chi
ết các lớp ối t°ợng (1.5 iểm) và xây dựng ch°¡ng trình thực hin các yêu cu
sau:
1. To và qun lý một danh sách các ng°ßi ch¡i và quái vật. (1.5 iểm)
2. Cho biết phn t có mức sát th°¡ng cao nhất trong danh sách. (1 iểm)
lOMoARcPSD| 40551442
TuanDM-HTTT2020
61
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
3. Cho hai phn t A B, so sánh giá tr sát th°¡ng tác ng A lên B ng°ợc
li. (1 iểm)
Lưu ý: Trong tr°ßng hp sinh viên không biết v trò ch¡i này tr°ớc ây tphải
c k thông tin trên (các thông tin trên ủ sinh viên thc hin các yêu cu ca
thi) và nghiêm túc làm bài. Giám th coi thi không gii thích gì thêm.
Gii:
HK2
- S¡ ồ lớp ối t°ợng:
- Ch°¡ng trình:
#include <iostream> using namespace std; class
KyHieu
{ protected: float
TruongDo;
public:
virtual void Nhap(); virtual bool
LaDauLangDen(); virtual int
LayCaoDo() = 0;
};
void KyHieu::Nhap()
{
int t;
cout << "Nhap gia tri truong do:"; cout << "1.Tron
2.Trang 3.Den 4.Moc don"; cout << "5.Moc kep 6.Moc
tam 7.Moc tu"; cin >> t;
switch (t)
{
lOMoARcPSD| 40551442
TuanDM-HTTT2020
62
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
case 1: TruongDo = 4;
break;
case 2: TruongDo = 2;
break;
case 3: TruongDo = 1;
break;
case 4: TruongDo = 0.5;
break;
case 5: TruongDo = 0.25;
break;
case 6: TruongDo = 0.125;
break;
case 7: TruongDo = 0.0625;
break;
}
} bool
KyHieu::LaDauLangDen()
{
return false;
} class NotNhac :public
KyHieu
{ private: int
CaoDo;
public:
void Nhap();
int LayCaoDo();
}; void
NotNhac::Nhap()
{
//Nhap cao do int t; cout << "Nhap gia tri
cao do:"; cout << "1.Do(C) 2.Re(D) 3.Mi(E)
4.Fa(F)";
cout << "5.Sol(G) 6.La(A) 7.Si(B)"; cin
>> t; CaoDo = t;
//Nhap truong do KyHieu::Nhap();
}
int NotNhac::LayCaoDo()
{
return CaoDo;
}
class DauLang :public KyHieu
{ public:
bool LaDauLangDen(); int
LayCaoDo();
};
bool DauLang::LaDauLangDen()
{
if (TruongDo == 1)
return true; return
false;
}
int DauLang::LayCaoDo()
lOMoARcPSD| 40551442
TuanDM-HTTT2020
63
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
{ return 0;
} void
main()
{
KyHieu* BanNhac[50];
int n;
//cau 1. Soan ban nhac
cout << "Nhap vao so luong cac ky hieu am nhac"; cin >> n;
for (int i = 0; i < n; i++)
{
int t;
cout << "Chon 1 de soan not nhac"; cout << " va 2 de soan dau
lang"; cin >> t;
switch (t)
{
case 1: BanNhac[i] = new
NotNhac(); break;
case 2: BanNhac[i] = new
DauLang(); break;
}
BanNhac[i]->Nhap();
}
//cau 2. Dem dau lang den int count = 0;
for (int i = 0; i < n; i++)
if (BanNhac[i]->LaDauLangDen() ==
true) count++;
cout << "So dau lang den la" << count;
//cau 3.Tim not nhac co cao do cao nhat int max = BanNhac[0]->LayCaoDo();
int vt = 0;
for (int i = 1; i < n; i++)
if (BanNhac[i]->LayCaoDo() > max)
{
max = BanNhac[i]->LayCaoDo();
vt = i;
}
cout << "Vi tri not nhac co cao do cao nhat" << vt; }
(Source: internet)
HK3
- S¡ ồ lớp ối t°ợng:
- Ch°¡ng trình:
#include <bits/stdc++.h>
using namespace
std; class Base {
private:
lOMoARcPSD| 40551442
TuanDM-HTTT2020
64
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
int He; // 0. KIm, 1. Moc , 2. Thuy, 3.Hoa,4. Tho
double Satthuong;
public:
Base();
~Base();
virtual void nhap();
virtual void xuat(); bool
tinhTuongtac(Base& b); double
getST()
{
return Satthuong;
}
void setST(double _ST)
{
Satthuong = _ST;
}
void setHe(int m)
{
He = m;
}
int getHe()
{
return He;
}
};
Base::Base() {}
Base::~Base() {}
void Base::nhap()
{
cout << "Nhap he: 0.Kim 1.Moc 2.Thuy 3.Hoa 4.Tho";
cin >> He;
}
void Base::xuat()
{
cout << "He ngu hanh:" << endl;
switch (He)
{
case 0:
cout << "He Kim" <<
endl; break; case
1:
cout << "He Moc" <<
endl; break; case
2:
cout << "He Thuy" <<
endl; break; case
3:
cout << "He Hoa" <<
endl; break; case
4:
lOMoARcPSD| 40551442
TuanDM-HTTT2020
65
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
cout << "He Tho" << endl;
break;
}
cout << "Sat thuong" << Satthuong << endl;
} bool Base::tinhTuongtac(Base&
b)
{
double STtuongtacAB = this->getST();
double STtuongtacBA = b.getST(); if ((this->He
== 0 && b.getHe() == 1) || (this-
>He == 1 && b.getHe() == 4) ||
(this->He == 2 && b.getHe() == 3) ||
(this->He == 3 && b.getHe() == 0) ||
(this->He == 4 && b.getHe() == 2))
{
STtuongtacAB = this->getST() * 120 / 100;
STtuongtacBA = b.getST() * 80 / 100;
}
else
{
if ((b.getHe() == 0 && this->He == 1) ||
(b.getHe() == 1 && this->He == 4) ||
(b.getHe() == 2 && this->He == 3) ||
(b.getHe() == 3 && this->He == 0) ||
(b.getHe() == 4 && this->He == 2))
{
STtuongtacBA = this->getST() * 120 / 100;
STtuongtacAB = b.getST() * 80 / 100;
}
}
if ((this->He == 0 && b.getHe() == 2) ||
(this->He == 1 && b.getHe() == 3) ||
(this->He == 2 && b.getHe() == 1) ||
(this->He == 3 && b.getHe() == 4) ||
(this->He == 4 && b.getHe() == 0))
{
STtuongtacAB = this->getST() * 110 / 100;
}
if (STtuongtacAB > STtuongtacBA)
return true;
return false;
}
class NhanVat : public Base
{ private:
char Monphai[40];
int cap;
public:
NhanVat();
virtual ~NhanVat();
lOMoARcPSD| 40551442
TuanDM-HTTT2020
66
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
void nhap(); void
xuat();
};
NhanVat::NhanVat() {}
NhanVat::~NhanVat() {}
void NhanVat::nhap()
{
int chose = 0;
Base::nhap();
//
switch (Base::getHe())
{
case 0:
{
cout << "Chon mon phai: 0.Thieu lam 1.Thien vuong " << endl;
cin >> chose;
switch (chose)
{
case 0:
strcpy(Monphai, "Thieu
lam"); break;
case 1:
strcpy(Monphai, "Thien vuong");
break;
}
break;
}
case 1:
{
cout << "Chon mon phai: 0.Ngu doc 1.Duong mon " <<
endl; cin >> chose; switch (chose)
{
case 0:
strcpy(Monphai, "Ngu
doc"); break;
case 1:
strcpy(Monphai, "Duong mon");
break;
}
break;
}
case 2:
{
cout << "Chon mon phai: 0.Nga my 1.Thuy yen " << endl;
cin >> chose;
switch (chose)
{
case 0:
strcpy(Monphai, "Nga my");
break; case 1:
lOMoARcPSD| 40551442
TuanDM-HTTT2020
67
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
strcpy(Monphai, "Thuy yen");
break;
}
break;
}
case 3:
{ cout << "Chon mon phai: 0.Cai bang 1.Thien nhan "
<< endl; cin >> chose;
switch (chose)
{
case 0:
strcpy(Monphai, "Cai bang");
break; case 1:
strcpy(Monphai, "Thien nhan");
break;
}
break;
}
case 4:
{
cout << "Chon mon phai: 0.Con lon 1.Vo dang " <<
endl; cin >> chose; switch (chose)
{
case 0:
strcpy(Monphai, "Con
lon"); break;
case 1:
strcpy(Monphai, "Vo dang");
break;
}
break;
}
}
cout << "Nhap vao cap do nhan vat" << endl;
cin >> cap;
Base::setST(cap * 5);
} void
NhanVat::xuat()
{
Base::xuat();
cout << Monphai;
cout << cap << endl;
} class Quai : public
Base
{ private:
int cap;
int Loai; // 0. Thuong 1.Boss
public:
Quai();
~Quai(); void
nhap(); void
xuat();
lOMoARcPSD| 40551442
TuanDM-HTTT2020
68
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
};
Quai::Quai() {}
Quai::~Quai() {}
void Quai::nhap()
{
Base::nhap();
cout << "Nhap vao cap do quai" << endl;
cin >> cap;
cout << "Nhap loai quai 0.Thuong 1.boss";
cin >> Loai;
switch (Loai)
{
case 0:
Base::setST(cap * 3);
break; case 1:
Base::setST(cap * 7);
break; default:
Base::setST(cap * 3);
}
} void
Quai::xuat() {
Base::xuat();
switch (Loai)
{
case 0:
cout << "Thuong" <<
endl; break; case
1:
cout << "Boss" << endl;
break;
}
cout << cap << endl;
} class
QuanLy {
private:
int n;
Base** danhsach;
public:
QuanLy();
~QuanLy(); void
nhap(); void
xuat(); void
tuongtac();
void timSTLN();
};
QuanLy::QuanLy() {}
QuanLy::~QuanLy() {}
void QuanLy::nhap()
{
cout << "Nhap vao so phan tu" << endl; cin
>> n;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
69
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
danhsach = new Base * [n];
int chon;
for (int i = 0; i < n; i++)
{
cout << "Chon 0.Nhan vat 1.Quaivat" << endl;
cin >> chon;
switch (chon)
{
case 0:
danhsach[i] = new NhanVat;
danhsach[i]->nhap();
break;
case 1:
danhsach[i] = new Quai;
danhsach[i]->nhap();
break;
}
}
}
void QuanLy::xuat()
{
for (int i = 0; i < n; i++)
{
danhsach[i]->xuat();
}
} void
QuanLy::tuongtac()
{
int x, y;
cout << "chon phan tu tuong tac" << endl;
cin >> x >> y;
bool flag = danhsach[x]->tinhTuongtac(*danhsach[y]);
if (flag) cout << "x co st tuong
tac cao hon y"; else
cout << "y co st tuong tac cao hon x";
} void
QuanLy::timSTLN()
{
double max = 0; int
index = 0; for (int i = 0; i <
n; i++)
{
if (max <= danhsach[i]->getST())
{
max = danhsach[i]->getST();
index = i;
}
}
cout << "Phan tu co sat thuong lon nhat" << index << " " << max;
}
int main()
lOMoARcPSD| 40551442
TuanDM-HTTT2020
70
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
{
QuanLy a;
a.nhap();
a.xuat();
a.timSTLN();
a.tuongtac();
system("pause");
return 0;
}
(Source: anhkiet1227)
_________________________________
lOMoARcPSD| 40551442
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
[2016-2017]
HK1
Xét trò ch¢i Hoàng t cu Công chúa vi kch bn nh° sau:
Công chúa b M phù thy giam trong một a lâu ài kiên cố có N lp cng. Để
vào lâu ài cứu Công chúa, Hoàng t phải v°ợt qua °ợc tt c nhng lp cng
y. à mi cng u có một ng°ßi gác cng. Có 3 loi cng:
Cổng giao th°¢ng (Business Gate): ng°ßi gác cng mt tên lái buôn,
qua cng, Hoàng t phi mua hàng ca tên lái buôn vi s n = ¡n
giá * số hàng.
Cng hc thuÁt (Academic Gate): ng°ßi gác cng là mt nhà hin triết,
qua cng, Hoàng t phi tr lßi °ợc câu hi ca nhà hin triết. Câu hi
có mt ch s trí tu, Hoàng t cn có ch s trí tu cao h¡n hoc bằng ể
tr lßi °ợc câu hi. L°u ý: sau khi trả lßi câu hi, ch s trí tu ca hoàng
t không b mất i.
Cng sc mnh (Power Gate): ng°ßi gác cng một dũng sỹ, qua
cng, Hoàng t phải ánh thắng °ợc dũng sỹ. Dũng sỹ có mt ch s sc
mnh, Hoàng t cn có ch s sc mạnh cao h¡n hoặc bằng thng °ợc
dũng sỹ. Sau khi chiến thng, ch s sc mnh ca hoàng t b hao mòn
i úng bằng ch s sc mnh ca dũng sỹ.
Bng tóm tt thông n các loi cổng nh° sau:
Loi cng
Ng°ời gác
ĐiÁu kin qua cng
TiÁn
Trí tu
Sc mnh
Giao th°¡ng
Tên lái buôn
Mt n =
¡n giá * số
hàng
Không
Không
Hc thut
Nhà hin
triết
Không
Trí tu >= trí
tu câu hi
Không
Sc mnh
Dũng sỹ
Không
Mt sc =
sức dũng sỹ
Áp dng kiến thc lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế s¡ ồ chi ết
các lớp ối t°ợng (2 iểm) và xây dựng ch°¡ng trình ể thc hin các yêu cu sau:
a. Nhp vào danh sách N cng của lâu ài (1 iểm).
lOMoARcPSD| 40551442
TuanDM-HTTT2020
72
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
b. Nhp vào ba thông s ban u ca Hoàng t là: s n, ch s trí tu, ch s
sc mạnh. Ch°¡ng trình sẽ cho biết vi nhng thông s này, Hoàng t có cu
°ợc Công chúa không. Nếu cứu °ợc thì ch°¡ng trình ếp tc cho biết ba thông
s còn li ca Hoàng t (2 iểm).
HK2
Giao din website gm các thành
phần bản ặc tr°ng chung i các
yếu t v tọa (hoành , tung ), kích
th°ớc (dài, rng). Website 2 thành
phn chính:
-Label thêm ni dung text hin
th, màu ch và màu nn.
-Buon có th hin th mt hình nh
hoc text (màu ch, màu nn).
Màu sắc trên web °ợc thc hin bng
cách kết hp pha trn ca màu , xanh lá và xanh d°¡ng; ây là hình thức phi
màu có tên gi là RGB. Mi màu sắc ại din cho mt giá tr s hc t 0 ến 255
mi màu sc có giá tr t°¡ng ứng với màu ỏ, xanh lá và xanh d°¡ng.
Phi màu web s giúp chn các màu khác phù hp với màu bản, t ó
các màu dùng chung cho 1 thiết kế m bo nh hài hòa gia màu sc. Có
rt nhiều ph°¡ng pháp phối màu, và hu hết u dựa trên Bánh xe màu phối.
Trong ó, ¡n giản nht là 3 cách phi màu sau:
Phối màu ¡n sắc: Tt c
các thành phần u
cùng màu nn.
Phi màu b túc trc
ếp: nhng cp màu
i xng nhau trên bánh
xe màu. Vd: 1-7, 2-8, 39,
4-10, 5-11, 6-12
Phối màu t°¡ng ng
(th°ßng 3 màu) các
màu lin k nhau trên
bánh xe màu. Vd: 1-
23,2-3-4,11-12-1,…
lOMoARcPSD| 40551442
TuanDM-HTTT2020
73
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Xây dựng ch°¡ng trình hỗ tr phi màu trong thiết kế web.
Áp dng kiến thc lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế chi
ết các lớp i t°ợng (1.5 iểm) y dựng ch°¡ng trình thực hin các yêu cu
sau:
1. Nhp danh sách các thành phn có màu trên trang web. (1.5 iểm)
2. Kim tra màu nn màu ch ca thành phần u ên trong danh sách
có phù hp vi phi màu b túc trc ếp hay không? (1 iểm)
3. Kim tra màu nn ca các thành phn xem phù hp vi quy tc phi
màu nào hay không? (1 iểm)
Lưu ý: Trong tr°ßng hp sinh viên không biết các kiến thức ồ họa này tr°ớc ây
thì phải ọc k thông tin trên (các thông tin trên ủ sinh viên thc hin các yêu
cu của ề thi) và nghiêm túc làm bài. Giám th coi thi không gii thích gì thêm.
HK3
Xây dựng ch°¡ng trình mô phỏng sáng tác th¡ vi các mô t nh° sau:
Th¡ một loi hình ngh thut ca ngôn t, âm thanh của th¡ vần iệu
nhp nhàng. Lßi l của th¡ ngắn gn, hàm cha, súc ch. V hình thức, th¡
nhiu th loi, có th k ến nh°: Lục Bát, Song Tht Lc Bác, Đ°ßng Lut Thất
Ngôn Bát Cú,…
Luật th¡ của th th¡ là toàn bộ nhng quy tc v s câu, s ếng, cách gieo vn,
cách hài thanh, ngt nhịp,… °ợc khái quát theo mt kiu mu nhất nh. à ây,
chỉ tạm xét ến s câu, sếng và cách gieo vn.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
74
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Th th¢ lục bát (còn gi là th sáu tám)
- S ếng: Mi cp lc bát gm hai dòng: dòng lc (6 ếng), dòng bát (8 ếng).
Bài th¡ lục bát gm nhiu cặp câu nh° thế.
- Vn: Vần l°ng hiệp vn áếng th 6 của hai dòng u và gia ếng th 8 ca
dòng bát vi ếng th 6 ca dòng lc.
Ví d:
Trăm năm trong cõi ng°ßi ta
Ch tài ch mnh khéo ghét nhau.
Tri qua mt cuc b dâu
Những iều trông thy mà au n lòng.
(Nguyn Du, Truyn Kiu)
Th th¢ song tht lc bát (còn gi là gián tht hay song tht)
- Sếng: Cp song tht (7 ếng) và cp lc bát (6 8 ếng) luân phiên kế ếp
nhau trong toàn bài.
- Vn: gieo vần l°ng á mi cp (lc mc, bun khôn); cp song tht có vn
trc, cp lc bát vn bng. Gia cp song tht cp lc bát vn lin
(non bun).
Ví d:
Ngòi u cầu n°ớc trong nh° lc, Đ°ßng
bên cu c mc còn non.
Đ°a chàng lòng dc dc bun,
B khôn bng nga, thy khôn bng thuyn.
(Chinh ph ngâm)
lOMoARcPSD| 40551442
TuanDM-HTTT2020
75
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Th th¢ Đ°ờng luÁt Tht ngôn bát
- S câu: 8, sếng trong mi câu: 7
- Vn: Các ếng cui các câu 1, 2, 4, 6, 8 hip vn bng nhau.
- Ni dung v ối thanh, ối nghĩa không xét ến trong yêu cầu ề thi này.
Ví d:
B°ớc tới èo Ngang bóng xế
C cây chen lá, á chen hoa
Lom khom d°ới núi, u vài chú
Lác ác bên sông, chợ my nhà
Nh n°ớc au lòng con quốc quc
Th°¡ng nhà mỏi ming cái gia gia Dừng
chân ứng li, trßi non n°ớc Mt mnh
nh riêng, ta vi ta.
(Bà Huyn Thanh Quan, Qua Đèo Ngang)
Áp dng kiến thc lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế chi
ết các lớp ối t°ợng (1.5 iểm) y dựng ch°¡ng trình thực hin các yêu cu
sau:
1. Son mt tập th¡ (bao gồm nhiều bài th¡ thuộc các th loi khác nhau)
(1.5 iểm).
2. Cho biết bài th¡ dài nhất (có nhiu câu nht) trong tập th¡ (1.5 iểm).
3. Kiểm tra các bài th¡ trong tập tphù hp vi luật th¡ không (1 iểm)
?
Lưu ý: Trong tr°ßng hp sinh viên không biết v luật th¡ tr°ớc ây thì phải
ọc thông tin trên (các thông tin trên sinh viên thc hin các yêu
lOMoARcPSD| 40551442
TuanDM-HTTT2020
76
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
cu của ề thi) và nghiêm túc làm bài. Giám th coi thi không gii thích gì
thêm.
Gi s ã hàm kiểm tra gieo vần nh° bên d°ới sinh viên th s dng
hàm này mà không cần ịnh nghĩa li:
//kim tra hai ếng có vn vi nhau hay không, nếu có tr v 1, nếu không tr v 0
int ktgieovan( char a[], char b[] )
{
int i;
int check = 0;
return check;
}
________________________________________________
Ví d s dng hàm ktgieovan kiểm tra các câu th¡ có phù hợp vi luật th¡ lc
bát:
//gia su bai tho co 4 cau nhu sau char *str1[] = {
<tram=,<nam=,<trong=,<coi=,<nguoi=,<ta= }; char *str2[] = {
<chu=,<tai=,<chu=,<menh=,<kheo=,<la=,<ghet=,<nhau= }; char *str3[] = {
<trai=,<qua=,<mot=,<cuoc=,<be=,<dau= }; char *str4[] = {
<nhung=,<dieu=,<trong=,<thay=,<ma=,<dau=,<don=,<long= };
int kt=1;
//kiem tra gieo van eng thu 6 cua cau luc voi eng thu 6 cua cau bat (ta, la)
if (ktgieovan(str1[5], str2[5] ==0)
kt=0;
//kiem tra gieo van eng thu 8 cua cau bat voi eng thu 6 cua cau luc ep theo
lOMoARcPSD| 40551442
TuanDM-HTTT2020
77
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
(nhau, dau) if (ktgieovan(str2[7],
str3[5] ==0) kt=0;
//kiem tra gieo van eng thu 6 cua cau luc voi eng thu 6 cua cau bat (dau, dau)
if (ktgieovan(str3[5], str4[5] ==0)
kt=0;
if (kt==1) cout<<<luat tho luc bat=;
Gii:
HK1
1. Class m
Class gate s bao gm 2 hàm thun ảo Nhap() và TraVe() ể cho 3 class gate khác
kế tha. Hàm Nhap() s gi các câu lnh nhp còn hàm TraVe() s tr v mt giá tr
ặc tr°ng nào ó của tng loi cng. Ngoài ra, mi cổng cũng sẽ mt thuc nh
loại giúp chúng ta quản ối t°ợng, biết ối t°ợng ó ang loi cng nào. 2. Class con
lOMoARcPSD| 40551442
TuanDM-HTTT2020
78
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Cng hc thut ch s ặc tr°ng trí tuệ ca nhà hin triết, á class này chúng ta
hin thực 2 ph°¡ng thác thuần o ca class gate.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
79
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Cổng giao th°¡ng chỉ s ặc tr°ng số l°ợng ¡n giá của hàng, khi giao ếp vi
Hoàng T, cng s tr v tng chi = s l°ợng * ¡n giá.
Cng sc mnh có ch s ặc tr°ng là sức mnh của dũng sĩ
3. Main
Vì không code class QuanLiCong HoangTu nên chúng ta phi code khá nhiu trong
hàm main().
lOMoARcPSD| 40551442
TuanDM-HTTT2020
80
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Đầu ên include hết 3 class gate (class gate khi cần include ã inlucde trong
class con rồi). Sau ó là thông báo cho ng°ßi dùng s hiu các cng và nhp s l°ợng
cng. Sau khi có s l°ợng, ta to mng con tr các cng ể d b qun lý v sau.
Trong hàm nhập, chúng ta cho ng°ßi dùng nhp loi cổng, t°¡ng ng vi mi loi cng
ta tạo t°¡ng ứng ối t°ợng ó và cuối cùng là gi hàm Nhap().
Tiếp tc nhp các ch s ca Hoàng T.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
81
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
X lý vi tng loi cổng, ầu ên là cổng giao th°¡ng, túi tiền ca Hoàng T b tr,
nếu Hoàng T cháy túi thì ngng vic xét các cng ếp theo và in ra thông báo.
X lý t°¡ng tự vi 2 loi cng còn li.
Cng hc thut
Cng sc mnh
lOMoARcPSD| 40551442
TuanDM-HTTT2020
82
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
(Source: Ban Học T¿p CNPM)
HK2
- S¡ ồ lớp ối t°ợng:
- Ch°¡ng trình:
#include<iostream>
lOMoARcPSD| 40551442
TuanDM-HTTT2020
83
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
#include<string> using
namespace std; class
ThanhPhan
{ protected:
int x;
int y; int
d; int r;
public:
virtual void Nhap();
virtual int LayMauNen(); virtual
int LayMauChu();
};
void ThanhPhan::Nhap()
{
cout << "Nhap toa do";
cin >> x >> y; cout <<
"Nhap kich thuoc"; cin >> d >>
r;
} int
ThanhPhan::LayMauNen()
{
return 0;
} int
ThanhPhan::LayMauChu()
{
return 0;
} class NutNhan : public
ThanhPhan
{ private:
char
NoiDung[50]; int
MauChu; int
MauNen; char
Hinh[50]; public:
void Nhap();
int LayMauNen();
int LayMauChu();
};
void NutNhan::Nhap()
{
ThanhPhan::Nhap();
int chon = 0;
do
{
cout << "Chon 1 de dung hinh anh, 2 de hien thi chu (mau chu, mau nen)";
cin >> chon;
switch (chon)
{
case 1:
cout << "Nhap duong dan anh";
lOMoARcPSD| 40551442
TuanDM-HTTT2020
84
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
fflush(stdin);
gets_s(Hinh);
MauNen = MauChu = 0;
break;
case 2:
cout << "Nhap noi dung hien
thi"; fflush(stdin);
gets_s(NoiDung); MauChu =
MauNen = 0;
do
{
cout << "Chon mau 1.Red 2.Orange 3.Yellow 4.Spring Green
5.Green 6.Turquoise 7.Cyan 8.Ocean 9.Blue 10.Violet 11.Magenta 12.Raspberry";
cout << "\nNhap mau chu va mau nen";
cin >> MauChu >> MauNen;
} while (MauChu > 0 && MauNen > 0 && MauChu < 12 && MauNen < 12);
break;
}
}
while (chon > 2 || chon < 1);
} int
NutNhan::LayMauNen()
{
return MauNen;
} int
NutNhan::LayMauChu()
{
return MauChu;
}
class Nhan : public ThanhPhan
{ private:
char
NoiDung[50]; int
MauChu; int
MauNen; public:
void Nhap();
int LayMauNen();
int LayMauChu();
};
void Nhan::Nhap()
{
ThanhPhan::Nhap(); cout <<
"Nhap noi dung hien thi";
fflush(stdin);
gets_s(NoiDung); MauChu =
MauNen = 0; do
{
cout << "Chon mau 1.Red 2.Orange 3.Yellow 4.Spring Green 5.Green
6.Turquoise 7.Cyan 8.Ocean 9.Blue 10.Violet 11.Magenta 12.Raspberry";
cout << "\nNhap mau chu va mau nen";
cin >> MauChu >> MauNen;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
85
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
} while (MauChu > 0 && MauNen > 0 && MauChu < 12 && MauNen < 12);
} int
Nhan::LayMauNen()
{
return MauNen;
} int
Nhan::LayMauChu()
{
return MauChu;
} void
main()
{
ThanhPhan* A[50];
int i, n, t;
//Nh¿p danh sÆch cÆc th nh phần web
cout << "Nhap so thanh phan";
cin >> n;
for (i = 0; i < n; i++)
{
cout << "\nChon \n1 de nhap Button \n2 de nhap
Label"; cin >> t; switch (t)
{
case 1:A[i] = new NutNhan();
break;
case 2: A[i] = new Nhan();
break;
}
A[i]->Nhap();
}
//Kißm tra m u nßn v m u chÿ cÿa A[0] c phßi m u bß tœc trÿc ti¿p
int color = A[0]->LayMauNen();
if (color > 0)
{
int colortext = A[0]->LayMauChu();
if (color <= 6)
{
if (colortext == (color + 6))
cout << "Mau nen va mau chu phoi bo tuc truc tiep";
}
else
{
if (colortext == (color - 6))
cout << "Mau nen va mau chu phoi bo tuc truc tiep";
}
}
//Kißm tra phßi màu đơn
s¿c int check = 1; color
= A[0]->LayMauNen();
lOMoARcPSD| 40551442
TuanDM-HTTT2020
86
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
for (int i = 1; i < n && A[i]->LayMauNen() == color; i++)
if (i == n)
cout << "Phoi mau don
sac"; //Kißm tra phßi m u t±ơng đßng color
= A[0]->LayMauNen();
if (color > 1 && color < 12)
{
for (i = 1; i < n; i++)
{
int mau = A[i]->LayMauNen();
if ((mau != color) && (mau != color - 1) && (mau != color + 1))
break;
}
if (i == n)
cout << "Phoi mau tuong dong";
}
else if (color == 1)
{
for (i = 1; i < n; i++)
{
int mau = A[i]->LayMauNen();
if ((mau != 1) && (mau != 12) && (mau != 2))
break;
}
if (i == n)
cout << "Phoi mau tuong dong";
}
else // color=12
{
for (i = 1; i < n; i++)
{
int mau = A[i]->LayMauNen();
if ((mau != 12) && (mau != 11) && (mau != 1))
break;
}
if (i == n)
cout << "Phoi mau tuong dong";
}
//Kißm tra phßi m u bß tœc trÿc
ti¿p color = A[0]->LayMauNen();
int check1 = 0; int check2 = 0;
if (color <= 6)
{
check1 = color;
check2 = color + 6;
}
else
{
check1 = color - 6;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
87
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
check2 = color;
}
for (i = 1; i < n; i++)
{
int mau = A[i]->LayMauNen();
if (mau != check1 && mau != check2)
break;
}
if (i == n) cout << "Phoi mau bo
tuc truc tiep";
}
(Source: Internet)
HK3
- S¡ ồ ối t°ợng:
- Ch°¡ng trình:
#include <bits/stdc++.h> using
namespace std;
bool ktgieovan(char a[], char
b[])
{ bool check =
true;
//...
return check;
}
class BaiTho
{ protected: int
SoCau; string
Cau[99][102]; string
Chu;
public:
BaiTho() { SoCau = 0; }; int
getSoCau() { return SoCau; }
void SangTac();
virtual bool KiemTra() = 0;
}; void
BaiTho::SangTac()
{
cout << "Nhap so cau: "; cin >> SoCau;
cout << "Nhap bai tho (1 de ket thu):\n";
int i = 0; int j = 1;
while (getline(cin, Chu))
{
if (Chu == "1")
break;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
88
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
++i;
int k = 0;
while (Chu[k] != ’\0’)
{
Cau[i][j] = Chu[k];
++k;
if (Chu[k] == ’ ’)
{
++j;
++k;
}
}
}
} class LucBac : public
BaiTho { public:
void SangTac() {
BaiTho::SangTac();
}
bool KiemTra();
}; bool
LucBac::KiemTra()
{
if (SoCau % 2 == 1) return false;
for (int i = 0; i < SoCau; ++i)
{
if (i % 2 == 1)
if (i != 1)
if (ktgieovan((char*)Cau[i][6].c_str(), (char*)Cau[i][8].c_str()) ==
false)
return false;
else
if (ktgieovan((char*)Cau[i][6].c_str(), (char*)Cau[i][8].c_str()) ==
false)
return false;
return true;
}
return false;
} class SongThatLucBac : public
BaiTho { public:
bool KiemTra();
}; bool
SongThatLucBac::KiemTra()
{
if (SoCau % 4 != 0)
return false; int i =
0;
while (i <= SoCau - 3)
{
if (ktgieovan((char*)Cau[i][7].c_str(), (char*)Cau[i][5].c_str()) == false) return
false;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
89
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
if (ktgieovan((char*)Cau[i + 1][7].c_str(), (char*)Cau[i + 2][6].c_str()) ==
false) return false;
if (ktgieovan((char*)Cau[i + 2][6].c_str(), (char*)Cau[i + 3][6].c_str()) ==
false) return false; i += 4; }
return true;
} class DuongLuatThatNgonBatCuu : public
BaiTho { public: bool KiemTra();
};
bool DuongLuatThatNgonBatCuu::KiemTra()
{
if (SoCau != 8) return false;
if (ktgieovan((char*)Cau[1][7].c_str(), (char*)Cau[2][7].c_str()) == false) return
false;
if (ktgieovan((char*)Cau[2][7].c_str(), (char*)Cau[4][7].c_str()) == false) return
false;
if (ktgieovan((char*)Cau[4][7].c_str(), (char*)Cau[6][7].c_str()) == false) return
false;
if (ktgieovan((char*)Cau[6][7].c_str(), (char*)Cau[8][7].c_str()) == false) return
false; return true;
} int main() { cout <<
"Nhap so bai tho: "; int
SoBaiTho; cin >> SoBaiTho;
BaiTho* BaiTho[100];
for (int i = 0; i < SoBaiTho;
++i)
{
cout << "Chon loai tho muon nhap:\n";
cout << "1. Luc Bat 2.Song That Luc Bat 3.Duong Luat That Ngon Bat Cuu\n";
int TheLoai; cin >> TheLoai; switch (TheLoai)
{
case 1:
BaiTho[i] = new LucBac();
BaiTho[i]->SangTac(); break;
case
2:
BaiTho[i] = new SongThatLucBac();
BaiTho[i]->SangTac();
break;
case
3:
BaiTho[i] = new DuongLuatThatNgonBatCuu();
BaiTho[i]->SangTac();
break;
}
}
// Cau 2
int max = 0;
int position;
for (int i = 0; i < SoBaiTho; ++i)
{
lOMoARcPSD| 40551442
TuanDM-HTTT2020
90
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
if (BaiTho[i]->getSoCau() > max)
{
position = i;
max = BaiTho[i]->getSoCau();
}
}
cout << "Bai Tho co so cau nhieu nhat la bai tho thu: " << max << "\n";
// Cau 3
for (int i = 0; i < SoBaiTho; ++i)
{
if (BaiTho[i]->KiemTra() == false)
cout << "Khong thoa cach gieo van";
else cout << "Thoa cach gieo van";
}
return 0; }
(Source: anhkiet1227)
_________________________________
lOMoARcPSD| 40551442
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
[2017-2018]
HK1
Công ty qun lý ca s XYZ cn quản lý các thông tin ể tính l°¡ng cho các ca s
thuc công ty. Gi s công ty XYZ chia các ca s thành 2 nhóm: ca s <ch°a=
nổi ¿ng và ca s ni ¿ng. Thông n chung ca c 2 nhóm bao gm:
- H tên ca s.
- S năm làm việc cho công ty.
- S ĩa ã bán °ợc.
- S bui trình diễn ã tham gia.
Ngoài ra, ca s ni ếng °ợc mßi tham gia nhiu Gameshow nên còn có thêm
thông n: s gameshow tham gia.
Công ty quy ịnh cách nh và tr l°¡ng cho ca s nh° sau:
- Vi ca s <ch°a= nổi ếng:
L°¡ng = 3.000.000 + 500.000 * số năm làm việc + 1.000 * s ĩa
bán °ợc + 200.000 * s bui trình din.
- Vi ca s ni ếng:
L°¡ng = 5.000.000 + 500.000 * số năm làm việc + 1.200 * s ĩa
bán °ợc + 500.000 * s bui trình din + 500.000 * s Gameshow.
Bạn hãy xut thiết kế các lớp ối t°ợng cn thiết (v lp chi ¿t) qun
lý danh sách các ca s ca Công ty h tr tính l°¡ng cho ca sỹ theo quy ịnh
nh° trên (3 iểm).
Hãy viết ch°¡ng trình bằng C++ cho phép thc hin các yêu cu sau:
1. Nhập danh sách ca sĩ (l°u trữ trong mt mng duy nht) (1 iểm).
2. Tìm ca sĩ có l°¡ng cao nhất trong công ty. Nếu có nhiều ca sĩ có cùng
mức l°¡ng cao nht, ch cn tr v 1 ca sĩ trong số ó ((1 iểm).
lOMoARcPSD| 40551442
TuanDM-HTTT2020
92
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Lưu ý:
S dng nh cht k¿ tha và a hình
S dụng string ể l°u chuỗi.
V s¡ ồ lp: mô t các lp, các thuc nh, các hàm mi liên h các lp
(1.5 iểm).
Khai báo và ịnh nghĩa chi tiết các lp (1.5 iểm).
HK2
Đầu những năm 1900, dựa trên s hin din ca các kháng nguyên trên ng
hng cu, các nhà khoa học ã xác nh rằng con ng°ßi 4 nhóm máu khác
nhau: O, A, B và AB. H thng phân loi nhóm máuy (gi h thng nhóm
máu ABO) cung cấp cho bác sĩ các thông tin quan trọng la chn nhóm máu
phù hp trong vic truyền máu. ng thßi th tiên oán °ợc nhóm máu
t°¡ng i của ng°ßi con da trên nhóm máu ca cha m theo chế di truyn
hc.
Nhóm máu của ng°ßi con khi biết °ợc nhóm máu ca cha và m
Ngoài ra còn có thêm h thng phân loi Rh (Rhesus)
Căn cứ vào s khác bit khi nghiên cu v s vn chuyn oxy ca hng cu thì
các hng cu th mang á mt ngoài mt protein gi Rhesus. Nếu
kháng nguyên D thì là nhóm Rh+ (d°¡ng tính), nếu không có là Rh- (âm nh).
Các nhóm máu A, B, O, AB mà Rhthì °ợc gi là âm nh A-, B-, O-, AB-. Nhóm
máu Rhch chiếm 0,04% dân s thế giới. Đặc iểm ca nhóm máu Rh này
chúng ch có th nhận và cho ng°ßi cùng nhóm máu, ặc bit ph n có nhóm
máu Rh thì con rt d t vong.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
93
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Ng°ßi có nhóm máu Rh+ chth cho ng°ßi cũng có nhóm máu Rh+ và nhận
ng°ßi có nhóm máu Rh+ hoc Rh-
Ng°ßi nhóm máu Rh th cho ng°ßi nhóm máu Rh+ hoc Rh- nh°ng ch
nhận °ợc ng°ßi có nhóm máu Rh- mà thôi
Tr°ßng hợp ng°ßi có nhóm máu Rh- °ợc truyn máu Rh+ , trong lần ầu ên s
không bt k phn ng tc thì nào xảy ra nh°ng nếu ếp tc truyn máu
Rh+ ln th 2 sy ra nhng hu qu nghiêm trng do tai biến truyn máu.
T°¡ng tự với tr°ßng hp m Rh- sinh con (ln u và ln th hai trá i).
Áp dng kiến thc lập trình h°ớng ối t°ợng (kế thừa, a nh) thiết kế chi
ết các lớp ối t°ợng (1.5 iểm) và y dựng ch°¡ng trình thực hin các yêu cu
sau:
1. Nhp danh sách các nhóm máu ca một nhóm ng°ßi. (1 iểm)
2. Cho mt b 3 nhóm máu của 3 ng°ßi là cha, m, con. Hãy kiểm tra °a ra
kết
qu nhóm máu có phù hp vi quy lut di truyn hay không? (1 iểm)
3. Chn một ng°ßi X trong danh sách. Hãy lit kê tt c các ng°ßi còn li trong
danh sách có th cho máu ng°ßi X này. (1 iểm)
lOMoARcPSD| 40551442
TuanDM-HTTT2020
94
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Lưu ý: Trong tr°ßng hp sinh viên không biết v nhóm máu di truyn hc
tr°ớc ây thì phải ọc k thông tin trên (các thông tin trên sinh viên thc hin
các yêu cu của ề thi) và nghiêm túc làm bài. Giám th coi thi không gii thích
gì thêm.
Gii:
HK1
- S¡ ồ lớp ối t°ợng:
- Ch°¡ng trình:
#include <bits/stdc++.h> using
namespace std;
class CaSy {
protected:
string HoTen;
int NamLamViec, DiaBanDuoc, BuoiTrinhDien;
float luong;
public: CaSy() {} ~CaSy()
{} virtual void Nhap();
virtual void Xuat(); virtual
float TinhLuong() = 0;
};
void CaSy::Nhap()
{
cout << "Nhap thong tin ca sy:\n";
cout << "Ho ten: "; cin >> HoTen;
cout << "So nam lam viec: ";
cin >> NamLamViec; cout << "So
dia ban duoc: "; cin >>
DiaBanDuoc; cout << "So buoi
trinh dien: "; cin >>
BuoiTrinhDien;
}
void CaSy::Xuat()
{
cout << "Thong tin ca sy:\n";
cout << "Ho ten: " << HoTen << "\n";
cout << "So nam lam viec: " << NamLamViec << "\n";
cout << "So dia ban duoc: " << DiaBanDuoc << "\n"; cout
<< "So buoi trinh dien: " << BuoiTrinhDien << "\n";
}
class CaSyChuaNoiTieng : public CaSy
{ public:
lOMoARcPSD| 40551442
TuanDM-HTTT2020
95
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
CaSyChuaNoiTieng() {}
~CaSyChuaNoiTieng() {} void
Nhap()
{
CaSy::Nhap();
} void
Xuat()
{
CaSy::Xuat();
}
float TinhLuong()
{
return 3000000 + 500000 * NamLamViec + 1000 * DiaBanDuoc + 200000 * BuoiTrinhDien; }
}; class CaSyNoiTieng : public
CaSy
{ protected:
int GameShow;
public:
CaSyNoiTieng() {}
~CaSyNoiTieng() {} void
Nhap()
{
CaSy::Nhap();
cout << "So luong gameshow tham gia: ";
cin >> GameShow;
} void
Xuat()
{
CaSy::Xuat();
cout << "So luong gameshow tham gia: " << GameShow;
}
float TinhLuong()
{
return 5000000 + 500000 * NamLamViec + 1200 * DiaBanDuoc + 500000 * BuoiTrinhDien
+ 500000 * GameShow;
}
}; int main() { cout <<
"Hello World!\n";
//Cau 1
cout << "Nhap so luong ca sy: ";
int SoLuongCaSy; cin >>
SoLuongCaSy; CaSy*
arr[SoLuongCaSy]; int loai;
for (int i = 0; i < SoLuongCaSy; i++)
{
cout << "1 Ca sy chua noi tieng 2 Ca sy noi tieng:\n";
cin >> loai; if (loai == 1)
arr[i] = new CaSyChuaNoiTieng();
if (loai == 2)
arr[i] = new CaSyNoiTieng();
arr[i]->Nhap();
lOMoARcPSD| 40551442
TuanDM-HTTT2020
96
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
}
//Cau 2
float LuongCaoNhat = -1.0;
int pos;
for (int i = 0; i < SoLuongCaSy; i++)
{
if (arr[i]->TinhLuong() > LuongCaoNhat)
{
LuongCaoNhat = arr[i]->TinhLuong();
pos = i;
}
}
cout << "Ca sy co luong cao nhat la: ";
arr[pos]->Xuat(); return 0; }
(Source: anhkiet1227)
HK2
- S¡ ồ lớp ối t°ợng:
- Ch°¡ng trình:
#include <bits/stdc++.h> using
namespace std;
class NhomMau
{ protected:
bool Rh;
public:
NhomMau();
~NhomMau();
void Nhap();
bool GetRh();
virtual bool KTDiTruyen(char, char) = 0;
virtual char GetTen() = 0;
virtual bool TuongThich(char nm, bool) = 0;
};
NhomMau::NhomMau() {}
NhomMau::~NhomMau() {}
void NhomMau::Nhap() {
char t; cout << "Nhap
Rhesus"; cin >> t;
if (t == ’+’) Rh =
true; else Rh
= false; } bool
NhomMau::GetRh() {
return Rh;
}
class NhomA : public NhomMau
lOMoARcPSD| 40551442
TuanDM-HTTT2020
97
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
{ public: NhomA(); ~NhomA();
bool KTDiTruyen(char, char); char
GetTen(); bool TuongThich(char
nm, bool b);
};
NhomA::NhomA() {}
NhomA::~NhomA() {}
char NhomA::GetTen()
{ return ’A’;
}
bool NhomA::TuongThich(char nm, bool b)
{ if (this->GetRh() == false)
if (nm == ’B’ || nm == ’C’)
return true; if (this->GetRh() ==
true) if (b == true)
if (nm == ’A’ || nm == ’C’)
return true; return false;
}
bool NhomA::KTDiTruyen(char me, char con)
{ switch
(me) {
case ’A’:
if (con == ’A’ || con == ’O’)
return true; break; case
’B’:
if (con == ’A’ || con == ’O’ || con == ’B’ || con == ’C’)
return true; break; case ’C’: if (con == ’A’
|| con == ’B’ || con == ’C’) return true;
break; case ’O’: if (con == ’A’ || con == ’O’)
return true; break; } return false;
} class NhomB : public
NhomMau
{ public:
NhomB();
~NhomB();
bool KTDiTruyen(char, char);
char GetTen();
bool TuongThich(char nm, bool b);
};
NhomB::NhomB() {}
NhomB::~NhomB() {}
char NhomB::GetTen()
{
return ’B’;
}
bool NhomB::TuongThich(char nm, bool b)
{ if (this->GetRh() == false)
if (nm == ’B’ || nm == ’C’)
return true; if (this->GetRh() ==
true) if (b == true)
lOMoARcPSD| 40551442
TuanDM-HTTT2020
98
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
if (nm == ’A’ || nm == ’C’)
return true; return false;
} bool NhomB::KTDiTruyen(char me, char
con)
{
switch (me)
{ case ’A’:
if (con == ’A’ || con == ’O’ || con == ’B’ || con == ’C’)
return true; break; case ’B’:
if (con == ’B’ || con == ’O’)
return true; break; case
’C’: if (con == ’A’ || con == ’B’ || con ==
’C’) return true; break;
case ’O’: if (con == ’B’ || con == ’O’)
return true; break; } return false;
}
class NhomAB : public NhomMau
{ public: NhomAB();
~NhomAB(); bool
KTDiTruyen(char, char); char
GetTen();
bool TuongThich(char nm, bool b);
};
NhomAB::NhomAB() {}
NhomAB::~NhomAB() {}
char NhomAB::GetTen()
{ return
’C’;
}
bool NhomAB::TuongThich(char nm, bool b)
{ if (this->GetRh() ==
false) if (nm == ’C’)
return true; if (this-
>GetRh() == true) if (b
== true) if (nm ==
’C’) return
true; return false;
} bool NhomAB::KTDiTruyen(char me, char
con)
{ switch
(me) {
case ’A’:
if (con == ’A’ || con == ’B’ || con == ’C’)
return true; break; case ’B’:
if (con == ’A’ || con == ’B’ || con == ’C’)
return true;
break; case ’C’: if (con == ’A’
|| con == ’B’ || con == ’C’) return
true; break; case ’O’: if (con
== ’A’ || con == ’B’) return true;
break; } return false;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
99
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
}
class NhomO : public NhomMau
{ public: NhomO();
~NhomO(); bool
KTDiTruyen(char, char); char
GetTen();
bool TuongThich(char nm, bool b);
};
NhomO::NhomO() {}
NhomO::~NhomO() {}
bool NhomO::KTDiTruyen(char me, char con)
{ switch (me) { case ’A’:
if (con == ’A’ || con == ’O’)
return true; break; case
’B’: if (con == ’B’ || con ==
’O’) return true;
break; case ’C’: if (con
== ’A’ || con == ’B’)
return true; break; case
’O’:
if (con == ’O’)
return true;
break; } return
false; }
char NhomO::GetTen()
{ return ’O’; } bool
NhomO::TuongThich(char nm, bool b)
{
if (this->GetRh() == false)
return true; if (b == true)
return true; return false;
} int
main() {
//Cau 1 int n, chon;
NhomMau* list[50]; cout
<< "Nhap so nguoi"; cin
>> n;
for (int i = 0; i < n; i++)
{
cout << "Hay chon 1 cho nguoi nhom mau O";
cout << "Hay chon 2 cho nguoi nhom mau A";
cout << "Hay chon 3 cho nguoi nhom mau B";
cout << "Hay chon 4 cho nguoi nhom mau AB";
cin >> chon; switch (chon)
{ case 1:
list[i] = new NhomO();
break; case 2:
list[i] = new NhomA();
break; case 3:
list[i] = new NhomB();
break; case 4:
lOMoARcPSD| 40551442
TuanDM-HTTT2020
100
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
list[i] = new NhomAB();
break; }
list[i]->Nhap();
} //Cau 2
int cha, me, con;
cout << "Hay nhap theo thu tu cha, me, con";
cin >> cha >> me >> con;
bool KQ = list[cha]->KTDiTruyen(list[me]->GetTen(), list[con]->GetTen());
//Cau 3 int
x; cout << "Nhap
x"; cin >> x;
for (int i = 0; i < n; i++)
if ((i != x) && (list[x]->TuongThich(list[i]->GetTen(), list[i]->GetRh())))
cout << "\t" << i; return 0; }
(Source: anhkiet1227)
_________________________________
[2018-2019]
HK2
Big Five Model là mô hình tâm°ợc nghiên cu và phát trin bái nhiu nhà
khoa hc trên thế gii.hình y cho rng trong nh cách ca một ng°ßi
u bao gm 5 yếu t và nhim v
ca trc nghim tâm xác nh
mức biu hin ca tng yếu t
y. Big Five Model °ợc ánh giá cao
v n cy nh khoa hc.
Mô hình ặc iểm nh cách Big Five
o l°ßng 5 nét nh cách ca con
ng°ßi: T ch tn tâm
(Coscientiouness), H°ớng ngoi
(Extraversion), Hòa ng
(Agreeableness), Sn sàng tri
nghim (Openness to Experience)
Bt n cm xúc (Neurocism). Nên còn °ợc gi là mô hình OCEAN.
Y¿u t
Ch s cao
Ch s thp
lOMoARcPSD| 40551442
TuanDM-HTTT2020
101
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Sn sàng tri nghim (O)
Yếu t Sn sàng tri nghim ch
ra mc sn sàng ếp nhn
nhng cái mi, kh năng tuân
th các quy nh, lut l chung
ca một ng°ßi.
Yếu t Sn sàng tri nghim có 6
êu chí gm: thích ngh thut,
tri nghim cm xúc, tri nghim
hot ng, ham hiu biết, t do,
trí t°áng t°ợng.
Ng°ßi có iểm cao á
yếu t này th°ßng
ng°ßi thích
nhng ý t°áng mi,
thích hiu biết
nhiều lĩnh vc
nh°ng ng thßi
cũng thích t do,
không thích b ràng
buc...
Ng°ßi có iểm thp
á yếu t này
th°ßng khá bo
th, khó ếp nhn
những ý t°áng
mi, l.
H thích s n nh,
quen thuc và
thc tế.
T ch tÁn tâm (C)
Yếu t T ch ch ra kh năng
chu áp lc, s n lc, kiên trì
ca một ng°ßi.
Yếu t T ch °ợc chia ra thành
6 êu chí nh gm: nh trt t,
k lut, t n,trách nhim, n
lc, thn trng.
Ng°ßi có iểm cao á
yếu t này th°ßng
ng°ßi chăm chỉ,
kh năng chịu
áp lc tt. H
th°ßng ng°ßi gn
, trung thành vi
t chc.
Ng°ßi có iểm thp
á yếu t này
th°ßng d b cuc,
kh ng chu áp
lc, tuân th k
lut ca t chc
kém.
H°ớng ngoi (E)
Yếu t H°ớng ngoi ch ra kh
năng giao ếp, thái nhit nh
trong công việc cũng nh° mức
thích to s nh h°áng ca một
ng°ßi.
Yếu t H°ớng ngoi có 6 êu chí
nh gm: thích to ảnh h°áng,
qung giao, ch cc vận ng, m
kiếm s h°ng phn, thân thin,
cm xúc ch cc.
Ng°ßi có iểm cao á
yếu t này th°ßng
ng°ßi nhiệt tình,
năng ng, giao ếp
tt, thích th hin
bn thân.
Ng°ßi có iểm thp
á yếu t này
th°ßng ngi giao
ếp, không thích
s ni bt, thích
°ợc làm việc c
lp.
lOMoARcPSD| 40551442
TuanDM-HTTT2020
102
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Hòa ồng d chu (A)
Yếu t Hoà ồng ch ra mức h
hp, s quan tâm chp nhn
s khác bit ca một ng°ßi. Hòa
ng 6 êu chí nh gm: n
t°áng, hp tác, thành thc, v
tha, khiêm tn, nhân hu.
Ng°ßi có iểm cao á
yếu t này th°ßng
thân thin, cái má,
ng cm vi mọi
ng°ßi nh°ng nhiu
khi
<thiếu chính kiến".
Ng°ßi có iểm thp
th°ßng t li ích
ca bn thân lên
trên, ít ng cm,
chia s vi ng
nghip, nh
cnh tranh cao.
Bt n cm xúc (N)
Yếu t Bt n cm xúc ch ra kh
năng kim soát cm xúc, chu áp
lc, ng phó với căng thẳng ca
một ng°ßi.
Yếu t Bt n cm c 6 êu
chí tâm gm: trm cm, t ,
sng bản năng, d b tổn th°¡ng,
lo âu, gin d.
Ng°ßi có iểm cao á
yếu t này th°ßng
các cm xúc êu
cc nh°: lo lng,
bc bi, t , yếu
uối kh năng
chu áp lc kém.
Ng°ßi có iểm thp
áyếu t này th°ßng
kim soát °ợc cm
xúc, ng phó với
căng thng tt, ít
b bên ngoài nh
h°áng ến tâm
trng ca bn
thân.
Bài kim tra tâm lý theo Big Five Model có kết qu t°¡ng tự nh° sau: O93C74-
E31-A96-N5. Các ch cái i din cho mi nét nh cách, nhng con s i
din cho t l % những ng°ßi ghi °ợc iểm thấp h¡n bạn so vi tng nét nh
cách. à ây, O93 nghĩa 93% của những ng°ßi ã thử nghim t °ợc thấp h¡n
bạn trong nh cái má. Vì vy, so vi những ng°ßi khác, bn rt cái má
nhng tri nghim mi và sáng tạo. C74 nghĩa 74% ca những ng°ßi ã
thử nghiệm ạt iểm thấp h¡n so với bn trong s tn tâm. vy, bạn ang khá
có tổ chc và k lut t giác, so vi nhng ng°ßi khác ã thử nghim.
Hiu qu ca trc nghim Big Five Model trong tuyn chọn ánh giá nhân sự ã
°ợc các nhà nghiên cu liên tục °a ra h tr nhng nhà tuyn dng, giúp cho
nhà tuyn dng phát hin và tuyn chn nhng nhân s phù hp vi các v trí
công vic, giúp nhà tuyn dụng l°ßng tr°ớc °ợc những nguy th xảy ến
i vi mt nhân s ca mình.
Mt s thông tin ề xuất nh° sau:
lOMoARcPSD| 40551442
TuanDM-HTTT2020
103
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
a. Ng°ßi có ch s C cao s ng°ßi tuân th nguyên tc chun mc ca
t chc, làm việc chăm ch và kiên trì trong các kế hoch công vic.
b. Ng°ßi ch s C thp nhng biu hin t chc, b vic gia
chng, thiếu trách nhim, bt cn, cu th và bốc ồng trong công vic.
c. Ng°ßi ch s N cao s các cm xúc êu cc, cảm giác căng thng
trá nên lớn h¡n và giảm i s chc chn trong vic cam kết lâu dài vi mt công
vic.
d. Đặc biệt ng°ßi ch s E thp và N cao ảnh h°áng ến vic m kiếm và
kết ni vi thông n, h qu s khiến mt cá nhân có xu h°ớng tránh ếp cn
vi ngun thông n mi, trá nên thiếu ht k năng hạn chế vic ếp cn các
thông n ngh nghip quan trng.
Trong ó các trường hợp b,c,d có nguy cơ cao mà nhà tuyển dng/ t chc/
doanh nghip cần lưu ý.
Gi s chn con s 70 ng°ỡng xác nh ch s cao 30 là ng°ỡng xác nh
ch s thp, khong còn lại, chúng ta không °a ra nhận nh chính xác v khuynh
h°ớng nh cách ca yếu ty.
Áp dng kiến thc lập trình h°ớng ối t°ợng (kế thừa, a nh) thiết kế chi
ết các lp ối t°ợng (1.5 ) và xây dựng ch°¡ng trình thực hin các yêu cu sau:
1. Nhp vào thông n kết qu ánh giá tâm lý của một ng°ßi. (1 )
2. Nhp vào kết qu ánh giá tâm lý của n ng°ßi trong danh sách (0.5 )
3. Chn một ng°ßi trong danh sách cho biết các thông n v nh cách
của ng°ßi ó (1 )
d: Một ng°ßi ánh giá tâm Big Five nh° sau: O70-C30E60-
A96-N10
S xut kết qu
lOMoARcPSD| 40551442
TuanDM-HTTT2020
104
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
70
Sn sàng tri nghim (O) Ng°ßi có iểm cao á yếu t
này th°ßng là ng°ßi thích những ý t°áng mi, thích
hiu biết nhiều lĩnh vực nh°ng ồng thßi cũng thích tự
do, không thích b ràng buc...
30
T ch tÁn tâm (C) Ng°ßi có iểm thp á yếu ty
th°ßng d b cuc, kh năng chu áp lc, tuân th k
lut ca t chc kém.
60
H°ớng ngoi (E) Không xác ịnh rõ
96
Hòa ồng d chu (A) Ng°ßi có iểm cao á yếu t này
th°ßng thân thin, cái má, ng cm vi mi ng°ßi
nh°ng nhiều khi <thiếu chính kiến".
10
Bt n cm xúc (N) Ng°ßi có iểm thp á yếu ty
th°ßng kiểm soát °c cm xúc, ng phó với căng thng
tt, ít b bên ngoài ảnh h°áng ến tâm trng ca bn
thân.
4. Hãy cho biết những ng°ßi nguy cao mà nhà tuyển dng/ t chc/
doanh nghip cần l°u ý (1 )
Lưu ý: Trong tr°ßng hp sinh viên không biết khái nim v tâm lý hc và mô
hình 5 yếu t tr°ớc ây thì phải ọc k thông tin trên (các thông tin trên ủ sinh
viên thc hin các yêu cu ca thi) và nghiêm túc làm bài. Giám th coi thi
không gii thích gì thêm.
Gii:
HK2
- S¡ ồ lớp ối t°ợng:
lOMoARcPSD| 40551442
TuanDM-HTTT2020
105
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
- Ch°¡ng trình:
#include<iostream> using
namespace std;
class YeuTo
{ protected:
int GiaTri; public:
YeuTo(); ~YeuTo();
int GetGiaTri(); virtual void
DacDiem() = 0; virtual void
ChiSoCao() = 0; virtual void
ChiSoThap() = 0;
};
YeuTo::YeuTo()
{
}
YeuTo::~YeuTo()
{ } int
YeuTo::GetGiaTri()
{
return GiaTri;
} class O : public
YeuTo
{ public:
O();
~O();
O(int);
void DacDiem();
void ChiSoCao(); void
ChiSoThap();
};
O::O()
{
}
lOMoARcPSD| 40551442
TuanDM-HTTT2020
106
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
O::O(int nn)
{
GiaTri = nn;
} void
O::DacDiem()
{
cout << "San sang trai nghiem (0)";
}
O::~O()
{ } void
O::ChiSoCao()
{
cout << "Nguoi co chi so cao o yeu to nay thuong la nguoi thich nhung y tuong moi ...";
} void O::ChiSoThap()
{
cout << "Nguoi co chi so thap o yeu to nay thuong la nguoi kha bao thu ...";
} class C :public
YeuTo
{ public:
C();
~C();
C(int);
void DacDiem();
void ChiSoCao(); void
ChiSoThap();
};
C::C()
{
}
C::C(int nn)
{
GiaTri = nn;
} void
C::DacDiem()
{ cout << "Tu chu tan tam
(C)"; }
C::~C()
{ } void
C::ChiSoCao()
{
cout << "Nguoi co chi so cao o yeu to nay thuong la nguoi cham chi ...";
} void
C::ChiSoThap()
{
cout << "Nguoi co chi so thap o yeu to nay thuong la nguoi de bo cuoc ...";
} class E :public
YeuTo
{ public:
E();
~E();
E(int);
lOMoARcPSD| 40551442
TuanDM-HTTT2020
107
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
void DacDiem();
void ChiSoCao();
void ChiSoThap();
};
E::E()
{
}
E::E(int nn)
{
GiaTri = nn;
} void
E::DacDiem()
{
cout << "Huong ngoai (E)"; }
E::~E()
{ } void
E::ChiSoCao()
{
cout << "Nguoi co chi so cao o yeu to nay thuong la nguoi nhiet tinh, nang dong ...";
} void E::ChiSoThap()
{
cout << "Nguoi co chi so thap o yeu to nay thuong la ngai giao tieps ...";
} class A :public
YeuTo
{ public:
A();
~A();
A(int);
void DacDiem();
void ChiSoCao(); void
ChiSoThap(); };
A::A()
{
}
A::A(int nn)
{
GiaTri = nn;
} void
A::DacDiem()
{
cout << "Hoa dong de chiu (A)"; }
A::~A()
{ } void
A::ChiSoCao()
{
cout << "Nguoi co chi so cao o yeu to nay thuong than thien coi mo ...";
} void
A::ChiSoThap()
{
cout << "Nguoi co chi so thap o yeu to nay thuong dat loi ich cua ban than len tren
..."; } class N :public YeuTo
lOMoARcPSD| 40551442
TuanDM-HTTT2020
108
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
{ public:
N();
~N();
N(int);
void DacDiem();
void ChiSoCao(); void
ChiSoThap();
};
N::N()
{
}
N::N(int nn)
{
GiaTri = nn;
} void
N::DacDiem()
{
cout << "Bat on cam xuc (N)"; }
N::~N()
{ } void
N::ChiSoCao()
{ cout << "Nguoi co chi so cao o yeu to nay thuong co cac cam xuc tieu cuc ...";
} void
N::ChiSoThap()
{
cout << "Nguoi co chi so thap o yeu to nay thuong kiem soat duoc cam xuc ...";
} class
Nguoi {
private:
YeuTo* ds[5]; public:
Nguoi();
~Nguoi(); void
Nhap(); void
TinhCach();
bool NguyCo();
};
Nguoi::Nguoi()
{
}
Nguoi::~Nguoi()
{ }
void Nguoi::Nhap()
{
int temp;
cout << "Nhap vao gia tri yeu to O";
cin >> temp; ds[0] = new
O(temp); cout << "Nhap vao gia tri yeu
to C";
cin >> temp; ds[1] = new
C(temp); cout << "Nhap vao gia tri yeu
to E";
lOMoARcPSD| 40551442
TuanDM-HTTT2020
109
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
cin >> temp; ds[2] = new
E(temp); cout << "Nhap vao gia tri yeu
to A";
cin >> temp; ds[3] = new
A(temp); cout << "Nhap vao gia tri yeu
to N";
cin >> temp;
ds[4] = new N(temp);
} void
Nguoi::TinhCach()
{
for (int i = 0; i < 5; i++)
{
ds[i]->DacDiem();
if (ds[i]->GetGiaTri() >= 70)
ds[i]->ChiSoCao();
else
if (ds[i]->GetGiaTri() <= 30)
ds[i]->ChiSoThap();
else
cout << "Khong xac dinh ro";
}
}
bool Nguoi::NguyCo()
{ if ((ds[2]->GetGiaTri() <= 30) && (ds[3]->GetGiaTri() >=
70))
return true;
if (ds[3]->GetGiaTri() >= 70)
return true;
if (ds[1]->GetGiaTri() <= 30)
return true;
return false;
} void
main()
{
Nguoi dsn[50];
int n;
cout << "Nhap so luong nguoi";
cin >> n;
for (int i = 0; i < n; i++)
dsn[i].Nhap();
int x;
cout << "Chon nguoi thu ";
cin >> x; dsn[x].TinhCach(); for
(int i = 0; i < n; i++) if
(dsn[i].NguyCo() == true)
cout << i << " "; system("pause");
}
(Source: Internet)
lOMoARcPSD| 40551442
TuanDM-HTTT2020
110
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
_________________________________
[2019-2020]
HK2
Tr°ớc hết phi khẳng ịnh, ất ai là nguồn tài nguyên vô cùng quý giá, là tài sn
quan trng ca quốc gia, là liệu sn xuất,… Đặc bit, ất ai iều kin cn
cho mi hoạt ng sn xuất và ßi sng. à n°ớc ta, khi còn nhiu ng°ßi sng nhß
vào nông nghiệp, thì ất ai càng t thành ngun lc rt quan trng.
Mun phát huy tác dng ca ngun lực ất ai, ngoài việc bo v t ca quc
gia, còn phi quản ất ai hợp , nâng cao hiu qu s dụng t sao cho vừa
m bảo °ợc lợi ích tr°ớc mt, va tạo iều kin s dụng t hiu qu lâu dài
phát trin bn vững ất n°ớc.
Hin nay, á Việt Nam ất ai °ợc phân chia thành 2 loi chính sau:
- Đất nông nghip.
- Đất phi nông nghiệp ( ất á).
Quan iểm nht quán ca Đảng, Nhà n°ớc nhân dân ta ã °ợc xác nh t năm
980 ến nay là ất ai thuộc sá hữu toàn dân, do Nhà n°ớc i din ch sá hu và
thng nht quản lý. Đ góp phn nâng cao hiu qu qun lý nhà n°ớc v ất ai,
mỗi thửa ất °ợc nhà n°ớc qun lý và cp quyÁn s dng cho mt hoc nhiều
ng°ßi dân (nhà n°ớc cho phép nhiều ng°ßi dân th ng sá hu quyn s
dụng t) nhu cu s dng (Giy chng nhÁn quyÁn s dụng t hay còn
°ợc gi là S hng).
- Vi các that nông nghip, thông n cn qun lý gm: s giy chng
nhn (chuỗi), ng°ßi sá hu quyn s dng ất (gm htên, năm sinh,
CMND, a ch th°ßng trú), s thửa t, s tß bản ồ, a ch thửa t, din
ch (m
2
), thßi gian s dụng ( °ợc s dụng ến năm nào), ngày cp, ¡n giá
thuế phải óng cho nhà n°ớc hàng năm/1m
2
.
- Vi các thửa ất phi nông nghiệp ( ất ), thông n cn qun lý gm: s
giy chng nhn (chuỗi), ng°ßi sá hu quyn s dụng t (gm h tên,
năm sinh, CMND, a ch th°ßng trú), s thửa ất, s tß bn ồ, a ch thửa
lOMoARcPSD| 40551442
TuanDM-HTTT2020
111
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
t, din ch (m
2
), ngày cấp, ¡n giá thuế phải óng cho nhà n°ớc hàng
năm/1m
2
.
Áp dng kiến thc lp trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế s¡ chi
ết các lớp ối t°ợng (1 iểm) khai báo các lp (1 iểm) xây dng ch°¡ng trình
thực hin các yêu cu sau:
1. To danh sách các giy chng nhn quyn s dng ất nhà n°ớc ã cấp
cho ng°ßi dân. (1 iểm)
2. Tính n thuế ng°ßi s dụng t phải óng cho nhà n°ớc cho biết
thửa t nào (thông n tha t) có n thuế phải óng nhiều nht. (1 iểm)
3. Xut ra màn hình thông n các thửa t nông nghip ã hết thßi hn s
dụng (năm sử dụng < năm hiện ti). (1 iểm)
Lưu ý: Các thông n trong ch mô phng các thông n vi mc tiêu ể sinh
viên vn dng kiến thc lập trình hướng ối tượng. Do vy, các thông tin
trong KHÔNG nht thiết phải úng hoặc khp vi các thông n hin ti
trong thế gii thc. Sinh viên cn bám sát các mô t trong thi làm bài.
Gii:
HK2
Có nhiu cách thiết kế, có th thiết kế s¡ ồ lớp nh° sau (1 iểm):
lOMoARcPSD| 40551442
TuanDM-HTTT2020
112
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
Khai báo các lp (1 iểm):
class cNguoi
{ private:
string sHoTen;
int iNamSinh;
string sCMND;
string sDiaChi; public:
void Nhap();
void Xuat();
};
void cNguoi::Nhap()
{
cout << "Nhap ho ten: ";
cin >> sHoTen; cout <<
"Nhap nam sinh: "; cin >>
iNamSinh; cout << "Nhap CMND:
"; cin >> sCMND; cout
<< "Nhap dia chi: ";
cin >> sDiaChi;
}
void cNguoi::Xuat()
{
lOMoARcPSD| 40551442
TuanDM-HTTT2020
113
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
cout << "Ho ten: " << sHoTen; cout
<< ", Nam sinh: " << iNamSinh; cout << ", So
CMND: " << sCMND; cout << ", Dia chi: " <<
sDiaChi << endl;
}
class cSoHong
{ protected:
string sSoGiayCN;
int iSoNguoiSoHuu; cNguoi
*dsNguoiSoHuu; int
iSoThua; int
iSoToBanDo; string
sDiaChi; int iDienTich;
string sNgayCap; int
iDonGiaThue; public:
virtual void Nhap();
virtual void Xuat(); virtual
long TinhTienThue(); virtual
int getLoai() = 0;
};
void cSoHong::Nhap()
{ cout << "Nhap so luong nguoi dung ten tren so hong: ";
cin >> iSoNguoiSoHuu; dsNguoiSoHuu
= new cNguoi[iSoNguoiSoHuu]; for (int i =
0; i < iSoNguoiSoHuu; i++)
{
cout << "Nhap thong tin nguoi so huu thu " << (i + 1) << endl;
dsNguoiSoHuu[i].Nhap();
}
cout << "Nhap so giay chung nhan: ";
cin >> sSoGiayCN; cout << "Nhap so
thua: "; cin >> iSoThua; cout << "Nhap
so to ban do: "; cin >> iSoToBanDo; cout <<
"Nhap dia chi thua dat: "; cin >>
sDiaChi; cout << "Nhap dien tich: ";
cin >> iDienTich; cout << "Nhap ngay cap giay
chung nhan: ";
cin >> sNgayCap; cout <<
"Nhap don gia thue: ";
cin >> iDonGiaThue;
} void
cSoHong::Xuat()
{ cout << "So giay chung nhan: " << sSoGiayCN <<
endl; for (int i = 0; i < iSoNguoiSoHuu; i++)
{
dsNguoiSoHuu[i].Xuat();
}
cout << "So thua dat: " << iSoThua << endl;
cout << "So to ban do: " << iSoToBanDo << endl;
cout << "Dia chi thua dat: " << sDiaChi << endl;
lOMoARcPSD| 40551442
TuanDM-HTTT2020
114
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
cout << "Dien tich thua dat: " << iDienTich << endl;
cout << "Ngay cap: " << sNgayCap << endl; cout <<
"Don gia thue: " << iDonGiaThue << endl;
} long
cSoHong::TinhTienThue()
{ return
iDienTich*iDonGiaThue;
}
Lớp con
class cSoHongDatNN : public cSoHong
{ private:
int iThoiHan; public:
void Nhap();
void Xuat(); int
getLoai(); int
getThoiHan();
};
int cSoHongDatNN::getThoiHan()
{
return iThoiHan;
} void
cSoHongDatNN::Nhap()
{
cSoHong::Nhap(); cout << "Nhap
thoi han su dung: ";
cin >> iThoiHan;
} void
cSoHongDatNN::Xuat()
{
cSoHong::Xuat(); cout << "Thoi han su dung: "
<< iThoiHan << endl;
cout << "Tien thue phai dong: " << iDonGiaThue * iDienTich << endl;
} int
cSoHongDatNN::getLoai()
{
return 1;
}
class cSoHongDatO : public cSoHong
{ public:
void Xuat();
int getLoai(); };
void cSoHongDatO::Xuat()
{
cSoHong::Xuat();
cout << "Tien thue phai dong: " << iDonGiaThue * iDienTich << endl;
} int
cSoHongDatO::getLoai()
lOMoARcPSD| 40551442
TuanDM-HTTT2020
115
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)
{
return 2;
}
int main()
{
int n;
cSoHong *dsGiayCN[50]; //Câu 1 (1 đißm)
cout << "Nhap so luong giay chung nhan can cap: ";
cin >> n; int loai;
for (int i = 0; i < n; i++)
{
cout << "Cap giay chung nhan Dat nong nghiep (1) hay dat o (2): ";
cin >> loai; if (loai == 1)
dsGiayCN[i] = new cSoHongDatNN; else
dsGiayCN[i] = new cSoHongDatO;
dsGiayCN[i]->Nhap();
}
//Câu 2 (1 đißm) long max =
dsGiayCN[0]->TinhTienThue(); int vt = 0;
for (int i = 1; i < n; i++)
{
if (dsGiayCN[i]->TinhTienThue() > max)
{
max = dsGiayCN[i]->TinhTienThue();
vt = i;
}
}
dsGiayCN[vt]->Xuat(); //Câu 3 (1 đißm) for (int i = 0; i
< n; i++) if (dsGiayCN[i]->getLoai()==1) if
(((cSoHongDatNN*)dsGiayCN[i])->getThoiHan()<2020)
dsGiayCN[i]->Xuat(); return 0;
}
(Source: Internet)
_________________________________
| 1/115

Preview text:

lOMoAR cPSD| 40551442
Nội dung CÂU 1 ........................................................................................ Error! Bookmark not defined.
[2013-2014] .............................................................................................................................................. 2
Giải: ....................................................................................................................................................... 2
[2014-2015] .............................................................................................................................................. 5
Giải: ....................................................................................................................................................... 5
[2015-2016] .............................................................................................................................................. 6
Giải: ....................................................................................................................................................... 6
[2016-2017] .............................................................................................................................................. 8
Giải: ....................................................................................................................................................... 9
[2017-2018] ............................................................................................................................................ 14
Giải: ..................................................................................................................................................... 14
[2018-2019] ............................................................................................................................................ 16
Giải: ..................................................................................................................................................... 16
[2019-2020] ............................................................................................................................................ 18
Giải: ..................................................................................................................................................... 18
CÂU 2 .......................................................................................................................................................... 21
[2013-2014] ............................................................................................................................................ 21
Giải: ..................................................................................................................................................... 23
[2014-2015] ............................................................................................................................................ 26
Giải: ..................................................................................................................................................... 26
[2015-2016] ............................................................................................................................................ 27
Giải: ..................................................................................................................................................... 28
[2016-2017] ............................................................................................................................................ 31
Giải: ..................................................................................................................................................... 32
[2017-2018] ............................................................................................................................................ 36
Giải: ..................................................................................................................................................... 36
[2018-2019] ............................................................................................................................................ 39
Giải: ..................................................................................................................................................... 39
[2019-2020] ............................................................................................................................................ 43
Giải: ..................................................................................................................................................... 44
CÂU 3 .......................................................................................................................................................... 46
[2013-2014] ............................................................................................................................................ 46
Giải: ..................................................................................................................................................... 47
[2014-2015] ............................................................................................................................................ 52
Giải: ..................................................................................................................................................... 53 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
[2015-2016] ............................................................................................................................................ 57
Giải: ..................................................................................................................................................... 61
[2016-2017] ............................................................................................................................................ 71
Giải: ..................................................................................................................................................... 77
[2017-2018] ............................................................................................................................................ 91
Giải: ..................................................................................................................................................... 94
[2018-2019] .......................................................................................................................................... 100
Giải: ................................................................................................................................................... 104
[2019-2020] .......................................................................................................................................... 110
Giải: ................................................................................................................................................... 111 CÂU 1. [2013-2014] HK1 a.
Phân biệt các phạm vi truy cập private, protected, public và cho ví dụ minh họa. b.
Nêu khái niệm về sự kế thừa và những °u iểm của kế thừa trong việc lập
trình. Cho ví dụ minh họa. HK2
a. Nêu khái niệm Constructor và Destructor. Phân biệt Constructor mặc ịnh và Constructor khác.
b. Phân biệt các kiểu kế thừa private, protected, public. Giải: HK1 a. 2 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
- Thành phần private á lớp cha thì không truy xuất °ợc á lớp con
- Kế thừa public: Lớp con kế thừa public từ lớp cha thì các thành phần protected của
lớp cha trá thành protected của lớp con, các thành phần public của lớp cha trá
thành public của lớp con.
- Kế thừa private: Lớp con kế thừa private từ lớp cha thì các thành phần protected
và public của lớp cha trá thành private của lớp con.
- Kế thừa protected: Lớp con kế thừa protected từ lớp cha thì các thành phần
protected và public của lớp cha trá thành protected của lớp con. b. - Khái niệm:
K¿ thừa trong lÁp trình là cách 1 lớp có thể thừa h°ởng lại những thuộc tính,
ph°¢ng thức từ 1 lớp khác và sử dụng chúng nh° là của bản thân mình.
Một ịnh nghĩa trừu t°ợng h¡n về kế thừa: là một ặc iểm của ngôn ngữ h°ớng ối t°ợng
dùng ể biểu diễn mối quan hệ ặc biệt hoá – tổng quát hoá giữa các lớp. - ¯u iểm:
• Cho phép xây dựng 1 lớp mới từ lớp ã có.
▪ Lớp mới gọi là lớp con (subclass) hay lớp d¿n xuất (derived class). ▪
Lớp ã có gọi là lớp cha (superclass) hay lớp c¢ sở (base class).
• Cho phép chia sẻ các thông tin chung nhằm tái sử dụng và ồng thßi giúp ta dễ
dàng nâng cấp, dễ dàng bảo trì. 3 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
• Định nghĩa sự t°¡ng thích giữa các lớp, nhß ó ta có thể chuyển kiểu tự ộng. HK2 a. - Khái niệm:
Ph°¢ng thức khởi tạo (Constructor) là một ph°¡ng thức ặc biệt °ợc gọi tự ộng tại
thßi iểm ối t°ợng °ợc tạo. Các hàm khái tạo có nhiệm vụ khái tạo thông tin ban ầu
cho các ối t°ợng thuộc về lớp ngay khi ối t°ợng °ợc khai báo.
Ph°¢ng thức phá hủy (Destructor) có nhiệm vụ dọn dẹp khi ối t°ợng < i bán muối=. Nói một cách khác, ph°¡ng thức phá hủy có nhiệm vụ
thu hồi lại tất cả các tài nguyên ã cấp phát cho ối t°ợng khi ối t°ợng hết phạm vi hoạt ộng.
- Constructor mặc ịnh khác với các Constructor khác á các iểm:
• Không có tham số ầu vào. • … b.
- Thành phần private á lớp cha thì không truy xuất °ợc á lớp con
- Kế thừa public: Lớp con kế thừa public từ lớp cha thì các thành phần protected của
lớp cha trá thành protected của lớp con, các thành phần public của lớp cha trá
thành public của lớp con. 4 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
- Kế thừa private: Lớp con kế thừa private từ lớp cha thì các thành phần protected
và public của lớp cha trá thành private của lớp con.
- Kế thừa protected: Lớp con kế thừa protected từ lớp cha thì các thành phần
protected và public của lớp cha trá thành protected của lớp con.
_________________________________ [2014-2015] HK2
Phân biệt các kiểu kế thừa private, protected, public (2 iểm) Giải: HK2
- Thành phần private á lớp cha thì không truy xuất °ợc á lớp con
- Kế thừa public: Lớp con kế thừa public từ lớp cha thì các thành phần protected của
lớp cha trá thành protected của lớp con, các thành phần public của lớp cha trá
thành public của lớp con.
- Kế thừa private: Lớp con kế thừa private từ lớp cha thì các thành phần protected
và public của lớp cha trá thành private của lớp con. 5 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
- Kế thừa protected: Lớp con kế thừa protected từ lớp cha thì các thành phần
protected và public của lớp cha trá thành protected của lớp con.
_________________________________ [2015-2016] HK2
a. Phân biệt các kiểu kế thừa private, protected, public. (1 iểm)
b. Trình bày các ặc iểm quan trọng của lập trình h°ớng ối t°ợng. (1 iểm) HK3
a. Định nghĩa constructor (ph°¡ng thức khái tạo) và default constructor
(ph°¡ng thức khái tạo mặc ịnh) (1 iểm)
b. Phân biệt các kiểu kế thừa private, protected, public (1 iểm) Giải: HK2 a.
- Thành phần private á lớp cha thì không truy xuất °ợc á lớp con 6 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
- Kế thừa public: Lớp con kế thừa public từ lớp cha thì các thành phần protected của
lớp cha trá thành protected của lớp con, các thành phần public của lớp cha trá
thành public của lớp con.
- Kế thừa private: Lớp con kế thừa private từ lớp cha thì các thành phần protected
và public của lớp cha trá thành private của lớp con.
- Kế thừa protected: Lớp con kế thừa protected từ lớp cha thì các thành phần
protected và public của lớp cha trá thành protected của lớp con. b.
- Trừu t°ợng hóa – Abstraction Cách nhìn khái quát hóa về một tập các ối t°ợng có
chung các ặc iểm °ợc quan tâm (và bỏ qua những chi tiết không cần thiết).
- Đóng gói – Encapsulation Nhóm những gì có liên quan với nhau vào làm một, ể
sau này có thể dùng một cái tên ể gọi ến. Vd: các hàm/ thủ tục óng gói các câu lệnh,
các ối t°ợng óng gói dữ liệu của chúng và các thủ tục có liên quan.
- Thừa kế - Inheritance cho phép một lớp D có °ợc các thuộc tính và thao tác của lớp
C, nh° thể các thuộc tính và thao tác ó ã °ợc ịnh nghĩa tại lớp D. Cho phép cài ặt
nhiều quan hệ giữa các ối t°ợng: Đặc biệt hóa – Tổng quát hóa.
- Đa hình – Polymorphism Là c¡ chế cho phép một tên thao tác hoặc thuộc tính có
thể °ợc ịnh nghĩa tại nhiều lớp và có thể có nhiều cài ặt khác nhau tại mỗi lớp trong các lớp ó. HK3 a.
Ph°¢ng thức khởi tạo (Constructor) là một ph°¡ng thức ặc biệt °ợc gọi tự ộng tại
thßi iểm ối t°ợng °ợc tạo. Các ph°¡ng thức khái tạo có nhiệm vụ khái tạo thông tin
ban ầu cho các ối t°ợng thuộc về lớp ngay khi ối t°ợng °ợc khai báo.
Ph°¢ng thức khởi tạo mặc ịnh (Default Constructor) là ph°¡ng thức thiết lập các
thông tin ban ầu cho ối t°ợng thuộc về lớp bằng những giá trị mặc ịnh. Khi sử dụng
một constructor, nếu không có giá trị khái tạo nào do ng°ßi dùng cung cấp °ợc truyền
cho constructor này, thì constructor mặc ịnh sẽ °ợc gọi. b. 7 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
- Thành phần private á lớp cha thì không truy xuất °ợc á lớp con
- Kế thừa public: Lớp con kế thừa public từ lớp cha thì các thành phần protected của
lớp cha trá thành protected của lớp con, các thành phần public của lớp cha trá
thành public của lớp con.
- Kế thừa private: Lớp con kế thừa private từ lớp cha thì các thành phần protected
và public của lớp cha trá thành private của lớp con.
- Kế thừa protected: Lớp con kế thừa protected từ lớp cha thì các thành phần
protected và public của lớp cha trá thành protected của lớp con.
_________________________________ [2016-2017] HK1
a. Nêu khái niệm về sự kế thừa và những °u iểm của kế thừa trong việc lập
trình. Cho ví dụ minh họa. (2 iểm) b. Xét oạn ch°¡ng trình sau: class A{ A(int i); }; void main(){ A a1; 8 lOMoAR cPSD| 40551442 TuanDM-HTTT2020 A b2(5); }
Hãy cho biết oạn ch°¡ng trình trên có lỗi xảy ra hay không? Nếu có hãy giải
thích và chỉ ra cách sửa lỗi. (1 iểm) HK2
a. Trình bày khái niệm của lớp c¡ sá trừu t°ợng (abstract class). Lớp c¡ sá trừu
t°ợng °ợc cài ặt trong C++ nh° thế nào? (1 iểm) b. Xét oạn ch°¡ng trình sau: #include using void main() namespace std; class { Array{ Array M1; Array int A[100]; M2(10); int n; public: cout<Array(int n) { } //.... } //.... };
Cho biết oạn ch°¡ng trình trên khi biên dịch có lỗi xảy ra hay không? Nếu có
lỗi, hãy chỉ ra các lỗi ó và sửa lỗi ể ch°¡ng trình có thể thực thi °ợc. (1.5 iểm) HK3
a. Phân biệt private, protected, public. (1 iểm)
b. Trình bày về constructor. (1 iểm) Giải: HK1 a. - Khái niệm:
K¿ thừa trong lÁp trình là cách 1 lớp có thể thừa h°ởng lại những thuộc tính,
ph°¢ng thức từ 1 lớp khác và sử dụng chúng nh° là của bản thân mình. 9 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Một ịnh nghĩa trừu t°ợng h¡n về kế thừa: là một ặc iểm của ngôn ngữ h°ớng ối t°ợng
dùng ể biểu diễn mối quan hệ ặc biệt hoá – tổng quát hoá giữa các lớp. - ¯u iểm:
• Cho phép xây dựng 1 lớp mới từ lớp ã có.
▪ Lớp mới gọi là lớp con (subclass) hay lớp d¿n xuất (derived class).
▪ Lớp ã có gọi là lớp cha (superclass) hay lớp c¢ sở (base class).
• Cho phép chia sẻ các thông tin chung nhằm tái sử dụng và ồng thßi giúp ta dễ
dàng nâng cấp, dễ dàng bảo trì.
• Định nghĩa sự t°¡ng thích giữa các lớp, nhß ó ta có thể chuyển kiểu tự ộng. b.
- Đoạn ch°¡ng trình trên có lỗi xảy ra vì thiếu từ khóa dẫn xuất (á ây là public ể cho
hàm thành phần trong nó có thể truy xuất °ợc trong hàm main), thiếu các hàm khái
tạo (hàm khởi tạo mặc ịnhhàm khởi tạo nhÁn tham số ầu vào) bên trong lớp. - Sửa: class A{ public: A(){ } A(int i){ } }; void main(){ A a1; A b2(5); } HK2 a. 10 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
• Lớp c¡ sá trừu t°ợng (Abstract Class): lớp có ít nhất 1 ph°¡ng thức °ợc khai báo
là hàm thuần ảo (pure virtual), hàm thuần ảo °ợc xác ịnh là một hàm virtual
có kết thúc khai báo hàm là <= 0=. Ví dụ: virtual double tinhChuVi () = 0;
• Trong tr°ßng hợp lớp c¡ sá trừu t°ợng có tất cả các ph°¡ng thức là thuần ảo thì
°ợc gọi là interface (giao diện). class Xe { private: string id; string loai; double gia_tien; public:
virtual void Nhap() = 0; virtual double TinhGiatien() = 0; }; b.
- Đoạn ch°¡ng trình trên có lỗi xảy ra vì:
• Sai dòng A a; Array M1; vì ch°a có ph°¡ng thức khái tạo mặc ịnh.
• Sai dòng cout<ngoài từ khóa dẫn xuất public nên nó không thể truy xuất °ợc trong hàm main. - Sửa: #include using namespace std; class Array{ public: int A[100]; int n; Array() 11 lOMoAR cPSD| 40551442 TuanDM-HTTT2020 { } Array(int n) { //.... } //.... }; void main() { Array M1; Array M2(10); Array M; cout<} HK3 a. 12 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
- Thành phần private á lớp cha thì không truy xuất °ợc á lớp con
- Kế thừa public: Lớp con kế thừa public từ lớp cha thì các thành phần protected của
lớp cha trá thành protected của lớp con, các thành phần public của lớp cha trá
thành public của lớp con.
- Kế thừa private: Lớp con kế thừa private từ lớp cha thì các thành phần protected
và public của lớp cha trá thành private của lớp con.
- Kế thừa protected: Lớp con kế thừa protected từ lớp cha thì các thành phần
protected và public của lớp cha trá thành protected của lớp con. b.
Ph°¢ng thức thi¿t lÁp (Constructor) là một ph°¡ng thức ặc biệt °ợc gọi tự ộng tại
thßi iểm ối t°ợng °ợc tạo. Các ph°¡ng thức thiết lập có nhiệm vụ thiết lập thông tin
ban ầu cho các ối t°ợng thuộc về lớp ngay khi ối t°ợng °ợc khai báo. Đặc iểm:
• Có tên trùng với tên lớp.
• Không có kiểu dữ liệu trả về.
• Đ°ợc tự ộng gọi thực hiện ngay khi một ối t°ợng °ợc khai báo.
• Có thể có nhiều ph°¡ng thức thiết lập trong 1 lớp.
• Trong một quá trình sống của ối t°ợng thì chỉ có 1 lần duy nhất một ph°¡ng
thức thiết lập °ợc gọi thực hiện mà thôi, ó là khi ối t°ợng ra ßi. 13 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
• Các ph°¡ng thức thiết lập của lớp thuộc nhóm các ph°¡ng thức khái tạo.
_________________________________ [2017-2018] HK1
a. Phân biệt các phạm vi truy cập private, protected và public. (1 iểm)
b. Cho biết ý nghĩa và mục ích của các hàm get/set trong một lớp. (1 iểm) HK2
a. Hàm thuần ảo là gì? Lớp trừu t°ợng là gì? Cho ví dụ minh họa. (1 iểm)
b. Hãy nêu các ặc iểm quan trọng của lập trình h°ớng ối t°ợng. (1 iểm) Giải: HK1 a.
- Thành phần private á lớp cha thì không truy xuất °ợc á lớp con
- Kế thừa public: Lớp con kế thừa public từ lớp cha thì các thành phần protected của
lớp cha trá thành protected của lớp con, các thành phần public của lớp cha trá
thành public của lớp con. 14 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
- Kế thừa private: Lớp con kế thừa private từ lớp cha thì các thành phần protected
và public của lớp cha trá thành private của lớp con.
- Kế thừa protected: Lớp con kế thừa protected từ lớp cha thì các thành phần
protected và public của lớp cha trá thành protected của lớp con. b.
Hàm get: truy vấn dữ liệu private từ các ối t°ợng ( ọc giá trị các thành viên dữ liệu).
Đặc iểm quan trọng của ph°¡ng thức truy vấn là nó không nên thay ổi trạng thái hiện tại của ối t°ợng.
Hàm set: cập nhật dữ liệu private từ các ối t°ợng (ghi giá trị cho các thành viên dữ
liệu). Ph°¡ng thức cập nhật th°ßng ể thay ổi trạng thái của ối t°ợng bằng cách sửa ổi
một hoặc nhiều thành viên dữ liệu của ối t°ợng ó. HK2 a.
Hàm thuần ảo (Ph°¢ng thức ảo thuần tuý) có ý nghĩa cho việc tổ chức s¡ ồ phân
cấp các lớp, nó óng vai trò chừa sẵn chỗ trống cho các lớp con iền vào với phiên bản
phù hợp. Ph°¡ng thức ảo thuần tuý là ph°¡ng thức ảo không có nội dung, °ợc khai
báo với từ khóa virtual và °ợc gán giá trị =0.
Khi lớp có ph°¡ng thức ảo thuần tuý, lớp trá thành lớp c¡ sá trừu t°ợng. Lớp c¡ sá trừu
t°ợng không có ối t°ợng nào thuộc chính nó. class Shape //Abstract { public :
//Pure virtual Function virtual void draw() = 0; }
Trong ví dụ trên, các hàm thành phần trong lớp Shape là ph°¡ng thức ảo thuần tuý
và lớp Shape là lớp c¡ sá trừu t°ợng. Nó bảo ảm không thể tạo °ợc ối t°ợng thuộc lớp Shape. b. -
Trừu t°ợng hóa – Abstraction: Cách nhìn khái quát hóa về một tập các ối t°ợng
có chung các ặc iểm °ợc quan tâm (và bỏ qua những chi tiết không cần thiết). 15 lOMoAR cPSD| 40551442 TuanDM-HTTT2020 -
Đóng gói – Encapsulation: Nhóm những gì có liên quan với nhau vào làm một,
ể sau này có thể dùng một cái tên ể gọi ến. Vd: các hàm/ thủ tục óng gói các câu
lệnh, các ối t°ợng óng gói dữ liệu của chúng và các thủ tục có liên quan. -
Thừa kế - Inheritance: Cho phép một lớp D có °ợc các thuộc tính và thao tác
của lớp C, nh° thể các thuộc tính và thao tác ó ã °ợc ịnh nghĩa tại lớp D. Cho phép
cài ặt nhiều quan hệ giữa các ối t°ợng: Đặc biệt hóa – Tổng quát hóa -
Đa hình – Polymorphism: Là c¡ chế cho phép một tên thao tác hoặc thuộc
tính có thể °ợc ịnh nghĩa tại nhiều lớp và có thể có nhiều cài ặt khác nhau tại mỗi lớp trong các lớp ó.
_________________________________ [2018-2019] HK1 a.
Phân biệt khái niệm lớp và ối t°ợng trong lập trình h°ớng ối t°ợng. (1 iểm) b.
Trình bày khái niệm a hình trong lập trình h°ớng ối t°ợng (1 iểm). Cho ví dụ (0.5 iểm). HK2
a. Phân biệt khái niệm overload (tải chồng) và override (ghi è). (1 iểm)
b. Phân biệt các kiểu kế thừa private, protected và public. (1 iểm) Giải: HK1 a.
Lớp là một mô tả trừu t°ợng của nhóm các ối t°ợng cùng bản chất, ng°ợc lại
mỗi một ối t°ợng là một thể hiện cụ thể cho những mô tả trừu t°ợng ó.
Lớp là cái ta thiết kế và lập trình. Đối t°ợng là cái ta tạo (từ một lớp) tại thßi gian chạy. b.
Đa hình: Là hiện t°ợng các ối t°ợng thuộc các lớp khác nhau có khả năng hiểu cùng
một thông iệp theo các cách khác nhau. 16 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Ví dụ: Nhận °ợc cùng một thông iệp theo hai kiểu khác nhau: chúng cùng có hành vi dung khác nhau. HK2 a. Override Overload
Là một tính năng cho phép một lớp Nạp chồng ph°¡ng thức ¡n giản là
con hoặc lớp con cung cấp một có vài ph°¡ng thức trùng tên nh°ng
triển khai cụ thể của một ph°¡ng khác nhau về ối số. Cài chồng
thức ã °ợc cung cấp bái một trong ph°¡ng thức cho phép ta tạo nhiều Khái
các lớp siêu hoặc các lớp cha của phiên bản của một ph°¡ng thức, niệm
nó. Nói cách khác, nếu lớp con mỗi phiên bản chấp nhận một
cung cấp trình triển khai cụ thể danh sách ối số khác nhau, nhằm
của ph°¡ng thức mà ã °ợc cung cấp tạo thuận lợi cho việc gọi ph°¡ng
bái một trong các lớp cha của nó, thức. thì ó là ghi è ph°¡ng thức.
Thay ổi hành vi hiện tại của ph°¡ng Thêm hoặc má rộng cho hành vi Hành vi thức. của ph°¡ng thức.
Đa hình Thể hiện tính a hình tại run time. Thể hiện tính a hình tại compile Danh
Danh sách tham số phải giống
Danh sách tham số khác nhau (số sách nhau.
l°ợng, thứ tự, kiểu dữ liệu) tham số
Giá trị Kiểu trả về bắt buộc phải giống
Kiểu trả về có thể khác nhau. trả vÁ nhau.
Xảy ra giữa 2 class có quan hệ kế Phạm vi
Xảy ra trong phạm vi cùng 1 class. thừa b. 17 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
- Thành phần private á lớp cha thì không truy xuất °ợc á lớp con
- Kế thừa public: Lớp con kế thừa public từ lớp cha thì các thành phần protected của
lớp cha trá thành protected của lớp con, các thành phần public của lớp cha trá
thành public của lớp con.
- Kế thừa private: Lớp con kế thừa private từ lớp cha thì các thành phần protected
và public của lớp cha trá thành private của lớp con.
- Kế thừa protected: Lớp con kế thừa protected từ lớp cha thì các thành phần
protected và public của lớp cha trá thành protected của lớp con.
_________________________________ [2019-2020] HK2 a.
Hãy trình bày những ặc iểm của tính óng gói (encapsulation) lập trình
h°ớng ối t°ợng. Tr°ßng hợp nào thì có thể vi phạm tính óng gói? Cho ví dụ minh họa. (1 iểm) b.
Hãy trình bày những °u iểm của kế thừa trong việc lập trình h°ớng ối
t°ợng và cho ví dụ minh họa. (1 iểm) Giải: a. 18 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
- Đóng gói – Encapsulation: Nhóm những gì có liên quan với nhau vào làm một, ể
sau này có thể dùng một cái tên ể gọi ến. Tính óng gói " óng gói" thuộc tính và
ph°¡ng thức của ối t°ợng (hoặc lớp) thông qua việc giới hạn quyền truy cập (hoặc
thay ổi) giá trị của thuộc tính hoặc quyền gọi ph°¡ng thức. Nói cách khác tính óng
gói cho phép kiểm soát quyền truy cập (và thay ổi) giá trị của thuộc tính hoặc quyền
gọi ph°¡ng thức của ối t°ợng (hoặc lớp) và ối t°ợng (hoặc lớp) con.
- Tr°ßng hợp có thể vi phạm tính óng gói: khi khai báo lớp con là bạn của lớp cha. Ví dụ: class Nguoi { friend class SinhVien; char *HoTen; int NamSinh; public: //…
}; class SinhVien : public Nguoi{ char *MaSo; public: //…
void Xuat() const{ cout<<"Sinh vien, ma so: "<ho ten: "< } };
Khai báo lớp bạn như trên, lớp SinhVien có thể truy xuất các thành phần private của
lớp Nguoi. b. - ¯u iểm:
• Cho phép xây dựng 1 lớp mới từ lớp ã có.
▪ Lớp mới gọi là lớp con (subclass) hay lớp d¿n xuất (derived class). ▪
Lớp ã có gọi là lớp cha (superclass) hay lớp c¢ sở (base class). 19 lOMoAR cPSD| 40551442 TuanDM-HTTT2020
• Cho phép chia sẻ các thông tin chung nhằm tái sử dụng và ồng thßi giúp ta dễ
dàng nâng cấp, dễ dàng bảo trì.
• Định nghĩa sự t°¡ng thích giữa các lớp, nhß ó ta có thể chuyển kiểu tự ộng.
__________________________________________________________________ 20 lOMoAR cPSD| 40551442 CÂU 2. [2013-2014] HK1
a. Xét oạn ch°¡ng trình sau: #include using namespace std; class A { public:
A( ) { cout << "Constructing A "; }
~A( ) { cout << "Destructing A ";
} }; class B: public A { public:
B( ) { cout << "Constructing B "; }
~B( ) { cout << "Destructing B ";
} }; int main() { B b1; return 0; }
Hãy cho biết kết quả xuất ra màn hình khi thực thi oạn ch°¡ng trình trên. Giải
thích ngắn gọn tại sao có kết quả ó. (1.5 iểm) b. Xét oạn ch°¡ng trình sau: #include using namespace std; class A { private: int x;
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 public: A(int t) { x = t; }
static void f() { cout<} int f2() { return x; } }; void main() { A a; f2(a); }
Cho biết oạn ch°¡ng trình trên khi biên dịch có lỗi xảy ra hay không? Nếu có
lỗi, hãy chỉ ra các lỗi ó và sửa lỗi ể ch°¡ng trình có thể thực thi °ợc. (1.5 iểm) HK2
a. Xét lớp phân số °ợc khai báo nh° sau: class PhanSo{ private: int ts, ms; public: PhanSo (int ts=0, int ms=1); PhanSo operator +(PhanSo); };
Hãy cho biết trong các dòng lệnh sau ây, dòng nào có lỗi xảy ra, giải thích và sửa lỗi nếu có: PhanSo a, b(3, 4), c(2, 5); a = b + c; a = b + 3; a = 5 + c;
b. Xét oạn ch°¡ng trình sau: 22
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 #include using namespace std; class A { public:
A( ) { cout << "\nHam dung mac dinh lop A "; }
~A( ) { cout << "\nHam huy lop A "; } }; class B { public:
B( ) { cout << "\nHam dung mac dinh lop B "; }
~B( ) { cout << "\nHam huy lop B ";
} }; class C: public A, private B { public:
C( ) { cout << "\nHam dung mac dinh lop C "; }
~C( ) { cout << "\nHam huy lop C "; } }; void main() { C c; }
Hãy cho biết kết quả xuất ra màn hình khi thực thi oạn ch°¡ng trình trên.
Giải thích ngắn gọn tại sao có kết quả ó. Giải: HK1 23
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 a.
- Kết quả xuất ra màn hình:
Constructing A Constructing B Destructing B Destructing A - Giải thích:
Các lớp c¡ sá luôn °ợc xây dựng tr°ớc các thành viên dữ liệu. Các thành viên dữ liệu
°ợc xây dựng theo thứ tự mà chúng °ợc khai báo trong lớp. Thứ tự này không có gì
ể làm với danh sách khái tạo. Khi một thành viên dữ liệu ang °ợc khái tạo, nó sẽ xem
qua danh sách khái tạo của bạn ể biết các tham số và gọi hàm tạo mặc ịnh nếu không
có kết quả khớp. Hàm hủy cho các thành viên dữ liệu luôn °ợc gọi theo thứ tự ng°ợc lại. b.
- Đoạn ch°¡ng trình trên có lỗi xảy ra vì:
• Sai dòng static void f() { cout<Có thể sửa lại bằng cách khai báo x bên trong ph°¡ng thức f.
• Sai dòng A a; vì ch°a có ph°¡ng thức khái tạo mặc ịnh.
• Sai dòng f2(a); vì hàm f2 là ph°¡ng thức thuộc class A. Cú pháp ể gọi một
ph°¡ng thức thuộc lớp phải là: .method - Sửa: #include using namespace std; class A { private: int x; public: A() { } A(int t) { x = t; } 24
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 static void f(int x) { cout << x; } int f2() { return x; } }; void main() { A a; a.f2(); } HK2 a.
- Dòng lệnh: a = 5 + c; có lỗi vì ch°a xây dựng ph°¡ng thức cộng (operator +) ể cộng
một số nguyên với một phân số và trả về phân số. Trong C++, x + y (tr°ßng hợp trên)
°ợc dịch theo kiểu: x.operator+(y). Khi gọi operator. trong x. thì x không °ợc chuyển
kiểu tự ộng; y có thể chuyển ngầm °ợc vì class của x ã °ợc xác ịnh, số l°ợng hàm cần
kiểm thử chuyển kiểu tự ộng cho y là nhỏ. - Sửa: a = c + 5; b.
- Kết quả xuất ra màn hình: Ham dung mac dinh lop A Ham dung mac dinh lop B Ham dung mac dinh lop C 25
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 Ham huy lop C Ham huy lop B Ham huy lop A - Giải thích:
Các lớp c¡ sá luôn °ợc xây dựng tr°ớc các thành viên dữ liệu. Các thành viên dữ liệu
°ợc xây dựng theo thứ tự mà chúng °ợc khai báo trong lớp. Thứ tự này không có gì
ể làm với danh sách khái tạo. Khi một thành viên dữ liệu ang °ợc khái tạo, nó sẽ xem
qua danh sách khái tạo của bạn ể biết các tham số và gọi hàm tạo mặc ịnh nếu không
có kết quả khớp. Hàm hủy cho các thành viên dữ liệu luôn °ợc gọi theo thứ tự ng°ợc lại.
_________________________________ [2014-2015] HK2
Xây dựng lớp a thức bậc nhất ể thể hiện các a thức bật nhất có dạng:
F(x)= ax + b (a luôn khác 0)
Xây dựng các ph°¡ng thức: (3 iểm)
a. Ph°¡ng thức cho phép xác ịnh giá trị của a thức ứng với x=xo (tính F(xo) ).
b. Ph°¡ng thức trả về nghiệm a thức bậc 1 (nghĩa là F(x)=0).
c. Phép toán cộng (operator +) ể cộng hai a thức bậc nhất. Giải: class DaThucBacNhat { private: float a; float b; public: DaThucBacN hat();
DaThucBacNhat(float a1, float b1);
DaThucBacNhat(DaThucBacNhat& dt); 26
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
float TinhGiaTri(DaThucBacNhat dt, float x0);
float Nghiem(DaThucBacNhat dt);
DaThucBacNhat operator+(const DaThucBacNhat&); };
DaThucBacNhat::DaThucBacNhat() { a = 1; b = 0; }
DaThucBacNhat::DaThucBacNhat(float a1, float b1) { a = a1; b = b1; }
DaThucBacNhat::DaThucBacNhat(DaThucBacNhat& dt) { a = dt.a; b = dt.b; } float
DaThucBacNhat::TinhGiaTri(DaThucBacNhat dt, float x0) { return a * x0 + b;
} float DaThucBacNhat::Nghiem(DaThucBacNhat dt) { if (b == 0) return 0; else return -b / a; }
DaThucBacNhat DaThucBacNhat::operator+(const DaThucBacNhat& dt) { DaThucBacNhat tong; tong.a = this->a + dt.a; tong.b = this->b + dt.b; return tong; }
_________________________________ [2015-2016] HK2
Xây dựng lớp Thßi gian (giß, phút, giây) (1 iểm).
Định nghĩa các phép toán:
++ ể tăng thßi gian thêm 1 giây (1 iểm).
>> và << ể nhập, xuất dữ liệu thßi gian (1 iểm). HK3
Xây dựng lớp Phân số (1 iểm). Định nghĩa các phép toán +, - ể thực
hiện phép cộng và trừ giữa hai phân số (1 iểm). 27
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
>> và << ể nhập, xuất dữ liệu phân số (1 iểm). Giải: HK2 class CTime { private: int gio; int phut; int giay; public: CTime(); CTime(int h, int m, int s); ~CTime();
friend ostream& operator<<(ostream& os, const CTime& T);
friend istream& operator>>(istream& is, CTime& T); CTime operator+(int a); CTime operator++(); CTime operator++(int); }; CTime::CTime() {
this->gio = this->phut = this->giay = 0; }
CTime::CTime(int h, int m, int s) { this->gio = h; this- >phut = m; this->giay = s; } CTime::~CTime() { }
istream& operator>>(istream& is, CTime& T) { cout << "Nhap gio: "; is >> T.gio; cout << "Nhap phut: "; is
>> T.phut; cout << "Nhap giay: "; is >> T.giay; return is; }
ostream& operator<<(ostream& os, const CTime& T) {
os << T.gio << " gio " << T.phut << " phut " << T.giay << " giay "; return os; } long CTime::GetTong() { 28
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
return this->giay + this->phut * 60 + this->gio * 60 * 60; }long CTime::GetTong()
{ return this->giay + this->phut * 60 + this->gio * 60 * 60; } CTime CTime::operator+(int a) { CTime Time;
Time.gio = (this->GetTong() + a) / 3600;
Time.phut = ((this->GetTong() + a - Time.gio * 3600) / 60) % 60;
Time.giay = (this->GetTong() + a) % 60; return Time; } CTime CTime::operator++() { return *this + 1; }
CTime CTime::operator++(int a) { CTime temp; temp = *this; *this + 1; return temp; } HK3 class PhanSo { private: int ts, ms; public: PhanSo(); PhanSo(int a); void Reduce();
PhanSo operator+(const PhanSo&);
PhanSo operator-(const PhanSo&);
PhanSo operator*(const PhanSo&);
PhanSo operator/(const PhanSo&); bool operator==(PhanSo&); bool operator!=(PhanSo&);
bool operator>(PhanSo&); bool operator>=(PhanSo&);
bool operator<(PhanSo&); bool operator<=(PhanSo&);
friend istream& operator>>(istream& is, PhanSo& x);
friend ostream& operator<<(ostream& os, const PhanSo& x); ~PhanSo(); }; PhanSo::PhanSo(){ ts = 0; ms = 1; } PhanSo::PhanSo(int a) { 29
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 ts = a; ms = 1; } void PhanSo::Reduce() { int ucln; int a = abs(ts); int b = abs(ms);
if (ts == 0 && ms == 0) { ucln = ts + ms; } else { while (a != b) { if (a > b) { a -= b; } else { b -= a; } } ucln = a; } ts /= ucln; ms /= ucln; } PhanSo::~PhanSo() { }
istream& operator>>(istream& is, PhanSo& x) { cout << "Nhap tu so: ";
is >> x.ts; cout << "Nhap mau so: "; is >> x.ms; return is; }
ostream& operator<<(ostream& os, const PhanSo& x) { os << "Tu so: ";
os << x.ts; os << " Mau so: "; os << x.ms; return os; }
PhanSo PhanSo::operator+(const PhanSo& y) { PhanSo temp;
temp.ts = this->ts * y.ms + y.ts * this->ms; temp.ms = this->ms * y.ms; temp.Reduce(); return temp; }
PhanSo PhanSo::operator-(const PhanSo& y) { 30
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 PhanSo temp;
temp.ts = this->ts * y.ms - y.ts * this->ms; temp.ms = this->ms * y.ms; temp.Reduce(); return temp; }
_________________________________ [2016-2017] HK1
Cho oạn ch°¡ng trình tính toán với phân số nh° sau:
Hãy khai báo và cài ặt lớp phân số thích hợp ể ch°¡ng trình chạy úng. L°u ý
rằng không °ợc chỉnh sửa hàm main và sinh viên cần viết các lệnh #include
thích hợp. (2 iểm) HK2
Xây dựng lớp Thßi gian (giß, phút, giây) (0.5 iểm).
Định nghĩa các phép toán:
>> và << ể nhập, xuất dữ liệu thßi gian (1 iểm)
-- ể thực hiện giảm thßi gian i 1 giây (1 iểm) HK3
Xây dựng lớp a thức bậc hai (1 iểm) ể thể hiện các a thức bật hai có dạng:
F(x)= ax2 + bx + c (a luôn khác 0)
Xây dựng các ph°¡ng thức: (2 iểm) 31
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
a. Ph°¡ng thức cho phép xác ịnh giá trị của a thức ứng với x=xo (tính F(xo) ).
b. Phép toán cộng (operator +) ể cộng hai a thức bậc hai. Giải: HK1 #include using namespace std; #pragma once class PhanSo { private: int ts, ms; public: void Xuat(); PhanSo(); PhanSo(int a, int b); PhanSo(int a); void Reduce();
PhanSo operator+(const PhanSo&); }; #include "PhanSo.h" PhanSo::PhanSo() { ts = 0; ms = 1; } PhanSo::PhanSo(int a, int b) { ts = a; ms = b; } PhanSo::PhanSo(int a) { ts = a; ms = 1; } void PhanSo::Reduce() { int ucln; int a = abs(ts); int b = abs(ms);
if (ts == 0 && ms == 0) { ucln = ts + ms; } else { while (a != b) { if (a > b) { a -= b; } else 32
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 { b -= a; } } ucln = a; } ts /= ucln; ms /= ucln; } PhanSo::~PhanSo() { }
PhanSo PhanSo::operator + (const PhanSo& y) { PhanSo temp;
temp.ts = this->ts * y.ms + y.ts * this-
>ms; temp.ms = this->ms * y.ms; temp.Reduce(); return temp; } void PhanSo::Xuat() {
cout << "\nTu so: " << TuSo;
cout << "\nMau so: " << MauSo << endl; } HK2 class CTime { private: int gio; int phut; int giay; public: CTime(); CTime(int h, int m, int s); ~CTime();
friend ostream& operator<<(ostream& os, const CTime& T);
friend istream& operator>>(istream& is, CTime& T); CTime operator-(int a); CTime operator--(); CTime operator--(int); }; CTime::CTime() {
this->gio = this->phut = this->giay = 0; }
CTime::CTime(int h, int m, int s) { this->gio = h; this->phut = 33
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 m; this->giay = s; } CTime::~CTime() { }
istream& operator>>(istream& is, CTime& T) { cout << "Nhap gio: "; is >> T.gio; cout << "Nhap phut: ";
is >> T.phut; cout << "Nhap giay: "; is >> T.giay; return is; }
ostream& operator<<(ostream& os, const CTime& T) {
os << T.gio << " gio " << T.phut << " phut " << T.giay << " giay "; return os; } long CTime::GetTong() {
return this->giay + this->phut * 60 + this->gio * 60 * 60; }long CTime::GetTong()
{ return this->giay + this->phut * 60 + this->gio * 60 * 60; } CTime CTime::operator-(int a) { CTime Time;
if (this->GetTong() - a < 0) {
cout << "Loi!" << endl; return Time; } else { Time.gio = (this- >GetTong() - a) / 3600;
Time.phut = ((this->GetTong() - a - Time.gio * 3600) / 60) % 60;
Time.giay = (this->GetTong() - a) % 60; return Time; } } CTime CTime::operator--() { return *this - 1; }
CTime CTime::operator--(int a) { CTime temp; temp = *this; 34
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 *this - 1; return temp; } HK3 class DaThucBacHai { private: float a; float b; float c; public: DaThucBacHai();
DaThucBacHai(float a1, float b1, float c1);
DaThucBacHai(DaThucBacHai& dt);
float TinhGiaTri(DaThucBacHai dt, float
x0); DaThucBacHai operator+(const DaThucBacHai&); }; DaThucBacHai::DaThucBacHai() { a = 1; b = 0; c = 0; }
DaThucBacHai::DaThucBacHai(float a1, float b1, float c1) { a = a1; b = b1; c = c1; }
DaThucBacHai::DaThucBacHai(DaThucBacHai& dt) { a = dt.a; b = dt.b; c = dt.c; }
float DaThucBacHai::TinhGiaTri(DaThucBacHai dt, float x0)
{ return a * pow(x0, 2) + b * x0 + c; }
DaThucBacHai DaThucBacHai::operator+(const DaThucBacHai& dt) { DaThucBacHai tong; tong.a = this->a + dt.a; tong.b = this->b + dt.b; tong.c = this->c + dt.c; return tong; }
_________________________________ 35
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 [2017-2018] HK1 void main()
{ cNgay ng1; // ng1 sẽ có giá trị là ngày 1 tháng 1 năm 1 cNgay ng2(2017, 1);
// ng2 sẽ có giá trị là ngày 1 tháng 1 năm 2017 cNgay ng3(2017, 1, 7);
// ng3 sẽ có giá trị là ngày 7 tháng 1 năm 2017 cin>>ng1; cout<if(ng1 < ng2) cout << "Ngay 1 truoc ngay 2" << endl;
else cout << "Ngay 1 khong truoc ngay 2" << endl; }
Hãy ịnh nghĩa lớp cNgay thích hợp ể ch°¡ng trình không bị lỗi biên dịch và
chạy úng. L°u ý rằng không °ợc chỉnh sửa hàm main và sinh viên cần viết cả
các lệnh #include thích hợp. (3 iểm) HK2
Xây dựng lớp Đa thức bậc n với các toán tử >>, <<, +. (3 iểm) Giải: HK1 #include using namespace std; #pragma once class cNgay { private: int nam, thang, ngay; public: cNgay(); cNgay(int a, int b); cNgay(int a, int b, int c);
friend istream& operator>>(std::istream&, cNgay&); friend
ostream& operator<<(std::ostream&, const cNgay);
bool operator<(cNgay&); };
#include "Ngay.h" cNgay::cNgay() { nam = 1; thang = 1; ngay = 1; } cNgay::cNgay(int a, int b) { nam = a; thang = b;
} cNgay::cNgay(int a, int b, int c) { nam = a; thang = b; 36
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 nam = c;
} istream& operator>>(std::istream& is, cNgay& x) { cout << "\nNhap nam :"; is >> x.nam; cout << "\nNhap thang :"; is >> x.thang; cout << "\nNhap ngay :"; is >> x.ngay; return is;
} ostream& operator<<(std::ostream& os, const cNgay x) {
os << "\nNgay " << x.ngay << " thang " << x.thang << " nam " << x.nam << endl; return os;
} bool cNgay::operator<(cNgay& b) { if (nam <= b.nam) { if (nam < b.nam) return true; else { if (thang <= b.thang) { if (thang < b.thang) return true; else { if (ngay < b.ngay) return true; } } } } return false; } HK2 #include using namespace std; #pragma once class DaThuc { private: int n; int* arr; public: DaThuc();
friend istream& operator>>(std::istream&, DaThuc&);
friend ostream& operator<<(std::ostream&, const DaThuc);
DaThuc operator+(const DaThuc&); 37
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 }; #include "DaThuc.h" DaThuc::DaThuc() { int n = 1; arr = new int[1]; arr[0] = 1;
} istream& operator>>(std::istream& is, DaThuc& y) {
cout << "\nNhap bac cua da thuc :"; int m; is >> m; y.n = m; y.arr = new int[y.n + 1];
for (int i = y.n; i >= 0; i--) {
cout << "\nNhap he bac " << i << " :"; cin >> y.arr[i]; } return is;
} ostream& operator<<(std::ostream& os, const DaThuc y) {
os << "\nHe so cua bac giam dan la:";
for (int i = y.n; i >= 0; i--) {
os << y.arr[i] << " "; } return os; }
DaThuc DaThuc::operator+(const DaThuc &y) { DaThuc z; if (this->n > y.n) { z.n = this->n; z.arr = new int[z.n + 1];
for (int i = y.n; i >= 0; i--) {
z.arr[i] = this->arr[i] + y.arr[i]; } int j = this->n; while (j > y.n) { z.arr[j] = this->arr[j]; j--; } return z; } if (this->n < y.n) { DaThuc z; z.n = y.n; 38
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 //z = z.KhoiTao(y.n); z.arr = new int[y.n + 1];
for (int i = this->n; i >= 0; i--) {
z.arr[i] = this->arr[i] + y.arr[i]; } int j = z.n; while (j > this->n) { z.arr[j] = y.arr[j]; j--; } return z; } if (this->n == y.n) { DaThuc z; z.n = this->n;
z.arr = new int[this->n + 1]; //z = z.KhoiTao(x.n);
for (int i = y.n; i >= 0; i--) {
z.arr[i] = this->arr[i] + y.arr[i]; } return z; } }
_________________________________ [2018-2019] HK1
Định nghĩa lớp CDate biểu diễn khái niệm ngày, tháng, năm (0.5 iểm) với các
phép toán ++ (thêm một ngày) theo dạng prefix ++a và postfix a++ (1 iểm).
Phép toán <<, >> ể xuất, nhập dữ liệu Cdate (1 iểm). HK2
Xây dựng lớp thßi gian (giß, phút, giây) với các toán tử >>, << ể nhập xuất và
toán tử ++ ể tăng thßi gian thêm 1 giây. (3 iểm) Giải: HK1 #include using namespace std; #pragma once class CDate 39
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 { private: int ngay, thang, nam; public: CDate();
friend std::istream& operator>>(std::istream&, CDate&);
friend std::ostream& operator<<(std::ostream&, const CDate);
friend CDate operator+(const CDate, const int); CDate& operator++(); CDate operator++(int); bool ktNamNhuan(); long long TongNgay(); long operator-(CDate& y); }; #include "CDate.h" #include using namespace std; CDate::CDate() { ngay = 0; thang = 0; nam = 0; }
std::istream& operator>>(std::istream& is, CDate& x) {
cout << "\nNhap ngay :";
is >> x.ngay; cout << "\nNhap thang :"; is >>
x.thang; cout << "\nNhap nam :"; is >> x.nam; return is; }
std::ostream& operator<<(std::ostream& os, const CDate x) {
os << "\nNgay " << x.ngay << " thang " << x.thang << " nam " << x.nam; return os; }
CDate& CDate::operator++() { int k = ngay + 1; do { switch (thang)
{ case 1:case 3:case 5: case 7:case 8: case 10: case 12: if (k > 31) { thang++; if (thang == 13) { thang = 1; nam++; } k -= 31; } else { ngay = k; k =
0; } break; case 4:case 6: case 9: case 11: if (k > 30) { thang++; k -= 30; } else 40
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 { ngay = k; k = 0; }
break; case 2: if (nam % 400 == 0 || (nam % 4
== 0 && nam % 100 != 0)) { if (k > 29) { thang++; k -= 29; } else { ngay = k; k = 0; } } else { if (k > 28) { thang++; k -= 28; } else { ngay = k; k = 0; } } break; } } while (k > 0); return *this; }
CDate CDate::operator++(int y) { CDate temp; temp.nam = this->nam; temp.thang = this->thang; temp.ngay = this->ngay; int k = ngay + 1; do {
switch (thang) { case 1:case 3:case 5:
case 7:case 8: case 10: case 12: if (k > 31) { thang++; if (thang == 13) { thang = 1; nam++; } k -= 31; } else { ngay = k; k = 0; } break;
case 4:case 6: case 9: case 11: if (k > 30) { thang++; k -= 30; } else { ngay = k; k = 0; } break; case 2: if
(nam % 400 == 0 || (nam % 4 == 0 && nam % 100 != 0)) { if (k > 29) { thang++; k -= 29; } 41
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 else { ngay = k; k = 0; } } else { if (k > 28) { thang++; k -= 28; } else { ngay = k; k = 0; } } break; } } while (k > 0); return temp; } HK2 class CTime { private: int gio; int phut; int giay; public: CTime(); CTime(int h, int m, int s); ~CTime();
friend ostream& operator<<(ostream& os, const CTime& T);
friend istream& operator>>(istream& is, CTime& T); CTime operator+(int a); CTime operator++(); CTime operator++(int); }; CTime::CTime() {
this->gio = this->phut = this->giay = 0; }
CTime::CTime(int h, int m, int s) { this->gio = h; this->phut = m; this->giay = s; } CTime::~CTime() { }
istream& operator>>(istream& is, CTime& T) { cout << "Nhap gio: "; is >> T.gio; 42
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 cout << "Nhap phut: ";
is >> T.phut; cout << "Nhap giay: "; is >> T.giay; return is; }
ostream& operator<<(ostream& os, const CTime& T) {
os << T.gio << " gio " << T.phut << " phut " << T.giay << " giay "; return os; } long CTime::GetTong() {
return this->giay + this->phut * 60 + this->gio * 60 * 60; }long CTime::GetTong()
{ return this->giay + this->phut * 60 + this->gio * 60 * 60; } CTime CTime::operator+(int a) { CTime Time;
Time.gio = (this->GetTong() + a) / 3600;
Time.phut = ((this->GetTong() + a - Time.gio * 3600) / 60) % 60;
Time.giay = (this->GetTong() + a) % 60; return Time; } CTime CTime::operator++() { return *this + 1; }
CTime CTime::operator++(int a) { CTime temp; temp = *this; *this + 1; return temp; }
_________________________________ [2019-2020] HK2
Cho lớp Phân số (CPhanSo). Hãy khai báo và ịnh nghĩa các ph°¡ng thức cần
thiết ể các ối t°ợng thuộc lớp CPhanSo có thể thực hiện °ợc các câu lệnh sau:
CPhanSo a(5, 3); CPhanSo b, c, kq; cin>>b>> c;
kq = a + b + 5 + c; cout<<"Ket qua la: "<43
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
a==b ) cout<<"Phan so a bang phan so b"<Giải: HK2 #include using namespace std; #pragma once class PhanSo { private: int ts, ms; public: PhanSo(); PhanSo(int a); void Reduce();
PhanSo operator+(const PhanSo&); bool operator==(PhanSo&); friend istream&
operator>>(istream& is, PhanSo& x);
friend ostream& operator<<(ostream& os, const PhanSo& x); ~PhanSo(); }; #include "PhanSo.h" PhanSo::PhanSo() { ts = 0; ms = 1; } PhanSo::PhanSo(int a) { ts = a; ms = 1; } void PhanSo::Reduce() { int ucln; int a = abs(ts); int b = abs(ms);
if (ts == 0 && ms == 0) { ucln = ts + ms; } else { while (a != b) { if (a > b) { a -= b; } else { b -= a; } } ucln = a; 44
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 } ts /= ucln; ms /= ucln; } PhanSo::~PhanSo() { }
PhanSo PhanSo::operator + (const PhanSo& y) { PhanSo temp;
temp.ts = this->ts * y.ms + y.ts * this->ms; temp.ms = this->ms * y.ms; temp.Reduce(); return temp; }
bool PhanSo::operator ==(PhanSo& y) {
float s1 = this->ts / this->ms; float s2 = y.ts / y.ms; if (s1 == s2) return true; return false;
} istream& operator>>(istream& is, PhanSo& x) { cout << "Nhap tu so: ";
is >> x.ts; cout << "Nhap mau so: "; is >> x.ms; return is;
} ostream& operator<<(ostream& os, const PhanSo& x) { os << "Tu so: ";
os << x.ts; os << " Mau so: "; os << x.ms; return os; }
__________________________________________________________________ 45
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 CÂU 3. [2013-2014] HK1
Giả sử Tr°ßng ĐH CNTT TP.HCM ào tạo sinh viên theo 2 hệ là hệ cao ẳng và
hệ ại học. Thông tin cần quản lí của một sinh viên cao ẳng bao gồm: mã số
sinh viên, họ tên, ịa chỉ, tổng số tín chỉ, iểm trung bình, iểm thi tốt nghiệp.
Thông tin cần quản lí của một sinh viên ại học bao gồm: mã số sinh viên, họ
tên, ịa chỉ, tổng số tín chỉ, iểm trung bình, tên luận văn, iểm luận văn.
Cách xét tốt nghiệp của sinh viên mỗi hệ là khác nhau:
- Sinh viên hệ cao ẳng tốt nghiệp khi có tổng số tín chỉ từ 120 trá lên, iểm
trung bình từ 5 trá lên và iểm thi tốt nghiệp phải ạt từ 5 trá lên.
- Sinh viên hệ ại học tốt nghiệp khi có tổng số tín chỉ từ 170 trá lên, iểm trung
bình từ 5 trá lên và phải bảo vệ luận văn với iểm số ạt °ợc từ 5 iểm trá lên.
Bạn hãy ề xuất thiết kế các lớp ối t°ợng cần thiết ể quản lý danh sách các sinh
viên của Tr°ßng và hỗ trợ xét tốt nghiệp cho các sinh viên theo tiêu chí ặt ra nh° trên.
Hãy viết ch°¡ng trình bằng C++ cho phép thực hiện các yêu cầu sau (5 iểm):
- Nhập vào danh sách sinh viên, có thể sử dụng string cho các chuỗi kí tự.
- Cho biết số l°ợng sinh viên ủ iều kiện tốt nghiệp?
- Cho biết sinh viên ại học nào có iểm trung bình cao nhất? HK2
Mùa hè lại ến, công viên văn hóa Đầm Sen hân hoan ón chào các em thiếu
nhi, các bạn học sinh, sinh viên và toàn thể quí khách ến tham quan và tham
dự các trò ch¡i kì thú và ầy hấp dẫn. Giả sử trên mỗi chiếc vé mà công viên
phát hành, ều có ghi lại mã vé (chuỗi), họ tên ng°ßi chủ vé (chuỗi), năm sinh
của ng°ßi ó (số nguyên) và số trò ch¡i mà ng°ßi ó tham dự (số nguyên). Để
phục vụ tối a cho lợi ích khách hàng, công viên phát hành 2 loại vé là vé trọn
gói và vé từng phần. Giá vé trọn gói là 200.000 VNĐ. Ng°ßi ch¡i mua vé trọn
gói có thể ch¡i tất cả 30 trò ch¡i có trong công viên. Đối với vé từng phần, giá
vé là 70.000 VNĐ (giá vé vào cổng), ngoài ra, khi ng°ßi ch¡i tham dự một trò
ch¡i nào thì cần trả thêm 20.000 VNĐ cho trò ch¡i ó. Hãy viết ch°¡ng trình
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
bằng C++ cho phép thực hiện các chức năng sau: a. Nhập vào danh sách các vé.
b. Tính tổng tiền vé mà công viên thu °ợc.
c. Hãy cho biết, có bao nhiêu vé ã bán là vé từng phần. Yêu cầu:
Sử dụng tính chất kế thừa và a hình. Vẽ s¡ ồ lớp: mô tả các lớp, các thuộc tính,
các ph°¡ng thức và mối liên hệ các lớp (2 iểm). Lập trình các chức năng °ợc yêu cầu (3 iểm). Giải: HK1
- S¡ ồ lớp ối t°ợng: … - Ch°¡ng trình: #include using namespace std; class SinhVien { protected: int MSSV; string HoTen; string DiaChi; float DTB; int TongSoTinChi; public: SinhVien() {} ~SinhVien() {} virtual void Nhap(); virtual void Xuat(); virtual bool XetTotNghiep() = 0; float getDTB() { return DTB; } }; void SinhVien::Nhap()
{ cout << "Nhap thong tin sinh
vien\n"; cout << "Nhap MSSV: ";
cin >> MSSV; cout << "Nhap HoTen: ";
cin >> HoTen; cout << "Nhap DiaChi:
"; cin >> DiaChi; cout << "Nhap
DTB: "; cin >> DTB; cout << "Nhap
So Tin Chi: "; cin >> TongSoTinChi; } 47
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 void SinhVien::Xuat()
{ cout << "Thong tin sinh vien\n";
cout << "MSSV: " << MSSV << "\n";
cout << "HoTen: " << HoTen << "\n";
cout << "DiaChi: " << DiaChi << "\n";
cout << "DTB: " << DTB << "\n";
cout << "Tong So Tin Chi: " << TongSoTinChi << "\n"; }
class SinhVienCaoDang : public SinhVien { protected: float DiemTotNghiep; public: SinhVienCaoDang() {} ~SinhVienCaoDang() {} void Nhap(); void Xuat(); bool XetTotNghiep(); }; void SinhVienCaoDang::Nhap() { SinhVien::Nhap(); cout
<< "Diem tot nghiep: "; cin >> DiemTotNghiep; } void SinhVienCaoDang::Xuat() { SinhVien::Xuat();
cout << "Diem tot nghiep: " << DiemTotNghiep << "\n"; } bool
SinhVienCaoDang::XetTotNghiep() {
if (TongSoTinChi >= 120 and DTB >= 5) return true; else return false;
} class SinhVienDaiHoc : public SinhVien { protected: string TenLuanVan; float DiemLuanVan; public: SinhVienDaiHoc() {} ~SinhVienDaiHoc() {} void Nhap(); void Xuat(); bool XetTotNghiep(); }; void SinhVienDaiHoc::Nhap() {
SinhVien::Nhap(); cout <<
"Nhap ten luan van: "; cin >>
TenLuanVan; cout << "Nhap diem 48
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 luan van: "; cin >> DiemLuanVan; } void SinhVienDaiHoc::Xuat() { SinhVien::Xuat();
cout << "Ten luan van: " << TenLuanVan << "\n";
cout << "Diem luan van: " << DiemLuanVan << "\n"; }
bool SinhVienDaiHoc::XetTotNghiep()
{ if (TongSoTinChi >= 170 and DTB >= 5 and DiemLuanVan >=
5) return true; else return false;
} int main() { cout << "Hello World!\n"; //TestCode //cau 1 int SoLuongSinhVien;
cout << "Nhap so luong sinh vien: ";
cin >> SoLuongSinhVien; SinhVien*
arr[SoLuongSinhVien]; int loai;
for (int i = 0; i < SoLuongSinhVien; i++) {
cout << "1. Sinh vien cao dang 2. Sinh vien dai hoc\n";
cout << "Nhap loai sinh vien: "; cin >> loai; if (loai == 1)
arr[i] = new SinhVienCaoDang(); else
arr[i] = new SinhVienDaiHoc(); arr[i]->Nhap(); } //cau 2
int SoLuongSinhVienTotNghiep = 0; for
(int i = 0; i < SoLuongSinhVien; i++) {
if (arr[i]->XetTotNghiep() == true) ++SoLuongSinhVienTotNghiep; }
cout << "SoLuongSinhVienTotNghiep: " << SoLuongSinhVienTotNghiep; //cau 3 float DiemCaoNhat = -1.0; int pos;
for (int i = 0; i < SoLuongSinhVien; i++) {
if (arr[i]->getDTB() > DiemCaoNhat) {
DiemCaoNhat = arr[i]->getDTB(); pos = i; } }
cout << "Diem trung binh cao nhat la: " << DiemCaoNhat << "\n";
cout << "Sinh vien do la: "; arr[pos]->Xuat(); return 0; } (Source: anhkiet1227) 49
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 HK2
- S¡ ồ lớp ối t°ợng: … - Ch°¡ng trình: #include using namespace std; class Ve { protected: string MaVe, HoTen; int NamSinh, SoTroChoi; int GiaVe; int SoLuongTroChoi; public: Ve() {} ~Ve() {} virtual int getGiaVe() = 0; virtual void Nhap(); virtual int getLoai() = 0;
}; void Ve::Nhap() { cout <<
"Nhap thong tin\n"; cout << "Ma Ve: "; cin >> MaVe;
cout << "Ho Ten: "; cin >>
HoTen; cout << "Nam Sinh: ";
cin >> NamSinh; cout << "So
luong tro choi: "; cin >> SoLuongTroChoi; } class VeTronGoi : public Ve { public: VeTronGoi() {} ~VeTronGoi() {} int getGiaVe() { return 200000; } void Nhap() { Ve::Nhap(); } int getLoai() { return 1; } }; class VeTungPhan : public Ve { public: VeTungPhan() {} ~VeTungPhan() {} int getGiaVe() {
return 70000 + 20000 * SoLuongTroChoi; } void Nhap() { Ve::Nhap(); } int getLoai() { return 2; } }; int main() { cout << "Hello World!\n"; //cau A 50
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
int SoLuongVe; cout << "Nhap so luong ve: "; cin >> SoLuongVe; Ve* arr[SoLuongVe]; int loai;
for (int i = 0; i < SoLuongVe; i++) {
cout << "Nhap loai ve: 1 Ve tron goi 2 Ve tung phan\n";
cin >> loai; if (loai == 1) { arr[i] = new VeTronGoi(); } if (loai == 2) { arr[i] = new VeTungPhan(); } arr[i]->Nhap(); } //cau B int TongTien = 0;
for (int i = 0; i < SoLuongVe; i++)
TongTien += arr[i]->getGiaVe();
cout << "Tong tien ve thu duoc: " << TongTien << "\n"; //cau C int SoVeTungPhan = 0;
for (int i = 0; i < SoLuongVe; i++)
if (arr[i]->getLoai() == 2) ++SoVeTungPhan;
cout << "So luong ve tung phan: " << SoVeTungPhan << "\n"; return 0; } (Source: anhkiet1227)
_________________________________ 51
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 [2014-2015] HK2
Xây dựng ch°¡ng trình mô phỏng trò ch¡i cß t°ớng với các mô tả nh° sau:
Bàn cß là một hình chữ nhật do 9 °ßng dọc và 10 °ßng ngang cắt nhau vuông
góc tại 90 iểm hợp thành. Một khoảng trống gọi là sông (hay hà) nằm ngang
giữa bàn cß, chia bàn cß thành hai phần ối xứng bằng nhau.
Mỗi bên có một cung T°ớng hình vuông (Cung) do 4 ô hợp thành tại các °ßng
dọc 4, 5, 6 kể từ °ßng ngang cuối của mỗi bên, trong 4 ô này có vẽ hai °ßng chéo xuyên qua. LuÁt ch¢i
Quân cß °ợc di chuyển theo luật sau:
1. T°ớng: Đi từng ô một, i ngang hoặc dọc. T°ớng luôn luôn phải á trong phạm
vi cung và không °ợc ra ngoài. Cung tức là hình vuông 2X2 °ợc ánh dấu
bằng °ßng chéo hình chữ X
2. Sĩ: Đi xéo 1 ô mỗi n°ớc. Sĩ luôn luôn phải á trong cung nh° T°ớng.
3. T°ợng: Đi chéo 2 ô (ngang 2 và dọc 2) cho mỗi n°ớc i. T°ợng chỉ °ợc phép
á một bên của bàn cß, không °ợc di chuyển sang nửa bàn cß của ối ph°¡ng.
N°ớc i của t°ợng sẽ không hợp lệ khi có một quân cß nằm chặn giữa °ßng i.
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
4. Xe: Đi ngang hay dọc trên bàn cß miễn là ừng bị quân khác cản °ßng từ iểm i ến iểm ến.
5. Mã: Đi ngang 2 ô và dọc 1 ô (hay dọc 2 ô và ngang 1 ô) cho mỗi n°ớc i. Nếu
có quân nằm ngay bên cạnh mã và cản °ßng ngang 2 (hay °ßng dọc 2), mã
bị cản không °ợc i °ßng ó.
6. Pháo: Đi ngang và dọc giống nh° xe. Điểm khác biệt là nếu pháo muốn ăn
quân, pháo phải nhảy qua úng 1 quân nào ó. Khi không ăn quân, tất cả
những iểm từ chỗ i ến chỗ ến phải không có quân cản.
7. Tốt: i một ô mỗi n°ớc. Nếu tốt ch°a v°ợt qua sông, nó chỉ có thể i thẳng
tiến. Khi ã v°ợt sông rồi, tốt có thể i ngang 1 n°ớc hay i thẳng tiến 1 b°ớc mỗi n°ớc.
Áp dụng kiến thức lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế s¡ ồ chi
tiết các lớp ối t°ợng (1.5 iểm), khai báo và ịnh nghĩa các lớp gồm thuộc tính
và ph°¡ng thức (1.5 iểm) ể thực hiện các yêu cầu sau:
1. Tạo bàn cß ban ầu (với các mô tả nh° trên) (1 iểm).
2. Yêu cầu ng°ßi dùng chọn một quân cß, xuất cách i của quân cß t°¡ng ứng (1 iểm).
Lưu ý: Trong tr°ßng hợp sinh viên không ch¡i trò ch¡i này tr°ớc ây thì phải ọc
kỹ thông tin về trò ch¡i trên (các thông tin trên ủ ể sinh viên thực hiện các yêu
cầu của ề thi) và nghiêm túc làm bài. Giải: HK2
- S¡ ồ lớp ối t°ợng: … - Ch°¡ng trình: #include 53
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 using namespace std; class QuanCo { protected: string mau; int x, y; public:
QuanCo(string mau, int x, int y) { this->mau = mau; this->x = x; this->y = y; } virtual void DiChuyen() = 0; };
class Tuong_Vua : public QuanCo { public:
Tuong_Vua(string mau, int x, int y) : QuanCo(mau, x, y) {} void DiChuyen() {
cout << "Di tung o mot, di ngang hoac doc. Tuong luon lu n phai o trong pham vi
cung va khong đ±ợc ra ngoai. Cung tuc la hinh vuong 2X2 duoc danh dau bang duong cheo hinh chu X\n"; } }; class Si : public QuanCo { public:
Si(string mau, int x, int y) : QuanCo(mau, x, y) {} void DiChuyen() {
cout << "Di cheo 1 o moi nuoc. Si luon luon phai o trong cung.\n"; } }; class Tuong : public QuanCo { public:
Tuong(string mau, int x, int y) : QuanCo(mau, x, y) {} void DiChuyen() {
cout << "Di cheo 2 o (ngang 2 va doc 2) cho moi buoc di. Tuong chi duoc phep di
mot ben cua ban co khong duoc di chuyen sang nua ban co doi phuong. Nuoc di cua tuong se
khong hop le khi co mot quan nam giua duong di\n"; } }; class Ma :public QuanCo { public:
Ma(string mau, int x, int y) : QuanCo(mau, x, y) {} 54
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 void DiChuyen() {
cout << "Di ngang 2 o va doc 1 o (hay doc 2 o va ngang 1 o) cho moi nuoc di. Neu
co quan nam ngay ben canh ma va can duong ngang 2 (hay duong doc 2), ma bi can khogn duoc di duong do.\n"; } }; class Xe : public QuanCo { public:
Xe(string mau, int x, int y) : QuanCo(mau, x, y) {} void DiChuyen()
{ cout << "Di ngang hay doc tren ban co mien la dung bi quan khac can duong di den diem den.\n"; } }; class Phao : public QuanCo { public:
Phao(string mau, int x, int y) : QuanCo(mau, x, y) {} void DiChuyen() {
cout << "Di ngang va doc giong nhu xe. Diem khac biet la phao muon an quan co,
phao phai nhay qua 1 quan. Khi khong an quan, tat ca nhung diem tu cho di den den cho
phai den khong co quan can.\n"; } }; class Tot : public QuanCo { private: string mau; int x, y; public:
Tot(string mau, int x, int y) : QuanCo(mau, x, y) {} void DiChuyen()
{ cout << "Di mot o moi nuoc. Neu tot chua vuot song chi co the di thang
tien. Khi da vuot song roi, tot co the di ngang hoac thang 1 buoc.\n"; } }; int main() { // Cau 1 QuanCo* a[32];
string trang = "trang"; string den
= "den"; cout << "Khoi tao ban
co\n"; a[0] = new Tuong_Vua(trang,
1, 5); a[1] = new Tuong_Vua(den,
10, 5); a[2] = new Si(trang, 1,
4); a[3] = new Si(trang, 1, 6);
a[4] = new Si(den, 10, 4); a[5] =
new Si(den, 10, 6); a[6] = new Ma(trang, 1, 2); a[7] = new Ma(trang, 1, 8); a[8] = new
Ma(den, 10, 2); a[9] = new Ma(den, 55
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
10, 8); a[10] = new Xe(trang, 1,
1); a[11] = new Xe(trang, 1, 9);
a[12] = new Xe(den, 10, 1); a[13]
= new Xe(den, 10, 9); a[14] = new
Phao(trang, 3, 2); a[15] = new
Phao(trang, 3, 8); a[16] = new Phao(den, 8, 2); a[17] = new Phao(den, 8, 8); a[18] = new Tot(trang, 4, 1); a[19] = new Tot(trang, 4, 3); a[20] = new Tot(trang, 4, 5); a[21] = new Tot(trang, 4, 7); a[22] = new Tot(trang, 4, 9); a[23] = new Tot(den, 7, 1); a[24] = new Tot(den, 7, 3); a[25] = new Tot(den, 7, 5); a[26] = new Tot(den, 7, 7); a[27] = new Tot(den, 7, 9); a[28] = new
Tuong(trang, 1, 3); a[29] = new
Tuong(trang, 1, 7); a[30] = new
Tuong(den, 10, 3); a[31] = new Tuong(den, 10, 7); // Cau 2
cout << "Nhap quan co muon di chuyen, tu 0 - 31 \n";
int CoDuocChon; cin >> CoDuocChon;
a[CoDuocChon]->DiChuyen(); return 0; } (Source: anhkiet1227)
_________________________________ 56
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 [2015-2016] HK2
Xây dựng ch°¡ng trình mô phỏng biên soạn nhạc với các mô tả ký kiệu âm nhạc nh° sau:
Nốt nhạc: là ký hiệu trong bản nhạc dùng ể xác ịnh cao ộ ( ộ cao), trường ộ (ộ
dài, ộ ngân vang) của từng âm thanh °ợc vang lên trong bản nhạc.
Có 7 ký hiệu nốt nhạc dùng ể xác
ịnh cao ộ theo thứ tự từ thấp ến
cao, ó là Đô (C), Rê (D), Mi (E),
Fa (F), Sol (G), La (A), và Si (B).
Để xác ịnh tr°ßng ộ của nốt nhạc có cao ộ kể trên, ng°ßi ta cũng dùng 7 hình
nốt ể thể hiện, ó là:
Dấu lặng (Z - Zero) là ký hiệu cho biết phải ng°ng, không diễn tấu âm thanh
(không có cao ộ) trong một thßi gian nào ó. Các dấu lặng trong thßi gian t°¡ng
ứng (giá trị tr°ßng ộ) với dạng dấu nhạc nào, thì cũng có tên gọi t°¡ng tự. Tr°ßng ộ 4 2 1 1/2 1/4 1/8 1/16
Ví dụ: Ký hiệu bản nhạc
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 Tr°ờng 1 1/2 1/2 1/2 1 1/2 1 1 2 Không Cao ộ C C A G D C C F có (Z) Đô La móc Sol Dấu Rê Đô Đô Đô Fa Nốt móc ¡n móc móc en lặng ¡n en en ¡n trắng en ¡n
Áp dụng kiến thức lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế s¡ ồ chi
tiết các lớp ối t°ợng (1.5 iểm) và xây dựng ch°¡ng trình thực hiện các yêu cầu sau:
1. Soạn một bản nhạc. (1.5 iểm)
2. Tìm và ếm có bao nhiêu dấu lặng en (Q) trong bản nhạc. (1 iểm)
3. Cho biết nốt nhạc có cao ộ cao nhất trong bản nhạc. (1 iểm)
Lưu ý: Trong tr°ßng hợp sinh viên không biết về nhạc lý tr°ớc ây thì phải ọc
kỹ thông tin trên (các thông tin trên ủ ể sinh viên thực hiện các yêu cầu của ề
thi) và nghiêm túc làm bài. Giám thị coi thi không giải thích gì thêm. HK3
Xây dựng ch°¡ng trình mô phỏng game võ lâm truyền kì với các mô tả nh° sau:
Võ lâm truyền kì là một tựa game theo phong cách nhập vai kiếm hiệp xuất
hiện từ những ngày ầu trên thị tr°ßng game online Việt Nam. Trong game,
ng°ßi ch¡i có thể t°¡ng tác với nhau ể giải trí hoặc tiêu diệt quái vật ể phát triển nhân vật của mình. 58
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Nhân vật: Đ°ợc xem nh° ại diện cho một ng°ßi ch¡i. Mỗi nhân vật thuộc về
một môn phái nào ó trong tổng số 10 môn phái của game. Một nhân vật có
một giá trị thể hiện cấp ộ và mức sát th°¡ng. Trong ó Sát th°¡ng = Cấp ộ x 5
Quái vật: Để gia tăng cấp ộ nhân vật của mình, mỗi ng°ßi ch¡i sẽ thông qua
việc tiêu diệt các quái vật. Có hai loại quái vật : thông th°ßng và ầu lĩnh. Các
quái vật cũng sẽ có khả năng tấn công lại ng°ßi ch¡i. Quái vật thông th°ßng:
Sát th°¡ng = Cấp ộ x 3. Quái vật ầu lĩnh: Sát th°¡ng = Cấp ộ x 7.
Một nét ặc sắc của game ó là hệ thống ngũ hành t°¡ng sinh t°¡ng khắc, mỗi
một môn phái và quái vật sẽ thuộc về một các ng°ßi ch¡i với nhau, giữa ng°ßi ch¡i với quái vật ều dựa trên các quy tắc về ngũ hành. 59
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Quy tắc tương sinh: (S) Sát th°¡ng gây ra cho ng°ßi ch¡i hoặc quái vật + 10 %
Ví dụ: Hoả sinh thổ, sát th°¡ng ng°ßi ch¡i (hoặc quái vật ) hệ hoả gây ra cho
ng°ßi ch¡i (hoặc quái vật) hệ thổ + 10 %
Quy tắc tương khắc: (K) Sát th°¡ng gây ra cho ng°ßi ch¡i hoặc quái vật ± 20 %
Ví dụ: Mộc khắc thổ, sát th°¡ng ng°ßi ch¡i (hoặc quái vật ) hệ mộc gây ra cho
ng°ßi ch¡i (hoặc quái vật) hệ thổ + 20 %. Ng°ợc lại, sát th°¡ng ng°ßi ch¡i (hoặc
quái vật) hệ thổ gây ra cho ng°ßi ch¡i (hoặc quái vật) hệ mộc - 20 %
Áp dụng kiến thức lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế s¡ ồ chi
tiết các lớp ối t°ợng (1.5 iểm) và xây dựng ch°¡ng trình thực hiện các yêu cầu sau:
1. Tạo và quản lý một danh sách các ng°ßi ch¡i và quái vật. (1.5 iểm)
2. Cho biết phần tử có mức sát th°¡ng cao nhất trong danh sách. (1 iểm) 60
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
3. Cho hai phần tử A và B, so sánh giá trị sát th°¡ng tác ộng A lên B và ng°ợc lại. (1 iểm)
Lưu ý: Trong tr°ßng hợp sinh viên không biết về trò ch¡i này tr°ớc ây thì phải
ọc kỹ thông tin trên (các thông tin trên ủ ể sinh viên thực hiện các yêu cầu của
ề thi) và nghiêm túc làm bài. Giám thị coi thi không giải thích gì thêm. Giải: HK2
- S¡ ồ lớp ối t°ợng: - Ch°¡ng trình:
#include using namespace std; class KyHieu { protected: float TruongDo; public:
virtual void Nhap(); virtual bool LaDauLangDen(); virtual int LayCaoDo() = 0; }; void KyHieu::Nhap() { int t;
cout << "Nhap gia tri truong do:"; cout << "1.Tron
2.Trang 3.Den 4.Moc don"; cout << "5.Moc kep 6.Moc
tam 7.Moc tu"; cin >> t; switch (t) { 61
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 case 1: TruongDo = 4; break; case 2: TruongDo = 2; break; case 3: TruongDo = 1; break; case 4: TruongDo = 0.5; break; case 5: TruongDo = 0.25; break; case 6: TruongDo = 0.125; break; case 7: TruongDo = 0.0625; break; } } bool KyHieu::LaDauLangDen() { return false; } class NotNhac :public KyHieu { private: int CaoDo; public: void Nhap(); int LayCaoDo(); }; void NotNhac::Nhap() {
//Nhap cao do int t; cout << "Nhap gia tri
cao do:"; cout << "1.Do(C) 2.Re(D) 3.Mi(E) 4.Fa(F)";
cout << "5.Sol(G) 6.La(A) 7.Si(B)"; cin >> t; CaoDo = t;
//Nhap truong do KyHieu::Nhap(); } int NotNhac::LayCaoDo() { return CaoDo; } class DauLang :public KyHieu { public: bool LaDauLangDen(); int LayCaoDo(); }; bool DauLang::LaDauLangDen() { if (TruongDo == 1) return true; return false; } int DauLang::LayCaoDo() 62
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 { return 0; } void main() { KyHieu* BanNhac[50]; int n; //cau 1. Soan ban nhac
cout << "Nhap vao so luong cac ky hieu am nhac"; cin >> n;
for (int i = 0; i < n; i++) { int t;
cout << "Chon 1 de soan not nhac"; cout << " va 2 de soan dau lang"; cin >> t; switch (t) { case 1: BanNhac[i] = new NotNhac(); break; case 2: BanNhac[i] = new DauLang(); break; } BanNhac[i]->Nhap(); }
//cau 2. Dem dau lang den int count = 0;
for (int i = 0; i < n; i++)
if (BanNhac[i]->LaDauLangDen() == true) count++;
cout << "So dau lang den la" << count;
//cau 3.Tim not nhac co cao do cao nhat int max = BanNhac[0]->LayCaoDo(); int vt = 0;
for (int i = 1; i < n; i++)
if (BanNhac[i]->LayCaoDo() > max) {
max = BanNhac[i]->LayCaoDo(); vt = i; }
cout << "Vi tri not nhac co cao do cao nhat" << vt; } (Source: internet) HK3
- S¡ ồ lớp ối t°ợng: … - Ch°¡ng trình: #include using namespace std; class Base { private: 63
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
int He; // 0. KIm, 1. Moc , 2. Thuy, 3.Hoa,4. Tho double Satthuong; public: Base(); ~Base(); virtual void nhap(); virtual void xuat(); bool tinhTuongtac(Base& b); double getST() { return Satthuong; } void setST(double _ST) { Satthuong = _ST; } void setHe(int m) { He = m; } int getHe() { return He; } }; Base::Base() {} Base::~Base() {} void Base::nhap() {
cout << "Nhap he: 0.Kim 1.Moc 2.Thuy 3.Hoa 4.Tho"; cin >> He; } void Base::xuat() {
cout << "He ngu hanh:" << endl; switch (He) { case 0:
cout << "He Kim" << endl; break; case 1:
cout << "He Moc" << endl; break; case 2:
cout << "He Thuy" << endl; break; case 3:
cout << "He Hoa" << endl; break; case 4: 64
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
cout << "He Tho" << endl; break; }
cout << "Sat thuong" << Satthuong << endl;
} bool Base::tinhTuongtac(Base& b) {
double STtuongtacAB = this->getST();
double STtuongtacBA = b.getST(); if ((this->He
== 0 && b.getHe() == 1) || (this-
>He == 1 && b.getHe() == 4) ||
(this->He == 2 && b.getHe() == 3) ||
(this->He == 3 && b.getHe() == 0) ||
(this->He == 4 && b.getHe() == 2)) {
STtuongtacAB = this->getST() * 120 / 100;
STtuongtacBA = b.getST() * 80 / 100; } else {
if ((b.getHe() == 0 && this->He == 1) ||
(b.getHe() == 1 && this->He == 4) ||
(b.getHe() == 2 && this->He == 3) ||
(b.getHe() == 3 && this->He == 0) ||
(b.getHe() == 4 && this->He == 2)) {
STtuongtacBA = this->getST() * 120 / 100;
STtuongtacAB = b.getST() * 80 / 100; } }
if ((this->He == 0 && b.getHe() == 2) ||
(this->He == 1 && b.getHe() == 3) ||
(this->He == 2 && b.getHe() == 1) ||
(this->He == 3 && b.getHe() == 4) ||
(this->He == 4 && b.getHe() == 0)) {
STtuongtacAB = this->getST() * 110 / 100; }
if (STtuongtacAB > STtuongtacBA) return true; return false; } class NhanVat : public Base { private: char Monphai[40]; int cap; public: NhanVat(); virtual ~NhanVat(); 65
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 void nhap(); void xuat(); }; NhanVat::NhanVat() {} NhanVat::~NhanVat() {} void NhanVat::nhap() { int chose = 0; Base::nhap(); // switch (Base::getHe()) { case 0: {
cout << "Chon mon phai: 0.Thieu lam 1.Thien vuong " << endl; cin >> chose; switch (chose) { case 0: strcpy(Monphai, "Thieu lam"); break; case 1:
strcpy(Monphai, "Thien vuong"); break; } break; } case 1: {
cout << "Chon mon phai: 0.Ngu doc 1.Duong mon " << endl; cin >> chose; switch (chose) { case 0: strcpy(Monphai, "Ngu doc"); break; case 1: strcpy(Monphai, "Duong mon"); break; } break; } case 2: {
cout << "Chon mon phai: 0.Nga my 1.Thuy yen " << endl; cin >> chose; switch (chose) { case 0: strcpy(Monphai, "Nga my"); break; case 1: 66
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 strcpy(Monphai, "Thuy yen"); break; } break; } case 3: {
cout << "Chon mon phai: 0.Cai bang 1.Thien nhan " << endl; cin >> chose; switch (chose) { case 0: strcpy(Monphai, "Cai bang"); break; case 1:
strcpy(Monphai, "Thien nhan"); break; } break; } case 4: {
cout << "Chon mon phai: 0.Con lon 1.Vo dang " << endl; cin >> chose; switch (chose) { case 0: strcpy(Monphai, "Con lon"); break; case 1: strcpy(Monphai, "Vo dang"); break; } break; } }
cout << "Nhap vao cap do nhan vat" << endl; cin >> cap; Base::setST(cap * 5); } void NhanVat::xuat() { Base::xuat(); cout << Monphai;
cout << cap << endl; } class Quai : public Base { private: int cap; int Loai; // 0. Thuong 1.Boss public: Quai(); ~Quai(); void nhap(); void xuat(); 67
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 }; Quai::Quai() {} Quai::~Quai() {} void Quai::nhap() { Base::nhap();
cout << "Nhap vao cap do quai" << endl; cin >> cap;
cout << "Nhap loai quai 0.Thuong 1.boss"; cin >> Loai; switch (Loai) { case 0: Base::setST(cap * 3); break; case 1: Base::setST(cap * 7); break; default: Base::setST(cap * 3); } } void Quai::xuat() { Base::xuat(); switch (Loai) { case 0:
cout << "Thuong" << endl; break; case 1:
cout << "Boss" << endl; break; }
cout << cap << endl; } class QuanLy { private: int n; Base** danhsach; public: QuanLy(); ~QuanLy(); void nhap(); void xuat(); void tuongtac(); void timSTLN(); }; QuanLy::QuanLy() {} QuanLy::~QuanLy() {} void QuanLy::nhap() {
cout << "Nhap vao so phan tu" << endl; cin >> n; 68
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 danhsach = new Base * [n]; int chon;
for (int i = 0; i < n; i++) {
cout << "Chon 0.Nhan vat 1.Quaivat" << endl; cin >> chon; switch (chon) { case 0: danhsach[i] = new NhanVat; danhsach[i]->nhap(); break; case 1: danhsach[i] = new Quai; danhsach[i]->nhap(); break; } } } void QuanLy::xuat() {
for (int i = 0; i < n; i++) { danhsach[i]->xuat(); } } void QuanLy::tuongtac() { int x, y;
cout << "chon phan tu tuong tac" << endl; cin >> x >> y;
bool flag = danhsach[x]->tinhTuongtac(*danhsach[y]); if (flag) cout << "x co st tuong tac cao hon y"; else
cout << "y co st tuong tac cao hon x"; } void QuanLy::timSTLN() { double max = 0; int
index = 0; for (int i = 0; i < n; i++) {
if (max <= danhsach[i]->getST()) {
max = danhsach[i]->getST(); index = i; } }
cout << "Phan tu co sat thuong lon nhat" << index << " " << max; } int main() 69
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 { QuanLy a; a.nhap(); a.xuat(); a.timSTLN(); a.tuongtac(); system("pause"); return 0; } (Source: anhkiet1227)
_________________________________ 70
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 [2016-2017] HK1
Xét trò ch¢i Hoàng tử cứu Công chúa với kịch bản nh° sau:
Công chúa bị Mụ phù thủy giam trong một tòa lâu ài kiên cố có N lớp cổng. Để
vào lâu ài cứu Công chúa, Hoàng tử phải v°ợt qua °ợc tất cả những lớp cổng
này. à mỗi cổng ều có một ng°ßi gác cổng. Có 3 loại cổng:
Cổng giao th°¢ng (Business Gate): ng°ßi gác cổng là một tên lái buôn,
ể qua cổng, Hoàng tử phải mua hàng của tên lái buôn với số tiền = ¡n giá * số hàng.
Cổng học thuÁt (Academic Gate): ng°ßi gác cổng là một nhà hiền triết,
ể qua cổng, Hoàng tử phải trả lßi °ợc câu hỏi của nhà hiền triết. Câu hỏi
có một chỉ số trí tuệ, Hoàng tử cần có chỉ số trí tuệ cao h¡n hoặc bằng ể
trả lßi °ợc câu hỏi. L°u ý: sau khi trả lßi câu hỏi, chỉ số trí tuệ của hoàng tử không bị mất i.
Cổng sức mạnh (Power Gate): ng°ßi gác cổng là một dũng sỹ, ể qua
cổng, Hoàng tử phải ánh thắng °ợc dũng sỹ. Dũng sỹ có một chỉ số sức
mạnh, Hoàng tử cần có chỉ số sức mạnh cao h¡n hoặc bằng ể thắng °ợc
dũng sỹ. Sau khi chiến thắng, chỉ số sức mạnh của hoàng tử bị hao mòn
i úng bằng chỉ số sức mạnh của dũng sỹ.
Bảng tóm tắt thông tin các loại cổng nh° sau:
ĐiÁu kiện qua cổng Loại cổng Ng°ời gác TiÁn Trí tuệ Sức mạnh Mất tiền =
Giao th°¡ng Tên lái buôn ¡n giá * số Không Không hàng Nhà hiền Trí tuệ >= trí Học thuật triết Không Không tuệ câu hỏi Mất sức = Sức mạnh Dũng sỹ Không sức dũng sỹ
Áp dụng kiến thức lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế s¡ ồ chi tiết
các lớp ối t°ợng (2 iểm) và xây dựng ch°¡ng trình ể thực hiện các yêu cầu sau:
a. Nhập vào danh sách N cổng của lâu ài (1 iểm).
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
b. Nhập vào ba thông số ban ầu của Hoàng tử là: số tiền, chỉ số trí tuệ, chỉ số
sức mạnh. Ch°¡ng trình sẽ cho biết với những thông số này, Hoàng tử có cứu
°ợc Công chúa không. Nếu cứu °ợc thì ch°¡ng trình tiếp tục cho biết ba thông
số còn lại của Hoàng tử (2 iểm). HK2
Giao diện website gồm các thành
phần c¡ bản ặc tr°ng chung bái các
yếu tố về tọa ộ (hoành ộ, tung ộ), kích
th°ớc (dài, rộng). Website có 2 thành phần chính:
-Label có thêm nội dung text hiển
thị, màu chữ và màu nền.
-Button có thể hiển thị một hình ảnh
hoặc text (màu chữ, màu nền).
Màu sắc trên web °ợc thực hiện bằng
cách kết hợp pha trộn của màu ỏ, xanh lá và xanh d°¡ng; ây là hình thức phối
màu có tên gọi là RGB. Mỗi màu sắc ại diện cho một giá trị số học từ 0 ến 255
và mỗi màu sắc có giá trị t°¡ng ứng với màu ỏ, xanh lá và xanh d°¡ng.
Phối màu web sẽ giúp chọn các màu khác phù hợp với màu c¡ bản, ể từ ó có
các màu dùng chung cho 1 thiết kế mà ảm bảo tính hài hòa giữa màu sắc. Có
rất nhiều ph°¡ng pháp phối màu, và hầu hết ều dựa trên Bánh xe màu ể phối.
Trong ó, ¡n giản nhất là 3 cách phối màu sau:
Phối màu ¡n sắc: Tất cả Phối màu bổ túc trực Phối màu t°¡ng ồng
các thành phần ều có tiếp: là những cặp màu (th°ßng là 3 màu) các cùng màu nền.
ối xứng nhau trên bánh màu liền kề nhau trên
xe màu. Vd: 1-7, 2-8, 39, bánh xe màu. Vd: 1- 4-10, 5-11, 6-12 23,2-3-4,11-12-1,… 72
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Xây dựng ch°¡ng trình hỗ trợ phối màu trong thiết kế web.
Áp dụng kiến thức lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế s¡ ồ chi
tiết các lớp ối t°ợng (1.5 iểm) và xây dựng ch°¡ng trình thực hiện các yêu cầu sau:
1. Nhập danh sách các thành phần có màu trên trang web. (1.5 iểm)
2. Kiểm tra màu nền và màu chữ của thành phần ầu tiên trong danh sách
có phù hợp với phối màu bổ túc trực tiếp hay không? (1 iểm)
3. Kiểm tra màu nền của các thành phần xem phù hợp với quy tắc phối
màu nào hay không? (1 iểm)
Lưu ý: Trong tr°ßng hợp sinh viên không biết các kiến thức ồ họa này tr°ớc ây
thì phải ọc kỹ thông tin trên (các thông tin trên ủ ể sinh viên thực hiện các yêu
cầu của ề thi) và nghiêm túc làm bài. Giám thị coi thi không giải thích gì thêm. HK3
Xây dựng ch°¡ng trình mô phỏng sáng tác th¡ với các mô tả nh° sau:
Th¡ là một loại hình nghệ thuật của ngôn từ, âm thanh của th¡ có vần có iệu
nhịp nhàng. Lßi lẽ của th¡ ngắn gọn, hàm chứa, súc tích. Về hình thức, th¡ có
nhiều thể loại, có thể kể ến nh°: Lục Bát, Song Thất Lục Bác, Đ°ßng Luật Thất Ngôn Bát Cú,…
Luật th¡ của thể th¡ là toàn bộ những quy tắc về số câu, số tiếng, cách gieo vần,
cách hài thanh, ngắt nhịp,… °ợc khái quát theo một kiểu mẫu nhất ịnh. à ây,
chỉ tạm xét ến số câu, số tiếng và cách gieo vần. 73
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Thể th¢ lục bát (còn gọi là thể sáu – tám)
- Số tiếng: Mỗi cặp lục bát gồm hai dòng: dòng lục (6 tiếng), dòng bát (8 tiếng).
Bài th¡ lục bát gồm nhiều cặp câu nh° thế.
- Vần: Vần l°ng hiệp vần á tiếng thứ 6 của hai dòng ầu và giữa tiếng thứ 8 của
dòng bát với tiếng thứ 6 của dòng lục. Ví dụ:
Trăm năm trong cõi ng°ßi ta
Chữ tài chữ mệnh khéo ghét nhau.
Trải qua một cuộc bể dâu
Những iều trông thấy mà au ớn lòng.
(Nguyễn Du, Truyện Kiều)
Thể th¢ song thất lục bát (còn gọi là gián thất hay song thất)
- Số tiếng: Cặp song thất (7 tiếng) và cặp lục bát (6 – 8 tiếng) luân phiên kế tiếp nhau trong toàn bài.
- Vần: gieo vần l°ng á mỗi cặp (lọc – mọc, buồn – khôn); cặp song thất có vần
trắc, cặp lục bát có vần bằng. Giữa cặp song thất và cặp lục bát có vần liền (non – buồn). Ví dụ:
Ngòi ầu cầu n°ớc trong nh° lọc, Đ°ßng
bên cầu cỏ mọc còn non.
Đ°a chàng lòng dặc dặc buồn,
Bộ khôn bằng ngựa, thủy khôn bằng thuyền. (Chinh phụ ngâm) 74
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Thể th¢ Đ°ờng luÁt Thất ngôn bát cú
- Số câu: 8, số tiếng trong mỗi câu: 7
- Vần: Các tiếng cuối các câu 1, 2, 4, 6, 8 hiệp vần bằng nhau.
- Nội dung về ối thanh, ối nghĩa không xét ến trong yêu cầu ề thi này. Ví dụ:
B°ớc tới èo Ngang bóng xế
Cỏ cây chen lá, á chen hoa
Lom khom d°ới núi, tiều vài chú
Lác ác bên sông, chợ mấy nhà
Nhớ n°ớc au lòng con quốc quốc
Th°¡ng nhà mỏi miệng cái gia gia Dừng
chân ứng lại, trßi non n°ớc Một mảnh
tình riêng, ta với ta.
(Bà Huyện Thanh Quan, Qua Đèo Ngang)
Áp dụng kiến thức lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế s¡ ồ chi
tiết các lớp ối t°ợng (1.5 iểm) và xây dựng ch°¡ng trình thực hiện các yêu cầu sau:
1. Soạn một tập th¡ (bao gồm nhiều bài th¡ thuộc các thể loại khác nhau) (1.5 iểm).
2. Cho biết bài th¡ dài nhất (có nhiều câu nhất) trong tập th¡ (1.5 iểm).
3. Kiểm tra các bài th¡ trong tập th¡ có phù hợp với luật th¡ không (1 iểm) ?
Lưu ý: Trong tr°ßng hợp sinh viên không biết về luật th¡ tr°ớc ây thì phải
ọc kĩ thông tin trên (các thông tin trên ủ ể sinh viên thực hiện các yêu 75
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
cầu của ề thi) và nghiêm túc làm bài. Giám thị coi thi không giải thích gì thêm.
Giả sử ã có hàm kiểm tra gieo vần nh° bên d°ới và sinh viên có thể sử dụng
hàm này mà không cần ịnh nghĩa lại:
//kiểm tra hai tiếng có vần với nhau hay không, nếu có trả về 1, nếu không trả về 0
int ktgieovan( char a[], char b[] ) { int i; int check = 0; … return check; }
________________________________________________
Ví dụ sử dụng hàm ktgieovan ể kiểm tra các câu th¡ có phù hợp với luật th¡ lục bát:
//gia su bai tho co 4 cau nhu sau char *str1[] = { int kt=1;
//kiem tra gieo van tieng thu 6 cua cau luc voi tieng thu 6 cua cau bat (ta, la)
if (ktgieovan(str1[5], str2[5] ==0) kt=0;
//kiem tra gieo van tieng thu 8 cua cau bat voi tieng thu 6 cua cau luc tiep theo 76
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
(nhau, dau) if (ktgieovan(str2[7], str3[5] ==0) kt=0;
//kiem tra gieo van tieng thu 6 cua cau luc voi tieng thu 6 cua cau bat (dau, dau)
if (ktgieovan(str3[5], str4[5] ==0) kt=0;
if (kt==1) cout<<Giải: HK1 1. Class mẹ
Class gate sẽ bao gồm 2 hàm thuần ảo là Nhap() và TraVe() ể cho 3 class gate khác
kế thừa. Hàm Nhap() sẽ gọi các câu lệnh nhập còn hàm TraVe() sẽ trả về một giá trị
ặc tr°ng nào ó của từng loại cổng. Ngoài ra, mỗi cổng cũng sẽ có một thuộc tính là
loại ể giúp chúng ta quản lý ối t°ợng, biết ối t°ợng ó ang là loại cổng nào. 2. Class con 77
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Cổng học thuật có chỉ số ặc tr°ng là trí tuệ của nhà hiền triết, á class này chúng ta
hiện thực 2 ph°¡ng thác thuần ảo của class gate. 78
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Cổng giao th°¡ng có chỉ số ặc tr°ng là số l°ợng và ¡n giá của hàng, khi giao tiếp với
Hoàng Tử, cổng sẽ trả về tổng chi = số l°ợng * ¡n giá.
Cổng sức mạnh có chỉ số ặc tr°ng là sức mạnh của dũng sĩ 3. Main
Vì không code class QuanLiCong và HoangTu nên chúng ta phải code khá nhiều trong hàm main(). 79
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Đầu tiên là include hết 3 class gate (class gate khỏi cần include vì ã inlucde trong
class con rồi). Sau ó là thông báo cho ng°ßi dùng số hiệu các cổng và nhập số l°ợng
cổng. Sau khi có số l°ợng, ta tạo mảng con trỏ các cổng ể dễ bề quản lý về sau.
Trong hàm nhập, chúng ta cho ng°ßi dùng nhập loại cổng, t°¡ng ứng với mỗi loại cổng
ta tạo t°¡ng ứng ối t°ợng ó và cuối cùng là gọi hàm Nhap().
Tiếp tục nhập các chỉ số của Hoàng Tử. 80
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Xử lý với từng loại cổng, ầu tiên là cổng giao th°¡ng, túi tiền của Hoàng Tử bị trừ,
nếu Hoàng Tử cháy túi thì ngừng việc xét các cổng tiếp theo và in ra thông báo.
Xử lý t°¡ng tự với 2 loại cổng còn lại. • Cổng học thuật • Cổng sức mạnh 81
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 (Source: Ban Học T¿p CNPM) HK2
- S¡ ồ lớp ối t°ợng: - Ch°¡ng trình: #include 82
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 #include using namespace std; class ThanhPhan { protected: int x; int y; int d; int r; public: virtual void Nhap();
virtual int LayMauNen(); virtual int LayMauChu(); }; void ThanhPhan::Nhap() { cout << "Nhap toa do"; cin >> x >> y; cout <<
"Nhap kich thuoc"; cin >> d >> r; } int ThanhPhan::LayMauNen() { return 0; } int ThanhPhan::LayMauChu() { return 0; } class NutNhan : public ThanhPhan { private: char NoiDung[50]; int MauChu; int MauNen; char Hinh[50]; public: void Nhap(); int LayMauNen(); int LayMauChu(); }; void NutNhan::Nhap() { ThanhPhan::Nhap(); int chon = 0; do {
cout << "Chon 1 de dung hinh anh, 2 de hien thi chu (mau chu, mau nen)"; cin >> chon; switch (chon) { case 1:
cout << "Nhap duong dan anh"; 83
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 fflush(stdin); gets_s(Hinh); MauNen = MauChu = 0; break; case 2:
cout << "Nhap noi dung hien thi"; fflush(stdin); gets_s(NoiDung); MauChu = MauNen = 0; do {
cout << "Chon mau 1.Red 2.Orange 3.Yellow 4.Spring Green
5.Green 6.Turquoise 7.Cyan 8.Ocean 9.Blue 10.Violet 11.Magenta 12.Raspberry";
cout << "\nNhap mau chu va mau nen";
cin >> MauChu >> MauNen;
} while (MauChu > 0 && MauNen > 0 && MauChu < 12 && MauNen < 12); break; } }
while (chon > 2 || chon < 1); } int NutNhan::LayMauNen() { return MauNen; } int NutNhan::LayMauChu() { return MauChu; } class Nhan : public ThanhPhan { private: char NoiDung[50]; int MauChu; int MauNen; public: void Nhap(); int LayMauNen(); int LayMauChu(); }; void Nhan::Nhap() {
ThanhPhan::Nhap(); cout << "Nhap noi dung hien thi"; fflush(stdin); gets_s(NoiDung); MauChu = MauNen = 0; do {
cout << "Chon mau 1.Red 2.Orange 3.Yellow 4.Spring Green 5.Green
6.Turquoise 7.Cyan 8.Ocean 9.Blue 10.Violet 11.Magenta 12.Raspberry";
cout << "\nNhap mau chu va mau nen";
cin >> MauChu >> MauNen; 84
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
} while (MauChu > 0 && MauNen > 0 && MauChu < 12 && MauNen < 12); } int Nhan::LayMauNen() { return MauNen; } int Nhan::LayMauChu() { return MauChu; } void main() { ThanhPhan* A[50]; int i, n, t;
//Nh¿p danh sÆch cÆc th nh phần web
cout << "Nhap so thanh phan"; cin >> n; for (i = 0; i < n; i++) {
cout << "\nChon \n1 de nhap Button \n2 de nhap Label"; cin >> t; switch (t) { case 1:A[i] = new NutNhan(); break; case 2: A[i] = new Nhan(); break; } A[i]->Nhap(); }
//Kißm tra m u nßn v m u chÿ cÿa A[0] c phßi m u bß tœc trÿc ti¿p
int color = A[0]->LayMauNen(); if (color > 0) {
int colortext = A[0]->LayMauChu(); if (color <= 6) { if (colortext == (color + 6))
cout << "Mau nen va mau chu phoi bo tuc truc tiep"; } else { if (colortext == (color - 6))
cout << "Mau nen va mau chu phoi bo tuc truc tiep"; } } //Kißm tra phßi màu đơn s¿c int check = 1; color = A[0]->LayMauNen(); 85
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
for (int i = 1; i < n && A[i]->LayMauNen() == color; i++) if (i == n) cout << "Phoi mau don sac";
//Kißm tra phßi m u t±ơng đßng color = A[0]->LayMauNen();
if (color > 1 && color < 12) { for (i = 1; i < n; i++) {
int mau = A[i]->LayMauNen();
if ((mau != color) && (mau != color - 1) && (mau != color + 1)) break; } if (i == n)
cout << "Phoi mau tuong dong"; } else if (color == 1) { for (i = 1; i < n; i++) {
int mau = A[i]->LayMauNen();
if ((mau != 1) && (mau != 12) && (mau != 2)) break; } if (i == n)
cout << "Phoi mau tuong dong"; } else // color=12 { for (i = 1; i < n; i++) {
int mau = A[i]->LayMauNen();
if ((mau != 12) && (mau != 11) && (mau != 1)) break; } if (i == n)
cout << "Phoi mau tuong dong"; }
//Kißm tra phßi m u bß tœc trÿc
ti¿p color = A[0]->LayMauNen(); int check1 = 0; int check2 = 0; if (color <= 6) { check1 = color; check2 = color + 6; } else { check1 = color - 6; 86
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 check2 = color; } for (i = 1; i < n; i++) {
int mau = A[i]->LayMauNen();
if (mau != check1 && mau != check2) break; } if (i == n) cout << "Phoi mau bo tuc truc tiep"; } (Source: Internet) HK3 - S¡ ồ ối t°ợng: … - Ch°¡ng trình: #include using namespace std;
bool ktgieovan(char a[], char b[]) { bool check = true; //... return check; } class BaiTho { protected: int SoCau; string Cau[99][102]; string Chu; public: BaiTho() { SoCau = 0; }; int getSoCau() { return SoCau; } void SangTac(); virtual bool KiemTra() = 0; }; void BaiTho::SangTac() {
cout << "Nhap so cau: "; cin >> SoCau;
cout << "Nhap bai tho (1 de ket thu):\n"; int i = 0; int j = 1; while (getline(cin, Chu)) { if (Chu == "1") break; 87
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 ++i; int k = 0; while (Chu[k] != ’\0’) { Cau[i][j] = Chu[k]; ++k; if (Chu[k] == ’ ’) { ++j; ++k; } } } } class LucBac : public BaiTho { public: void SangTac() { BaiTho::SangTac(); } bool KiemTra(); }; bool LucBac::KiemTra() {
if (SoCau % 2 == 1) return false;
for (int i = 0; i < SoCau; ++i) { if (i % 2 == 1) if (i != 1)
if (ktgieovan((char*)Cau[i][6].c_str(), (char*)Cau[i][8].c_str()) == false) return false; else
if (ktgieovan((char*)Cau[i][6].c_str(), (char*)Cau[i][8].c_str()) == false) return false; return true; } return false;
} class SongThatLucBac : public BaiTho { public: bool KiemTra(); }; bool SongThatLucBac::KiemTra() { if (SoCau % 4 != 0) return false; int i = 0; while (i <= SoCau - 3) {
if (ktgieovan((char*)Cau[i][7].c_str(), (char*)Cau[i][5].c_str()) == false) return false; 88
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
if (ktgieovan((char*)Cau[i + 1][7].c_str(), (char*)Cau[i + 2][6].c_str()) == false) return false;
if (ktgieovan((char*)Cau[i + 2][6].c_str(), (char*)Cau[i + 3][6].c_str()) ==
false) return false; i += 4; } return true;
} class DuongLuatThatNgonBatCuu : public
BaiTho { public: bool KiemTra(); };
bool DuongLuatThatNgonBatCuu::KiemTra() {
if (SoCau != 8) return false;
if (ktgieovan((char*)Cau[1][7].c_str(), (char*)Cau[2][7].c_str()) == false) return false;
if (ktgieovan((char*)Cau[2][7].c_str(), (char*)Cau[4][7].c_str()) == false) return false;
if (ktgieovan((char*)Cau[4][7].c_str(), (char*)Cau[6][7].c_str()) == false) return false;
if (ktgieovan((char*)Cau[6][7].c_str(), (char*)Cau[8][7].c_str()) == false) return false; return true; } int main() { cout << "Nhap so bai tho: "; int
SoBaiTho; cin >> SoBaiTho; BaiTho* BaiTho[100];
for (int i = 0; i < SoBaiTho; ++i) {
cout << "Chon loai tho muon nhap:\n";
cout << "1. Luc Bat 2.Song That Luc Bat 3.Duong Luat That Ngon Bat Cuu\n";
int TheLoai; cin >> TheLoai; switch (TheLoai) { case 1: BaiTho[i] = new LucBac();
BaiTho[i]->SangTac(); break; case 2:
BaiTho[i] = new SongThatLucBac(); BaiTho[i]->SangTac(); break; case 3:
BaiTho[i] = new DuongLuatThatNgonBatCuu(); BaiTho[i]->SangTac(); break; } } // Cau 2 int max = 0; int position;
for (int i = 0; i < SoBaiTho; ++i) { 89
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
if (BaiTho[i]->getSoCau() > max) { position = i;
max = BaiTho[i]->getSoCau(); } }
cout << "Bai Tho co so cau nhieu nhat la bai tho thu: " << max << "\n"; // Cau 3
for (int i = 0; i < SoBaiTho; ++i) {
if (BaiTho[i]->KiemTra() == false)
cout << "Khong thoa cach gieo van";
else cout << "Thoa cach gieo van"; } return 0; } (Source: anhkiet1227)
_________________________________ 90
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 [2017-2018] HK1
Công ty quản lý ca sỹ XYZ cần quản lý các thông tin ể tính l°¡ng cho các ca sỹ
thuộc công ty. Giả sử công ty XYZ chia các ca sỹ thành 2 nhóm: ca sỹ nổi ti¿ng và ca sỹ nổi ti¿ng. Thông tin chung của cả 2 nhóm bao gồm: - Họ tên ca sỹ.
- Số năm làm việc cho công ty. - Số ĩa ã bán °ợc.
- Số buổi trình diễn ã tham gia.
Ngoài ra, ca sỹ nổi tiếng °ợc mßi tham gia nhiều Gameshow nên còn có thêm
thông tin: số gameshow tham gia.
Công ty quy ịnh cách tính và trả l°¡ng cho ca sỹ nh° sau:
- Với ca sỹ L°¡ng = 3.000.000 + 500.000 * số năm làm việc + 1.000 * số ĩa
bán °ợc + 200.000 * số buổi trình diễn.
- Với ca sỹ nổi tiếng:
L°¡ng = 5.000.000 + 500.000 * số năm làm việc + 1.200 * số ĩa
bán °ợc + 500.000 * số buổi trình diễn + 500.000 * số Gameshow.
Bạn hãy ề xuất thiết kế các lớp ối t°ợng cần thiết (vẽ s¢ ồ lớp chi ti¿t) ể quản
lý danh sách các ca sỹ của Công ty và hỗ trợ tính l°¡ng cho ca sỹ theo quy ịnh nh° trên (3 iểm).
Hãy viết ch°¡ng trình bằng C++ cho phép thực hiện các yêu cầu sau:
1. Nhập danh sách ca sĩ (l°u trữ trong một mảng duy nhất) (1 iểm).
2. Tìm ca sĩ có l°¡ng cao nhất trong công ty. Nếu có nhiều ca sĩ có cùng
mức l°¡ng cao nhất, chỉ cần trả về 1 ca sĩ trong số ó ((1 iểm).
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 Lưu ý:
• Sử dụng tính chất k¿ thừaa hình
• Sử dụng string ể l°u chuỗi.
• Vẽ s¡ ồ lớp: mô tả các lớp, các thuộc tính, các hàm và mối liên hệ các lớp (1.5 iểm).
• Khai báo và ịnh nghĩa chi tiết các lớp (1.5 iểm). HK2
Đầu những năm 1900, dựa trên sự hiện diện của các kháng nguyên trên màng
hồng cầu, các nhà khoa học ã xác ịnh rằng con ng°ßi có 4 nhóm máu khác
nhau: O, A, B và AB. Hệ thống phân loại nhóm máu này (gọi là hệ thống nhóm
máu ABO) cung cấp cho bác sĩ các thông tin quan trọng ể lựa chọn nhóm máu
phù hợp trong việc truyền máu. Và ồng thßi có thể tiên oán °ợc nhóm máu
t°¡ng ối của ng°ßi con dựa trên nhóm máu của cha mẹ theo c¡ chế di truyền học.
Nhóm máu của ng°ßi con khi biết °ợc nhóm máu của cha và mẹ
Ngoài ra còn có thêm hệ thống phân loại Rh (Rhesus)
Căn cứ vào sự khác biệt khi nghiên cứu về sự vận chuyển oxy của hồng cầu thì
các hồng cầu có thể mang á mặt ngoài một protein gọi là Rhesus. Nếu có
kháng nguyên D thì là nhóm Rh+ (d°¡ng tính), nếu không có là Rh- (âm tính).
Các nhóm máu A, B, O, AB mà Rhthì °ợc gọi là âm tính A-, B-, O-, AB-. Nhóm
máu Rhchỉ chiếm 0,04% dân số thế giới. Đặc iểm của nhóm máu Rh này là
chúng chỉ có thể nhận và cho ng°ßi cùng nhóm máu, ặc biệt phụ nữ có nhóm
máu Rh thì con rất dễ tử vong. 92
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Ng°ßi có nhóm máu Rh+ chỉ có thể cho ng°ßi cũng có nhóm máu Rh+ và nhận
ng°ßi có nhóm máu Rh+ hoặc Rh-
Ng°ßi có nhóm máu Rh có thể cho ng°ßi có nhóm máu Rh+ hoặc Rh- nh°ng chỉ
nhận °ợc ng°ßi có nhóm máu Rh- mà thôi
Tr°ßng hợp ng°ßi có nhóm máu Rh- °ợc truyền máu Rh+ , trong lần ầu tiên sẽ
không có bất kỳ phản ứng tức thì nào xảy ra nh°ng nếu tiếp tục truyền máu
Rh+ lần thứ 2 sẽ gây ra những hậu quả nghiêm trọng do tai biến truyền máu.
T°¡ng tự với tr°ßng hợp mẹ Rh- sinh con (lần ầu và lần thứ hai trá i).
Áp dụng kiến thức lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế s¡ ồ chi
tiết các lớp ối t°ợng (1.5 iểm) và xây dựng ch°¡ng trình thực hiện các yêu cầu sau:
1. Nhập danh sách các nhóm máu của một nhóm ng°ßi. (1 iểm)
2. Cho một bộ 3 nhóm máu của 3 ng°ßi là cha, mẹ, con. Hãy kiểm tra và °a ra kết
quả nhóm máu có phù hợp với quy luật di truyền hay không? (1 iểm)
3. Chọn một ng°ßi X trong danh sách. Hãy liệt kê tất cả các ng°ßi còn lại trong
danh sách có thể cho máu ng°ßi X này. (1 iểm) 93
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Lưu ý: Trong tr°ßng hợp sinh viên không biết về nhóm máu và di truyền học
tr°ớc ây thì phải ọc kỹ thông tin trên (các thông tin trên ủ ể sinh viên thực hiện
các yêu cầu của ề thi) và nghiêm túc làm bài. Giám thị coi thi không giải thích gì thêm. Giải: HK1
- S¡ ồ lớp ối t°ợng: … - Ch°¡ng trình: #include using namespace std; class CaSy { protected: string HoTen;
int NamLamViec, DiaBanDuoc, BuoiTrinhDien; float luong; public: CaSy() {} ~CaSy() {} virtual void Nhap(); virtual void Xuat(); virtual float TinhLuong() = 0; }; void CaSy::Nhap() {
cout << "Nhap thong tin ca sy:\n";
cout << "Ho ten: "; cin >> HoTen;
cout << "So nam lam viec: ";
cin >> NamLamViec; cout << "So dia ban duoc: "; cin >>
DiaBanDuoc; cout << "So buoi trinh dien: "; cin >> BuoiTrinhDien; } void CaSy::Xuat() {
cout << "Thong tin ca sy:\n";
cout << "Ho ten: " << HoTen << "\n";
cout << "So nam lam viec: " << NamLamViec << "\n";
cout << "So dia ban duoc: " << DiaBanDuoc << "\n"; cout
<< "So buoi trinh dien: " << BuoiTrinhDien << "\n"; }
class CaSyChuaNoiTieng : public CaSy { public: 94
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 CaSyChuaNoiTieng() {} ~CaSyChuaNoiTieng() {} void Nhap() { CaSy::Nhap(); } void Xuat() { CaSy::Xuat(); } float TinhLuong() {
return 3000000 + 500000 * NamLamViec + 1000 * DiaBanDuoc + 200000 * BuoiTrinhDien; }
}; class CaSyNoiTieng : public CaSy { protected: int GameShow; public: CaSyNoiTieng() {} ~CaSyNoiTieng() {} void Nhap() { CaSy::Nhap();
cout << "So luong gameshow tham gia: "; cin >> GameShow; } void Xuat() { CaSy::Xuat();
cout << "So luong gameshow tham gia: " << GameShow; } float TinhLuong() {
return 5000000 + 500000 * NamLamViec + 1200 * DiaBanDuoc + 500000 * BuoiTrinhDien + 500000 * GameShow; } }; int main() { cout << "Hello World!\n"; //Cau 1
cout << "Nhap so luong ca sy: "; int SoLuongCaSy; cin >> SoLuongCaSy; CaSy* arr[SoLuongCaSy]; int loai;
for (int i = 0; i < SoLuongCaSy; i++) {
cout << "1 Ca sy chua noi tieng 2 Ca sy noi tieng:\n";
cin >> loai; if (loai == 1)
arr[i] = new CaSyChuaNoiTieng(); if (loai == 2) arr[i] = new CaSyNoiTieng(); arr[i]->Nhap(); 95
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 } //Cau 2 float LuongCaoNhat = -1.0; int pos;
for (int i = 0; i < SoLuongCaSy; i++) {
if (arr[i]->TinhLuong() > LuongCaoNhat) {
LuongCaoNhat = arr[i]->TinhLuong(); pos = i; } }
cout << "Ca sy co luong cao nhat la: ";
arr[pos]->Xuat(); return 0; } (Source: anhkiet1227) HK2
- S¡ ồ lớp ối t°ợng: … - Ch°¡ng trình: #include using namespace std; class NhomMau { protected: bool Rh; public: NhomMau(); ~NhomMau(); void Nhap(); bool GetRh();
virtual bool KTDiTruyen(char, char) = 0; virtual char GetTen() = 0;
virtual bool TuongThich(char nm, bool) = 0; }; NhomMau::NhomMau() {} NhomMau::~NhomMau() {} void NhomMau::Nhap() { char t; cout << "Nhap Rhesus"; cin >> t; if (t == ’+’) Rh = true; else Rh = false; } bool NhomMau::GetRh() { return Rh; } class NhomA : public NhomMau 96
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 { public: NhomA(); ~NhomA();
bool KTDiTruyen(char, char); char
GetTen(); bool TuongThich(char nm, bool b); }; NhomA::NhomA() {} NhomA::~NhomA() {} char NhomA::GetTen() { return ’A’; }
bool NhomA::TuongThich(char nm, bool b)
{ if (this->GetRh() == false)
if (nm == ’B’ || nm == ’C’)
return true; if (this->GetRh() == true) if (b == true)
if (nm == ’A’ || nm == ’C’) return true; return false; }
bool NhomA::KTDiTruyen(char me, char con) { switch (me) { case ’A’:
if (con == ’A’ || con == ’O’) return true; break; case ’B’:
if (con == ’A’ || con == ’O’ || con == ’B’ || con == ’C’)
return true; break; case ’C’: if (con == ’A’
|| con == ’B’ || con == ’C’) return true;
break; case ’O’: if (con == ’A’ || con == ’O’)
return true; break; } return false; } class NhomB : public NhomMau { public: NhomB(); ~NhomB(); bool KTDiTruyen(char, char); char GetTen();
bool TuongThich(char nm, bool b); }; NhomB::NhomB() {} NhomB::~NhomB() {} char NhomB::GetTen() { return ’B’; }
bool NhomB::TuongThich(char nm, bool b)
{ if (this->GetRh() == false)
if (nm == ’B’ || nm == ’C’)
return true; if (this->GetRh() == true) if (b == true) 97
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
if (nm == ’A’ || nm == ’C’) return true; return false;
} bool NhomB::KTDiTruyen(char me, char con) { switch (me) { case ’A’:
if (con == ’A’ || con == ’O’ || con == ’B’ || con == ’C’)
return true; break; case ’B’:
if (con == ’B’ || con == ’O’) return true; break; case
’C’: if (con == ’A’ || con == ’B’ || con == ’C’) return true; break;
case ’O’: if (con == ’B’ || con == ’O’)
return true; break; } return false; } class NhomAB : public NhomMau { public: NhomAB(); ~NhomAB(); bool KTDiTruyen(char, char); char GetTen();
bool TuongThich(char nm, bool b); }; NhomAB::NhomAB() {} NhomAB::~NhomAB() {} char NhomAB::GetTen() { return ’C’; }
bool NhomAB::TuongThich(char nm, bool b) { if (this->GetRh() == false) if (nm == ’C’) return true; if (this- >GetRh() == true) if (b == true) if (nm == ’C’) return true; return false;
} bool NhomAB::KTDiTruyen(char me, char con) { switch (me) { case ’A’:
if (con == ’A’ || con == ’B’ || con == ’C’)
return true; break; case ’B’:
if (con == ’A’ || con == ’B’ || con == ’C’) return true;
break; case ’C’: if (con == ’A’
|| con == ’B’ || con == ’C’) return
true; break; case ’O’: if (con
== ’A’ || con == ’B’) return true; break; } return false; 98
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 } class NhomO : public NhomMau { public: NhomO(); ~NhomO(); bool KTDiTruyen(char, char); char GetTen();
bool TuongThich(char nm, bool b); }; NhomO::NhomO() {} NhomO::~NhomO() {}
bool NhomO::KTDiTruyen(char me, char con) { switch (me) { case ’A’:
if (con == ’A’ || con == ’O’) return true; break; case
’B’: if (con == ’B’ || con == ’O’) return true; break; case ’C’: if (con == ’A’ || con == ’B’) return true; break; case ’O’: if (con == ’O’) return true; break; } return false; } char NhomO::GetTen() { return ’O’; } bool
NhomO::TuongThich(char nm, bool b) {
if (this->GetRh() == false) return true; if (b == true) return true; return false; } int main() { //Cau 1 int n, chon; NhomMau* list[50]; cout << "Nhap so nguoi"; cin >> n;
for (int i = 0; i < n; i++) {
cout << "Hay chon 1 cho nguoi nhom mau O";
cout << "Hay chon 2 cho nguoi nhom mau A";
cout << "Hay chon 3 cho nguoi nhom mau B";
cout << "Hay chon 4 cho nguoi nhom mau AB";
cin >> chon; switch (chon) { case 1: list[i] = new NhomO(); break; case 2: list[i] = new NhomA(); break; case 3: list[i] = new NhomB(); break; case 4: 99
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 list[i] = new NhomAB(); break; } list[i]->Nhap(); } //Cau 2 int cha, me, con;
cout << "Hay nhap theo thu tu cha, me, con";
cin >> cha >> me >> con;
bool KQ = list[cha]->KTDiTruyen(list[me]->GetTen(), list[con]->GetTen()); //Cau 3 int x; cout << "Nhap x"; cin >> x;
for (int i = 0; i < n; i++)
if ((i != x) && (list[x]->TuongThich(list[i]->GetTen(), list[i]->GetRh())))
cout << "\t" << i; return 0; } (Source: anhkiet1227)
_________________________________ [2018-2019] HK2
Big Five Model là mô hình tâm lý °ợc nghiên cứu và phát triển bái nhiều nhà
khoa học trên thế giới. Mô hình này cho rằng trong tính cách của một ng°ßi
ều bao gồm 5 yếu tố và nhiệm vụ
của trắc nghiệm tâm lý là xác ịnh
mức ộ biểu hiện của từng yếu tố
này. Big Five Model °ợc ánh giá cao
về ộ tin cậy và tính khoa học.
Mô hình ặc iểm tính cách Big Five
o l°ßng 5 nét tính cách của con ng°ßi: Tự chủ tận tâm
(Coscientiouness), H°ớng ngoại (Extraversion), Hòa ồng
(Agreeableness), Sẵn sàng trải
nghiệm (Openness to Experience)
và Bất ổn cảm xúc (Neuroticism). Nên còn °ợc gọi là mô hình OCEAN. Y¿u tố Chỉ số cao Chỉ số thấp 100
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Sẵn sàng trải nghiệm (O)
Ng°ßi có iểm cao á Ng°ßi có iểm thấp
Yếu tố Sẵn sàng trải nghiệm chỉ yếu tố này th°ßng á yếu tố này
ra mức ộ sẵn sàng tiếp nhận là ng°ßi thích th°ßng khá bảo
những cái mới, khả năng tuân thủ, khó tiếp nhận những ý t°áng mới,
thủ các quy ịnh, luật lệ chung những ý t°áng thích hiểu biết của một ng°ßi. mới, lạ. nhiều lĩnh vực
Yếu tố Sẵn sàng trải nghiệm có 6 Họ thích sự ổn ịnh, nh°ng ồng thßi
tiêu chí gồm: thích nghệ thuật, quen thuộc và cũng
trải nghiệm cảm xúc, trải nghiệm thích tự do, thực tế. không thích bị ràng
hoạt ộng, ham hiểu biết, tự do, trí t°áng t°ợ buộc... ng.
Tự chủ tÁn tâm (C)
Ng°ßi có iểm cao á Ng°ßi có iểm thấp
Yếu tố Tự chủ chỉ ra khả năng yếu tố này th°ßng á yếu tố này
chịu áp lực, sự nỗ lực, kiên trì là ng°ßi chăm chỉ, th°ßng dễ bỏ cuộc, của một ng°ßi.
có khả năng chịu khả năng chịu áp
Yếu tố Tự chủ °ợc chia ra thành áp lực tốt. Họ lực, tuân thủ kỷ
6 tiêu chí nhỏ gồm: tính trật tự, th°ßng là ng°ßi gắn luật của tổ chức
kỷ luật, tự tin,trách nhiệm, nỗ bó, trung thành với kém. lực, thận trọng. tổ chức. H°ớng ngoại (E)
Ng°ßi có iểm cao á Ng°ßi có iểm thấp
Yếu tố H°ớng ngoại chỉ ra khả yếu tố này th°ßng á yếu tố này
năng giao tiếp, thái ộ nhiệt tình là ng°ßi nhiệt tình, th°ßng ngại giao
trong công việc cũng nh° mức ộ năng ộng, giao tiếp tiếp, không thích
thích tạo sự ảnh h°áng của một ng°ß
tốt, thích thể hiện sự nổi bật, thích i. °ợ
Yếu tố H°ớng ngoại có 6 tiêu chí bản thân. c làm việc ộc
nhỏ gồm: thích tạo ảnh h°áng, lập.
quảng giao, tích cực vận ộng, tìm
kiếm sự h°ng phấn, thân thiện, cảm xúc tích cực. 101
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Hòa ồng dễ chịu (A)
Ng°ßi có iểm cao á Ng°ßi có iểm thấp
Yếu tố Hoà ồng chỉ ra mức ộ hoà yếu tố này th°ßng th°ßng ặt lợi ích
hợp, sự quan tâm và chấp nhận thân thiện, cái má, của bản thân lên ồng cảm với mọi
sự khác biệt của một ng°ßi. Hòa ng°ß trên, ít ồng cảm, i nh°ng nhiều
ồng có 6 tiêu chí nhỏ gồm: tin khi chia sẻ với ồng
t°áng, hợp tác, thành thực, vị tha, khiêm tốn, nhân hậu. cạnh tranh cao.
Bất ổn cảm xúc (N)
Ng°ßi có iểm cao á Ng°ßi có iểm thấp
Yếu tố Bất ổn cảm xúc chỉ ra khả yếu tố này th°ßng áyếu tố này th°ßng
năng kiểm soát cảm xúc, chịu áp có các cảm xúc tiêu kiểm soát °ợc cảm
lực, ứng phó với căng thẳng của cực nh°: lo lắng, xúc, ứng phó với một ng°ßi.
bực bội, tự ti, yếu căng thẳng tốt, ít
Yếu tố Bất ổn cảm xúc có 6 tiêu uối và khả năng bị bên ngoài ảnh
chí tâm lý gồm: trầm cảm, tự ti, chịu áp lực kém. h°áng ến tâm
sống bản năng, dễ bị tổn th°¡ng, trạng của bản lo âu, giận dữ. thân.
Bài kiểm tra tâm lý theo Big Five Model có kết quả t°¡ng tự nh° sau: O93C74-
E31-A96-N5. Các chữ cái ại diện cho mỗi nét tính cách, và những con số ại
diện cho tỷ lệ % những ng°ßi ghi °ợc iểm thấp h¡n bạn so với từng nét tính
cách. à ây, O93 có nghĩa là 93% của những ng°ßi ã thử nghiệm ạt °ợc thấp h¡n
bạn trong tính cái má. Vì vậy, so với những ng°ßi khác, bạn rất cái má ể có
những trải nghiệm mới và sáng tạo. C74 có nghĩa là 74% của những ng°ßi ã
thử nghiệm ạt iểm thấp h¡n so với bạn trong sự tận tâm. Vì vậy, bạn ang khá
có tổ chức và kỷ luật tự giác, so với những ng°ßi khác ã thử nghiệm.
Hiệu quả của trắc nghiệm Big Five Model trong tuyển chọn ánh giá nhân sự ã
°ợc các nhà nghiên cứu liên tục °a ra ể hỗ trợ những nhà tuyển dụng, giúp cho
nhà tuyển dụng phát hiện và tuyển chọn những nhân sự phù hợp với các vị trí
công việc, giúp nhà tuyển dụng l°ßng tr°ớc °ợc những nguy c¡ có thể xảy ến
ối với một nhân sự của mình.
Một số thông tin ề xuất nh° sau: 102
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 a.
Ng°ßi có chỉ số C cao sẽ là ng°ßi tuân thủ nguyên tắc và chuẩn mực của
tổ chức, làm việc chăm chỉ và kiên trì trong các kế hoạch công việc. b.
Ng°ßi có chỉ số C thấp có những biểu hiện vô tổ chức, bỏ việc giữa
chừng, thiếu trách nhiệm, bất cẩn, cẩu thả và bốc ồng trong công việc. c.
Ng°ßi có chỉ số N cao sẽ có các cảm xúc tiêu cực, cảm giác căng thẳng
trá nên lớn h¡n và giảm i sự chắc chắn trong việc cam kết lâu dài với một công việc. d.
Đặc biệt ng°ßi có chỉ số E thấp và N cao ảnh h°áng ến việc tìm kiếm và
kết nối với thông tin, hệ quả sẽ khiến một cá nhân có xu h°ớng tránh tiếp cận
với nguồn thông tin mới, trá nên thiếu hụt kỹ năng và hạn chế việc tiếp cận các
thông tin nghề nghiệp quan trọng.
Trong ó các trường hợp b,c,d có nguy cơ cao mà nhà tuyển dụng/ tổ chức/
doanh nghiệp cần lưu ý.

Giả sử chọn con số 70 là ng°ỡng xác ịnh chỉ số cao và 30 là ng°ỡng xác ịnh
chỉ số thấp, khoảng còn lại, chúng ta không °a ra nhận ịnh chính xác về khuynh
h°ớng tính cách của yếu tố này.
Áp dụng kiến thức lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế s¡ ồ chi
tiết các lớp ối t°ợng (1.5 ) và xây dựng ch°¡ng trình thực hiện các yêu cầu sau:
1. Nhập vào thông tin kết quả ánh giá tâm lý của một ng°ßi. (1 )
2. Nhập vào kết quả ánh giá tâm lý của n ng°ßi trong danh sách (0.5 )
3. Chọn một ng°ßi trong danh sách và cho biết các thông tin về tính cách của ng°ßi ó (1 )
Ví dụ: Một ng°ßi có ánh giá tâm lý Big Five nh° sau: O70-C30E60- A96-N10 Sẽ xuất kết quả là 103
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 70
Sẵn sàng trải nghiệm (O) Ng°ßi có iểm cao á yếu tố
này th°ßng là ng°ßi thích những ý t°áng mới, thích
hiểu biết nhiều lĩnh vực nh°ng ồng thßi cũng thích tự
do, không thích bị ràng buộc... 30
Tự chủ tÁn tâm (C) Ng°ßi có iểm thấp á yếu tố này
th°ßng dễ bỏ cuộc, khả năng chịu áp lực, tuân thủ kỷ
luật của tổ chức kém. 60
H°ớng ngoại (E) Không xác ịnh rõ 96
Hòa ồng dễ chịu (A) Ng°ßi có iểm cao á yếu tố này
th°ßng thân thiện, cái má, ồng cảm với mọi ng°ßi nh°ng nhiều khi 10
Bất ổn cảm xúc (N) Ng°ßi có iểm thấp á yếu tố này
th°ßng kiểm soát °ợc cảm xúc, ứng phó với căng thẳng
tốt, ít bị bên ngoài ảnh h°áng ến tâm trạng của bản thân.
4. Hãy cho biết những ng°ßi có nguy c¡ cao mà nhà tuyển dụng/ tổ chức/
doanh nghiệp cần l°u ý (1 )
Lưu ý: Trong tr°ßng hợp sinh viên không biết khái niệm về tâm lý học và mô
hình 5 yếu tố tr°ớc ây thì phải ọc kỹ thông tin trên (các thông tin trên ủ ể sinh
viên thực hiện các yêu cầu của ề thi) và nghiêm túc làm bài. Giám thị coi thi
không giải thích gì thêm. Giải: HK2
- S¡ ồ lớp ối t°ợng: 104
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 - Ch°¡ng trình: #include using namespace std; class YeuTo { protected: int GiaTri; public: YeuTo(); ~YeuTo(); int GetGiaTri(); virtual void DacDiem() = 0; virtual void ChiSoCao() = 0; virtual void ChiSoThap() = 0; }; YeuTo::YeuTo() { } YeuTo::~YeuTo() { } int YeuTo::GetGiaTri() { return GiaTri; } class O : public YeuTo { public: O(); ~O(); O(int); void DacDiem(); void ChiSoCao(); void ChiSoThap(); }; O::O() { } 105
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 O::O(int nn) { GiaTri = nn; } void O::DacDiem() {
cout << "San sang trai nghiem (0)"; } O::~O() { } void O::ChiSoCao() {
cout << "Nguoi co chi so cao o yeu to nay thuong la nguoi thich nhung y tuong moi ..."; } void O::ChiSoThap() {
cout << "Nguoi co chi so thap o yeu to nay thuong la nguoi kha bao thu ..."; } class C :public YeuTo { public: C(); ~C(); C(int); void DacDiem(); void ChiSoCao(); void ChiSoThap(); }; C::C() { } C::C(int nn) { GiaTri = nn; } void C::DacDiem() { cout << "Tu chu tan tam (C)"; } C::~C() { } void C::ChiSoCao() {
cout << "Nguoi co chi so cao o yeu to nay thuong la nguoi cham chi ..."; } void C::ChiSoThap() {
cout << "Nguoi co chi so thap o yeu to nay thuong la nguoi de bo cuoc ..."; } class E :public YeuTo { public: E(); ~E(); E(int); 106
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 void DacDiem(); void ChiSoCao(); void ChiSoThap(); }; E::E() { } E::E(int nn) { GiaTri = nn; } void E::DacDiem() {
cout << "Huong ngoai (E)"; } E::~E() { } void E::ChiSoCao() {
cout << "Nguoi co chi so cao o yeu to nay thuong la nguoi nhiet tinh, nang dong ..."; } void E::ChiSoThap() {
cout << "Nguoi co chi so thap o yeu to nay thuong la ngai giao tieps ..."; } class A :public YeuTo { public: A(); ~A(); A(int); void DacDiem(); void ChiSoCao(); void ChiSoThap(); }; A::A() { } A::A(int nn) { GiaTri = nn; } void A::DacDiem() {
cout << "Hoa dong de chiu (A)"; } A::~A() { } void A::ChiSoCao() {
cout << "Nguoi co chi so cao o yeu to nay thuong than thien coi mo ..."; } void A::ChiSoThap() {
cout << "Nguoi co chi so thap o yeu to nay thuong dat loi ich cua ban than len tren ..."; } class N :public YeuTo 107
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 { public: N(); ~N(); N(int); void DacDiem(); void ChiSoCao(); void ChiSoThap(); }; N::N() { } N::N(int nn) { GiaTri = nn; } void N::DacDiem() {
cout << "Bat on cam xuc (N)"; } N::~N() { } void N::ChiSoCao() {
cout << "Nguoi co chi so cao o yeu to nay thuong co cac cam xuc tieu cuc ..."; } void N::ChiSoThap() {
cout << "Nguoi co chi so thap o yeu to nay thuong kiem soat duoc cam xuc ..."; } class Nguoi { private: YeuTo* ds[5]; public: Nguoi(); ~Nguoi(); void Nhap(); void TinhCach(); bool NguyCo(); }; Nguoi::Nguoi() { } Nguoi::~Nguoi() { } void Nguoi::Nhap() { int temp;
cout << "Nhap vao gia tri yeu to O"; cin >> temp; ds[0] = new O(temp);
cout << "Nhap vao gia tri yeu to C"; cin >> temp; ds[1] = new C(temp);
cout << "Nhap vao gia tri yeu to E"; 108
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 cin >> temp; ds[2] = new E(temp);
cout << "Nhap vao gia tri yeu to A"; cin >> temp; ds[3] = new A(temp);
cout << "Nhap vao gia tri yeu to N"; cin >> temp; ds[4] = new N(temp); } void Nguoi::TinhCach() {
for (int i = 0; i < 5; i++) { ds[i]->DacDiem();
if (ds[i]->GetGiaTri() >= 70) ds[i]->ChiSoCao(); else
if (ds[i]->GetGiaTri() <= 30) ds[i]->ChiSoThap(); else
cout << "Khong xac dinh ro"; } } bool Nguoi::NguyCo() {
if ((ds[2]->GetGiaTri() <= 30) && (ds[3]->GetGiaTri() >= 70)) return true;
if (ds[3]->GetGiaTri() >= 70) return true;
if (ds[1]->GetGiaTri() <= 30) return true; return false; } void main() { Nguoi dsn[50]; int n;
cout << "Nhap so luong nguoi"; cin >> n;
for (int i = 0; i < n; i++) dsn[i].Nhap(); int x;
cout << "Chon nguoi thu ";
cin >> x; dsn[x].TinhCach(); for (int i = 0; i < n; i++) if (dsn[i].NguyCo() == true)
cout << i << " "; system("pause"); } (Source: Internet) 109
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
_________________________________ [2019-2020] HK2
Tr°ớc hết phải khẳng ịnh, ất ai là nguồn tài nguyên vô cùng quý giá, là tài sản
quan trọng của quốc gia, là t° liệu sản xuất,… Đặc biệt, ất ai là iều kiện cần
cho mọi hoạt ộng sản xuất và ßi sống. à n°ớc ta, khi còn nhiều ng°ßi sống nhß
vào nông nghiệp, thì ất ai càng trá thành nguồn lực rất quan trọng.
Muốn phát huy tác dụng của nguồn lực ất ai, ngoài việc bảo vệ ất của quốc
gia, còn phải quản lý ất ai hợp lý, nâng cao hiệu quả sử dụng ất sao cho vừa
ảm bảo °ợc lợi ích tr°ớc mắt, vừa tạo iều kiện sử dụng ất hiệu quả lâu dài ể
phát triển bền vững ất n°ớc.
Hiện nay, á Việt Nam ất ai °ợc phân chia thành 2 loại chính sau: - Đất nông nghiệp.
- Đất phi nông nghiệp ( ất á).
Quan iểm nhất quán của Đảng, Nhà n°ớc và nhân dân ta ã °ợc xác ịnh từ năm
980 ến nay là ất ai thuộc sá hữu toàn dân, do Nhà n°ớc ại diện chủ sá hữu và
thống nhất quản lý. Để góp phần nâng cao hiệu quả quản lý nhà n°ớc về ất ai,
mỗi thửa ất °ợc nhà n°ớc quản lý và cấp quyÁn sử dụng cho một hoặc nhiều
ng°ßi dân (nhà n°ớc cho phép nhiều ng°ßi dân có thể ồng sá hữu quyền sử
dụng ất) có nhu cầu sử dụng (Giấy chứng nhÁn quyÁn sử dụng ất hay còn
°ợc gọi là Sổ hồng).
- Với các thửa ất nông nghiệp, thông tin cần quản lý gồm: số giấy chứng
nhận (chuỗi), ng°ßi sá hữu quyền sử dụng ất (gồm họ và tên, năm sinh,
CMND, ịa chỉ th°ßng trú), số thửa ất, số tß bản ồ, ịa chỉ thửa ất, diện
tích (m2), thßi gian sử dụng ( °ợc sử dụng ến năm nào), ngày cấp, ¡n giá
thuế phải óng cho nhà n°ớc hàng năm/1m2.
- Với các thửa ất phi nông nghiệp ( ất ở), thông tin cần quản lý gồm: số
giấy chứng nhận (chuỗi), ng°ßi sá hữu quyền sử dụng ất (gồm họ và tên,
năm sinh, CMND, ịa chỉ th°ßng trú), số thửa ất, số tß bản ồ, ịa chỉ thửa 110
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
ất, diện tích (m2), ngày cấp, ¡n giá thuế phải óng cho nhà n°ớc hàng năm/1m2.
Áp dụng kiến thức lập trình h°ớng ối t°ợng (kế thừa, a hình) thiết kế s¡ ồ chi
tiết các lớp ối t°ợng (1 iểm) và khai báo các lớp (1 iểm) ể xây dựng ch°¡ng trình
thực hiện các yêu cầu sau:
1. Tạo danh sách các giấy chứng nhận quyền sử dụng ất mà nhà n°ớc ã cấp
cho ng°ßi dân. (1 iểm)
2. Tính tiền thuế mà ng°ßi sử dụng ất phải óng cho nhà n°ớc và cho biết
thửa ất nào (thông tin thửa ất) có tiền thuế phải óng nhiều nhất. (1 iểm)
3. Xuất ra màn hình thông tin các thửa ất nông nghiệp ã hết thßi hạn sử
dụng (năm sử dụng < năm hiện tại). (1 iểm)
Lưu ý: Các thông tin trong ề chỉ mô phỏng các thông tin với mục tiêu ể sinh
viên vận dụng kiến thức lập trình hướng ối tượng. Do vậy, các thông tin
trong ề KHÔNG nhất thiết phải úng hoặc khớp với các thông tin hiện tại
trong thế giới thực. Sinh viên cần bám sát các mô tả trong ề thi ể làm bài.
Giải: HK2
Có nhiều cách thiết kế, có thể thiết kế s¡ ồ lớp nh° sau (1 iểm): 111
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
Khai báo các lớp (1 iểm): class cNguoi { private: string sHoTen; int iNamSinh; string sCMND; string sDiaChi; public: void Nhap(); void Xuat(); }; void cNguoi::Nhap() {
cout << "Nhap ho ten: "; cin >> sHoTen; cout <<
"Nhap nam sinh: "; cin >> iNamSinh; cout << "Nhap CMND: "; cin >> sCMND; cout << "Nhap dia chi: "; cin >> sDiaChi; } void cNguoi::Xuat() { 112
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
cout << "Ho ten: " << sHoTen; cout
<< ", Nam sinh: " << iNamSinh; cout << ", So
CMND: " << sCMND; cout << ", Dia chi: " << sDiaChi << endl; } class cSoHong { protected: string sSoGiayCN; int iSoNguoiSoHuu; cNguoi *dsNguoiSoHuu; int iSoThua; int iSoToBanDo; string sDiaChi; int iDienTich; string sNgayCap; int iDonGiaThue; public: virtual void Nhap(); virtual void Xuat(); virtual long TinhTienThue(); virtual int getLoai() = 0; }; void cSoHong::Nhap()
{ cout << "Nhap so luong nguoi dung ten tren so hong: "; cin >> iSoNguoiSoHuu; dsNguoiSoHuu = new cNguoi[iSoNguoiSoHuu]; for (int i = 0; i < iSoNguoiSoHuu; i++) {
cout << "Nhap thong tin nguoi so huu thu " << (i + 1) << endl; dsNguoiSoHuu[i].Nhap(); }
cout << "Nhap so giay chung nhan: ";
cin >> sSoGiayCN; cout << "Nhap so thua: "; cin >> iSoThua; cout << "Nhap
so to ban do: "; cin >> iSoToBanDo; cout << "Nhap dia chi thua dat: "; cin >> sDiaChi;
cout << "Nhap dien tich: ";
cin >> iDienTich; cout << "Nhap ngay cap giay chung nhan: ";
cin >> sNgayCap; cout << "Nhap don gia thue: "; cin >> iDonGiaThue; } void cSoHong::Xuat() {
cout << "So giay chung nhan: " << sSoGiayCN << endl;
for (int i = 0; i < iSoNguoiSoHuu; i++) { dsNguoiSoHuu[i].Xuat(); }
cout << "So thua dat: " << iSoThua << endl;
cout << "So to ban do: " << iSoToBanDo << endl;
cout << "Dia chi thua dat: " << sDiaChi << endl; 113
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020
cout << "Dien tich thua dat: " << iDienTich << endl;
cout << "Ngay cap: " << sNgayCap << endl; cout <<
"Don gia thue: " << iDonGiaThue << endl; } long cSoHong::TinhTienThue() { return iDienTich*iDonGiaThue; } Lớp con
class cSoHongDatNN : public cSoHong { private: int iThoiHan; public: void Nhap(); void Xuat(); int getLoai(); int getThoiHan(); };
int cSoHongDatNN::getThoiHan() { return iThoiHan; } void cSoHongDatNN::Nhap() {
cSoHong::Nhap(); cout << "Nhap thoi han su dung: "; cin >> iThoiHan; } void cSoHongDatNN::Xuat() {
cSoHong::Xuat(); cout << "Thoi han su dung: "
<< iThoiHan << endl;
cout << "Tien thue phai dong: " << iDonGiaThue * iDienTich << endl; } int cSoHongDatNN::getLoai() { return 1; }
class cSoHongDatO : public cSoHong { public: void Xuat(); int getLoai(); }; void cSoHongDatO::Xuat() { cSoHong::Xuat();
cout << "Tien thue phai dong: " << iDonGiaThue * iDienTich << endl; } int cSoHongDatO::getLoai() 114
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com) lOMoAR cPSD| 40551442 TuanDM-HTTT2020 { return 2; } int main() { int n; cSoHong *dsGiayCN[50]; //Câu 1 (1 đißm)
cout << "Nhap so luong giay chung nhan can cap: "; cin >> n; int loai;
for (int i = 0; i < n; i++) {
cout << "Cap giay chung nhan Dat nong nghiep (1) hay dat o (2): "; cin >> loai; if (loai == 1)
dsGiayCN[i] = new cSoHongDatNN; else
dsGiayCN[i] = new cSoHongDatO; dsGiayCN[i]->Nhap(); }
//Câu 2 (1 đißm) long max =
dsGiayCN[0]->TinhTienThue(); int vt = 0;
for (int i = 1; i < n; i++) {
if (dsGiayCN[i]->TinhTienThue() > max) {
max = dsGiayCN[i]->TinhTienThue(); vt = i; } } dsGiayCN[vt]->Xuat();
//Câu 3 (1 đißm) for (int i = 0; i < n; i++)
if (dsGiayCN[i]->getLoai()==1) if
(((cSoHongDatNN*)dsGiayCN[i])->getThoiHan()<2020) dsGiayCN[i]->Xuat(); return 0; } (Source: Internet)
_________________________________ 115
Downloaded by H?u h?u Mai mai (abcdefghis@gmail.com)