Определить даты предыдущего и следующего дней. - 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.
Объяснение кода листинга программы
- В начале кода используются стандартные процедуры и константы из модуля CRT (C Run-Time), который предоставляет функции для работы с консолью, вводом/выводом данных и обработки ошибок.
- Переменная
s
используется для хранения введенной пользователем строки с датой. - Переменные
d1
,m1
,g1
используются для хранения дня, месяца и года соответственно. - Переменная
d2
используется для хранения предыдущего дня. - Переменная
m2
используется для хранения предыдущего месяца. - Переменная
g2
используется для хранения предыдущего года. - Переменная
t
используется для хранения числа, полученного из ввода пользователя. - Переменная
c
используется для проверки корректности ввода числа. - Переменная
p
используется для определения, является ли год високосным. - Переменная
k
используется для контроля корректности введенной даты. - В первой части условного оператора проверяется, является ли введенный день 1 января.
- Во второй части условного оператора проверяется, является ли введенный день 1 числом месяца, следующего за длинным месяцем.
- В третьей части условного оператора проверяется, является ли введенный день 1 числом месяца, следующего за коротким месяцем.
- В четвертой части условного оператора проверяется, является ли введенный день 1 марта.
- В пятой части условного оператора обрабатывается случай, когда введенный день меньше 10.
- В шестой части условного оператора обрабатывается случай, когда введенный месяц меньше 10.
- В седьмой части условного оператора выводится предыдущая дата в формате ДД.ММ.ГГГГ.
- После этого программа ожидает ввода пользователя, чтобы он мог продолжить или прервать выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д