Выяснить, предшествует ли время t времени t1 - Pascal ABC
Формулировка задачи:
Помогите с функцией past,вроде должно быть что то простое, но как только не крутил не получается
Решение задачи: «Выяснить, предшествует ли время t времени t1»
textual
Листинг программы
type date=record
dyear : integer;
dmonth :integer;
dday : integer;
end;
{процедура проверяет предшествует ли время t t1}
function past(d1,d2:date):boolean;
begin
past:=(d1.dyear<d2.dyear)or((d1.dyear=d2.dyear)and(d1.dmonth<d2.dmonth))
or((d1.dyear=d2.dyear)and(d1.dmonth=d2.dmonth)and(d1.dday<d2.dday));
end;
{процедура перевода строкового типа в тип date}
Procedure stringDate(t:string;var p:date);
var s:string;
i,k:integer;
begin
repeat
writeln ('введите дату ',t,' вида дд.мм.гггг');
readln(s);
k:=0;
if length(s)<>10 then k:=1
else
begin
for i:=1 to 10 do
if ((i in [1,2,4,5,7..10])and not (s[i] in ['0'..'9']))
or not(strtoint(copy(s,1,2))in[1..31])or not(strtoint(copy(s,4,2))in[1..12])
or ((i in [3,6])and(s[i]<>'.')) then k:=1;
end;
if k=1 then writeln('Неверно введена дата ',t);
until k=0;
p.dday:=strtoint(copy(s,1,2));
p.dmonth:=strtoint(copy(s,4,2));
p.dyear:=strtoint(copy(s,7,4));
end;
{Основная программа}
var t,t1:string;
sday1,sday2:date;
begin
stringDate('T',sday1);
stringDate('T1',sday2);
if past(sday1,sday2) then write('Предшествует')
else write('Не предшествует')
end.
Объяснение кода листинга программы
- В коде определен тип данных
date, который представляет собой запись с полямиdyear(год),dmonth(месяц) иdday(день). - Функция
pastпринимает два объекта типаdateи возвращает логическое значение true, если время t предшествует времени t1, и false в противном случае. - Процедура
stringDateпринимает строку t типаstringи переменную p типаdate. Она повторяет несколько раз запрос ввода даты, пока не будет введено корректное значение. Затем она преобразует строку в объект типаdate, устанавливая поляdday,dmonthиdyear. - Основная программа создает две переменные типа
string- t и t1, и вызывает процедуруstringDateдля обеих переменных. Затем она проверяет результат функцииpastи выводит соответствующее сообщение.