#include <iostream>
#include <iomanip>
#include <ctime>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
std::vector<int> getdataday( int month ) {
std::vector<int> vec;
switch(month)
{
case 1:
break;
case 2:
vec.push_back(11);
vec.push_back(15);
vec.push_back(17);
break;
default:
break;
}
return vec;
}
std::string getdatamonth( int day, int month, int year ) {
std::string str = "";
switch(month)
{
case 1:
str += "";
break;
case 2:
str += "11 родилась Инна Фролова " + std::to_string(year - 1970) + " лет назад";
if (day == 11) str += "!!!";
str += "\n";
str += "15 родилась Тамара Артюшкина " + std::to_string(year - 1952) + " лет назад";
if (day == 15) str += "!!!";
str += "\n";
str += "17 родился Сергей Солодовников " + std::to_string(year - 1998) + " лет назад";
if (day == 17) str += "!!!";
str += "\n";
break;
default:
str += "";
break;
}
return str;
}
int main() {
setlocale(LC_ALL, "Russian");
/*
std::string line;
std::ifstream in("data.txt"); // окрываем файл для чтения
if (in.is_open())
{
while (std::getline(in, line))
{
std::cout << line << std::endl;
}
}
in.close(); // закрываем файл
*/
const int MAXLEN = 80;
char s[MAXLEN];
time_t tm = time(0);
strftime(s, MAXLEN, "%m", localtime(&tm));
int month = atoi( s );
strftime(s, MAXLEN, "%d", localtime(&tm));
int day = atoi( s );
strftime(s, MAXLEN, "%Y", localtime(&tm));
int year = atoi( s );
cout << " —------------------------------" << endl;
cout << " Календарь - " << year << endl;
cout << " —------------------------------" << endl << endl;
string monthsList[12] = {"Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"};
int mDays [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
/*
1) Определим номер дня недели, где:
0 - Понедельник
1 - Вторник
2 - Среда
3 - Четверг
4 - Пятница
5 - Суббота
6 - Воскресенье
*/
int days;
int current;
static int t[] = {6, 2, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
int y = year%100;
current = y/12 + y%12 + y%12/4 + t[month-1] + (20-year/100);
if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month <= 2) current--;
current = current%7;
/*
2) Проверка на високосность начиная с нулевого месяца:
0 - январь
...
11 - декабрь
*/
if( month == 2 ) // 1 - это февраль месяц, так как счёт начинается с 0.
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
days = 29; // Если високосный
else
days = mDays[month - 1];
else
days = mDays[month - 1];
/*
3) Выводим сам календарь
*/
cout << endl << " —----------" << monthsList[month - 1] << "-------------" << endl;
cout << " Пн" << " Вт" << " Ср" << " Чт" << " Пт" << " Сб" << " Вс" << endl;
/*
4) Вводим доп. переменные k и j:
k - количество дней в неделе от 0 до 6 (0 - ПН; 6 - ВС)
j - количество дней в месяце (от 1 до общего в месяце)
*/
int k;
std::vector<int> vec = getdataday(month);
for (k = 0; k < current; k++) cout << " ";
for (int j = 1; j <= days; j++) {
k++;
bool flag = true;
if (j == day) {
if (j < 10) cout << " " << "{" << j << "}"; else cout << " " << "{" << j << "}";
flag = false;
}
for (int i = 0; i <= vec.size(); i++) if ((j == vec[i])&&(flag)) {
if (j < 10) cout << " " << "[" << j << "]"; else cout << " " << "[" << j << "]";
flag = false;
}
if (flag) {
if (j < 10) cout << " " << j; else cout << " " << j;
}
if (k > 6)
{
k = 0;
cout << endl;
}
if (k)
{
// cout << endl;
current = k;
}
}
cout << getdatamonth(day,month,year);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4gICAgIAojaW5jbHVkZSA8dmVjdG9yPiAgICAgCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RkOjp2ZWN0b3I8aW50PiBnZXRkYXRhZGF5KCBpbnQgbW9udGggKSB7CgoJc3RkOjp2ZWN0b3I8aW50PiB2ZWM7Cgpzd2l0Y2gobW9udGgpCiAgICB7CiAgICAgICAgY2FzZSAxOiAKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyOgoJICAgIHZlYy5wdXNoX2JhY2soMTEpOwkJCgkgICAgdmVjLnB1c2hfYmFjaygxNSk7CQkKCSAgICB2ZWMucHVzaF9iYWNrKDE3KTsJCQogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAgYnJlYWs7CiAgICB9CgoKCXJldHVybiB2ZWM7Cn0KCnN0ZDo6c3RyaW5nIGdldGRhdGFtb250aCggaW50IGRheSwgaW50IG1vbnRoLCBpbnQgeWVhciApIHsKCglzdGQ6OnN0cmluZyBzdHIgPSAiIjsKCnN3aXRjaChtb250aCkKICAgIHsKICAgICAgICBjYXNlIDE6IAogICAgICAgICAgICBzdHIgKz0gIiI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgc3RyICs9ICIxMSDRgNC+0LTQuNC70LDRgdGMINCY0L3QvdCwICAg0KTRgNC+0LvQvtCy0LAgIiAgICAgICArIHN0ZDo6dG9fc3RyaW5nKHllYXIgLSAxOTcwKSArICIg0LvQtdGCINC90LDQt9Cw0LQiOwoJICAgIGlmIChkYXkgPT0gMTEpIHN0ciArPSAiISEhIjsKCSAgICBzdHIgKz0gIlxuIjsJCQoJCQogICAgICAgICAgICBzdHIgKz0gIjE1INGA0L7QtNC40LvQsNGB0Ywg0KLQsNC80LDRgNCwINCQ0YDRgtGO0YjQutC40L3QsCAiICAgICArIHN0ZDo6dG9fc3RyaW5nKHllYXIgLSAxOTUyKSArICIg0LvQtdGCINC90LDQt9Cw0LQiOwoJICAgIGlmIChkYXkgPT0gMTUpIHN0ciArPSAiISEhIjsKCSAgICBzdHIgKz0gIlxuIjsJCQoKICAgICAgICAgICAgc3RyICs9ICIxNyDRgNC+0LTQuNC70YHRjyAg0KHQtdGA0LPQtdC5INCh0L7Qu9C+0LTQvtCy0L3QuNC60L7QsiAiICArIHN0ZDo6dG9fc3RyaW5nKHllYXIgLSAxOTk4KSArICIg0LvQtdGCINC90LDQt9Cw0LQiOwoJICAgIGlmIChkYXkgPT0gMTcpIHN0ciArPSAiISEhIjsKCSAgICBzdHIgKz0gIlxuIjsJCQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDogCiAgICAgICAgICAgIHN0ciArPSAiIjsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CgoKCXJldHVybiBzdHI7Cn0KCmludCBtYWluKCkgewoJCglzZXRsb2NhbGUoTENfQUxMLCAiUnVzc2lhbiIpOwovKgoJc3RkOjpzdHJpbmcgbGluZTsKIAogCXN0ZDo6aWZzdHJlYW0gaW4oImRhdGEudHh0Iik7IC8vINC+0LrRgNGL0LLQsNC10Lwg0YTQsNC50Lsg0LTQu9GPINGH0YLQtdC90LjRjwoJaWYgKGluLmlzX29wZW4oKSkKICAgIAl7CiAgICAgICAgCXdoaWxlIChzdGQ6OmdldGxpbmUoaW4sIGxpbmUpKQogICAgICAgIAl7CiAgICAgICAgICAgIAkJc3RkOjpjb3V0IDw8IGxpbmUgPDwgc3RkOjplbmRsOwogICAgICAgIAl9CiAgICAJfQogICAgCWluLmNsb3NlKCk7ICAgICAvLyDQt9Cw0LrRgNGL0LLQsNC10Lwg0YTQsNC50LsKKi8KCWNvbnN0IGludCBNQVhMRU4gPSA4MDsKCWNoYXIgc1tNQVhMRU5dOwoJdGltZV90IHRtID0gdGltZSgwKTsKICAgIAoJc3RyZnRpbWUocywgTUFYTEVOLCAiJW0iLCBsb2NhbHRpbWUoJnRtKSk7CglpbnQgbW9udGggPSBhdG9pKCBzICk7CgoJc3RyZnRpbWUocywgTUFYTEVOLCAiJWQiLCBsb2NhbHRpbWUoJnRtKSk7CglpbnQgZGF5ID0gYXRvaSggcyApOwoKCXN0cmZ0aW1lKHMsIE1BWExFTiwgIiVZIiwgbG9jYWx0aW1lKCZ0bSkpOwoJaW50IHllYXIgPSBhdG9pKCBzICk7CiAgICAKICAgIAljb3V0IDw8ICIg4oCULS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA8PCBlbmRsOwoJY291dCA8PCAiINCa0LDQu9C10L3QtNCw0YDRjCAtICIgPDwgeWVhciA8PCBlbmRsOwoJY291dCA8PCAiIOKAlC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPDwgZW5kbCA8PCBlbmRsOwoJCglzdHJpbmcgbW9udGhzTGlzdFsxMl0gPSB7ItCv0L3QstCw0YDRjCIsICLQpNC10LLRgNCw0LvRjCIsICLQnNCw0YDRgiIsICLQkNC/0YDQtdC70YwiLCAi0JzQsNC5IiwgItCY0Y7QvdGMIiwgItCY0Y7Qu9GMIiwgItCQ0LLQs9GD0YHRgiIsICLQodC10L3RgtGP0LHRgNGMIiwgItCe0LrRgtGP0LHRgNGMIiwgItCd0L7Rj9Cx0YDRjCIsICLQlNC10LrQsNCx0YDRjCJ9OwoJaW50IG1EYXlzIFsxMl0gPSB7MzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMX07CiAKLyoKMSkg0J7Qv9GA0LXQtNC10LvQuNC8INC90L7QvNC10YAg0LTQvdGPINC90LXQtNC10LvQuCwg0LPQtNC1OgoKMCAtINCf0L7QvdC10LTQtdC70YzQvdC40LoKMSAtINCS0YLQvtGA0L3QuNC6CjIgLSDQodGA0LXQtNCwCjMgLSDQp9C10YLQstC10YDQswo0IC0g0J/Rj9GC0L3QuNGG0LAKNSAtINCh0YPQsdCx0L7RgtCwCjYgLSDQktC+0YHQutGA0LXRgdC10L3RjNC1CgoqLwoJaW50IGRheXM7CglpbnQgY3VycmVudDsKCglzdGF0aWMgaW50IHRbXSA9IHs2LCAyLCAyLCA1LCAwLCAzLCA1LCAxLCA0LCA2LCAyLCA0fTsKCWludCB5ID0geWVhciUxMDA7CgoJY3VycmVudCA9IHkvMTIgKyB5JTEyICsgeSUxMi80ICsgdFttb250aC0xXSArICgyMC15ZWFyLzEwMCk7CglpZiAoKHllYXIgJSA0MDAgPT0gMCB8fCAoeWVhciAlIDQgPT0gMCAmJiB5ZWFyICUgMTAwICE9IDApKSAmJiBtb250aCA8PSAyKSBjdXJyZW50LS07CgljdXJyZW50ID0gY3VycmVudCU3OwovKgoyKSDQn9GA0L7QstC10YDQutCwINC90LAg0LLQuNGB0L7QutC+0YHQvdC+0YHRgtGMINC90LDRh9C40L3QsNGPINGBINC90YPQu9C10LLQvtCz0L4g0LzQtdGB0Y/RhtCwOgowIC0g0Y/QvdCy0LDRgNGMCi4uLgoxMSAtINC00LXQutCw0LHRgNGMCiovCgkKICAgIGlmKCBtb250aCA9PSAyICkgLy8gMSAtINGN0YLQviDRhNC10LLRgNCw0LvRjCDQvNC10YHRj9GGLCDRgtCw0Log0LrQsNC6INGB0YfRkdGCINC90LDRh9C40L3QsNC10YLRgdGPINGBIDAuCiAgICAgICAgaWYgKHllYXIgJSA0MDAgPT0gMCB8fCAoeWVhciAlIDQgPT0gMCAmJiB5ZWFyICUgMTAwICE9IDApKQogICAgICAgICAgICBkYXlzID0gMjk7IC8vINCV0YHQu9C4INCy0LjRgdC+0LrQvtGB0L3Ri9C5CiAgICAgICAgZWxzZQogICAgICAgICAgICBkYXlzID0gbURheXNbbW9udGggLSAxXTsKICAgIGVsc2UKICAgICAgICBkYXlzID0gbURheXNbbW9udGggLSAxXTsKCi8qCjMpINCS0YvQstC+0LTQuNC8INGB0LDQvCDQutCw0LvQtdC90LTQsNGA0YwKKi8KICAgICAgICAKCWNvdXQgPDwgZW5kbCA8PCAiIOKAlC0tLS0tLS0tLS0iIDw8IG1vbnRoc0xpc3RbbW9udGggLSAxXSA8PCAiLS0tLS0tLS0tLS0tLSIgPDwgZW5kbDsKCgljb3V0IDw8ICIgICDQn9C9IiA8PCAiICAg0JLRgiIgPDwgIiAgINCh0YAiIDw8ICIgICDQp9GCIiA8PCAgIiAgINCf0YIiIDw8ICAiICAg0KHQsSIgPDwgICIgICDQktGBIiA8PCBlbmRsOwogICAgICAgCi8qCjQpINCS0LLQvtC00LjQvCDQtNC+0L8uINC/0LXRgNC10LzQtdC90L3Ri9C1IGsg0LggajoKayAtINC60L7Qu9C40YfQtdGB0YLQstC+INC00L3QtdC5INCyINC90LXQtNC10LvQtSDQvtGCIDAg0LTQviA2ICgwIC0g0J/QnTsgNiAtINCS0KEpCmogLSDQutC+0LvQuNGH0LXRgdGC0LLQviDQtNC90LXQuSDQsiDQvNC10YHRj9GG0LUgKNC+0YIgMSDQtNC+INC+0LHRidC10LPQviDQsiDQvNC10YHRj9GG0LUpCiovICAgIAogICAgCglpbnQgazsKCXN0ZDo6dmVjdG9yPGludD4gdmVjID0gZ2V0ZGF0YWRheShtb250aCk7CgoJZm9yIChrID0gMDsgayA8IGN1cnJlbnQ7IGsrKykgY291dCA8PCAiICAgICAiOwoKCglmb3IgKGludCBqID0gMTsgaiA8PSBkYXlzOyBqKyspIHsKCQoJCWsrKzsKCQlib29sIGZsYWcgPSB0cnVlOwoJCWlmIChqID09IGRheSkgewoJCQlpZiAoaiA8IDEwKSBjb3V0IDw8ICIgICIgPDwgInsiIDw8IGogPDwgIn0iOyBlbHNlIGNvdXQgPDwgIiAiIDw8ICJ7IiA8PCBqIDw8ICJ9IjsgCgkJCWZsYWcgPSBmYWxzZTsKCQl9CgkJCgkJZm9yIChpbnQgaSA9IDA7IGkgPD0gdmVjLnNpemUoKTsgaSsrKSBpZiAoKGogPT0gdmVjW2ldKSYmKGZsYWcpKSB7CgkJCQkJCQkgICAgICAgaWYgKGogPCAxMCkgY291dCA8PCAiICAiIDw8ICJbIiA8PCBqIDw8ICJdIjsgZWxzZSBjb3V0IDw8ICIgIiA8PCAiWyIgPDwgaiA8PCAiXSI7IAoJCQkJCQkJICAgICAgIGZsYWcgPSBmYWxzZTsKCQkJCQkJCX0KCQoJCWlmIChmbGFnKSB7CgkJCWlmIChqIDwgMTApIGNvdXQgPDwgIiAgICAiIDw8IGo7IGVsc2UgY291dCA8PCAiICAgIiA8PCBqOwoJCX0gCgoJCWlmIChrID4gNikKCQl7CgkJCWsgPSAwOwoJCQljb3V0IDw8IGVuZGw7CgkJfQoJCglpZiAoaykKCXsKLy8JCWNvdXQgPDwgZW5kbDsKCQljdXJyZW50ID0gazsKCX0KCX0KCWNvdXQgPDwgZ2V0ZGF0YW1vbnRoKGRheSxtb250aCx5ZWFyKTsJICAgIAoKCXJldHVybiAwOwp9