Đinh Quang Trưởng - Lập trình C/C++
Đề bài:Nhập 1 ngày gồm ngày, tháng, năm. Hãy xác định ngày kế tiếp của ngày vừa nhập?
Đây là 1 bài tập khó, nếu không phân tích kỹ chắc chắn sẽ gặp sai xót tại 1 số trường hợp.Bạn cần chú ý đến 3 điểm sau:
- Năm nhuận
- Cuối tháng
- Cuối năm
Dưới đây là đoạn code tham khảo:
#include<iostream>
#include<conio.h>
using namespace std;
const int minYear = 0, maxYear = 10000;
int KiemTraNamNhuan(int nam)
{
return (nam % 4 == 0 && nam % 100 != 0) || (nam % 400 == 0);
}
int TimSoNgayTrongThang(int thang, int nam)
{
int NgayTrongThang;
switch(thang)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
NgayTrongThang = 31;
break;
case 4: case 6: case 9 : case 11:
NgayTrongThang = 30;
break;
case 2:
int Check = KiemTraNamNhuan(nam);
if(Check == 1)
{
NgayTrongThang = 29;
}
else
{
NgayTrongThang = 28;
}
}
return NgayTrongThang;
}
void TimNgayKeTiep(int Ngay, int Thang, int Nam)
{
int NgayTrongThang = TimSoNgayTrongThang(Thang, Nam);
if (Ngay < NgayTrongThang)
{
Ngay++;
}
else if (Thang < 12) //ngày là cuoi thang
{
Ngay = 1; Thang++;
}
else
{
Ngay = Thang = 1;
Nam++;
}
cout<<"\nNgay ke tiep la: "<<Ngay<<" - " <<Thang<<" - "<<Nam<<endl;
}
int main()
{
int Ngay, Thang, Nam;
do
{
cout<<"\nMoi nhap nam: ";
cin>>Nam;
if(Nam < minYear || Nam > maxYear)
{
cout<<"Du lieu khong hop le. Nhap lai!";
}
}while(Nam < minYear || Nam > maxYear);
do
{
cout<<"\nMoi nhap thang: ";
cin>>Thang;
if (Thang < 1 || Thang > 12)
cout<<"Du lieu khong hop le. Nhap lai!";
}while(Thang < 1 || Thang > 12);
int NgayTrongThang = TimSoNgayTrongThang(Thang, Nam);
do
{
cout<<"\nMoi nhap ngay: ";
cin>>Ngay;
if(Ngay < 1 || Ngay > NgayTrongThang)
{
cout<<"Du lieu khong hop le. Nhap lai!";
}
}while(Ngay < 1 || Ngay > NgayTrongThang);
TimNgayKeTiep(Ngay, Thang, Nam);
system("pause");
}
Kết quả của chương trình;
>>Có thể bạn quan tâm: