Иллюстрированный самоучитель по Turbo Pascal

Примеры программ. Вычисление дня недели.

С учетом сказанного, напишем такой начальный вариант программы:

var
IsCorrectDate: Boolean; {Признак правильной даты}
d,m,y: Integer; {Вводимая дата – день, месяц и год}
begin
repeat
{Ввести в переменные d, л? и у очередную дату и проверить ее.
Если дата правильная, установить IsCorrectDate=True, иначе IsCorrectDate=False}
if IsCorrectDate then
{Вычислить и выдать на экран день недели};
until not IsCorrectDate
end.

Если Вы попытаетесь запустить эту программу на счет, то ее поведение будет зависеть от начального значения переменной IsCorrectDate. Это значение случайно, так как компилятор Турбо Паскаля не проводит начальной инициализации переменных. Скорее всего, тот байт оперативной памяти, в котором она разместится, окажется нулевым, что в Турбо Паскале расценивается как логическое значение FALSE, поэтому с большой вероятностью ничего не произойдет, и программа сразу же завершит свою работу (условие not IsCorrectDate будет выполнено). Если начальное значение IsCorrectDate окажется не нулевым, то цикл REPEAT…UNTIL будет выполняться до тех пор, пока Вы не выключите компьютер или не нажмете клавиши CTRL + Break.

Будем считать, что необходимые действия осуществляются в двух процедурах с именами InputDate (ввод даты) и WriteDay (вычисление и печать дня недели). В процедуру InputDate не нужно ничего передавать из программы, так как в ней самой осуществляются ввод и контроль даты. Поэтому заголовок процедуры может иметь такой вид:

Procedure InputDate(var d,m,y: Integer; var correctly:
Boolean);

Процедура WriteDay, напротив, только получает из программы нужные ей данные и ничего не возвращает в программу, поэтому в ее заголовке параметры описываются без слова VAR:

Procedure WriteDay(d,m,у: Integer);

С учетом этого программу можно уточнить следующим образом:

var
IsCorrectDate: Boolean; {Признак правильной даты}
d,m,y: Integer; {Вводимая дата – день, месяц и год}
{………………………….}
Procedure InputDate(var d,m,y: Integer;
var correctly: Boolean);
{Вводит в переменные d, m и у очередную дату и проверяет ее.
Если дата правильная, устанавливает correctly=true, иначе correctly=false }
begin {InputDate}
correctly: = false
end; {InputDate}
{………………………….}
Procedure WriteDay(d,m,у: Integer);
{Вычисляет день недели и выводит его на экран}
begin {WriteDay}
end; {WriteDay}
{…………………………}
begin
repeat
InputDate(d,m,y,IsCorrectDate);
if IsCorrectDate then
WriteDay(d,m,y)
until not IsCorrectDate
end.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.