IT002 - LAP TRINH HUONG DOI TUQNG NOI DUNG BAI LAM Chuong 1: Bài tập 1: Xây dựng lớp ngày tháng năm Thuộc tính: iNgay, iThang, iNam Phương thức: Nhap, Xuat, Ngay ThangNamTiepTheo Yêu cầ
Trang 1
DAI HOC QUOC GIA THANH PHO HO CHI MINH
TRUONG DAI HOC CONG NGHE THONG TIN KHOA CONG NGHE PHAN MEM
MÔN LẬP TRÌNH HƯỚNG ĐÓI TƯỢNG
BÀI TẬP THỰC HÀNH X
GVHD: Nguyễn Ngọc Quí
Sinh viên thực hiện:
900% Tp H6 Chi Minh, 02/2024 soce
Trang 2IT002 - LAP TRINH HUONG DOI TUQNG
NHAN XET CUA GIAO VIEN HUONG DAN
, NOÀW tháng năm 2024
Người nhận xét (Kỹ tên và ghi rõ họ tên)
Trang 3IT002 - LAP TRINH HUONG DOI TUQNG
Chương 1:
Chirong 2:
Chirong 3:
Chương 4:
MỤC LỤC
Bai tap 1: Xây dựng lớp ngày thủng năm 6 Bài tập 2: Xây dựng lớp phân số 9 Bài tập 3: Xây dựng lớp số phức 14 Bai tap 4: Xây dựng lớp giờ phút giay 17
3|Page
Trang 4IT002 - LAP TRINH HUONG DOI TUQNG
DANH MUC BANG
: 0101 .ă aa
Bảng 1.2
Bang 1.3
Bảng 1.4
Bảng l.5
Bang 2.1
Trang 5
IT002 - LAP TRINH HUONG DOI TUQNG
DANH MỤC HÌNH ẢNH
Trang 6IT002 - LAP TRINH HUONG DOI TUQNG
NOI DUNG BAI LAM
Chuong 1: Bài tập 1: Xây dựng lớp ngày tháng năm Thuộc tính: iNgay, iThang, iNam
Phương thức: Nhap(), Xuat(), Ngay ThangNamTiepTheo()
Yêu cầu: Thực hiện xây dựng lớp, vẽ diagram 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 diagram của lớp Date
Date
- INgay
- iThang
- Nam
+ Nhap() + Xuat()
+ NgayThangNamTiepTheo()
Hình L1
Thực hiện xây dựng lớp Date
class Date {
private:
int iNgay, iThang, iNam;
public:
void Nhap();
void Xuat();
Bang 1.1
Các phương thức của class Date
Phương thức NhapQ:
Trang 7IT002 - LAP TRINH HUONG DOI TUQNG
cout << "Nhap ngay thang nam (dd/mm/yyyy): ";
bool temp_test = false;
while (!temp_test) {
cin >> iNgay >> iThang >> iNam;
if (iNam > 0)
if (iThang < 13 && iThang > 0)
if (iNgay > 0) switch (prop _thang(iThang, iNam)) {
case 1:
if (iNgay <= 30) temp_test = true;
break;
case 2;
if (iNgay <= 31) temp_test = true;
break;
case 3:
if (iNgay <= 28) temp_test = true;
break;
case 4;
if (iNgay <= 29) temp _test = true;
break;
default:
break;
}
if (!temp_test}) cout << "Nhap sai! vui long nhap lai ";
Bang 1.2
Input (đầu vào): Ngày, tháng, năm được nhập vào từ bản phím/người dùng
Phương thức sau đó kiêm tra thông tin nhập vào hợp lệ không Nếu không, báo lỗi vào yêu cầu
người dùng nhập lại
Phương thức XuatQ):
void Date::Xuat() {
cout << iNgay << "/" << iThang << "/" << iNam << endl;
}
Bang 1.3
Phương thức Ngay ThangNamTiepTheo():
cout << "Ngay tiep theo: ";
int prop = prop_thang(iThang, iNam);
if (iNgay < 28) cout << iNgay + 1 << "/" << iThang << "/" << iNam
<< endl;
else
if (iThang == 12) if (iNgay == 31) cout << "1/1/" << iNam + 1
<< endl;
7|Page
Trang 8IT002 - LAP TRINH HUONG DOI TUQNG
else cout << iNgay + 1 << "/" << iThang <<
"/" << iNam << endl;
else
switch (prop) {
case 1:
if (iNgay == 30) cout << "1/" << iThang + 1 << "/"
<< iNam << endl;
else cout << iNgay + 1 << "/" << iThang << "/" <<
iNam << endl;
break;
case 2:
if (iNgay == 31) cout << "1/" << iThang + 1 << "/"
<< iNam << endl;
else cout << iNgay + 1 << "/" << iThang << "/" <<
iNam << endl;
break;
case 3:
if (iNgay == 28) cout << "1/" << iThang + 1 << "/"
<< iNam << endl;
else cout << iNgay + 1 << "/" << iThang << "/" <<
iNam << endl;
break;
case 4;
if (iNgay == 29) cout << "1/" << iThang + 1 << "/"
<< iNam << endl;
else cout << iNgay + 1 << "/" << iThang << "/" << iNam << endl;
break;
default:
Bang 1.4
Phương thức này gọi thêm hàm prop_thang() (đầu vào là tháng, năm của tháng cần kiểm tra)
đề kiêm tra số ngày có trong tháng, trả về 1, 2, 3, 4 lần lượt cho tháng có 30, 31, 28, 29 ngày
//tra ve 1 neu thang 30 ngay, 2 neu 31 ngay, 3 neu 28 ngay, 4 neu
29 ngay
if (a == 2)
if (6b 3 4 == 0 && b% 100 != 0) return 4;
else return 3;
else
if (a <= 7)
if (a & 1) return 1;
else return 2;
else
if (a & 1) return 2;
Bang 1.5
Trang 9IT002 - LAP TRINH HUONG DOI TUQNG
Sau đó, dựa vào kết quả trà về của hàm đề tinh ngay tiép theo
Kết quả chạy thử chương trình
rogramming/oop/BTTH
Hình L2
Chương 2: Bài tập 2: Xây dựng lớp phân số
Thuộc tính: ru, Mau
Phương thức: NhapQ, Xuat(Q), Rutgon(), Tong(), HieuQ, TichOQ), ThuongQ, SoSanh() Class diagram cua lop phan sé
Phanso
-iTu
- iMau
+ Nhap(): void
+ Xuat(): void + Rutgon(): void + Tong(): phanso + Hieu(): phanso + Tich(): phanso + Thuong(): phanso + SoSanh(): int
Hình 2.1
Tiến hành xây dựng lớp phân số
class phanso {
private:
int iTu, iMau;
Trang 10
IT002 - LAP TRINH HUONG DOI TUQNG
public:
void Nhap()
void Xuat();
void Rutgon();
,
phanso Tong(phanso a, phanso b);
phanso Hieu(phanso a, phanso b);
phanso Tich(phanso a, phanso b);
phanso Thuong(phanso a, phanso b);
int SoSanh(phanso a, phanso b);
Bang 2.1
Các phương thức của lớp phân số
Phương thức NhapQ:
Input (đầu vào): Phân số nhập từ bản phím
void phanso::Nhap() {
cout << "Nhap phan so (a/b): ";
cin >> iTu >> iMau;
Bang 2.2
Phuong thức XuatQ):
Output (đầu ra): Phân số nhập từ bàn phím
cout << endl;
int 1 = to_string(max(iTu, iMau)).length();
cout << iTu << endl;
for (int i = 0; 1 < 1; i++) cout << "-";
cout << endl << iMau << endl;
Bang 2.3
Phương thức Rutgon():
Input (đầu vào): Phân số nhập từ bản phím
Hướng giải quyết: Tiến hành rút gọn phân số bằng cách tìm ước số chung lớn nhất của ïTu và
iMau, sau d6 chia iTu va iMau cho sô tìm được
Output (đầu ra): Phân số đã được rút gọn
void phanso::Rutgon() {
Trang 11
IT002 - LAP TRINH HUONG DOI TUQNG
iTu = iTu / iMau;
iMau = 1;
}
else { int temp = min(iTu, iMau);
iTu = iTu / temp;
iMau = iMau / temp;
}
temp ;
Bang 2.4
Phuong thirc Tong():
Input (đầu vào): Hai phân số được nhập vào từ bàn phím
Hướng giải quyết: Đề giảm bớt độ phức tạp của không - thời gian, ta tiến hành trực tiếp cộng hai phân số thay vì phải quy đồng hai phân số bằng cách nhân lần lượt ¡Tu của phân số nảy với iMau cua phân số kia, sau đó tông của chúng chính là ïTu của phân số tổng Đề được iMau ta tiến hành nhân hai ïMau của hai phân số nhập vào lại với nhau Sau đó chúng ta rút gọn phân
⁄ A
so
Output (dau ra): Téng của hai phân số
phanso tong;
tong.iMau = a.iMau * b.iMau;
tong.iTu = (a.iTu * tong.iMau) + (b.iTu * tong.iMau);
tong.Rutgon();
return tong;
Bang 2.5
Phuong thức Hieu():
Input (đầu vào): Hai phân số được nhập vào từ bàn phím
Hướng giải quyết: Đề giảm bớt độ phức tạp của không - thời gian, ta tiến hành trực tiếp cộng hai phân số thay vì phải quy đồng hai phân số bằng cách nhân lần lượt ¡Tu của phân số nảy với iMau cua phan sé kia, sau đó hiệu của chúng chính là ïTu của phân số giệu Đề được ïMau ta tiến hành nhân hai ïMau của hai phân số nhập vào lại với nhau Sau đó chúng ta rút gọn phân
⁄ A
so
11|Page
Trang 12IT002 - LAP TRINH HUONG DOI TUQNG
Output (đầu ra): Hiệu của hai phân số
phanso phanso::Hieu(phanso a, phanso b) {
phanso hieu;
hieu.iMau = a.iMau * b.iMau;
hieu.iTu = (a.iTu * hieu.iMau) - (b.iTu * hieu.iMau);
hieu.Rutgon();
return hieu;
Bang 2.6
Phương thức Tich():Input (đầu vào): Hai phân số được nhập vào từ bản phím
Hướng giải quyết: Ta nhân lần lượt ¡Tu của phân số nảy với phân số kia, rồi nhân ïMau của phân số này với phân số kia Sau đó chúng ta rút gọn phân số
Output (đầu ra): Tích của hai phân số
phanso phanso::Tich(phanso a, phanso b) {
phanso tich;
tich.iTu = a.iTu * b.iTu;
tich.iMau = a.iMau * b.iMau;
tich.Rutgon();
return tich;
Bang 2.7
Phương thức Thuong():
Input (đầu vào): Hai phân số được nhập vào từ bàn phím
Hướng giải quyết: Ta nhân lần lượt ïTu của phân số nảy ¡Mau của Sau đó chúng ta rút gọn
phân số
Output (đầu ra): Thương của hai phân số
int phanso::SoSanh(phanso a, phanso b) {
/*
tra ve
OQ neua=b
*/
int temp_a = a.iTu * b.iMau;
int temp_b = b.iTu * a.iMau;
if (temp_a == temp _b) return 0;
else
Trang 13
IT002 - LAP TRINH HUONG DOI TUQNG
if (temp_a > temp_b) return 1;
else return -1;
Bang 2.8 Phương thirc SoSanh():
Input (đầu vào): Hai phân số được nhập vào từ bàn phím
Hướng giải quyết: Ta nhân lần lượt ïTu của phân số nảy với iMau của phân số kia, rồi so sánh hai 1Tu với nhau
Output (đầu ra): Trả về 1 nếu như phân số a lớn hơn phân số b, -I nếu phân số a bé hơn phân
số b, 0 nều a và b băng nhau
int phanso::SoSanh(phanso a, phanso b) {
/*
tra ve
-l neu a<b
OQ nẹu a =b
*/
int temp_a = a.iTu * b.iMau;
int temp_b = b.iTu * a.iMau;
if (temp_a == temp _b) return 0;
else
if (temp_a > temp_b) return 1;
else return -1;
Bang 2.9
Kết quả chạy thử chương trình
13|Page
Trang 14IT002 - LAP TRINH HUONG DOI TUQNG
1
Hie
3
1 +
5
Fy
Thuong la:
15
4
(base) donghuunguyenkhoa@Lit1seagames-Macbook-Pro BTTH1 % |
Hình 2.2
Chương 3: Bài tập 3: Xây dựng lớp số phức
Thuộc tinh: iThuc, iAo
Phương thirc: Nhap(Q), Xuat(), Tong(), HieuQ), TichQ, Thuong()
Class điagram của lớp số phức
Sophuc
- iThuc
- iAo
+ Nhap(): void + Xuat(): void + Tong(): sophuc + Hieu(): sophuc + Tich(): sophuc
Hình 3.1
Tiến hành xây dựng lớp số phức
class sophuc {
private:
Trang 15
IT002 - LAP TRINH HUONG DOI TUQNG
public:
void Nhap();
void Xuat();
sophuc Tong(sophuc a, sophuc b);
sophuc Hieu(sophuc a, sophuc b);
sophuc Tich(sophuc a, sophuc b);
sophuc Thuong(sophuc a, sophuc b);
Bang 3.1
Các phương thức trong lớp số phức
Phương thức NhapQ:
Input (đầu vào): Hai số lần lượt là phần thực và phần ảo nhập từ bàn phím
cout << "Nhap so phuc (a + bi): ";
cin >> iThuc >> iAo;
Bang 3.2
Phuong thức XuatQ):
Output (đầu ra): Hai số lần lượt là phân thực và phan ao
cout << iThuc << " + ”" << iAo << "i" << endl;
}
Bang 3.3 Phuong thirc Tong():
Input (đầu vào): Hai số phức nhập từ bàn phím
Hướng giải quyết: Ta tiến hành cộng lần lượt phần thực va phan ảo của hai số
Output (đầu ra): Số phức là tống của hai số phức
sophuc tong;
tong.iThuc = a.iThuc + b.iThuc;
tong.iAo = a.iAo + b.iAo;
return tong;
15|Page
Trang 16IT002 - LAP TRINH HUONG DOI TUQNG
Bang 3.4 Phuong thức Hieu():
Input (đầu vào): Hai số phức nhập từ bàn phím
Hướng giải quyết: Ta tiến hành trừ lần lượt phần thực và phần ảo của hai số
Output (đầu ra): Số phức là hiệu của hai số phức
sophuc hieu;
hieu.iThuc = a.iThuc - b.iThục;
hieu.iAo = a.iAo - b.1Ao;
return hieu;
Bang 3.5 Phuong thire Tich():
Input (đầu vào): Hai số phức nhập từ bàn phím
Hướng giải quyết: Ta tiến hành nhân đa thức số phức
out = (iThuc,iThuc, — iAo,iAo,) + (iThucgiAo, — iAogiThuc,)i Output (đầu ra): Số phức là tích của hai số phức
sophuc tich;
tich.iThuc = (a.iThuc * b.iThuc) - (a.iAo - b.iAo);
tich.iAo = (a.iThuc * b.iAo) + (a.iAo * b.iThuc);
return tich;
Bang 3.6 Phương thức Thuong():
Input (đầu vào): Hai số phức nhập từ bàn phím
Hướng giải quyết: Ta tiễn hành chia đa thức số phức
a iThuc,iThuc, + iAo,iAo, + iAogiThuc — [ThucuLAo,
out = —- =
b iAo,” + iAo,” iAo,” + iAo,”
Output (đầu ra): Số phức là thương của hai số phức
Trang 17IT002 - LAP TRINH HUONG DOI TUQNG
sophuc thuong;
thuong.iThuc = ((a.iThuc * b.iThuc) + (a.iAo + b.iAo)) / ((b.iThuc
* b.iThuc) + (b.iAo * b.iAo));
thuong.iAo = ((a.iAo * b.iThuc) - (a.iThuc * b.iAo)) / ((b.iThuc * b.iThuc) + (b.iAo * b.iAo));
return thuong;
Bang 3.7
Kết quả chạy thử chương trình
games-Macbook-Pro BTTH1 %
Hình 3.2
Chương 4: Bài tập 4: Xây dựng lớp giờ phút giây
Thuộc tính: 1G1o, iPhut, IGiay
Phương thức: NhapQ, Xuat(), TinhCong ThemMotGIay()
Class diagram cua lớp giờ phút giây
thoigian
- iGio
- iPhut
- iGiay
+ Nhap(): void + Xuat(): void
+ TinhCongThemMotGiay(): void
Hình 41
Tiến hành xây dựng lớp giờ phút giây
17|Page
Trang 18IT002 - LAP TRINH HUONG DOI TUQNG
class thoigian {
private:
int iGio, iPhut, iGiay;
public:
void Nhap();
void Xuat();
void TinhCongThemMotGiay();
Bang 4.1
Các phương thức có trong lớp giờ phút giây
Phương thức NhapQ:
void thoigian::Nhap() {
cout << "Nhap thoi gian (hh/mm/ss): ";
cin >> iGio >> iPhut >> iGiay;
Bang 4.2
Phuong thức XuatQ):
void thoigian::Xuat() {
cout << iGio << ":" << iPhut << ":" << iGiay << endl;
}
Bang 4.3
Phương thức TinhCongThemMotGIay(Q):
if (iGiay == 59
if (iPhut == 59)
if (iGio == 23) iGio = 0;
else iGiott;
else iPhutt++;
iGiaytt+;
Bang 4.4
Kết quả chạy thử chương trình