Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
pascal.pdf
Скачиваний:
114
Добавлен:
20.04.2015
Размер:
980.04 Кб
Скачать

 

75

Программирование на языке Pascal

Модуль 7. Функции и процедуры

Прежде чем разбираться в том, что такое функции и процедуры, давайте рассмотрим следующий участок кода. В нем пользователь должен ввести две даты (день, месяц и год), программа проверит правильность ввода значений (как корректность вводимых значений, так и корректность с точки зрения правильности даты, например 30 февраля – это некорректная дата) и затем эти даты использует для каких-либо целей, например для вычисления разницы между этими двумя датами. Правильность ввода чисел мы будем осуществлять в соответствии с программой, рассмотренной в предыдущих главах. Запаситесь терпением, код хоть и большой, но простой.

Var FDay, FMonth, FYear, TDay, TMonth, TYear: Integer; Sd, Sm, Sy: String;

Code: Integer;

MaxD:Integer;

Begin

WriteLn('Введите день, месяц, год первой даты'); ReadLn(Sd, Sm, Sy);

{Проверяем корректность чисел}

Val(Sd, FDay, Code); If Code<>0 Then

Begin

WriteLn('Некорректный день'); halt;

End;

Val(Sm, FMonth, Code); If Code<>0 Then

Begin

WriteLn('Некорректный месяц'); halt;

End;

Val(Sy, FYear, Code); If Code<>0 Then

Begin

WriteLn('Некорректный год'); halt;

End;

{Проверяем корректность даты}

If (FMonth<=0) or (FMonth>12) Then

Begin

WriteLn('Дата некорректна'); halt;

End;

case FMonth of

1,3,5,7,8,10,12: MaxD:=31; 4,6,9,11: MaxD:=30;

2: If (FYear mod 4=0) and

(FYear mod 400<>0) or (FYear mod 400=0) Then

MaxD:=29 {Год високосный}

else

MaxD:=28;

end;

75

 

76

Программирование на языке Pascal

If (FDay<=0) or (FDay>MaxD) Then

Begin

Writeln('Дата Некорректна'); halt;

End;

{Вводим вторую дату}

WriteLn('Введите день, месяц, год второй даты'); ReadLn(Sd, Sm, Sy);

{Проверяем корректность ввода чисел}

Val(Sd, TDay, Code); If Code<>0 Then

Begin

WriteLn('Некорректный день'); halt;

End;

Val(Sm, TMonth, Code); If Code<>0 Then

Begin

WriteLn('Некорректный месяц'); halt;

End;

Val(Sy, TYear, Code); If Code<>0 Then

Begin

WriteLn('Некорректный год'); halt;

End;

{Проверяем корректность даты… Снова ;-) }

If (TMonth<=0) or (TMonth>12) Then

Begin

WriteLn('Дата некорректна'); halt;

End;

case TMonth of

1,3,5,7,8,10,12: MaxD:=31; 4,6,9,11: MaxD:=30;

2: If (TYear mod 4=0) and

(TYear mod 400<>0) or (TYear mod 400=0) Then

MaxD:=29 {Год високосный}

else

MaxD:=28;

end;

If (TDay<=0) or (TDay>MaxD) Then

Begin

Writeln('Дата Некорректна'); halt;

End;

{Дальше идет код вычисления разницы между датами….}

Как вы видите, одни и те же участки кода повторяются для разных значений переменных. Так, для проверки правильности ввода числе мы использовали следующую конструкцию:

Val(Строковая_Переменная, Целочисленная_переменная, Code);

76

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]