Даны два целых числа: D (день) и M (месяц), определяющие правильную дату невисокосного года. Вывести значения D и M для даты, предшествующей указанной — Pascal(Паскаль)

uses crt;
var d1,m1,d2,m2,k:byte;
begin
clrscr;
repeat
k:=0;
writeln('Введите номер дня и месяца:');
readln(d1,m1);
if not(m1 in [1..12]) then k:=1;
if not(d1 in [1..31]) then k:=1;
if(m1 in [4,6,9,11])and(d1>30) then k:=1;
if(m1=2)and(d1>28)then k:=1;
if k=1 then writeln('Дата введена неверно, повторите ввод!');
until k=0;
{1 января}
if(m1=1)and(d1=1)then
 begin
  d2:=31;
  m2:=12;
 end
{1 число месяца после длинного месяца}
else if ((m1 in [5,7,10,12]) and(d1=1))then
 begin
  d2:=30;
  m2:=m1-1;
 end
{1 число месяца после короткого месяца}
else if ((m1 in [2,4,6,8,9,11]) and(d1=1))then
 begin
  d2:=31;
  m2:=m1-1;
 end
{1 марта}
else if(m1=3)and (d1=1) then
 begin
  d2:=28;
  m2:=m1-1;
 end
{все остальные дни}
else
 begin
  d2:=d1-1;
  m2:=m1;
 end;
writeln('Предыдущая дата:');
if d2<10 then write('0',d2,'.')else write(d2,'.');
if m2<10 then write('0',m2)else write(m2);
readln
end.

Следующий вариант

var d,m:integer;
begin
writeln('Den: ');
read(d);
writeln('Mesac: ');
read(m);
begin
if (d=1) and (m=2)or(d=1) and (m=4)or(d=1) and (m=6) or(d=1)or(d=1) and (m=7) and (m=9) or(d=1) and (m=11)
then Write(31,' ',m-1)else
if (d=1) and (m=3)
then Write(28,' ',m-1)else
if (d=1) and (m=1)
then Write(31,' ',12)else
if (d=1) and (m=3)or(d=1) and (m=5) or(d=1) and (m=8) or(d=1) and (m=10)or(d=1)and (m=12)
then Write(30,' ',m-1)else
case m of
1:Write(d-1,' ',1);
2:Write(d-1,' ',2);
3:Write(d-1,' ',3);
4:Write(d-1,' ',4);
5:Write(d-1,' ',5);
6:Write(d-1,' ',6);
7:Write(d-1,' ',7);
8:Write(d-1,' ',8);
9:Write(d-1,' ',9);
10:Write(d-1,' ',10);
11:Write(d-1,' ',11);
12:Write(d-1, ' ',12);
end;
end;
readln;
readln
end.

Leave a Comment

12 − = 4