[C] Ngày
Tác giả:
- Trần Hán Huy – tranhanhuy.wordpress.com
Sách:
- Bài tập kĩ thuật lập trình C/C++ – Nguyễn Tấn Trần Minh Khang
Đề bài
- Ngày
- 593 Khai báo dữ liệu biểu diễn ngày
- 594 Nhập ngày
- 595 Xuất ngày theo định dạng (ng/th/nm)
- 596 Kiểm tra năm nhuận
- 597 Tính số thứ tự ngày trong năm
- 598 Tính số thứ tự ngày kể từ ngày 1/1/1
- 599 Tìm ngày khi biết năm và số thứ tự của ngày trong năm
- 600 Tìm ngày khi biết số thứ tự ngày từ năm 1/1/1
- 601 Tìm ngày kế tiếp
- 602 Tìm ngày hôm trước
- 603 Tìm ngày kế đó k ngày
- 604 Tìm ngày hôm trước k ngày
- 605 Khoảng cách giữa 2 ngày
- 606 So sánh 2 ngày
Code
/*Nick yahoo: conloyal*/ /*Soft: visual studio 2008*/ #include <stdio.h> //593 Khai báo dữ liệu biểu diễn ngày struct Ngay { int iNgay; int iThang; int iNam; }; //594 Nhập ngày void NhapNgay(Ngay &a) { printf("Nhap ngay: "); scanf_s("%d",&a.iNgay); printf("Nhap thang: "); scanf_s("%d",&a.iThang); printf("Nhap nam: "); scanf_s("%d",&a.iNam); } //595 Xuất ngày theo định dạng (ng/th/nm) void XuatNgay(Ngay a) { printf("%d/%d/%d", a.iNgay, a.iThang, a.iNam); } //596 Kiểm tra năm nhuận bool KiemTraNamNhuan(Ngay a) { if (a.iNam%4==0 && a.iNam%100!=0) return true; if (a.iNam%400==0) return true; return false; } bool KiemTraNamNhuan(int i) { if (i%4==0 && i%100!=0) return true; if (i%400==0) return true; return false; } //597 Tính số thứ tự ngày trong năm int STTNgayTrongNam(Ngay a) { int n[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; if (KiemTraNamNhuan(a)) n[1] = 29; int stt = 0; for (int i=0; i<a.iThang-1; i++) stt += n; return stt + a.iNgay; } //598 Tính số thứ tự ngày kể từ ngày 1/1/1 int STTNgay(Ngay a) { int stt = 0; for(int i=1; i<a.iNam; i++) { if (KiemTraNamNhuan(i)) stt+=366; else stt+=365; } return stt + STTNgayTrongNam(a); } //599 Tìm ngày khi biết năm và số thứ tự của ngày trong năm int TimNgay(int iNam, int iSTT) { int n[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; if (KiemTraNamNhuan(iNam)) n[1] = 29; for (int i=0; i<12; i++) { if (n < iSTT) iSTT -= n; else break; } return iSTT; } //600 Tìm ngày khi biết số thứ tự ngày từ năm 1/1/1 int TimNgay(int iSTT) { int iNam = 1; while(1) { if (KiemTraNamNhuan(iNam)) { if (iSTT > 366) iSTT -= 366; else return TimNgay(iNam,iSTT); } else { if (iSTT > 365) iSTT -= 365; else return TimNgay(iNam,iSTT); } iNam++; } return -1; } //601 Tìm ngày kế tiếp Ngay TimNgayKeTiep(Ngay a) { bool flag =false; if (a.iNgay == 30 || a.iNgay == 31) { flag = true; a.iNgay =1; } if (a.iThang == 2) { if (KiemTraNamNhuan(a)) { if (a.iNgay == 29) { a.iNgay = 1; flag = true; } } else { if (a.iNgay == 28) { a.iNgay = 1; flag = true; } } } if (flag) { a.iThang++; if (a.iThang == 13) { a.iThang = 1; a.iNam ++; } } else a.iNgay++; return a; } //602 Tìm ngày hôm trước Ngay TimNgayHomTruoc(Ngay a) { if (a.iNgay == 1) { switch(a.iThang) { case 1: case 2: case 4:case 6:case 8:case 9:case 11: { a.iNgay = 31; a.iThang --; if (a.iThang == 0) { a.iThang = 12; a.iNam -- ; } break; } case 3: { if (KiemTraNamNhuan(a)) { a.iNgay = 29; } else { a.iNgay = 28; } a.iThang = 2; break; } default : { a.iNgay = 30; a.iThang--; } } } else a.iNgay--; return a; } //603 Tìm ngày kế đó k ngày Ngay TimNgayKeTiepKNgay(Ngay a, int k) { while(k>0) { a = TimNgayKeTiep(a); k--; } return a; } //604 Tìm ngày hôm trước k ngày Ngay TimNgayHomTruocKNgay(Ngay a, int k) { while(k>0) { a = TimNgayHomTruoc(a); k--; } return a; } //605 Khoảng cách giữa 2 ngày int KhoangCach2Ngay(Ngay a, Ngay b) { int STTa = STTNgay(a); int STTb = STTNgay(b); if (STTa > STTb) return STTa-STTb; return STTb-STTa; } //606 So sánh 2 ngày int SoSanh2Ngay(Ngay a, Ngay b) { int STTa = STTNgay(a); int STTb = STTNgay(b); if (STTa > STTb) return 1; if (STTa == STTb) return 0; return -1; } void main() { Ngay a; NhapNgay(a); printf("\nNgay: "); XuatNgay(a); if (KiemTraNamNhuan(a)) printf("\nLa nam nhuan"); else printf("\nKhong phai nam nhuan"); printf("\nSTT ngay trong nam: %d", STTNgayTrongNam(a)); printf("\nSTT ngay tu ngay 1 thang 1 nam 1: %d", STTNgay(a)); printf("\nTim ngay biet nam 2010, stt 273: %d", TimNgay(2010,273)); printf("\nTim ngay biet stt tu 1/1/1: %d", TimNgay(734046)); printf("\nNgay ke tiep : "); XuatNgay(TimNgayKeTiep(a)); printf("\nNgay hom truoc : "); XuatNgay(TimNgayHomTruoc(a)); printf("\nNgay ke tiep 5 ngay: "); XuatNgay(TimNgayKeTiepKNgay(a,5)); printf("\nNgay hom truoc 5 ngay: "); XuatNgay(TimNgayHomTruocKNgay(a,5)); }
Link source: