Определение принадлежности даты диапазону времени

Задача

 

Представим, что нам надо определить принадлежит ли определенная дата диапазону времени, т.е. находится ли между двумя другими датами.

Две крайние даты пусть задаются программно. А дату, требующую исследования, вводит пользователь.

 

Решение

 

Задачу можно решить как минимум двумя способами. Например, для каждой даты вычислить количество дней, прошедших с какой-нибудь начальной даты (например, нулевого года). После чего сравнить полученные значения. Если количество дней анализируемой даты будет находиться между двумя другими, то дата принадлежит диапазону.

Второй, более простой, способ это «поэлементное» сравнение дат: сначала сравниваются года, если этого недостаточно, то месяцы и, затем, дни. Ниже приводится пример реализации этого способа. Однако тут тоже могут быть варианты.

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

 

type date = record
        year:integer;
        month:1..12;
        day:1..31;
     end;
 
var d1, d2, dmy: date;
 
begin
    with d1 do begin
        year := 1990;
        month := 5;
        day := 15
    end;
    with d2 do begin
        year := 2005;
        month := 12;
        day := 25
    end;
 
    write('Год: ');
    readln(dmy.year);
    write('Месяц: ');
    readln(dmy.month);
    write('День: ');
    readln(dmy.day);
 
    if (dmy.year > d1.year) and (dmy.year < d2.year) then
        writeln('Yes');
 
    if dmy.year = d1.year then
        if dmy.month > d1.month then
            writeln('Yes')
        else
            if dmy.month = d1.month then
                if dmy.day > d1.day then
                    writeln('Yes');
 
    if dmy.year = d2.year then
        if dmy.month < d2.month then
            writeln('Yes')
        else
            if dmy.month = d2.month then
                if dmy.day < d2.day then
                    writeln('Yes');
 
readln
end.

 

Тема

Записи

Уровень

Сложные задачи

Теги

Добавить комментарий