Проверьте, правильность введенной даты - 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.

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

  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
Похожие ответы