Computer >> Máy Tính >  >> Lập trình >> lập trình C

C Chương trình kiểm tra xem một ngày có hợp lệ hay không

Ngày đã cho ở định dạng ngày, tháng và năm ở dạng số nguyên. Nhiệm vụ là tìm xem ngày đó có khả thi hay không.

Ngày hợp lệ phải nằm trong khoảng từ 1/1/1800 - 31/12/9999, những ngày sau những ngày này là không hợp lệ.

Những ngày này sẽ không chỉ chứa phạm vi năm mà còn chứa tất cả các ràng buộc liên quan đến ngày lịch.

Ràng buộc là -

  • Ngày không được nhỏ hơn 1 và nhiều hơn 31
  • Tháng không được nhỏ hơn 1 và nhiều hơn 12
  • Năm không được nhỏ hơn 1800 và nhiều hơn 9999
  • Khi các tháng là tháng 4, tháng 6, tháng 9, tháng 11, ngày không được quá 30.
  • Khi đến tháng 2, chúng tôi phải kiểm tra xem
    • Nếu năm là năm nhuận thì số ngày không được nhiều hơn 29
    • Những ngày khác, số ngày không được nhiều hơn 28.

Nếu tất cả các ràng buộc là đúng thì đó là một ngày hợp lệ, Nếu không thì không.

Ví dụ

Input: y = 2002
   d = 29
   m = 11
Output: Date is valid
Input: y = 2001
   d = 29
   m = 2
Output: Date is not valid

Thuật toán

START
In function int isleap(int y)
   Step 1-> If (y % 4 == 0) && (y % 100 != 0) && (y % 400 == 0) then,
      Return 1
   Step 2-> Else
      Return 0
In function int datevalid(int d, int m, int y)
   Step 1-> If y < min_yr || y > max_yr then,
      Return 0
   Step 2-> If m < 1 || m > 12 then,
      Return 0
   Step 3-> If d < 1 || d > 31 then,
      Return 0
   Step 4-> If m == 2 then,
      If isleap(y) then,
         If d <= 29 then,
            Return 1
         Else
            Return 0
         End if
      End if
   Step 5-> If m == 4 || m == 6 || m == 9 || m == 11 then,
      If(d <= 30)
         Return 1
      Else
         Return 0
         Return 1
      End Function
In main(int argc, char const *argv[])
   Step 1->Assign and initialize values as y = 2002, d = 29, m = 11
   Step 2-> If datevalid(d, m, y) then,
      Print "Date is valid"
   Step 3-> Else
      Print "date is not valid”
   End main
STOP

Ví dụ

#include <stdio.h>
#define max_yr 9999
#define min_yr 1800
//to check the year is leap or not
//if the year is a leap year return 1
int isleap(int y) {
   if((y % 4 == 0) && (y % 100 != 0) && (y % 400 == 0))
      return 1;
   else
      return 0;
}
//Function to check the date is valid or not
int datevalid(int d, int m, int y) {
   if(y < min_yr || y > max_yr)
      return 0;
   if(m < 1 || m > 12)
      return 0;
   if(d < 1 || d > 31)
      return 0;
      //Now we will check date according to month
   if( m == 2 ) {
      if(isleap(y)) {
         if(d <= 29)
            return 1;
         else
            return 0;
         }
      }
      //April, June, September and November are with 30 days
      if ( m == 4 || m == 6 || m == 9 || m == 11 )
         if(d <= 30)
            return 1;
         else
            return 0;
            return 1;
   }
int main(int argc, char const *argv[]) {
   int y = 2002;
   int d = 29;
   int m = 11;
      if(datevalid(d, m, y))
         printf("Date is valid\n");
      else
         printf("date is not valid\n");
      return 0;
}

Đầu ra

Nếu chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Date is valid