Распечатать календарь на данный год на C ++

Опубликовано: 1 Января, 2022

Предпосылка: Найдите день недели для заданной даты

Задача: распечатать календарь любого года. Программа должна быть такой, чтобы печатать календарь любого входного года.

Реализация:

// 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 eg-
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 " , 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 ( " ------------%s------------- " ,
getMonthName (i).c_str());
// Print the columns
printf ( " Sun Mon Tue Wed Thu Fri Sat " );
// 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 ( " " );
}
}
if (k)
printf ( " " );
current = k;
}
return ;
}
// Driver Program to check above funtions
int main()
{
int year = 2016;
printCalendar(year);
return (0);
}

Выход:

 Календарь - 2016


  ------------ Январь -------------
  Вс пн вт ср чт пт сб
                             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 год

  ------------ Февраль -------------
  Вс пн вт ср чт пт сб
         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

  ------------ Март -------------
  Вс пн вт ср чт пт сб
              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

  ------------ Апрель -------------
  Вс пн вт ср чт пт сб
                             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

  ------------ Может -------------
  Вс пн вт ср чт пт сб
    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

  ------------ Июнь -------------
  Вс пн вт ср чт пт сб
                   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

  ------------ Июль -------------
  Вс пн вт ср чт пт сб
                             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 год

  ------------ Август -------------
  Вс пн вт ср чт пт сб
         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

  ------------ Сентябрь -------------
  Вс пн вт ср чт пт сб
                        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

  ------------ Октябрь -------------
  Вс пн вт ср чт пт сб
                                  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

  ------------ ноябрь -------------
  Вс пн вт ср чт пт сб
              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

  ------------ Декабрь -------------
  Вс пн вт ср чт пт сб
                        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

Сложность времени - O (1). Затраченное время не зависит от года ввода. То же самое для любого года.
Вспомогательное пространство - O (1)

Автором этой статьи является Рахит Бальвериар. Если вам нравится GeeksforGeeks и вы хотели бы внести свой вклад, вы также можете написать статью, используя deposit.geeksforgeeks.org, или отправьте ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .



C++ C