Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2011, 22:28   #1
daniil123
Пользователь
 
Регистрация: 19.09.2011
Сообщений: 23
По умолчанию Даты

Входной файл содержит дату в формате dd.mm.gggg.Гарантируется, что это корректная дата.
Программа должна вывести дату следующего дня в формате dd.mm.gggg.Гарантируется, что такая дата существует.
Пример:
Вход:31.12.0001
Выход:01.01.0002
daniil123 вне форума Ответить с цитированием
Старый 14.11.2011, 22:34   #2
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

Код:
uses crt;
var s:string;
    d1,m1,g1,d2,m2,g2:integer;{переменные для двух дат}
    t,c:integer;{переменные для перевода строки в число}
    p:boolean;{високосный, не високосный}
    k:byte;{фиксатор неправильного ввода данных}
begin
clrscr;
repeat{повторять пока не будет верный ввод}
k:=0;
writeln('Введите дату в формате дд.мм.гггг');
readln(s);
val(copy(s,7,4),t,c);{год}
if (c<>0)or(t<0) then k:=1 else g1:=t;
if ((g1 mod 100<>0)and(g1 mod 4=0))or(g1 mod 400=0) then p:=true{високосный}
else p:=false;{нет}
 
val(copy(s,4,2),t,c);{месяц}
if (c<>0)or not(t in [1..12]) then k:=1 else m1:=t;
 
val(copy(s,1,2),t,c);{день}
if (c<>0)or((m1 in [1,3,5,7,8,10,12])and not(t in [1..31])){длинный месяц}
         or((m1 in [4,6,9,11])and not(t in [1..30])){короткий месяц}
         or(p and(m1=2)and not(t in [1..29])){февраль високосный}
         or(not p and(m1=2)and not(t in [1..28]))then k:=1 else d1:=t;{февраль невисокосный}
if k=1 then writeln('Дата введена неверно!');
until k=0;
if(m1=12)and(d1=31)then{31 декабря}
 begin
  d2:=1;
  m2:=1;
  g2:=g1+1;
 end
else if ((m1 in [1,3,5,7,8,10]) and(d1=31)){последний день длинного м-ца}
      or((m1 in [4,6,9,11]) and(d1=30)){тоже короткого}
      or((m1=2) and p and (d1=29)){тоже февр. висок.}
      or((m1=2) and not p and(d1=28)){февр. невисок.}
then
 begin
  d2:=1;
  m2:=m1+1;
  g2:=g1;
 end
else{все остальные}
 begin
  d2:=d1+1;
  m2:=m1;
  g2:=g1;
 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.
(с) Puporev
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»
IT-man вне форума Ответить с цитированием
Старый 15.11.2011, 00:52   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну и буквально день назад была такая тема:
Вывести следующий день, по введенной дате (pascal)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать так чтобы не отображались даты Даты вместо Цифр в ЕКСЕЛЬ? d88n Помощь студентам 1 17.06.2011 05:16
Определить среднее значение продаж от даты до даты СтепКо Microsoft Office Excel 1 26.02.2011 20:08
даты в си Александе еть я Помощь студентам 0 06.05.2010 22:13
Автоматизация заполнения даты и зависимость ячейки времени к ячейке даты. Каравай Microsoft Office Excel 14 11.03.2010 18:11
Даты Sparky БД в Delphi 6 02.10.2009 09:48