Prerequisite: Find day of the week for a given date Given a year N, the task is to print the calendar for every month of the given year. Implementation:
C
// C program to print the month by month // calendar for the given year #include <stdio.h> // Function that returns the index of the // day for date DD/MM/YYYY 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;
} // Function that returns the name of the // month for the given month Number // January - 0, February - 1 and so on char * getMonthName( int monthNumber)
{ char * month;
switch (monthNumber) {
case 0:
month = "January" ;
break ;
case 1:
month = "February" ;
break ;
case 2:
month = "March" ;
break ;
case 3:
month = "April" ;
break ;
case 4:
month = "May" ;
break ;
case 5:
month = "June" ;
break ;
case 6:
month = "July" ;
break ;
case 7:
month = "August" ;
break ;
case 8:
month = "September" ;
break ;
case 9:
month = "October" ;
break ;
case 10:
month = "November" ;
break ;
case 11:
month = "December" ;
break ;
}
return month;
} // Function to return the number of days // in a month int numberOfDays( int monthNumber, int year)
{ // January
if (monthNumber == 0)
return (31);
// February
if (monthNumber == 1) {
// If the year is leap then Feb
// 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 for Iterate through months
// j for Iterate through 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));
// 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 Code int main()
{ int year = 2016;
// Function Call
printCalendar(year);
return 0;
} |
Output
... 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)
Auxiliary Space: O(1), As constant extra space is used.