โปรแกรมนี้ใช้ตรวจสอบว่าวันที่ที่กำหนด (วัน เดือน ปี) เป็นวันที่ที่ถูกต้องตามปฏิทินหรือไม่ โดยพิจารณาข้อจำกัดดังนี้:
- วันที่ต้องอยู่ระหว่าง 1 ถึง 31
- เดือนต้องอยู่ระหว่าง 1 ถึง 12
- ปีต้องอยู่ระหว่าง 1800 ถึง 9999
- เดือนที่มี 30 วัน (เมษายน, มิถุนายน, กันยายน, พฤศจิกายน) วันที่ต้องไม่เกิน 30
- เดือนกุมภาพันธ์ ตรวจสอบปีอธิกสุรทิน: ถ้าเป็นปีอธิกสุรทิน วันที่ต้องไม่เกิน 29 มิฉะนั้นไม่เกิน 28
ตัวอย่าง
Input: y = 2002, d = 29, m = 11 → Output: Date is valid Input: y = 2001, d = 29, m = 2 → Output: Date is not valid
อัลกอริทึม
- ฟังก์ชัน
isleap(int y)ตรวจสอบปีอธิกสุรทิน: หาร 4 ลงตัว และ (ไม่หาร 100 ลงตัว หรือ หาร 400 ลงตัว) - ฟังก์ชัน
datevalid(int d, int m, int y)ตรวจสอบเงื่อนไขทั้งหมดตามลำดับ - ใน
main()เรียกใช้ฟังก์ชันและแสดงผล
โค้ดตัวอย่าง
#include <stdio.h>
#define max_yr 9999
#define min_yr 1800
int isleap(int y) {
if ((y % 4 == 0) && (y % 100 != 0) && (y % 400 == 0))
return 1;
else
return 0;
}
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;
if (m == 2) {
if (isleap(y)) {
if (d <= 29) return 1;
else return 0;
}
}
if (m == 4 || m == 6 || m == 9 || m == 11) {
if (d <= 30) return 1;
else return 0;
}
return 1;
}
int main() {
int y = 2002, d = 29, m = 11;
if (datevalid(d, m, y))
printf("Date is valid\n");
else
printf("Date is not valid\n");
return 0;
}
ผลลัพธ์
Date is valid