//Name: Nguyen Tien Dat - 19127356 //Ex 1 #include using namespace std; struct Date { int day, month, year; }; void nhap(Date &d) { cout << "Nhap ngay: "; cin >> d.day; cout << "Nhap thang: "; cin >> d.month; cout << "Nhap nam: "; cin >> d.year; } int namnhuan(int a) { if (a % 400 == 0 || a % 100 != 0 && a % 4 == 0) { return 366; } return 365; } int kiemngay(int ngay, int thang, int nam) { //Thang co 31 ngay int demngaymax = 0; if (thang == 1 || thang == 3 || thang == 5 || thang == 7 || thang == 8 || thang == 10 || thang == 12) { if (ngay > 31 || ngay < 1) return 0; } //Thang co 30 ngay if (thang == 4 || thang == 6 || thang == 9 || thang == 11) { if (ngay > 30 || ngay < 1) return 0; } //Thang 28, 29 ngay if (thang == 2) { if (namnhuan(nam) == 366) { if (ngay > 29 || ngay < 1) return 0; } else { if (ngay > 28 || ngay < 1) return 0; } } return 1; } void ngaymai(int ngay, int thang, int nam) { //Tháng 31 ngày if (thang == 1 || thang == 3 || thang == 5 || thang == 7 || thang == 8 || thang == 10 || thang == 12){ if (ngay == 31){ if (thang = 12){ ngay = 1; thang = 1; nam = nam + 1; } else{ ngay = 1; thang = thang + 1; } } else ngay = ngay + 1; } //Tháng 30 ngày if (thang == 4 || thang == 6 || thang == 9 || thang == 11){ if (ngay == 30){ ngay = 1; thang = thang + 1; } else ngay = ngay + 1; } //Tháng 28, 29 ngày if (thang == 2){ if (namnhuan(nam) == 366) { if (ngay > 29) cout << "Ngay khong hop le"; else { if (ngay == 29) { ngay = 1; thang = thang + 1; } else ngay = ngay + 1; } } else{ if (ngay > 28) cout << "Ngay khong hop le"; else{ if (ngay == 28) { ngay = 1; thang = thang + 1; } else ngay = ngay + 1; } } } cout << "Mai la ngay " << ngay << " thang " << thang << " nam " << nam << endl; } void homqua(int ngay, int thang, int nam) { if (thang == 1) { if (ngay == 1) { ngay = 31; thang = 12; nam = nam - 1; } else ngay = ngay - 1; } else if (thang == 3) { if (ngay == 1) { if (namnhuan(nam) == 1) ngay = 29; else ngay = 29; thang = 2; } else ngay = ngay - 1; } else if (thang == 5 || thang == 7 || thang == 8 || thang == 10 || thang == 12) { if (ngay == 1) { thang = thang - 1; ngay = 30; } else ngay = ngay - 1; } else if (thang == 4 || thang == 6 || thang == 9 || thang == 11) { if (ngay == 1) { thang = thang - 1; ngay = 31; } else ngay = ngay - 1; } else if (thang == 2) { if (ngay == 1) { thang = thang - 1; ngay = 31; } else ngay = ngay - 1; } cout << "Hom qua la ngay " << ngay << " thang " << thang << " nam " << nam << endl; } int demngaymax(int thang, int nam) { int demngaymax = 0; if (thang == 1 || thang == 3 || thang == 5 || thang == 7 || thang == 8 || thang == 10 || thang == 12) { demngaymax = 31; } if (thang == 4 || thang == 6 || thang == 9 || thang == 11) { demngaymax = 30; } if (thang == 2) { if (namnhuan(nam) == 366) demngaymax = 29; else demngaymax = 28; } return demngaymax; } int thutungaytrongnam(int ngay, int thang, int nam) { int temp = 0; if (thang == 1) temp = ngay; else { for (int i = 1; i < thang; i++) { temp += demngaymax(i, nam); } temp += ngay; } return temp; } int ngaytrongnambietthutu(int thutu, int nam) { if (thutu <= 31) return thutu; else { for (int i = 1; i < 12; i++) { if (thutu - demngaymax(i, nam) <= 0) break; else thutu -= demngaymax(i, nam); } } return thutu; } int thangtrongnambietthutu(int thutu, int nam) { int i; if (thutu <= 31) return 1; else { for (i = 1; i < 12; i++) { if (thutu - demngaymax(i, nam) <= 0) break; else thutu -= demngaymax(i, nam); } } return i; } void kekngay(int ngay, int thang, int nam, int k) { int thutu = thutungaytrongnam(ngay, thang, nam) + k; if (thutungaytrongnam(ngay, thang, nam) + k > namnhuan(nam)) { for (int i = 1; i; i++) { thutu -= namnhuan(nam); nam = nam + 1; if (thutu - namnhuan(nam) > 0) { nam = nam + 1; } else { cout << ngaytrongnambietthutu(thutu, nam) << "\t"; cout << thangtrongnambietthutu(thutu, nam) << "\t"; cout << nam; break; } } } else { cout << ngaytrongnambietthutu(thutu, nam) << "\t"; cout << thangtrongnambietthutu(thutu, nam) << "\t"; cout << nam; } } void truockngay(int ngay, int thang, int nam, int k) { int thutu1 = thutungaytrongnam(ngay, thang, nam) - k; int thutu2 = k - thutungaytrongnam(ngay, thang, nam); if (thutungaytrongnam(ngay, thang, nam) - k < 1) { for (int i = 1; i; i++) { nam = nam - 1; if (namnhuan(nam) - thutu2 > 0) { thutu2 = namnhuan(nam) - thutu2; cout << ngaytrongnambietthutu(thutu2, nam) << "\t"; cout << thangtrongnambietthutu(thutu2, nam) << "\t"; cout << nam; break; } else thutu2 -= namnhuan(nam); } } else { cout << ngaytrongnambietthutu(thutu1, nam) << "\t"; cout << thangtrongnambietthutu(thutu1, nam) << "\t"; cout << nam; } } int khoangcach2ngay(int day1, int month1, int year1, int day2, int month2, int year2) { int temp = year1 - year2, kc; int a = thutungaytrongnam(day1, month1, year1); int b = thutungaytrongnam(day2, month2, year2); int kc1 = a - b; int kc2 = b - a; if (temp > 0) { for (int i = year2; i < year1; i++) { kc1 = kc1 + namnhuan(i); } kc = kc1; } else if (temp < 0){ for (int i = year1; i < year2; i++) { kc2 = kc2 + namnhuan(i); } kc = kc2; } else kc = abs(a - b); return kc; } int sosanh2ngay(int day1, int month1, int year1, int day2, int month2, int year2) { int temp = year1 - year2, kc; int a = thutungaytrongnam(day1, month1, year1); int b = thutungaytrongnam(day2, month2, year2); if (temp > 0) return 1; else if (temp < 0) return -1; else { if (a > b) return 1; else if (a < b) return -1; else return 0; } } void xuat(Date d) { if (kiemngay(d.day, d.month, d.year) == 0) { cout << "Thong tin vua nhap khong hop le"; } else { cout << "Ngay vua nhap la: " << d.day << endl; cout << "Thang vua nhap la: " << d.month << endl; cout << "Nam vua nhap la: " << d.year << endl; } } int main() { Date d; nhap(d); xuat(d); int tn, k1, k2, day2, year2, month2, day3, year3, month3; cout << "Menu Tinh Nang:\n"; cout << "1. Kiem Tra Nam Nhuan \n2. Thu tu ngay trong nam " << d.year << "\n"; cout << "3. Tinh thu tu cua ngay da nhap trong nam\n4. Tinh ngay mai\n5. Tinh ngay hom qua\n"; cout << "6. Tim ngay thang nam ke ngay da nhap k ngay\n7. Tim ngay thang nam truoc ngay da nhap k ngay\n"; cout << "8. Nhap ngay thang nam moi va tinh khoang cach so voi so ngay da nhap truoc do\n"; cout << "9. Nhap ngay thang nam moi va so sanh voi ngay thang nam da nhap truoc do\n"; if (kiemngay(d.day, d.month, d.year) != 0) { cout << "Nhap tinh nang: "; cin >> tn; switch (tn) { case 1: if (namnhuan(d.year) == 1) cout << "Nam nhuan" << endl; else cout << "Khong phai nam nhuan" << endl; break; case 2: cout << "Thu tu ngay trong nam la: " << thutungaytrongnam(d.day, d.month, d.year); break; case 3: int thutu; cout << "Nhap thu tu ngay trong nam: "; cin >> thutu; cout << "Ngay trong nam " << d.year << " co thu tu la " << thutu << ": " << ngaytrongnambietthutu(thutu, d.year); break; case 4: ngaymai(d.day, d.month, d.year); break; case 5: homqua(d.day, d.month, d.year); break; case 6: cout << "Nhap k ngay: "; cin >> k1; kekngay(d.day, d.month, d.year, k1); break; case 7: cout << "Nhap k ngay: "; cin >> k2; truockngay(d.day, d.month, d.year, k2); break; case 8: cout << "Nhap ngay: "; cin >> day2; cout << "Nhap thang: "; cin >> month2; cout << "Nhap nam: "; cin >> year2; cout << khoangcach2ngay(d.day, d.month, d.year, day2, month2, year2); case 9: cout << "Nhap ngay: "; cin >> day3; cout << "Nhap thang: "; cin >> month3; cout << "Nhap nam: "; cin >> year3; if (sosanh2ngay(d.day, d.month, d.year, day3, month3, year3) == 1) cout << "ngay dau lon hon"; else if (sosanh2ngay(d.day, d.month, d.year, day3, month3, year3) == 0) cout << "2 ngay bang nhau"; else cout << "ngay sau lon hon"; break; default: cout << "Ban chon sai so menu."; break; } } return 1; }