Описанные в данном разделе типы и процедуры будут доступны в программе, если к ней с помощью оператора usesподключен модуль PT4 (см. пример программы, использующей задачник Programming Taskbook). Дополнительные типы данных PNode и TNode
type
PNode = ^TNode;
TNode = record
Data: integer;
Next: PNode;
Prev: PNode;
Left: PNode;
Right: PNode;
Parent: PNode;
;
Типы PNode и TNode используются в заданиях групп Dynamic и Tree. В заданиях на стеки и очереди (Dynamic1-Dynamic28) при работе с записями типа TNode используются только поля Data и Next; в заданиях на двусвязные списки (Dynamic29-Dynamic80) используются поля Data, Next и Prev. В большинстве заданий на бинарные деревья (группа Tree) используются поля Data, Left и Right; в заданиях на обработку бинарных деревьев с обратной связью (Tree48-Tree56 и Tree70-Tree71) дополнительно используется поле Parent.
Все исходные и результирующие данные-указатели в заданиях имеют тип PNode; их ввод и вывод должен осуществляться с помощью процедур GetP и PutP (в системе PascalABC.NETуказатели, как и другие данные, можно получать из задачника и передавать ему с помощью стандартных процедур ввода-вывода read и write).
В программе учащегося не следует повторно описывать типы PNode и TNode.
Инициализация задания, ввод-вывод данных
Процедура инициализирует задание с именем Name. Она должна вызываться в начале программы, выполняющей это задание (до вызова процедур ввода-вывода). Если в программе, подключившей модуль PT4, не указана процедура Task, то при запуске программы будет выведено окно с сообщением Не вызвана процедура Task с именем задани я ".
Имя задания Name должно включать имя темы и порядковый номер в пределах темы (например, 'Begin3'). Регистр букв в имени темы может быть произвольным. Если указана неверная тема задания, то программа выведет сообщение об ошибке, в котором будут перечислены названия всех имеющихся тем. Если указан недопустимый номер задания, то программа выведет сообщение, в котором будет указан диапазон допустимых номеров для данной темы. Если после имени задания в параметре Name указан символ ? (например, 'Begin1?'), то программа будет работать в демонстрационном режиме .
Начиная с версии 4.8, процедура Task может также использоваться для генерации и вывода на экран html-страницы с текстом задания или группы заданий. Для этого необходимо указать в качестве параметра Name имя конкретного задания или группы заданий и символ #, например, 'Begin3#' или 'Begin#'. Дополнительные сведения о генерации html-страниц с описаниями заданий приводятся в разделе, посвященном демонстрационному режиму задачника.
Если при первом вызове процедуры Task в параметре не указывается символ #, то все последующие вызовы процедуры Task игнорируются. Если при первом вызове процедуры Task в параметре указывается символ #, то игнорируются все последующие вызовы процедуры Task, не содержащие этот символ. С помощью нескольких вызовов процедуры Task, содержащей в параметре символ #, можно обеспечить генерацию html-страницы с описанием нескольких групп заданий, причем в каждой группе при этом можно отображать только некоторые задания.
procedureGetB( varX: boolean);
procedureGetC( varX: char);
procedureGetN( varX: integer);
procedureGetR( varX: real);
procedureGetS( varX: string);
procedureGetP( varX: PNode);
Процедуры обеспечивают ввод исходных данных в программу, выполняющую учебное задание. Они должны вызываться после вызова процедуры Task; в случае их вызова до вызова процедуры Task при запуске программы будет выведено сообщение об ошибке В начале программы не вызвана процедура Task с именем задани я ".
Используемая процедура ввода должна соответствовать типу очередного элемента исходных данных; в противном случае выводится сообщение об ошибке Неверно указан тип при вводе исходных данны х " (такое сообщение будет выведено, например, если очередной элемент данных является символом, а для его ввода используется процедура GetN).
При попытке ввести больше исходных данных, чем это предусмотрено в задании, выводится сообщение об ошибке Попытка ввести лишние исходные данны е ". Если исходные данные, необходимые для решения задания, введены не полностью, то выводится сообщение " Введены не все требуемые исходные данные ".
При использовании задачника в системе PascalABC.NETвместо процедур группы Get можно использовать обычные процедуры ввода read. procedurePutB(X: boolean);
Читать дальше