Проверьте, правильность введенной даты - Pascal

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

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

Дана дата в формате «дд.мм.гггг» (где «дд» – число, «мм» – номер месяца, «гггг» – год), описанная в виде записи. Проверьте, правильность введенной даты.

Решение задачи: «Проверьте, правильность введенной даты»

textual
Листинг программы
  1. var date: record day, month, year: integer end; //представление даты в виде записи
  2.     s: string; //строковое представление даты
  3.     max_day, err_day, err_month, err_year: integer;
  4.     //макс. кол-во дней, номера неверных символов при преобразовании в число
  5.     //дня, месяца и года соответственно
  6.     valid: boolean; //флаг верной даты
  7. begin
  8.   write('Enter date (dd.mm.yyyy): '); //вводим дату в виде строки
  9.   readln(s);
  10.   with date do //чтобы писать имена полей записи без указания имени записи, например, day вместо date.day
  11.     begin
  12.       val(copy(s, 1, 2), day, err_day); //преобразуем день в число
  13.       val(copy(s, 4, 2), month, err_month); //преобразуем месяц в число
  14.       val(copy(s, 7, 4), year, err_year); //преобразуем год в число
  15.       valid := (length(s) = 10) and //будем пока считать дату верной, если длина строки даты 10 символов, и
  16.                (s[3] = '.') and (s[6] = '.') and //3 и 6 символы - точки, и
  17.                (err_day + err_month + err_year = 0) and //нет ошибок при преобразовании в числа, и
  18.                (month >= 1) and (month <= 12) and //допустимый номер месяца, и
  19.                (year >= 1000) and (year <= 9999); //допустимый год
  20.       if valid //если пока дата верна,
  21.         then begin //то делаем проверку на количество дней в месяце
  22.           case month of
  23.             2: if (year mod 400 = 0) or ((year mod 4 = 0) and (year mod 100 <> 0)) //если месяц февраль и год високосный,
  24.                  then max_day := 29 //то 29
  25.                  else max_day := 28; //иначе 28
  26.             4, 6, 9, 11: max_day := 30 //если апрель, июнь, сентябрь или ноябрь, то 30
  27.             else max_day := 31 //в других случаях 31
  28.           end;
  29.           valid := (day >= 1) and (day <= max_day) //дата верна, если номер дня верный
  30.         end
  31.     end;
  32.   write('Date is valid: ', valid); //печатаем факт верности введённой даты
  33.   readln
  34. end.

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

  1. Объявляется переменная date типа record содержащая поля day, month и year типа integer для представления даты в виде записи.
  2. Объявляется переменная s типа string для хранения введенной даты в виде строки.
  3. Объявляются переменные max_day, err_day, err_month, err_year типа integer для хранения максимального количества дней в месяце, номеров неверных символов при преобразовании в число дня, месяца и года соответственно.
  4. Объявляется переменная valid типа boolean для флага верности введенной даты.
  5. Пользователю предлагается ввести дату в формате dd.mm.yyyy.
  6. Считывается введенная строка в переменную s.
  7. Выполняется проверка введенной даты: извлекаются день, месяц и год из строки, преобразуются в числа, проверяются на соответствие ожидаемому формату и допустимые значения, и результат записывается в переменную valid.
  8. Если введенная дата верна, то осуществляется проверка количества дней в месяце.
    • Если месяц - февраль, то проверяется високосный ли год, а затем устанавливается значение переменной max_day соответственно.
    • В остальных месяцах устанавливается значение max_day в зависимости от месяца.
  9. Печатается сообщение о том, верна ли введенная дата.
  10. Конец программы.

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


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

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

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы