Bài tập 1: Xây dựng lớp ngày tháng năm bao gồm: • Thuộc tính: iNgay, iThang, iNam • Phương thức: Nhap, Xuat, NgayThangNamTiepTheo Yêu cầu: Thực hiện xây dựng lớp, vẽ class diagram và kh
Trang 1ĐẠI HỌ C QU C GIA THÀNH PHỐ HỒ CHÍ MINH Ố
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Trang 2IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
……., ngày…… tháng……năm 2024
Người nhận xét
(Ký tên và ghi rõ họ tên)
Trang 3IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
MỤC L C: Ụ
CHƯƠNG 1: XÂY DỰNG L ỚP NGÀY THÁNG NĂM. 8
Class Diagram 8
Khai báo các phương thức và thuộc tính 9
Nội dung các phương thức 9
Input và Output 12
Gọi các phương thức trong hàm main 12
Kết quả 13
File code 13
CHƯƠNG 2 XÂY DỰNG LỚP PHÂN SỐ : 14
Class Diagram 14
Khai báo các phương thức và thuộc tính 15
Nội dung các phương thức 15
Input và Output 18
Gọi các phương thức trong hàm main 19
Kết quả 20
File code 20
CHƯƠNG 3: XÂY DỰNG LỚP SỐ PHỨC 21
Class Diagram 21
Khai báo các phương thức và thuộc tính 22
Nội dung các phương thức 22
Input và Output 24
Gọi các phương thức trong hàm main 25
Trang 4IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Kết quả 25
File code 25
CHƯƠNG 4 XÂY DỰNG LỚP GIỜ PHÚT GIÂY : 26
Class Diagram 26
Khai báo các phương thức và thuộc tính 27
Nội dung các phương thức 27
Input và Output 28
Gọi các phương thức trong hàm main 29
Kết quả 29
File code 29
Trang 5IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
DANH M C B Ụ ẢNG :
CHƯƠNG 1 : XÂY DỰNG L ỚP NGÀY THÁNG NĂM. 8
9
9
9
10
12
13
CHƯƠNG 2: XÂY DỰNG LỚP PHÂN SỐ 14
15
15
15
16
16
16
16
17
17
17
19
CHƯƠNG 3: XÂY DỰNG LỚP SỐ PHỨC 21
22
22
22
Trang 6IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
24
23
23
23
25
CHƯƠNG 4: XÂY DỰNG LỚP GIỜ PHÚT GIÂY 26
27
27
27
28
29
29
Trang 7
IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
DANH M C HÌNH Ụ ẢNH
CHƯƠNG 1: XÂY DỰ NG L ỚP NGÀY THÁNG NĂM. 8
8
13
CHƯƠNG 2: XÂY DỰNG LỚP PHÂN SỐ 14
14
20
CHƯƠNG 3: XÂY DỰNG LỚP SỐ PHỨC 21
21
25
CHƯƠNG 4: XÂY DỰNG LỚP GIỜ PHÚT GIÂY 26
26
29
Trang 8IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
NỘI DUNG BÀI LÀM
Chương 1: Xây dựng l ớp ngày tháng năm.
Bài tập 1: Xây dựng lớp ngày tháng năm bao gồm:
• Thuộc tính: iNgay, iThang, iNam
• Phương thức: Nhap(), Xuat(), NgayThangNamTiepTheo()
Yêu cầu: Thực hiện xây dựng lớp, vẽ class 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:
- Chọn diagram của lớp Ngaythangnam
Hình 1.1: Diagram của lớp Ngaythangnam
Trang 9IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Khai báo các phương thức và thuộc tính:
- Code của lớp Ngaythangnam bao gồm các thuộc tính và phương thức:
Nội dung các phương thức:
- Phương thức nhập của Ngaythangnam:
void Ngaythangnam::Nhap() {
cout << "Ngay: "; cin >> ingay;
cout << "Thang: "; cin >> ithang;
cout << "Nam: "; cin >> inam;
}
- Phương thức xuất của Ngaythangnam:
Trang 10IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
- Phương thức kiểm tra của Ngaythangnam:
else if (ithang == 4 || ithang == 6 || ithang == 9 || ithang == 11) {
if (ingay <= 0 || ingay > 30) return false;
}
else if (ithang == 2) {
if (inam % 4 == 0 && inam%100 != 0) {
if (ingay <= 0 || ingay > 29) return false;
Trang 11IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
- Phương thức ngày tháng năm tiếp theo:
ithang = 3;
} else ingay++;
}
else {
if (ingay == 28) {ingay = 1;
ithang = 3;
} else ingay++;
Trang 12IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Input và Output
- Input: Ngày tháng năm đã nhập
- Output: Ngày tháng năm được cộng thêm m t ngày ộ
- Hướng x ử lý của ngày tháng năm tiếp theo:
+ Đối với các tháng 1, 3, 5, 7, 8, 10:
• Nếu ngày nh p vào là 31 thì tháng c ng thêm 1 và ngày tr thành 1 ậ ộ ở
• Nếu ngày nh p vào là các ngày khác ( lậ ớn hơn 0 và bé hơn 31 ) thì chỉ mỗi ngày được cộng thêm 1
+ Đối với các tháng 4, 6, 9, 11:
• Nếu ngày nh p vào là 30 thì tháng c ng thêm 1 và ngày tr thành 1 ậ ộ ở
• Nếu ngày nhâp vào là các ngày khác ( lớn hơn 0 và bé hơn 30 ) thì chỉ mỗi ngày c ng thêm 1 ộ
+ Đối v i tháng 2: ớ
• Nếu là năm nhuận:
▪ Nếu ngày nh p vào là 29 thì tháng c ng thêm 1 và ngày tr ậ ộ ở thành 1
▪ Nếu ngày nhâp vào là các ngày khác ( lớn hơn 0 và bé hơn 29 ) thì chỉ m i ngày c ng thêm 1 ỗ ộ
• Nếu là năm không nhuận:
▪ Nếu ngày nh p vào là 28 thì tháng c ng thêm 1 và ngày tr ậ ộ ở thành 1
▪ Nếu ngày nhâp vào là các ngày khác ( lớn hơn 0 và bé hơn 28 ) thì chỉ m i ngày c ng thêm 1 ỗ ộ
Gọi các phương thức trong hàm main:
- Gọi các phương thức trong hàm main:
Trang 13IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Kết quả:
Hình 1.2: K t qu cế ả ủa chương trình
File code: Click
Trang 14IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Chương 2: Xây dựng lớp phân số
Bài tập 2: Xây dựng lớp phân số:
• Thuộc tính: iTu, iMau
• Phương thức: Nhap(), Xuat(), RutGon(), Tong(), Hieu(), Tich(), Thuong(),
SoSanh()
Yêu cầu: Thực hiện xây dựng lớp, vẽ class 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:
- Chọn diagram của lớp PhanSo:
Trang 15IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Khai báo các phương thức và thuộc tính:
- Code của lớp Ngaythangnam bao gồm các thuộc tính và phương thức:
PhanSo Tong(PhanSo& a);
PhanSo Hieu(PhanSo& a);
PhanSo Tich(PhanSo& a);
PhanSo Thuong(PhanSo& a);
void SoSanh(PhanSo a);
float gettu();
bool KT();
};
Bảng 2.1: Thuộc tính và phương thức của lớp PhanSo
Nội dung các phương thức:
- Phương thức nhập của PhanSo:
void PhanSo::Nhap() {
cout << "Nhap phan so: " << endl; cin >> iTu >> iMau;
}
Bảng 2.2: Phương thức nhập của PhanSo
- Phương thức xuất của PhanSo:
Trang 16IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
- Phương thức rút gọn của PhanSo:
int gcd1(int a, int b)
Bảng 2.4: Phương thức rút gọn của PhanSo
- Phương thức tổng của PhanSo:
PhanSo PhanSo::Tong(PhanSo& a) {
PhanSo sum;
sum.iTu = iTu * a.iMau + iMau * a.iTu;
sum.iMau = iMau * a.iMau;
return sum;
}
Bảng 2.5: Phương thức tổng của PhanSo
- Phương thức hiệu của PhanSo:
PhanSo PhanSo::Hieu(PhanSo& a) {
PhanSo diff;
diff.iTu = iTu * a.iMau - iMau * a.iTu;
diff.iMau = iMau * a.iMau;
return diff;
}
Bảng 2.6: Phương thức hiệu của PhanSo
- Phương thức tích của PhanSo:
PhanSo PhanSo::Tich(PhanSo& a) {
PhanSo pro;
pro.iTu = this->iTu * a.iTu;
Trang 17IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
- Phương thức lấy tử của PhanSo:
float PhanSo::gettu() {
return this->iTu;
}
- Phương thức thương của PhanSo:
PhanSo PhanSo::Thuong(PhanSo& a) {
PhanSo res;
res.iTu = this->iTu * a.iMau;
res.iMau = this->iMau * a.iTu;
return res;
}
- Phương thức so sánh của PhanSo:
Trang 18IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Input và Output
- Input: Phân số đã nhập
- Output:
• Phân số đã rút gọn
• Tổng của hai phân số
• Hiệu của hai phân số
• Tích của hai phân số
• Thương của hai phân số
• Tổng của hai phân số:
▪ Tử: Lấy tử của phân số 1 nhân với mẫu của phân số 2 cộng với mẫu của phân số 2 nhân với mẫu của phân số 1
▪ Mẫu: Lấy mẫu phân số 1 nhân với mẫu của phân số 2
• Hiệu của hai phân số:
▪ Tử: Lấy tử của phân số 1 nhân với mẫu của phân số 2 cộng với mẫu của phân số 2 nhân với mẫu của phân số 1
▪ Mẫu: Lấy mẫu phân số 1 nhân với mẫu của phân số 2
• Tích của hai phân số:
▪ Tử: Lấy tử phân số 1 nhân với tử của phân số 2
▪ Mẫu: Lấy mẫu phân số 1 nhân với mẫu phân số 2
• Thương của hai phân số:
▪ Tử: Lấy tử của phân số 1 nhân với mẫu của phân số 2
▪ Mẫu: Lấy mẫu của phân số 2 nhân với tử của phân số 1
• So sánh hai phân số:
Trang 19IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Gọi các phương thức trong hàm main:
- Gọi các phương thức trong hàm main:
cout << "Tong cua hai phan so la: ";
PhanSo tong = p1.Tong(p2);
tong.RutGon();
tong.Xuat();
cout << "Hieu cua hai phan so la: ";
PhanSo hieu = p1.Hieu(p2);
hieu.RutGon();
hieu.Xuat();
cout << "Tich cua hai phan so la: ";
PhanSo tich = p1.Tich(p2);
tich.RutGon();
tich.Xuat();
if (p2.gettu() == 0) cout << "Ket qua khong hop le" << endl;
else {
cout << "Thuong cua hai phan so la: ";
PhanSo thuong = p1.Thuong(p2);
Trang 20IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Kết quả
Hình 2.2: K t qu cế ả ủa chương trình
File code: Click
Trang 21IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Chương 3: Xây dựng lớp số phức
Bài tập 3: Xây dựng lớp số phức bao gồm:
• Thuộc tính: iThuc, iAo
• Phương thức: Nhap(), Xuat(), Tong(), Hieu(), Tich(), Thuong()
Yêu cầu: Thực hiện xây dựng lớp, vẽ class 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:
- Chọn diagram của lớp SoPhuc:
Hình 3.1: Diagram của lớp SoPhuc
Trang 22IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Khai báo các phương thức và thuộc tính:
- Code của lớp SoPhuc bao gồm các thuộc tính và phương thức:
SoPhuc Tong(SoPhuc& a);
SoPhuc Hieu(SoPhuc& a);
SoPhuc Tich(SoPhuc& a);
SoPhuc Thuong(SoPhuc& a);
};
Bảng 3.1: Thuộc tính và phương thức của lớp SoPhuc
Nội dung các phương thức:
- Phương thức nhập của SoPhuc:
void SoPhuc::Nhap() {
cout << "Nhap so phuc: ";
cin >> iThuc >> iAo;
}
- Phương thức xuất của SoPhuc:
Trang 23IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
- Phương thức tổng của SoPhuc:
SoPhuc SoPhuc::Tong(SoPhuc& a) {
SoPhuc b;
b.iThuc = iThuc + a.iThuc;
b.iAo = iAo + a.iAo;
return b;
}
- Phương thức hiệu của SoPhuc:
SoPhuc SoPhuc::Hieu(SoPhuc& a) {
SoPhuc c;
c.iThuc = iThuc - a.iThuc;
c.iAo = iAo - a.iAo;
return c;
}
- Phương thức tích của SoPhuc:
SoPhuc SoPhuc::Tich(SoPhuc& a) {
SoPhuc b;
b.iThuc = iThuc * a.iThuc - iAo * a.iAo;
b.iAo = iThuc * a.iAo + iAo * a.iThuc;
return b;
}
- Phương thức thương của SoPhuc:
SoPhuc SoPhuc::Thuong(SoPhuc& a) {
SoPhuc b;
b.iThuc = (iThuc*a.iThuc + iAo*a.iAo)/(a.iThuc*a.iThuc + a.iAo*a.iAo); b.iAo = (iAo * a.iThuc - iThuc * a.iAo) / (a.iThuc * a.iThuc + a.iAo * a.iAo)return b;
}
Trang 24IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
• Thương hai số phức:
▪ Phần thực:
Trang 25IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Gọi các phương thức trong hàm main:
- Gọi các phương thức trong hàm main:
int main() {
SoPhuc a, b;
a.Nhap();
b.Nhap();
cout << "Tong cua hai so phuc la: ";
SoPhuc tong = a.Tong(b);
tong.Xuat();
cout << "Hieu cua hai so phuc la: ";
SoPhuc hieu = a.Hieu(b);
hieu.Xuat();
cout << "Tich cua hai so phuc la: ";
SoPhuc tich = a.Tich(b);
tich.Xuat();
cout << "Thuong cua hai so phuc la: ";
SoPhuc thuong = a.Thuong(b);
Trang 26IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Chương 4: Xây dựng lớp giờ phút giây
Bài tập 4: Xây dựng lớp giờ phút giây:
• Thuộc tính: iGio, iPhut, iGiay
• Phương thức: Nhap(), Xuat(), TinhCongThemMotGiay()
Yêu cầu: Thực hiện xây dựng lớp, vẽ class 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:
Chọn diagram của lớp GioPhutGiay:
Hình 4.1: Diagram của lớp GioPhutGiay
Trang 27IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Khai báo các phương thức và thuộc tính:
- Code của lớp GioPhutGiay bao gồm các thuộc tính và phương thức:
Bảng 4.1: Thuộc tính và phương thức của lớp GioPhutGiay
Nội dung các phương thức:
- Phương thức nhập của GioPhutGiay:
void GioPhutGiay::Nhap() {
cout << "Nhap thoi gian: "; cin >> iGio >> iPhut >> iGiay;
}
Bảng 4.2: Phương thức nhập của GioPhutGiay
- Phương thức xuất của GioPhutGiay:
void GioPhutGiay::Xuat() {
cout << iGio << ":" << iPhut << ":" << iGiay << endl } ;
Bảng 4.3: Phương thức xuất của GioPhutGiay
- Phương thức kiểm tra của GioPhutGiay:
Trang 28IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
- Phương thức tính cộng thêm một giây của GioPhutGiay:
} else iGio++;
- Input: Giờ phút giây đã nhập
- Output: Giờ phút giây c ng thêm m t giâyộ ộ
- Hướng x ử lý của ngày tháng năm tiếp theo:
• Nếu gi ờ đã nhập là 23 và phút là 59, giây là 59 thì s ẽ xuất ra gi m i b ng ờ ớ ằ
0, phút b ng 0 và giây b ng 0.ằ ằ
• Nếu phút đã nhập là 59, và giây là 59 thì giờ sẽ cộng 1, phút bằng 0 và giây b ng 0.ằ
• Nếu giây b ng 59 thì phút c ng 1.ằ ộ
Trang 29IT002 L– ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Gọi các phương thức trong hàm main:
- Gọi các phương thức trong hàm main: