Этот текст означает, что структура состоит из 5 элементов, причем ее первый элемент имеет поле Data, равное 75, и связан с помощью своего поля Next со вторым элементом, поле Data которого равно 65, и так далее до последнего, пятого элемента, поле Data которого равно 10, а поле Next равно nil, что является признаком завершения структуры. Таким образом, текст, описывающий данную динамическую структуру, является максимально упрощенным вариантом следующей схемы:
Поскольку эта структура указана в разделе исходных данных, следовательно, после инициализации задания она
Как получить доступ к этой существующей динамической структуре? Здесь также уместна аналогия с файлами. Для доступа к внешнему файлу необходимо знать его
Из текста, описывающего динамическую структуру, видно, что на ее первый элемент указывает указатель с именем P1, который также содержится в наборе исходных данных. Описание этого указателя имеет вид
P1 = ptr
Здесь текст P1 = является
Замечание. Может возникнуть вопрос: почему вместо условного текста ptr" не отображается "настоящее" значение указателя (то есть некоторый четырехбайтный адрес)? Это связано с тем, что, даже выведя это значение на экран, мы не сможем определить, с какими данными связан этот адрес, поэтому подобная информация на экране будет излишней.
Итак, слово ptr в разделе исходных или результирующих данных означает, что соответствующий элемент данных является
Аналогично, создав (или преобразовав) некоторую динамическую структуру, программа учащегося должна передать задачнику некоторый адрес, связанный в этой структурой (используя процедуру вывода write). Зная этот адрес, задачник сможет проверить правильность созданной структуры.
Вернемся к заданию Dynamic2. В нем не требуется ни создавать, ни преобразовывать исходную структуру данных; ее необходимо лишь проанализировать, а именно, определить значения всех ее элементов, подсчитать количество элементов и, кроме того, вывести указатель на последний элемент этой структуры.
Приведем вначале неполное решение задачи, выводящее все необходимые данные, кроме указателя на последний элемент:
uses PT4;
var
p1: PNode;
n: integer;
begin
Task('Dynamic2');
read(p1);
n := 0;
while p1 <> nil do
begin
write(p1^.Data);
n := n + 1;
p1 := p1^.Next;
end;
write(n);
end.
После запуска программы можно убедиться, что все числовые результирующие данные найдены правильно, однако из-за того, что не выведен указатель на последний элемент, решение признано ошибочным с диагностикой
Добавим в конец программы оператор
write(p1);
После запуска нового варианта программы все требуемые данные будут выведены, однако результирующее значение указателя будет равно nil. Это связано с тем, что после завершения цикла while в переменной p1 содержится
Для того чтобы получить правильное решение, опишем вспомогательную переменную p2, в которой будем сохранять адрес элемента,
uses PT4;
var
p1,p2: PNode;
n: integer;
begin
Task('Dynamic2');
read(p1);
n := 0;
while p1 <> nil do
begin
write(p1^.Data);
n := n + 1;
p2 := p1; { сохраняем адрес текущего элемента }
p1 := p1^.Next; { и переходим к следующему элементу }
end;
write(n, p2);
end.