Исправление ошибки, связанной с неверными типами файловых данных
Заменим в нашей программе все описания real на integer:
usesPT4;
var
i: integer;
s: string;
f: array[1..4] of file ofinteger;
a: integer;
begin
Task('File48');
fori := 1 to4 do
begin
read(s);
Assign(f[i], s);
ifi < 4 thenReset(f[i])
elseRewrite(f[i]);
end;
fori := 1 to3 do
begin
read(f[i], a);
write(f[4], a);
end;
fori := 1 to4 do
Close(f[i]);
end.
Мы получим все еще неверное, но вполне понятное" решение: первые три элемента результирующего файла совпадают с контрольными (то есть "правильными"), а прочие элементы отсутствуют:
Верное решение
Приведем, наконец, верное решение задания File48:
usesPT4;
var
i, a: integer;
s: string;
f: array[1..4] of file ofinteger;
begin
Task('File48');
fori := 1 to4 do
begin
read(s);
Assign(f[i], s);
ifi < 4 thenReset(f[i])
elseRewrite(f[i]);
end;
while notEof(f[1]) do
fori := 1 to3 do
begin
read(f[i], a);
write(f[4], a);
end;
fori := 1 to4 do
Close(f[i]);
end.
От предыдущего варианта данное решение отличается добавлением заголовка цикла while notEof(f[1]) do, который обеспечивает считывание всех элементов из исходных файлов (напомним, что по условию задания все исходные файлы имеют одинаковый размер ) и запись их в результирующий файл в нужном порядке. После запуска этого варианта мы получим сообщение Верное решение. Тест номер 1 (из 5 ) ", а после пяти подобных запусков -- сообщение " Задание выполнено! ":
Просмотр результатов выполнения задания
Щелкнув мышью на метке Результаты (F2)", расположенной в правом верхнем углу окна задачника, или нажав клавишу F2, мы можем вывести на экран окно результатов , в котором будет перечислены все наши попытки решения задачи:
File48 a08/09 12:43 Ознакомительный запуск.
File48 a08/09 12:50 Введены не все требуемые исходные данные.
File48 a08/09 12:52 Результирующий файл не найден.
File48 a08/09 12:53 Error System.IO.FileNotFoundException.
File48 a08/09 12:57 Ошибочное решение.--3
File48 a08/09 13:06 Задание выполнено!
Для закрытия окна результатов достаточно нажать клавишу Esc. Окно результатов можно отобразить на экране и после закрытия окна задачника и возврата в среду PascalABC.NET. Для этого надо использовать команду меню Модули | Просмотреть результаты", кнопку
или клавиатурную комбинацию Shift+Ctrl+R.
Задания на указатели и динамические структуры данных
Пример 1. Анализ существующей динамической структуры
В заданиях группы Dynamic мы встречаемся с двумя новыми видами данных: это динамические структуры , реализованные в виде цепочек связанных друг с другом записей типа TNode, и указатели типа PNode на записи TNode: PNode = ^TNode. Типы TNode и PNode не являются стандартными типами языка Паскаль; они определены в задачнике Programming Taskbook следующим образом (приводятся только те поля записи TNode, которые используются при выполнении заданий группы Dynamic):
type
PNode = ^TNode;
TNode = record
Data: integer;
Next: PNode;
Prev: PNode;
. . .
end;
На примере задания Dynamic2 рассмотрим особенности, связанные с использованием этих новых типов данных.
Создание программы-заготовки и знакомство с заданием
Программа-заготовка для задания Dynamic2, созданная с помощью команды меню Модули | Создать шаблон программы", кнопки
или клавиатурной комбинации Shift+Ctrl+L, имеет следующий вид:
Читать дальше