C Program to Print Calendar Using Recursion (With Leap Year Logic & Source Code)

#include <stdio.h>

/* Function to print calendar */
void calendar(int ar[7][7], int i, int j, int month,
              int count, int yearCounter, int year)
{
    /* Month Names */
    char *months[] = {
        "JANUARY","FEBRUARY","MARCH","APRIL",
        "MAY","JUNE","JULY","AUGUST",
        "SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"
    };

    /* Print heading only for required year */
    if (yearCounter == year) {
        printf("\n____________________________\n");
        printf("* %s - %d *\n", months[month-1], year);
        printf("Su   Mo   Tu   We   Th   Fr   Sa\n");
        printf("____________________________________\n");
    }

    j = j % 7;

    /* Days in month */
    int days = 31;

    /* Leap year condition */
    if ((yearCounter % 400 == 0) ||
        (yearCounter % 4 == 0 && yearCounter % 100 != 0))
    {
        if (month == 2)
            days = 29;
    }
    else if (month == 2)
        days = 28;

    if (month == 4 || month == 6 ||
        month == 9 || month == 11)
        days = 30;

    int n = 1;

    /* Fill calendar matrix */
    for (i = 0; i < 7; i++) {
        while (n <= days) {
            if (j == 7) {
                j = 0;
                break;
            }
            ar[i][j] = n;
            n++;
            j++;
        }
    }

    int k = j % 7;

    /* Print calendar */
    if (yearCounter == year) {
        printf("\n");
        for (i = 0; i < 7; i++) {
            for (j = 0; j < 7; j++) {

                if (ar[i][j] == 0)
                    printf("     ");
                else
                    printf("%-5d", ar[i][j]);
            }
            printf("\n");
        }
    }

    /* Reset array */
    for (i = 0; i < 7; i++)
        for (j = 0; j < 7; j++)
            ar[i][j] = 0;

    j = k;
    month++;

    if (month > 12) {
        month = 1;
        yearCounter++;
    }

    /* Stop condition */
    if (count == 500)
        return;

    /* Recursive call */
    calendar(ar, i, j, month, count + 1, yearCounter, year);
}

/* Global calendar array */
int mo[7][7];
int year;

int main()
{
    printf("PLANNER CALENDAR\n\n");
    printf("Enter Year in range [1994,2025]: ");
    scanf("%d", &year);

    calendar(mo, 0, 6, 1, 1, 1994, year);

    return 0;
}

Post a Comment

0 Comments