Программа вывода дня недели по введенной дате - 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]);
}

Объяснение кода листинга программы

  1. Подключение стандартной библиотеки ввода-вывода
  2. Объявление переменных:
    • d (день) = 29
    • m (месяц) = 2
    • year (год) = 2012
  3. Если m меньше 3, то прибавляем 12 к m и вычитаем 1 из year (переход на григорианский календарь)
  4. Вычисление значения c (век) по делению года на 100
  5. Вычисление значения y (год) по остатку от деления года на 100
  6. Вычисление значения wd (день недели) по формуле:
    • ( (m+1)26/10 + d + y + y/4 + c/4 - 2c ) % 7
  7. Вывод значения wd (день недели) с помощью функции printf и массива days (названия дней недели)
  8. В выводе используется символ перевода строки \n для перехода на новую строку

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы