IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGNỘI DUNG BÀI LÀ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ầ
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
KHOA CÔNG NGHỆ PHẦN MỀM
MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI TẬP THỰC HÀNH 1
GVHD: Nguyễn Ngọc QuíSinh viên thực hiện: Trần Lê Uyên ThyMSSV: 23521564
Tp Hồ Chí Minh, 02/2024
Trang 2IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
……., 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
1.1 Class Diagram 8
1.2 Khai báo các phương thức và thuộc tính 9
1.3 Nội dung các phương thức 9
1.4 Input và Output 12
1.5 Gọi các phương thức trong hàm main 12
1.6 Kết quả 13
1.7 File code 13
CHƯƠNG 2: XÂY DỰNG LỚP PHÂN SỐ 14
2.1 Class Diagram 14
2.2 Khai báo các phương thức và thuộc tính 15
2.3 Nội dung các phương thức 15
2.4 Input và Output 18
2.5 Gọi các phương thức trong hàm main 19
2.6 Kết quả 20
2.7 File code 20
CHƯƠNG 3: XÂY DỰNG LỚP SỐ PHỨC 21
3.1 Class Diagram 21
3.2 Khai báo các phương thức và thuộc tính 22
3.3 Nội dung các phương thức 22
3.4 Input và Output 24
3.5 Gọi các phương thức trong hàm main 25
Trang 4IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
3.6 Kết quả 25
3.7 File code 25
CHƯƠNG 4: XÂY DỰNG LỚP GIỜ PHÚT GIÂY 26
4.1 Class Diagram 26
4.2 Khai báo các phương thức và thuộc tính 27
4.3 Nội dung các phương thức 27
4.4 Input và Output 28
4.5 Gọi các phương thức trong hàm main 29
4.6 Kết quả 29
4.7 File code 29
Trang 5IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Trang 6IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Trang 7IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
CHƯƠNG 1: XÂY DỰNG LỚP NGÀY THÁNG NĂM 8
1.1 8
1.2 13
CHƯƠNG 2: XÂY DỰNG LỚP PHÂN SỐ 14
2.1 14
2.2 20
CHƯƠNG 3: XÂY DỰNG LỚP SỐ PHỨC 21
3.1 21
3.2 25
CHƯƠNG 4: XÂY DỰNG LỚP GIỜ PHÚT GIÂY 26
4.1 26
4.2 29
Trang 8IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
NỘI DUNG BÀI LÀ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ứctrong hàm main()
1.1 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
1.2 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:class Ngaythangnam {
Bảng 1.1: Thuộc tính và phương thức của lớp Ngaythangnam.
1.3 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;
}
Bảng 1.2: Phương thức nhập của Ngaythangnam.
- 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
}
Bảng 1.5: Phương thức ngày tháng năm tiếp theo của Ngaythangnam.
1.4 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ành1
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ành1
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
1.5 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
1.6 Kết quả:
Hình 1.2: Kết quả của chương trình
Trang 14IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
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ứctrong hàm main()
2.1 Class Diagram:
- Chọn diagram của lớp PhanSo:
Hình 2.1: Diagram của lớp Ngaythangnam.
Trang 15IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
2.2 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:class PhanSo {
float iTu, iMau;
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.
2.3 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
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;
pro.iMau = this->iMau * a.iMau;
return pro;
}
Bảng 2.7: Phương thức tích của PhanSo.
- Phương thức lấy tử của PhanSo:
Trang 17IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
float PhanSo::gettu() {
return this->iTu;
}
Bảng 2.8: Phương thức lấy tử của PhanSo.
- 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;
}
Bảng 2.9: Phương thức thương của PhanSo.
- Phương thức so sánh của PhanSo:
Trang 18IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
2.4 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ớimẫ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ớimẫ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ố:
Tính ra số thập phân của cả 2 số rồi so sánh 2 đáp án
Trang 19IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
2.5 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
2.6 Kết quả
Hình 2.2: Kết quả của chương trình
Trang 21IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
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ứctrong hàm main()
3.1 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
3.2 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.
3.3 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;
}
Bảng 3.2: Phương thức nhập của SoPhuc.
- 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;
}
Bảng 3.4: Phương thức tổng của SoPhuc.
- 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;
}
Bảng 3.5: Phương thức hiệu của SoPhuc.
- 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;
}
Bảng 3.6: Phương thức tích của SoPhuc.
- 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;
}
Bảng 3.7: Phương thức thương của SoPhuc.
3.4 Input và Output
Trang 24
-IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Phần ảo: Lấy phần thực của số phức thứ 1 nhân với phần ảo của
số phức thứ 2, cộng phần ảo của số phức thứ 1 nhân với phần thực
số phức thứ 2
Thương hai số phức:
Phần thực:
3.5 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 25IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
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);
thuong.Xuat();
}
Bảng 3.8: Phương thức trong hàm main.
3.6 Kết quả
Hình 1.2: Kết quả của chương trình
Bài tập 4: Xây dựng lớp giờ phút giây:
Trang 26IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
• 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ứctrong hàm main()
4.1 Class Diagram:
Chọn diagram của lớp GioPhutGiay:
Hình 4.1: Diagram của lớp GioPhutGiay.
4.2 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:
Trang 27IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Bảng 4.1: Thuộc tính và phương thức của lớp GioPhutGiay.
4.3 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:
Bảng 4.4: Phương thức kiểm tra của GioPhutGiay.
- Phương thức tính cộng thêm một giây của GioPhutGiay:
void GioPhutGiay::TinhCongThemMotGiay() {
Trang 28IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
}else iGio++;
- 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ớibằ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
4.5 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 29IT002 – LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Hình 4.2: Kết quả của chương trình