Даны три числа: день, месяц, год. Вывести дату предыдущего дня, учитывая особенности високосного года - 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.

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

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