procedurePutC(X: char);
procedurePutN(X: integer);
procedurePutR(X: real);
procedurePutS(X: string);
procedurePutP(X: PNode);
Процедуры обеспечивают вывод на экран результирующих данных, найденных программой, и их сравнение с контрольными данными (то есть с правильным решением). Как и процедуры группы Get, эти процедуры должны вызываться после вызова процедуры Task; в противном случае при запуске программы будет выведено сообщение об ошибке « В начале программы не вызвана процедура Task с именем задания ».
В отличие от процедур группы Get, в качестве параметра процедур группы Put можно указывать не только переменные, но и выражения (в частности, константы соответствующего типа). Используемая процедура должна соответствовать типу очередного элемента результирующих данных, в противном случае выводится сообщение об ошибке « Неверно указан тип при выводе результатов ».
Как и в случае процедур группы Get, при вызовах процедур группы Put программа осуществляет контроль за соответствием количества требуемых и выведенных результирующих данных. Если программа выведет недостаточное или избыточное количество результирующих данных, то после проверки этих данных появится сообщение « Выведены не все результирующие данные » или, соответственно, « Попытка вывести лишние результирующие данные ».
P: PNode);
Данная процедура переопределяет стандартную процедуру Dispose для того, чтобы контролировать действия учащегося по освобождению памяти при выполнении заданий групп Dynamic и Tree.
Класс Node и альтернативный ввод-вывод в стиле .NET
В варианте задачника Programming Taskbook, включенном в систему PascalABC.NET, предусмотрен альтернативный способ организации ввода-вывода, характерный не для традиционного Паскаля, а для языков платформы .NET. Наличие двух способов ввода-вывода обусловлено тем обстоятельством, что система PascalABC.NETпозволяет разрабатывать программы как в стиле, характерном для традиционного Паскаля, так и в .NET-стиле, ориентированном на использование стандартных средств платформы .NET, в том числе ее библиотеки классов.
Кроме новых средств ввода-вывода в варианте задачника для системы PascalABC.NETпредусмотрен класс Node, который следует использовать вместо типов PNode и TNode при выполнении заданий на динамические структуры в объектном стиле". Заметим, что в этом случае необходимо пользоваться группами ObjDyn и ObjTree, в которых (в отличие от групп Dynamic и Tree) применяется "объектная" терминология, ориентированная на применение классов платформы .NET.
type
Node = class(IDisposable)
. . .
public
// Конструкторы:
constructorCreate;
constructorCreate(aData: integer);
constructorCreate(aData: integer; aNext: Node);
constructorCreate(aData: integer; aNext, aPrev: Node);
constructorCreate(aLeft, aRight: Node; aData: integer);
constructorCreate(aLeft, aRight: Node; aData: integer; aParent: Node);
// Свойства (доступны для чтения и записи):
propertyData: integer;
propertyNext: Node;
propertyPrev: Node;
propertyLeft: Node;
propertyRight: Node;
propertyParent: Node;
// Метод, освобождающий ресурсы, используемые объектом Node:
procedureDispose;
;
Класс Node используется в заданиях групп ObjDyn и ObjTree. В заданиях на стеки и очереди (ObjDyn1-ObjDyn28) при работе с объектами типа Node используются только свойства Data и Next; в заданиях на двусвязные списки (ObjDyn29-ObjDyn80) используются свойства Data, Next и Prev. В большинстве заданий на бинарные деревья (группа ObjTree) используются свойства Data, Left и Right; в заданиях на обработку бинарных деревьев с обратной связью (ObjTree48-ObjTree56 и ObjTree70-ObjTree71) дополнительно используется свойство Parent.
Варианты конструктора класса Node позволяют задавать значения требуемых свойств при создании объекта; прочие свойства инициализируются нулевыми значениями (числом 0 для свойства Data, нулевой ссылкой nil для остальных свойств).
Следует обратить внимание на то, что данный класс реализует интерфейс IDisposable, поэтому при завершении работы с объектом типа Node требуется вызвать его метод Dispose, освобождающий неуправляемые ресурсы , выделенные для этого объекта (исключение делается только для тех объектов, которые передаются обратно задачнику в качестве результирующих данных). Если в задании требуется вызвать метод Dispose для некоторых объектов, но этот вызов не выполняется, то при запуске программы выводится сообщение об ошибке Не вызван метод Dispose для объекта типа Nod e ".
Читать дальше