Номер дня с начала года | Язык Паскаль

Номер дня с начала года

Заданы три числа, которые обозначают число, месяц, год. Найти порядковый номер даты, начиная отсчет с начала года.

Описание переменных:

Алгоритм решения задачи:

  1. Находим суммарное количество дней за месяцы, предшествующие указанному. Так, если месяц равен 3-м, то надо сложить количество дней за первый и второй месяц.
  2. Добавляем к найденной сумме количество дней в указанном месяце. Так, если было указан 10-й день 3-го месяца, то надо к сумме дней первых двух месяцев прибавить 10.
  3. Если год високосный, то надо добавить один день, если месяц больше 2-го. Високосный год - это год, который делится на 4, но если он делится на 100, то должен делиться и на 400. Например, 1900 год - невисокосный, а 2000 - високосный, все года между ними, делящиеся на 4, - високосные.

Программа на языке Паскаль:

const M: array[1..12] of byte = (31,28,31,30,31,30,31,31,30,31,30,31);
var
    day,month: byte;
    year, qty: word;
    i: byte;
begin
    write('День:  '); readln(day);
    write('Месяц: '); readln(month);
    write('Год:   '); readln(year);
 
    qty := 0;
    for i:=1 to month-1 do
        qty := qty + M[i];
 
    qty := qty + day;
 
    if month > 2 then
        if year mod 4 = 0 then
            if (year mod 100 = 0) and (year mod 400 <> 0) then
                qty := qty
            else
                qty := qty + 1;
 
    writeln('Номер дня с начала года: ', qty);        
end.

Примеры выполнения программы:

День:  10
Месяц: 3
Год:   2007
Номер дня с начала года: 69
День:  10
Месяц: 3
Год:   2012
Номер дня с начала года: 70