Проверьте, правильность введенной даты - Pascal
Формулировка задачи:
Дана дата в формате «дд.мм.гггг» (где «дд» – число, «мм» – номер месяца, «гггг» – год), описанная в виде записи. Проверьте, правильность введенной даты.
Решение задачи: «Проверьте, правильность введенной даты»
textual
Листинг программы
- var date: record day, month, year: integer end; //представление даты в виде записи
- s: string; //строковое представление даты
- max_day, err_day, err_month, err_year: integer;
- //макс. кол-во дней, номера неверных символов при преобразовании в число
- //дня, месяца и года соответственно
- valid: boolean; //флаг верной даты
- begin
- write('Enter date (dd.mm.yyyy): '); //вводим дату в виде строки
- readln(s);
- with date do //чтобы писать имена полей записи без указания имени записи, например, day вместо date.day
- begin
- val(copy(s, 1, 2), day, err_day); //преобразуем день в число
- val(copy(s, 4, 2), month, err_month); //преобразуем месяц в число
- val(copy(s, 7, 4), year, err_year); //преобразуем год в число
- valid := (length(s) = 10) and //будем пока считать дату верной, если длина строки даты 10 символов, и
- (s[3] = '.') and (s[6] = '.') and //3 и 6 символы - точки, и
- (err_day + err_month + err_year = 0) and //нет ошибок при преобразовании в числа, и
- (month >= 1) and (month <= 12) and //допустимый номер месяца, и
- (year >= 1000) and (year <= 9999); //допустимый год
- if valid //если пока дата верна,
- then begin //то делаем проверку на количество дней в месяце
- case month of
- 2: if (year mod 400 = 0) or ((year mod 4 = 0) and (year mod 100 <> 0)) //если месяц февраль и год високосный,
- then max_day := 29 //то 29
- else max_day := 28; //иначе 28
- 4, 6, 9, 11: max_day := 30 //если апрель, июнь, сентябрь или ноябрь, то 30
- else max_day := 31 //в других случаях 31
- end;
- valid := (day >= 1) and (day <= max_day) //дата верна, если номер дня верный
- end
- end;
- write('Date is valid: ', valid); //печатаем факт верности введённой даты
- readln
- end.
Объяснение кода листинга программы
- Объявляется переменная
date
типаrecord
содержащая поляday
,month
иyear
типа integer для представления даты в виде записи. - Объявляется переменная
s
типа string для хранения введенной даты в виде строки. - Объявляются переменные
max_day
,err_day
,err_month
,err_year
типа integer для хранения максимального количества дней в месяце, номеров неверных символов при преобразовании в число дня, месяца и года соответственно. - Объявляется переменная
valid
типа boolean для флага верности введенной даты. - Пользователю предлагается ввести дату в формате
dd.mm.yyyy
. - Считывается введенная строка в переменную
s
. - Выполняется проверка введенной даты: извлекаются день, месяц и год из строки, преобразуются в числа, проверяются на соответствие ожидаемому формату и допустимые значения, и результат записывается в переменную
valid
. - Если введенная дата верна, то осуществляется проверка количества дней в месяце.
- Если месяц - февраль, то проверяется високосный ли год, а затем устанавливается значение переменной
max_day
соответственно. - В остальных месяцах устанавливается значение
max_day
в зависимости от месяца.
- Если месяц - февраль, то проверяется високосный ли год, а затем устанавливается значение переменной
- Печатается сообщение о том, верна ли введенная дата.
- Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д