Программа вывода дня недели по введенной дате - C (СИ)
Формулировка задачи:
Написал программу в которой вводишь дату а она выводит день недели прописью. Но она корректно выводит только с 1900 года. Как переделать так чтобы выводила правильный день недели раньше 1900 года?
#include <stdio.h> #include <conio.h> #include <stdlib.h> int main() { int month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; char* day[] = {"Sanday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; int d, m, y, i, f; do{ printf("\n\nEnter date to 01-01-3000 of the form dd-mm-yyyy: "); scanf("%d-%d-%d", &d, &m, &y); fflush(stdin); if (y < 1900 || y>3000 || m < 1 || m > 12 || d < 1 || d > month[m - 1]) { printf("\nYou have entered an incorrect date!\nPlease rewrite date!\n\n"); } else{ if (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) month[1] = 29; for (i = 1; i < y; i++) if (i % 4 == 0 && (i % 100 != 0 || i % 400 == 0)){ d += 366; }else{ d += 365; } for (i = 0; i < m - 1; i++) d += month[i]; printf("\nThis day of the week is %s.\n", day[d % 7]); printf("\nYou want to continue? If Yes, press any key, ESC - for exit"); if(getch()==27)break; } }while(f!=1); return 0; }
Решение задачи: «Программа вывода дня недели по введенной дате»
textual
Листинг программы
#include <stdio.h> void main () { int d=29,m=2,year=2012; if (m<3) { m+=12; year--; } int c=year/100,y=year%100,wd; wd=( (m+1)*26/10+d+y+y/4+c/4-2*c ) % 7; char *days[]={"Sat","Sun","Mon","Tue","Wed","Thu","Fri"}; printf ("\n%s",days[wd]); }
Объяснение кода листинга программы
- Подключение стандартной библиотеки ввода-вывода
- Объявление переменных:
- d (день) = 29
- m (месяц) = 2
- year (год) = 2012
- Если m меньше 3, то прибавляем 12 к m и вычитаем 1 из year (переход на григорианский календарь)
- Вычисление значения c (век) по делению года на 100
- Вычисление значения y (год) по остатку от деления года на 100
- Вычисление значения wd (день недели) по формуле:
- ( (m+1)26/10 + d + y + y/4 + c/4 - 2c ) % 7
- Вывод значения wd (день недели) с помощью функции printf и массива days (названия дней недели)
- В выводе используется символ перевода строки
\n
для перехода на новую строку
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д