end.
Теперь запуск программы приведет к сообщению об ошибке
Сообщение, начинающееся со слова
Сообщение об ошибке времени выполнения появится и в разделе Список ошибок" окна PascalABC.NET:
Для того чтобы избежать ошибки времени выполнения, отсутствующий файл результатов следует открыть не процедурой Reset, а процедурой Rewrite, которая и обеспечит создание этого файла. Далее, после завершения работы с файлами, открытыми в программе, их необходимо закрыть процедурой Close. Добавим в программу соответствующие операторы:
uses PT4;
var
i: integer;
s: string;
f: array [1..4] of file of integer;
begin
Task('File48');
for i := 1 to 4 do
begin
read(s);
Assign(f[i], s);
if i < 4 then Reset(f[i])
else Rewrite(f[i]);
end;
{ * }
for i := 1 to 4 do
Close(f[i]);
end.
Комментарий { * } расположен в том месте программы, в котором можно выполнять операции ввода-вывода для всех четырех файлов: они уже открыты процедурами Reset или Rewrite и еще не закрыты процедурой Close.
Запуск этого варианта программы не приведет к ошибке времени выполнения; более того, результирующий файл будет создан. Однако созданный файл останется пустым, то есть не содержащим ни одного элемента. Поэтому при запуске программы на информационной панели появится сообщение
Во всех ранее рассмотренных вариантах программы мы не использовали операции ввода-вывода для файлов. Поэтому тип файлов не играл никакой роли: вместо типа file of integer мы могли использовать любой другой файловый тип, например, file of real, и результат выполнения программы был бы тем же самым.
Тип файловых элементов становится принципиально важным, если в программе используются операции ввода-вывода для данного файла. Чтобы продемонстрировать это на примере нашей программы, внесем в нее следующие изменения: в описании массива f файловых переменных тип integer заменим на real, в раздел описаний добавим описание переменной a типа real, в раздел операторов (в позицию, помеченную комментарием { * }) добавим следующий фрагмент:
for i := 1 to 3 do
begin
read(f[i], a);
write(f[4], a);
end;
Данный фрагмент обеспечивает считывание
Результат работы программы будет неожиданным:
Судя по экранной строке с содержимым результирующего файла, в него будут записаны не три, а
Итак, мы выяснили, что ошибки, связанные с несоответствием типов файлов, не выявляются при компиляции и не всегда приводят к ошибкам времени выполнения. Это следует иметь в виду, и при появлении странных" результирующих данных начинать поиск ошибки с проверки типов файловых переменных.
Заменим в нашей программе все описания real на integer:
uses PT4;
var
i: integer;
s: string;
f: array [1..4] of file of integer;
a: integer;
begin
Task('File48');
for i := 1 to 4 do
begin
read(s);
Assign(f[i], s);
if i < 4 then Reset(f[i])
else Rewrite(f[i]);
end;
for i := 1 to 3 do
begin
read(f[i], a);