Даны три числа: день, месяц, год. Вывести дату предыдущего дня, учитывая особенности високосного года - Pascal ABC
Формулировка задачи:
Даны три числа: D(день),M(число),V(год).Вывести дату предыдущего дня учитывая особенности високосного года.
Решение задачи: «Даны три числа: день, месяц, год. Вывести дату предыдущего дня, учитывая особенности високосного года»
textual
Листинг программы
uses crt; var d,m,v,dp,mp,vp:integer; p:boolean; s:string; begin repeat write('Введите год, больше 1 v='); readln(v); until v>1; {определим високосный год или нет} p:=((v mod 100<>0)and(v mod 4=0))or(v mod 400=0); repeat write('Введите месяц от 1 до 12 m='); readln(m); until m in [1..12]; repeat write('Введите день в зависимости от месяца и года d='); readln(d); until((m in [1,3,5,7,8,10,12])and(d in [1..31])) or((m in [4,6,9,11])and(d in [1..30])) or((m=2)and p and(d in [1..29])) or((m=2)and not p and(d in [1..28])); {год} if(m=1)and(d=1)then vp:=v-1 else vp:=v; {месяц} if d=1 then begin if m=1 then mp:=12 else mp:=m-1 end else mp:=m; {день} if d=1 then begin if m in [1,2,4,6,8,9,11] then dp:=31 else if m in [5,7,10,12] then dp:=30 else if m=3 then if p then dp:=29 else dp:=28 else dp:=d-1; end; writeln('Предыдующая дата:'); s:=inttostr(v); while length(s)<4 do s:='0'+s; if dp<10 then write('0',d,'.')else write(dp,'.'); if mp<10 then write('0',mp,'.')else write(mp,'.'); write(s); end.