Определить даты предыдущего и следующего дней. - Pascal

Узнай цену своей работы

Формулировка задачи:

1)В небоскребе N этажей и всего один подъезд; на каждом этаже по 3 квартиры; лифт может останавливаться только на нечетных этажах. Человек садится в лифт и набирает номер нужной ему квартиры M . На какой этаж должен доставить лифт пассажира?(пассажир при необходимости может спуститься на этаж вниз) 2)Дата некоторого дня определяется тремя натуральными числами: g (год), m (порядковый номер месяца) и n (число). По заданным g, n и m определить: дату предыдущего дня; дату следующего дня.рассмотреть 2 случая, когда год является и не является високосны ps: помогите плиз, очень надо получить зачет.

Решение задачи: «Определить даты предыдущего и следующего дней.»

textual
Листинг программы
uses crt;
var s:string;
    d1,m1,g1,d2,m2,g2,t,c:integer;
    p:boolean;
    k:byte;
begin
clrscr;
repeat
k:=0;
{введем дату типа 02.02.2009}
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;
{1 января}
if(m1=1)and(d1=1)then
 begin
  d2:=31;
  m2:=12;
  g2:=g1-1;
 end
{1 число месяца после длинного месяца}
else if ((m1 in [5,7,10,12]) and(d1=1))then
 begin
  d2:=30;
  m2:=m1;
  g2:=g1;
 end
{1 число месяца после короткого месяца}
else if ((m1 in [2,4,6,8,9,11]) and(d1=1))then
 begin
  d2:=31;
  m2:=m1;
  g2:=g1;
 end
{1 марта}
else if(m1=3)and (d1=1) then
 begin
  if p then d2:=29 else d2:=28;
  m2:=m1;
  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.

Объяснение кода листинга программы

  1. В начале кода используются стандартные процедуры и константы из модуля CRT (C Run-Time), который предоставляет функции для работы с консолью, вводом/выводом данных и обработки ошибок.
  2. Переменная s используется для хранения введенной пользователем строки с датой.
  3. Переменные d1, m1, g1 используются для хранения дня, месяца и года соответственно.
  4. Переменная d2 используется для хранения предыдущего дня.
  5. Переменная m2 используется для хранения предыдущего месяца.
  6. Переменная g2 используется для хранения предыдущего года.
  7. Переменная t используется для хранения числа, полученного из ввода пользователя.
  8. Переменная c используется для проверки корректности ввода числа.
  9. Переменная p используется для определения, является ли год високосным.
  10. Переменная k используется для контроля корректности введенной даты.
  11. В первой части условного оператора проверяется, является ли введенный день 1 января.
  12. Во второй части условного оператора проверяется, является ли введенный день 1 числом месяца, следующего за длинным месяцем.
  13. В третьей части условного оператора проверяется, является ли введенный день 1 числом месяца, следующего за коротким месяцем.
  14. В четвертой части условного оператора проверяется, является ли введенный день 1 марта.
  15. В пятой части условного оператора обрабатывается случай, когда введенный день меньше 10.
  16. В шестой части условного оператора обрабатывается случай, когда введенный месяц меньше 10.
  17. В седьмой части условного оператора выводится предыдущая дата в формате ДД.ММ.ГГГГ.
  18. После этого программа ожидает ввода пользователя, чтобы он мог продолжить или прервать выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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