Проверьте, правильность введенной даты - 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
в зависимости от месяца.
- Если месяц - февраль, то проверяется високосный ли год, а затем устанавливается значение переменной
- Печатается сообщение о том, верна ли введенная дата.
- Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д