Написать программу увеличения на один день — Pascal(Паскаль)

Вводим 09.09.2009, показывает 10.09.2009, если конец месяца 31.08.2009 должно быть 01.09.2009, если 30.09.2009, получается 01.10.2009, конец года, 31.12.2009, 01.01.2010 и с високосными год, когда то 28 дней, когда то 29

uses crt;
var s:string;
    d1,m1,g1,d2,m2,g2,t,c:integer;
    p:boolean;
    k:byte;
begin
clrscr;
repeat{в цикле проверяем правильность ввода}
k:=0;
writeln('Введите день, месяц, год(1901-2099)');
{ограничил, чтоб не проверять 1900 и 2100 годы, они не високосные, не знаю как вывернутся с case}
readln(d1,m1,g1);
case g1 of
1901..2099:k:=k
else k:=k+1;
end;
case m1 of
1,3,5,7,8,10,12:case d1 of
                1..31:k:=k
                else k:=k+1
                end;
4,6,9,11:case d1 of
         1..30:k:=k
         else k:=k+1
         end;
2:case g1 mod 4 of
  1..3:case d1 of
       1..28:k:=k
       else k:=k+1
       end;
     0:case d1 of
       1..29:k:=k
       else k:=k+1
       end;
  end;
else k:=k+1;
end;
if k>0 then writeln('Дата введена неверно!');
until k=0;
clrscr;
writeln('Заданное время:');{выводим первое время}
if d1<10 then write('0',d1,'.')else write(d1,'.');
if m1<10 then write('0',m1,'.')else write(m1,'.');
write(g1);
writeln;
case m1 of {долго и нудно прибавляем}
12:case d1 of
   31:begin
      d2:=1;
      m2:=1;
      g2:=g1+1;
      end
   else
      begin
       d2:=d1+1;
       m2:=m1;
       g2:=g1;
      end;
   end ;
1,3,5,7,8,10:case d1 of
             31:begin
                 d2:=1;
                 m2:=m1+1;
                 g2:=g1;
                end
             else
                begin
                 d2:=d1+1;
                 m2:=m1;
                 g2:=g1;
                end
             end;
4,6,9,11:case d1 of
         30:begin
             d2:=1;
             m2:=m1+1;
             g2:=g1;
            end
          else
            begin
             d2:=d1+1;
             m2:=m1;
             g2:=g1;
            end;
         end;
2:case g1 mod 4 of
  1..3:case d1 of
       28:begin
           d2:=1;
           m2:=m1+1;
           g2:=g1;
            end
       else
          begin
           d2:=d1+1;
           m2:=m1;
           g2:=g1;
          end;
       end;
     0:case d1 of
       29:begin
           d2:=1;
           m2:=m1+1;
           g2:=g1;
          end
       else
          begin
           d2:=d1+1;
           m2:=m1;
           g2:=g1;
          end;
       end;
   end;
end;
writeln('Следующая дата:');{выводим второе время}
if d2<10 then write('0',d2,'.')else write(d2,'.');
if m2<10 then write('0',m2,'.')else write(m2,'.');
write(g2);
readln
end.

Leave a Comment

6 + 2 =