I tried to explain the principle of this code in simple words, here:
#include <iostream> #include <string> using namespace std; // Создает структуру "Date" с внутренними переменными (день, месяц, год). struct Date{ int day; int month; int year; }; int date(Date z){ // Создает переменные. int a; int y; int m; int R; // Вычисляет непонятный для меня номер (от 14 отнимает месяц и разделяет на 12). a = (14 - z.month) / 12; // От года отнимает номер. y = z.year - a; // Вычисляет код года (к месяцу прибовляется (12 умноженное на номер), и отминусовуется 2). m = z.month + 12 * a - 2; // Вычисляет число (к 7000 прибавляется (математическое уравнение вычисления дня недели)). R = 7000 + (z.day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12); // Возвращает номер дня недели (седьмой процент числа). return R % 7; } int main(){ // Устанавливает язык локализации "Русский". setlocale(LC_ALL, "Russian"); // Создает переменную даты (используя структуру "Date"). Date z; // Создает список дней недели. string S[7] = { "Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота" }; // Принимает (день, месяц, год). cin >> z.day >> z.month >> z.year; // Отсылает в функцию "date" внесенную дату, и принимая номер дня ворачивает название. cout << S[date(z)] << endl; return 0; }
I have _getch();
the function does not work, and I still do not understand why it is, so I removed it.
I here offer a more optimized version for the computer: add the library library #include <ctime>
:
#include <iostream> #include <string> #include <ctime> using namespace std; // Создает структуру "date" с внутренними переменными (день, месяц, год). struct date{ int day, month, year; }; int get_weekday(date i){ // Заносит дату в переменную. std::tm time_in = { 0, 0, 0, i.day+1, i.month+1, i.year }; // Конвертирует дату в time_t. std::time_t time_temp = std::mktime(&time_in); // Вносит time_t дату в переменную time_out. const std::tm * time_out = std::localtime(&time_temp); // Возрващаем из time_out день недели. return (int)time_out->tm_wday; } int main(){ // Устанавливает язык локализации "Русский". setlocale(LC_ALL, "Russian"); // Создает переменную даты (используя структуру "date"). date z; // Создает список дней недели. string S[7] = { "Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота" }; // Принимает (день, месяц, год). cin >> z.day >> z.month >> z.year; // Отсылает в функцию "get_weekday" внесенную дату, и принимая номер дня ворачивает название. cout << S[get_weekday(z)] << endl; return 0; }