Print calendar for a given year in C++
Prerequisite : Find day of the week for given date
Problem: To print the calendar of any given year. The program should be such that it can prints the calendar of any input year.
Implementation:
CPP
// A C++ Program to Implement a Calendar // of an year #include<bits/stdc++.h> using namespace std; /*A Function that returns the index of the day of the date- day/month/year For e.g- Index Day 0 Sunday 1 Monday 2 Tuesday 3 Wednesday 4 Thursday 5 Friday 6 Saturday*/ 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; } /* A Function that returns the name of the month with a given month number Month Number Name 0 January 1 February 2 March 3 April 4 May 5 June 6 July 7 August 8 September 9 October 10 November 11 December */ string getMonthName( int monthNumber) { string months[] = { "January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December" }; return (months[monthNumber]); } /* A Function to return the number of days in a month Month Number Name Number of Days 0 January 31 1 February 28 (non-leap) / 29 (leap) 2 March 31 3 April 30 4 May 31 5 June 30 6 July 31 7 August 31 8 September 30 9 October 31 10 November 30 11 December 31 */ int numberOfDays ( int monthNumber, int year) { // January if (monthNumber == 0) return (31); // February if (monthNumber == 1) { // If the year is leap then February has // 29 days if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) return (29); else return (28); } // March if (monthNumber == 2) return (31); // April if (monthNumber == 3) return (30); // May if (monthNumber == 4) return (31); // June if (monthNumber == 5) return (30); // July if (monthNumber == 6) return (31); // August if (monthNumber == 7) return (31); // September if (monthNumber == 8) return (30); // October if (monthNumber == 9) return (31); // November if (monthNumber == 10) return (30); // December if (monthNumber == 11) return (31); } // Function to print the calendar of the given year void printCalendar( int year) { printf ( " Calendar - %d\n\n" , year); int days; // Index of the day from 0 to 6 int current = dayNumber (1, 1, year); // i --> Iterate through all the months // j --> Iterate through all the days of the // month - i for ( int i = 0; i < 12; i++) { days = numberOfDays (i, year); // Print the current month name printf ( "\n ------------%s-------------\n" , getMonthName (i).c_str()); // Print the columns printf ( " Sun Mon Tue Wed Thu Fri Sat\n" ); // Print appropriate spaces int k; for (k = 0; k < current; k++) printf ( " " ); for ( int j = 1; j <= days; j++) { printf ( "%5d" , j); if (++k > 6) { k = 0; printf ( "\n" ); } } if (k) printf ( "\n" ); current = k; } return ; } // Driver Program to check above functions int main() { int year = 2016; printCalendar(year); return (0); } |
Output:
Calendar - 2016 ------------January------------- 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 ------------February------------- 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 ------------March------------- 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 ------------April------------- 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 ------------May------------- 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 ------------June------------- 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 ------------July------------- 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 ------------August------------- 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 ------------September------------- 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 ------------October------------- 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 ------------November------------- 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 ------------December------------- 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
Time Complexity– O(1) . The time taken doesn’t depends on the input year. It is same for any given year.
Auxiliary Space – O(1)
This article is contributed by Rachit Balweriar .If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.