Вычислить день недели по дате - Free Pascal

Узнай цену своей работы

Формулировка задачи:

написать прогу на тему вычисления дня недели по дате. я чет написал (пенками и по книге) и не могу исправить один косяк... она у меня работает только с 1000 года. а в условии у меня начало отсчета 1,1,1г.

Решение задачи: «Вычислить день недели по дате»

textual
Листинг программы
Var DAYS : array[1..12] of integer;
    DAYOFWEEK : array[0..6] of string;
    cd , cm , cy , cdof , d , m , y : integer;
 
Function isLeap(y : integer) :boolean;
Begin
    isLeap := (y mod 400 = 0) or ((y mod 100 <> 0) and (y mod 4 = 0));
End;
 
Begin                
    DAYS[1] := 31; DAYS[2] := 28; DAYS[3] := 31; DAYS[4] := 30; DAYS[5] := 31; DAYS[6] := 30;
    DAYS[7] := 31; DAYS[8] := 31; DAYS[9] := 30; DAYS[10] := 31; DAYS[11] := 30; DAYS[12] := 31;
    Write('День: '); read(d);   
    Write('Месяц: '); read(m);
    Write('Год: '); read(y);
    cd := 1; cm := 1; cy := 1; cdof := 0;
    while true do begin
        if (cd = d) and (cm = m) and (cy = y) then break;
        cd := cd + 1;
        cdof := (cdof + 1) mod 7;
        if cd > DAYS[cm] then begin
            cd := 1;
            cm := cm + 1;
            if cm > 12 then begin
                cm := 1;
                cy := cy + 1;
                if isLeap(cy) then
                    DAYS[2] := 29
                else
                    DAYS[2] := 28;  
            end;
        end;
    end;
    DAYOFWEEK[0] := 'Понедельник'; DAYOFWEEK[1] := 'Вторник'; DAYOFWEEK[2] := 'Среда';
    DAYOFWEEK[3] := 'Четверг'; DAYOFWEEK[4] := 'Пятница'; DAYOFWEEK[5] := 'Суббота'; DAYOFWEEK[6] := 'Воскресение';
    WriteLn(DAYOFWEEK[cdof]);
    ReadLn;
    ReadLn;
End.

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

  1. В коде используется два массива: DAYS и DAYOFWEEK.
  2. Массив DAYS содержит количество дней в каждом месяце.
  3. Массив DAYOFWEEK содержит названия дней недели.
  4. В функции isLeap проверяется является ли год високосным.
  5. В основном цикле программы происходит проверка введенных пользователем даты.
  6. Если введенные числа совпадают с текущими числами, то цикл прерывается.
  7. Если текущий месяц больше 12, то происходит смена месяца и года.
  8. Если год високосный, то количество дней во втором месяце увеличивается на один.
  9. По завершению цикла, выводится название дня недели.
  10. Программа ожидает ввода пользователя для продолжения.

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


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

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

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