fork download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <ctime>
  4. #include <fstream>
  5. #include <string>
  6. #include <vector>
  7.  
  8. using namespace std;
  9.  
  10. std::vector<int> getdataday( int month ) {
  11.  
  12. std::vector<int> vec;
  13.  
  14. switch(month)
  15. {
  16. case 1:
  17. vec.push_back(14);
  18. vec.push_back(17);
  19. vec.push_back(18);
  20. vec.push_back(20);
  21. break;
  22. case 2:
  23. vec.push_back(11);
  24. vec.push_back(15);
  25. vec.push_back(17);
  26. break;
  27. case 3:
  28. vec.push_back(30);
  29. break;
  30. case 4:
  31. vec.push_back(17);
  32. vec.push_back(19);
  33. vec.push_back(25);
  34. break;
  35. case 5:
  36. vec.push_back(4);
  37. vec.push_back(7);
  38. vec.push_back(9);
  39. vec.push_back(18);
  40. break;
  41. case 6:
  42. vec.push_back(2);
  43. vec.push_back(9);
  44. vec.push_back(23);
  45. vec.push_back(24);
  46. vec.push_back(25);
  47. break;
  48. case 7:
  49. vec.push_back(21);
  50. break;
  51. case 8:
  52. vec.push_back(28);
  53. vec.push_back(29);
  54. vec.push_back(31);
  55. break;
  56. case 9:
  57. vec.push_back(3);
  58. vec.push_back(13);
  59. vec.push_back(20);
  60. break;
  61. case 10:
  62. vec.push_back(1);
  63. vec.push_back(3);
  64. break;
  65. case 11:
  66. vec.push_back(1);
  67. vec.push_back(14);
  68. vec.push_back(20);
  69. vec.push_back(23);
  70. break;
  71. case 12:
  72. vec.push_back(13);
  73. vec.push_back(15);
  74. break;
  75. default:
  76. break;
  77. }
  78.  
  79.  
  80. return vec;
  81. }
  82.  
  83. std::string getdatamonth( int day, int month, int year ) {
  84.  
  85. std::string str = "";
  86.  
  87. switch(month)
  88. {
  89. case 1:
  90. str += "14 родился Семен Фролов " + std::to_string(year - 1998) + " лет назад";
  91. if (day == 14) str += "!!!";
  92. str += "\n";
  93.  
  94. str += "14 родилась Любовь Клюшникова " + std::to_string(year - 1947) + " лет назад";
  95. if (day == 14) str += "!!!";
  96. str += "\n";
  97.  
  98. str += "17 родилась Виктория Шефер " + std::to_string(year - 1976) + " лет назад";
  99. if (day == 17) str += "!!!";
  100. str += "\n";
  101.  
  102. str += "18 родилась Елена Солодовникова " + std::to_string(year - 1970) + " лет назад";
  103. if (day == 18) str += "!!!";
  104. str += "\n";
  105.  
  106. str += "20 родилась Татьяна Каверина " + std::to_string(year - 1976) + " лет назад";
  107. if (day == 20) str += "!!!";
  108. str += "\n";
  109.  
  110. break;
  111. case 2:
  112. str += "11 родилась Инна Фролова " + std::to_string(year - 1970) + " лет назад";
  113. if (day == 11) str += "!!!";
  114. str += "\n";
  115.  
  116. str += "15 родилась Тамара Артюшкина " + std::to_string(year - 1952) + " лет назад";
  117. if (day == 15) str += "!!!";
  118. str += "\n";
  119.  
  120. str += "17 родился Сергей Солодовников " + std::to_string(year - 1998) + " лет назад";
  121. if (day == 17) str += "!!!";
  122. str += "\n";
  123.  
  124. break;
  125. case 3:
  126. str += "30 родился Евгений Солодовников " + std::to_string(year - 1973) + " лет назад";
  127. if (day == 30) str += "!!!";
  128. str += "\n";
  129.  
  130. break;
  131. case 4:
  132. str += "17 родился Сергей Солодовников " + std::to_string(year - 1969) + " лет назад";
  133. if (day == 17) str += "!!!";
  134. str += "\n";
  135.  
  136. str += "19 родилась Лидия Фролова " + std::to_string(year - 1946) + " лет назад";
  137. if (day == 19) str += "!!!";
  138. str += "\n";
  139.  
  140. str += "25 родился Иван Фролов " + std::to_string(year - 2001) + " лет назад";
  141. if (day == 25) str += "!!!";
  142. str += "\n";
  143.  
  144. break;
  145. case 5:
  146. str += "4 родилась Надежда Солодовникова " + std::to_string(year - 1976) + " лет назад";
  147. if (day == 4) str += "!!!";
  148. str += "\n";
  149.  
  150. str += "7 родился Сергей Напреев " + std::to_string(year - 1972) + " лет назад";
  151. if (day == 7) str += "!!!";
  152. str += "\n";
  153.  
  154. str += "9 родилась Александра Каверина " + std::to_string(year - 2003) + " лет назад";
  155. if (day == 9) str += "!!!";
  156. str += "\n";
  157.  
  158. str += "18 родился Антон Фролов " + std::to_string(year - 2009) + " лет назад";
  159. if (day == 18) str += "!!!";
  160. str += "\n";
  161.  
  162. break;
  163. case 6:
  164. str += "2 родилась Ольга Неустроева " + std::to_string(year - 1987) + " лет назад";
  165. if (day == 2) str += "!!!";
  166. str += "\n";
  167.  
  168. str += "9 родилась Елена Сахоненко " + std::to_string(year - 1968) + " лет назад";
  169. if (day == 9) str += "!!!";
  170. str += "\n";
  171.  
  172. str += "23 родился Андрей Фролов " + std::to_string(year - 1969) + " лет назад";
  173. if (day == 23) str += "!!!";
  174. str += "\n";
  175.  
  176. str += "24 родилась Юлия Лиханова " + std::to_string(year - 1980) + " лет назад";
  177. if (day == 24) str += "!!!";
  178. str += "\n";
  179.  
  180. str += "25 родилась Татьяна Карасева " + std::to_string(year - 1973) + " лет назад";
  181. if (day == 25) str += "!!!";
  182. str += "\n";
  183.  
  184. break;
  185. case 7:
  186. str += "21 родился Юрий Королев " + std::to_string(year - 1973) + " лет назад";
  187. if (day == 21) str += "!!!";
  188. str += "\n";
  189.  
  190. break;
  191. case 8:
  192. str += "28 родилась Валентина Рогозина " + std::to_string(year - 1969) + " лет назад";
  193. if (day == 28) str += "!!!";
  194. str += "\n";
  195.  
  196. str += "29 родился Александр Клюшников " + std::to_string(year - 1949) + " лет назад";
  197. if (day == 29) str += "!!!";
  198. str += "\n";
  199.  
  200. str += "31 родилась Марина Фролова " + std::to_string(year - 1968) + " лет назад";
  201. if (day == 31) str += "!!!";
  202. str += "\n";
  203.  
  204. break;
  205. case 9:
  206. str += "3 родился Александр Фролов " + std::to_string(year - 1971) + " лет назад";
  207. if (day == 3) str += "!!!";
  208. str += "\n";
  209.  
  210. str += "13 родилась Светлана Неустроева " + std::to_string(year - 1992) + " лет назад";
  211. if (day == 13) str += "!!!";
  212. str += "\n";
  213.  
  214. str += "20 родился Александр Рагозин " + std::to_string(year - 1992) + " лет назад";
  215. if (day == 20) str += "!!!";
  216. str += "\n";
  217.  
  218. break;
  219. case 10:
  220. str += "1 родилась Елена Сабанина " + std::to_string(year - 1973) + " лет назад";
  221. if (day == 1) str += "!!!";
  222. str += "\n";
  223.  
  224. str += "3 родилась Марьям Дербеденева " + std::to_string(year - 2000) + " лет назад";
  225. if (day == 3) str += "!!!";
  226. str += "\n";
  227.  
  228. break;
  229. case 11:
  230. str += "1 родилась Анастасия Солодовникова " + std::to_string(year - 1990) + " лет назад";
  231. if (day == 1) str += "!!!";
  232. str += "\n";
  233.  
  234. str += "14 родился Максим Шефер " + std::to_string(year - 2009) + " лет назад";
  235. if (day == 14) str += "!!!";
  236. str += "\n";
  237.  
  238. str += "20 родился Степан Солодовников " + std::to_string(year - 2007) + " лет назад";
  239. if (day == 20) str += "!!!";
  240. str += "\n";
  241.  
  242. str += "23 родилась София Фролова " + std::to_string(year - 1994) + " лет назад";
  243. if (day == 23) str += "!!!";
  244. str += "\n";
  245.  
  246. break;
  247. case 12:
  248. str += "13 родилась Валентина Солодовникова "+ std::to_string(year - 1943) + " лет назад";
  249. if (day == 13) str += "!!!";
  250. str += "\n";
  251.  
  252. str += "15 родился Евгений Напреев " + std::to_string(year - 2008) + " лет назад";
  253. if (day == 15) str += "!!!";
  254. str += "\n";
  255.  
  256. break;
  257. default:
  258. str += "";
  259. break;
  260. }
  261.  
  262.  
  263. return str;
  264. }
  265.  
  266. int main() {
  267.  
  268. setlocale(LC_ALL, "Russian");
  269. /*
  270. std::string line;
  271.  
  272.   std::ifstream in("data.txt"); // окрываем файл для чтения
  273. if (in.is_open())
  274.   {
  275.   while (std::getline(in, line))
  276.   {
  277.   std::cout << line << std::endl;
  278.   }
  279.   }
  280.   in.close(); // закрываем файл
  281. */
  282. const int MAXLEN = 80;
  283. char s[MAXLEN];
  284. time_t tm = time(0);
  285.  
  286. strftime(s, MAXLEN, "%m", localtime(&tm));
  287. int month = atoi( s );
  288.  
  289. strftime(s, MAXLEN, "%d", localtime(&tm));
  290. int day = atoi( s );
  291.  
  292. strftime(s, MAXLEN, "%Y", localtime(&tm));
  293. int year = atoi( s );
  294.  
  295. cout << " —------------------------------" << endl;
  296. cout << " Календарь - " << year << endl;
  297. cout << " —------------------------------" << endl << endl;
  298.  
  299. string monthsList[12] = {"Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"};
  300. int mDays [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  301.  
  302. /*
  303. 1) Определим номер дня недели, где:
  304.  
  305. 0 - Понедельник
  306. 1 - Вторник
  307. 2 - Среда
  308. 3 - Четверг
  309. 4 - Пятница
  310. 5 - Суббота
  311. 6 - Воскресенье
  312.  
  313. */
  314. int days;
  315. int current;
  316.  
  317. static int t[] = {6, 2, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
  318. int y = year%100;
  319.  
  320. current = y/12 + y%12 + y%12/4 + t[month-1] + (20-year/100);
  321. if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month <= 2) current--;
  322. current = current%7;
  323. /*
  324. 2) Проверка на високосность начиная с нулевого месяца:
  325. 0 - январь
  326. ...
  327. 11 - декабрь
  328. */
  329.  
  330. if( month == 2 ) // 1 - это февраль месяц, так как счёт начинается с 0.
  331. if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
  332. days = 29; // Если високосный
  333. else
  334. days = mDays[month - 1];
  335. else
  336. days = mDays[month - 1];
  337.  
  338. /*
  339. 3) Выводим сам календарь
  340. */
  341.  
  342. cout << endl << " —----------" << monthsList[month - 1] << "-------------" << endl;
  343.  
  344. cout << " Пн" << " Вт" << " Ср" << " Чт" << " Пт" << " Сб" << " Вс" << endl;
  345.  
  346. /*
  347. 4) Вводим доп. переменные k и j:
  348. k - количество дней в неделе от 0 до 6 (0 - ПН; 6 - ВС)
  349. j - количество дней в месяце (от 1 до общего в месяце)
  350. */
  351.  
  352. int k;
  353. std::vector<int> vec = getdataday(month);
  354.  
  355. for (k = 0; k < current; k++) cout << " ";
  356.  
  357.  
  358. for (int j = 1; j <= days; j++) {
  359.  
  360. k++;
  361. bool flag = true;
  362. if (j == day) {
  363. if (j < 10) cout << " " << "{" << j << "}"; else cout << " " << "{" << j << "}";
  364. flag = false;
  365. }
  366.  
  367. for (int i = 0; i <= vec.size(); i++) if ((j == vec[i])&&(flag)) {
  368. if (j < 10) cout << " " << "[" << j << "]"; else cout << " " << "[" << j << "]";
  369. flag = false;
  370. }
  371.  
  372. if (flag) {
  373. if (j < 10) cout << " " << j << " "; else cout << " " << j << " ";
  374. }
  375.  
  376. if (k > 6)
  377. {
  378. k = 0;
  379. cout << endl;
  380. }
  381.  
  382. if (k)
  383. {
  384. current = k;
  385. }
  386. }
  387. cout << endl;
  388. cout << getdatamonth(day,month,year);
  389.  
  390. return 0;
  391. }
Success #stdin #stdout 0.01s 5304KB
stdin
Standard input is empty
stdout
 —------------------------------
 Календарь - 2024
 —------------------------------


 —----------Апрель-------------
   Пн   Вт   Ср   Чт   Пт   Сб   Вс
   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 
17 родился Сергей Солодовников 55 лет назад
19 родилась Лидия Фролова 78 лет назад
25 родился Иван Фролов 23 лет назад