ในปัญหานี้เราได้รับหนึ่งปีและเราต้องการพิมพ์ปฏิทินสำหรับปีนั้น
ปฏิทินปีแสดงทุกวัน เดือน ทุกวันของเดือน และที่นี่เราจะสร้างโปรแกรมที่จะคืนปฏิทินของปีปัจจุบัน
สำหรับสิ่งนี้เราจะต้องมีการคำนวณบางอย่างเช่น
จำนวนวันในเดือนใดเดือนหนึ่ง
มกราคม มีนาคม พฤษภาคม กรกฎาคม สิงหาคม ตุลาคม ธันวาคม มี 31 วัน
กุมภาพันธ์มี 28 วันในปีอธิกสุรทินและ 29 วันในปีอธิกสุรทิน
เมษายน มิถุนายน กันยายน พฤศจิกายน มี 30 วัน
วันเริ่มต้น (วันธรรมดา) ของเดือน
ตามปีและเดือน จะพบวันทำงานในวันที่ 1 ของทุกเดือน
ตัวอย่าง
คราวนี้มาสร้างโปรแกรมพิมพ์ปฏิทินปี 2020 กัน −
#include<iostream> using namespace std; int dayNumber(int day, int month, int year){ static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; year -= month < 3; return ( year + year/4 - year/100 + year/400 + t[month-1] + day) % 7; } string getMonthName(int monthNumber){ string months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; return (months[monthNumber]); } int numberOfDays (int monthNumber, int year){ switch(monthNumber){ case 0 : case 2 : case 4 : case 6 : case 7 : case 9 : case 11: return(31); break; case 1 : if (year % 400 == 0 || (year % 4 == 0 && year %100 != 0)) return (29); else return (28); break; case 3 : case 5 : case 8 : case 10 : return(30); break; } } void printCalendar(int year){ cout<<"\t\t\t Calendar - Year "<<year; int days; int current = dayNumber (1, 1, year); for (int i = 0; i < 12; i++){ days = numberOfDays (i, year); cout<<endl<<"\t\t ----X----"<<getMonthName (i).c_str()<<"----X---- \t\t"<<endl; cout<<" Sun Mon Tue Wed Thu Fri Sat \n"; int k; for (k = 0; k < current; k++) cout<<"\t"; for (int j = 1; j <= days; j++){ printf("%5d", j); if (++k > 6){ k = 0; cout<<endl; } } if (k) cout<<endl; current = k; } return; } int main(){ int year = 2019; printCalendar(year); return (0); }
ผลลัพธ์
Calendar - Year 2019 ----X----January----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ----X----February----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ----X----March----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ----X----April----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ----X----May----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ----X----June----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ----X----July----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ----X----August----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ----X----September----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ----X----October----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ----X----November----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ----X----December----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31