Конструктор учебных заданий для электронного задачника Programming Taskbook - 26 стр.

UptoLike

Составители: 

26
или несколько элементов, то эти элементы выделяются более бледным цветом, а в
случае, если программа учащегося не освободит память, занимаемую этими элемен-
тами, они будут выделены красным цветом. Наконец, если в списке, преобразованном
программой учащегося, элементы располагаются не на требуемых местах, то они за-
ключаются в скобки (например,
(23)), а если элемент списка содержит ошибочную
ссылку Next, то она помечается двумя красными звездочками (например
46 - **).
Красные звездочки указываются в конце списка также в случае, если его длина пре-
вышает максимально допустимую. Специальные обозначения используются также
для циклических списков (см. пример 3, приведенный далее в этом пункте).
Элемент данных типа «линейный список» должен содержать не более 14 эле-
ментов типа TNode, причем значения их полей Data должны лежать в диапазоне от –9
до 99, поскольку для каждого поля Data отводится по две экранные позиции. Для
большей наглядности рекомендуется использовать числа из диапазона 10–99, резер-
вируя однозначные и отрицательные числа для особых элементов (например, барьер-
ного элемента циклического спискасм. задание Dynamic70). Если значение эле-
мента списка не умещается в поле вывода, то в его последней экранной позиции вы-
водится красная звездочкапризнак ошибки.
Для отображения списка как двусвязного необходимо, чтобы в его элементах
были определены поля связи Next и Prev; в этом случае связи между соседними эле-
ментами списка обозначаются двойными линиями: «
=». Если в задании требуется ис-
пользовать односвязный список, то для его элементов надо определить только поле
связи Next, а для полей Prev следует указать значение, не связанное с элементами это-
го списка (например, адрес какой-либо глобальной переменной типа TNode). Связи
между элементами односвязных списков обозначаются одинарными линиями: «
-».
Вызов процедуры DataList или ResultList приводит к тому, что соответствующий
список становится текущей динамической структурой для данного задания. Все по-
следующие вызовы процедур ShowPointer, SetNewNode и SetDisposedNode будут вли-
ять на эту текущую структуру.
procedure DataBinTree(NP, X, Y1, Y2: integer);
procedure ResultBinTree(NP, X, Y1, Y2: integer);
procedure DataTree(NP, X, Y1, Y2: integer);
procedure ResultTree(NP, X, Y1, Y2: integer);
Эти процедуры предназначены для включения в задание бинарных деревьев и
деревьев общего вида (называемых также деревьями с произвольным ветвлением) в
качестве исходных (DataBinTree и DataTree) или результирующих (ResultBinTree и
ResultTree) данных. Для деревьев общего вида используется представление «левая
дочерняя вершинаправая сестра» («left child — right sibling»). Как и для процедур
DataList и ResultList, описанных выше, первым параметром этих процедур является
номер указателя типа PNode, ранее определенного с помощью процедуры SetPointer.
В данном случае этот указатель должен указывать на корень добавляемого в задание
дерева; если он равен nil, то дерево считается пустым и не отображается на экране. В
отличие от процедур, связанных с линейными списками, для отображения дерева
можно (и рекомендуется) выделять на экране более двух строк; номера начальной и
конечной экранной строки задаются параметрами Y1 и Y2 соответственно. В отличие
от других «прокручиваемых» данных (а именно, типизированных и текстовых фай-
лов), дерево может не занимать выделенные для него строки по всей ширине: пара-
метр X показывает, начиная с какой позиции экранных строк будет отображаться де-