BÀI MỚI NHẤT
Tuesday, August 9, 2016

Tìm ngày kế tiếp vừa nhâp?

Đ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?

dinh quang truong
Đâ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: