Hình 1.22: Kết quả của trường hợp cộng năm của lớp NgayThangNam 1.2 Bài tập 2: Xây dựng lớp phân số: « Thuộc tính: ru, iMau ° Phương thức: NhapQ, Xuat, RutGon, Tong, Hieu, Tich, Thuo
Trang 1MON LAP TRINH HUONG DOI TUQNG
BAI TAP THUC HANH 1
GVHD: Nguyén Ngoc Qui Sinh viên thực hiện: Nguyễn Hoàn Triều - 23521657
90% Tp H6 Chi Minh, 02/2024 soca
Trang 2
IT002 — LAP TRINH HUONG BOI TUQNG
NHAN XET CUA GIAO VIEN HUONG DAN
Người nhận xét (Ký tên và ghi rõ họ tên)
21Page
Trang 3IT002 — LAP TRINH HUONG BOI TUQNG
MUC LUC
I.1 Bài tập I: Xây dựng lớp ngày tháng năm . ¿+5 2 + £+xse£*+vxexeereses 6
1.2 Bài tập 2: Xây đựng lớp phân số 2-2-2 ++£EE+ZeEEEtetxrrrxrrrrrrrrre 10 1.3 Bài tập 3: Xây dựng lớp số phức - ¿+ ++e2E+++tEx+eEExetrrxrrrrxrrrrsree 17
1.4 Bài tập 4: Xây dựng lớp giờ phút g1âyy - - 6< se SS* St ssrxrreseree 22
3lPage
Trang 4[T002 - LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
DANH MỤC HÌNH ẢNH
Hinh 1.1: Class diagram cua lớp NgayThangNam -LcSS SH kế 6
Hình L.2: Thuộc tính và phương thức của lớp NgayThangNam -.-.- 6
Hinh 1.3: Phuong thức nhập của lớp NgayThangNam Ác knsHe 7 Hình 1.4: Phương thức xuất của lớp NgayThangNam - 2-2 =5-+= << szs=s<s2 7 Hinh 1.5: Ham kiểm tra năm nhuậ TT SE 1E E3 SE SE EEYKEkx cHnHvn krcry 7 Hình 1.6: Hàm tính số ngày trong tháng . 7-2272 5222 +2 ++s+E£+EzE+e+eesreeeezeeereersrs 8 Hình 1.7: Phương thức tính ngày tháng tiếp theo của lớp NgayThangNam 8
Hình 1.8: Kết quả của hàm kiêm tra năm nhuận của lớp NgayThangNam 9
Hình 1.9: Kết quả của hàm tính số ngày trong tháng của lớp NgayThangNam 9
Hình 1.20: Kết quả của trường hợp cộng ngày của lớp NgayThangNam 9
Hình 1.21: Kết quả của trường hợp cộng tháng của lớp NgayThangNam 10
Hình 1.22: Kết quả của trường hợp cộng năm của lớp NgayThangNam 10
Hình 2.L: Class diagram của lớp PhanSO - -cc SH HH HH kxu 11 Hình 2.2: Thuộc tính và phương thức của lớp PhanŠSo . cán 11 Hình 2.3: Hàm tìm UCLN của phân số của lớp PhanSo -5- +s<<<<<=s=s+ 11 Hình 2.4: Phương thức rút gọn phân số của lớp PhanSo -. - +s+<<+s=s<s2 12 Hình 2.5: Phương thức nhập phân số của lớp PhanSo . -s-s<sses<s<z<z+s 12 Hình 2.6: Phương thức xuất phân số của lớp PhanSo - - ¿2-7 <<c<s+s<z<zszs 12 Hình 2.7: Phương thức cộng 2 phân số của lớp PhanSo - s-s=-s-s<s- 13 Hình 2.8: Phương thức tính hiệu 2 phân số của lớp PhanSo -s-s<s 13 Hình 2.9: Phương thức tính tích 2 phân số của lớp PhanSo -s 5<+s+s 14 Hình 2.10: Phương thức tính thương 2 phân số của lớp PhanSo - 14
Hình 2.11: Phương thức so sánh 2 phân số của lớp PhanSo -s< es 15 Hình 2.12: Kết quả của phương thức cộng 2 phân số của lớp PhanSo .- 16
4lPage
Trang 5IT002 — LAP TRINH HUONG BOI TUQNG
Hinh 2.13: Két quả của phương thức trừ 2 phân số của lớp PhanSo 16
Hình 2.14: Kết quả của phương thức tích 2 phân số của lớp PhanSo - 16
Hình 2.15: Kết quả của phương thức chia 2 phân sô của lớp PhanSo 17
Hình 2.16: Kết quả của phương thức so sánh 2 phân số của lớp PhanSo 17
Hình 3.L: Class diagram của lớp SOPhUC .- - S1 khe 18 Hình 3.2: Thuộc tính và phương thức của lớp SoPhUC . cà Si 18 Hình 3.3: Phương thức nhập số phức của lớp SoPhUC - 5-5 +s5s<+<+==s+s 18 Hình 3.4: Phương thức xuất số phức của lớp SoPhuc s-s s-s<+<zs+=<<s2 18 Hinh 3.5: Phương thức tính tổng 2 số phức của lớp SoPhuc .-. -5- 19 Hình 3.6: Phương thức tính hiệu 2 số phức của lớp SoPhuc -s-s=+<es 19 Hình 3.7: Phương thức tính tích 2 số phức của lớp SoPhUG . - 5-5 -s-s=s- 20 Hình 3.8: Phương thức tính thương 2 số phức của lớp SoPhuc - - s 21 Hình 3.9: Kết quả của phương thức cộng 2 só phức của lớp SoPhuc 21
Hình 3.10: Kết quả của phương thức trừ 2 số phức của lớp SoPhuc 21
Hình 3.11: Kết quả của phương thức nhân 2 số phức của lớp SoPhuc 21
Hình 3.12: Kết quả của phương thức chia 2 số phức của lớp SoPhuc 22
Hình 4.L: Class diagram của lớp GioPhutGiay .- - àn nHnHnHnH* nghe 22 Hình 4.2: Thuộc tính và phương thức của lớp GioPhutGiay ằ 23 Hình 4.3: Phương thức nhập giờ phút giây của lớp GioPhutGiay 23
Hình 4.4: Phương thức xuất giờ phút giây của l ớp GioPhutGiay .- - 23
Hình 4.5: Phương thức tính giờ phút giây sau khi cộng thêm I giây của lớp GioPhutGiay Hình 4.6: Kết quả của trường hợp chuyên sang ngày mới của lớp GioPhutGiay 24
Hình 4.7: Kết quả của trường hợp cộng giây của lớp GioPhutGiay 25
Hình 4.8: Kết quả của trường hợp cộng phút của lớp GioPhutGiay - 25
Hình 4.9: Kết quả của trường hợp cộng giờ của lớp GioPhutGiay 25
5lPage
Trang 6[T002 - LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
NOI DUNG BAI LAM
1.1 Bài tập 1: Xây dựng lớp ngày tháng năm bao gồm:
s Thuộc tinh: iNgay, 1Thang, iNam
° Phương thức: Nhap(Q), Xuat(), Ngay ThangNamTIep Theo()
Yêu cầu: Thực hiện xây dựng lớp, vẽ class diaeram và khai báo các thuộc tính, phương thức Viết nội dung vào các phương thức đã khai báo Gọi các phương thức trong hàm main()
Class diapram của lớp Ngay ThangNam:
Hinh 1.1: Class diagram cua l60 NgayThangNam
Code của lớp NgayThangNam bao gồm các thuộc tính và phương thức:
a AVE
iThang;
iNam ; Nhap();
Te Oe NgayThangTiepTheo() ;
Tình 1.2: Thuộc tính và phương thức của lớp NgayThangNam
6lPage
Trang 7IT002 — LAP TRINH HUONG BOI TUQNG
Nội dung các phương thức trong lớp Ngay ThangNam:
- Phương thức nhập ngày tháng năm:
h
::Nhap() { cout << " ; cin >> iNgay >> iThang >> iNam;
Hình 1.3: Phương thức nháp của lớp NgayThangNam
- Phương thức xuất ngày tháng năm đã nhập:
" << iNgay << "/" << iThang << "/" << iNam << endL;
Hình 1.4: Phương thức xuất của lớp NgayThangNam
- Phương thức ngày tháng năm tiếp theo (Ngay ThangNam()):
e Dau vào: ngày tháng năm đã nhập
e Đâura: ngày tháng năm được cộng thêm l ngày
e© Hướng xử lý của phương thức ngày tháng năm tiếp theo:
= Giải quyết trường hợp năm nhuận, năm không nhuận:
o_ Trước tiên ta phải kiểm tra năm nhập vào có phải là năm nhuận hay không Lấy số năm đem chia cho 4, nếu kết quả chia hết cho 4 và không chia hết
cho 100 thì năm đó là năm nhuận Với những năm tròn thế kỷ có 2 số 00
ở cuối thì lầy số năm chỉ cho 400, nếu kết quả chia hết cho 400 thì năm đó
Hinh 1.5: Ham kiém tra năm nhuận
= Giải quyết các trường hợp số ngày trong thang:
o Ta phải kiểm tra với tháng nhập thì có số ngày tối đa là bao nhiêu Việc kiểm tra năm nhuận sẽ giúp ta xác định được số ngày tối đa ở tháng đặc biệt là tháng 2
7IPage
Trang 8[T002 - LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
o Dau tiên ta sẽ kiểm tra nêu tháng nhập vào là tháng 2 và năm nhập vào là năm nhuận thì số ngày tối đa của tháng 2 là 29 ngược là sẽ là 2§ ngày
o Sau do ta sẽ kiểm tra với những tháng khác tháng 2 Với các tháng như tháng 4, 6, 9, 11 thi số ngày tôi đa sẽ là 30, các tháng còn lại thì số ngày
toi da la 31
SoNgayTrongThang( month
if (month Si return KtNamNhuan(year) ? 2
Hinh 1.6: Ham tinh số ngày trong tháng
= Giải quyết trường hợp cộng ngày:
o_ Ta sẽ tạo I biến ngày tương ứng là tổng số ngày của tháng vào, khi cộng thêm I ngày ta sẽ so sánh biến ïNgay với biến Ngay nếu ïNgay nhỏ hơn Ngay thì ïNgay sẽ cộng thêm 1, nếu ïNgay lớn hơn hoặc bằng Ngay thì ta
sẽ giải quyết trường hợp cộng tháng
=_ Giải quyết trường hợp cộng tháng:
o_ Khi iNgay lớn hơn Ngay thì ta sẽ kiểm tra ïThang, nêu ¡Thang nhỏ hơn 12
thì ¡Thang cộng thêm I, nếu ¡Thang lớn hơn 12 thì ta sẽ giải quyết trường
hợp cộng năm
= Giải quyết trường hợp cộng năm:
o_ KhiiThang lớn hơn 12 thì ta đổi giá trị của ïThang bằng I và Nam cộng thêm l tương ứng với là đã sang năm mới
gayThangTiepTheo() { gThang(iThang, iNam);
iNgay*+ ; iNgay = 1
if (iThang < 12) {
iThang++
eLse iThang = 1 iNam++
<< iThang << "/" <<
Hình 1.7: Phương thức tính ngày tháng tiếp theo của lớp NgayThangNam
8lPage
Trang 9IT002 — LAP TRINH HUONG BOI TUQNG
- Kết quả của hàm kiểm tra năm nhuận:
Nam nhuan Nhap nam:
Nam nhuan
Press any
2021 nhuan
2022 nhuan
2024
2028
key to continue
Hinh 1.8: Két quả của hàm kiểm tra năm nhuận của lớp NgayThangNam
- Kết quả của hàm tính số ngày trong tháng:
Nhap thang: 2 Nhap nam: 2024
So ngay trong thang la: 29 Nhap thang: 1
Hình 1.9: Kết quả Của hàm tính số ngày trong tháng của lớp NgayThangNam
- Kết quả của trường hợp cộng ngày:
Nhap thang: 12
Nhap nam: 2024
Nhap ngay: 13 Ngay sau khi cong la:
Nhap thang: 2 Nhap nam: 2023 Nhap ngay: 26 Ngay sau khi cong La:
Nhap thang: 3 Nhap nam:
Nhap 23 Ngay sau khi cong la:
Nhap thang: 12
Nhap nam: 2322
Nhap ngay: 12 Ngay sau khi cong ta: 13 Press any key to continue
Hình 1.20: Kết quả của trường hợp công ngày của lớp NgayThangNam
9lPage
Trang 10IT002 — LAP TRINH HUONG BOI TUQNG
- Kết quả của trường hợp cộng tháng:
ngay: 13 nam: 2023 /¡ sau khi cong La: 1d ngay: 3Ô nam; 2022
J sau khi cong La: 31 ngay: 31 thang: 1 nam: 2022 Thang sau khi cong la: 2 Nhap ngay: 30 Nhap nam: 2923 Thang sau khi cong ta: 5 Press any key to continue
Hình 1.21: Kết quả của trường hợp công tháng của lớp NgayThangNam
- Kết quả của trường hợp cộng năm:
Nhap ngay: 36 Nhap nam: 2023 Thang sau khi cong La: 5 Nhap ngay: 36 Nhap thang: 12 Ngay sau khi cong la: 31 Nhap ngay: 31 Nhap thang: 12 Nam sau khi cong ta: 2621 Nhap ngay: 31 Nhap thang: 12 Nam sau khi cong ta: 2623 Press any key to continue
Hình 1.22: Kết quả của trường hợp cộng năm của lớp NgayThangNam
1.2 Bài tập 2: Xây dựng lớp phân số:
« Thuộc tính: ru, iMau
° Phương thức: Nhap(Q), Xuat(), RutGon(), Tong(), Hieu(), Tich(),
Thuong(), SoSanh()
Yêu cầu: Thực hiện xây dựng lớp, vẽ class diaeram và khai báo các thuộc tính, phương thức Viết nội dung vào các phương thức đã khai báo Gọi các phương thức trong hàm main()
10lIPage
Trang 11IT002 — LAP TRINH HUONG BOI TUQNG
RutGon();
Nhap();
ye @ me L2) 1-1€
HieuC seca ThuongC
SoSanh(
Hình 2.2: Thuộc tính và phương thức của lớp PhanSo
Nội dung các phương thức trong lớp PhanSo:
- Phương thức rút gọn phân số:
e© _ Hướng xử lí của phương thức rút gọn phân số:
= Dung ham UCLN() dé tính ước chung lớn nhất của tử và mẫu
UCLNC ca while (b != 0)
Trang 12IT002 — LAP TRINH HUONG BOI TUQNG
= Tatao ra | bién ucln dé lwu gid tri woe chung 1én nhat cua tr va mau
=_ Để rút gọn phân số ta lấy tử và mẫu chia cho biến ucln (ước chung lớn nhất cua tu va mau)
cout << " "- cin >> iTu;
cout << " : cin >> iMau;
RutGon();
Hình 2.5: Phương thúc nhập phân số của lớp PhanSo
- Phương thức xuất phân số đã nhập:
ẨẲ
::Xuat() { cout << iTu << "/" << iMau << endl;
Hình 2.6: Phương thức xuất phân số của lớp PhanSo
- Phương thức tính tổng 2 phân số (Tong()):
e _ Đầu vào: Một phân số
e©_ Đâura: Tông của phân số ta truyền vào với phân số ta đã nhập trước đó
e©_ Hướng xử lí của phương thức cộng 2 phân số:
=_ Tạo một đối tượng kq kiểu PhanSo để lưu kết quả
=_ Để tính tông 2 phân số ta cần quy đồng 2 phân rồi mới cộng 2 phân số đó
= Tính mẫu số mới của kq bằng cách nhân mẫu số của phân số gọi phương thức với mẫu số của phân số b
= Tính tử số mới của kq bằng cách tính tử số của phân số gọi phương thức nhân với mẫu số của phân số b, sau đó cộng với tích của mẫu số của phân số gọi phương thức với tử sô của phan so b
121IPage
Trang 13IT002 — LAP TRINH HUONG BOI TUQNG
= Gọi phương thức RutGon trên kq để rút gọn phân số mới tính được
=_ Trả vẻ kq, tức là phân số mới đã được tính toán và rút gọn
::Tong(
kq kq.iMau = iMau * b.iMau;
Hình 2.7: Phương thúc Công 2 phân số của lớp PhanSo
- Phương thức tính hiệu 2 phân số:
e _ Đầu vào: Một phân số
e_ Đâầura: Hiệu của phân số ta truyền vào với phân số ta đã nhập trước đó
e© _ Hướng xử lí của phương thức hiệu 2 phân số
=_ Tạo một đối tượng kq kiểu PhanSo để lưu kết quả
“ Đề tính hiệu 2 phân số ta cần quy đồng 2 phân rồi mới trừ 2 phân số đó
= Tính mẫu số mới của kq bằng cách nhân mẫu số của phân số gọi phương thức với mẫu số của phân số b
= Tính tử số mới của kq bằng cách tính tử số của phân số gọi phương thức nhân với mẫu số của phân số b, sau đó trừ đi tích của mẫu số của phân số gọi phương thức với tử số của phân số b
= Gọi phương thức RutGon trên kq để rút gọn phân số mới tính được
=_ Trả vẻ kq, tức là phân số mới đã được tính toán và rút gọn
4q.iMau = iMau * b.iMau;
q.iTu = (iTu * b.iMau) - (iMau * b.iTu);
RutGon();
urn kq;
Hinh 2.8: Phuong thức tính hiệu 2 phân số của lớp PhanSo
- Phương thức tính tích 2 phân sô:
e Đâu vào: Một phân so
e Đâura: Tích của phân sô ta truyền vào với phan sô ta đã nhập trước đó
13lPage
Trang 14[T002 - LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
e©_ Hướng xử lí của phương thức tích 2 phân số:
=_ Tạo một đối tượng kq kiểu PhanSo để lưu kết quả
= Tính mẫu số mới của kq bằng cách nhân mẫu số của phân số gọi phương thức với mẫu số của phân số b
= Tinh tur số mới của kq bằng cách tính tích của tử số của phân số gọi phương thức và tử số của phân số b
= Gọi phương thức RutGon trên kq để rút gọn phân số mới tính được
= Trả vẻ kq, tức là phân số mới đã được tính toán và rút gọn
AGF
kq.iMau = iMau * b.iMau iTu = iTu * b.iTu RutGon();
l
Hình 2.9: Phương thức tính tích 2 phân số của lớp PhanSo
- Phương thức tính thương 2 phân số:
e _ Đầu vào: Một phân số
e©_ Đâu ra: Thương của phân số ta truyền vào với phân số ta đã nhập trước đó e©_ Hướng xử lí của phương thức thương 2 phân số:
=_ Tạo một đối tượng kq kiểu PhanSo để lưu kết quả
= Détinh thuong cua 2 phan sé ta lấy 1 phân số nhân với ngịch đảo phân số còn lại
= Tính mẫu số mới của kq bằng cách nhân mẫu số của phân số gọi phương thức với tử số của phân số b
= Tính tử số mới của kq bằng cách nhân tử số của phân số gọi phương thức với mẫu số của phân số b
= Gọi phương thức RutGon trên kq để rút gọn phân số mới tính được
=_ Trả vẻ kq, tức là phân số mới đã được tính toán và rút gọn
: :ThuongC
kq;
kq.iMau = iMau * b.iTu;
kq.iTu = iTu * b.iMau;
kq.RutGon() ; return kq;
Hình 2.10: Phương thức tính thương 2 phân số của lớp PhanSo
14lPage