Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке Паскаль в среде Turbo Pascal версии 6 и 7 (Курс лекций). Воронов Г.И.Санкт-Петербург 2010г.doc
Скачиваний:
91
Добавлен:
15.04.2015
Размер:
754.69 Кб
Скачать

Нульсвязные списки

К таким спискам относятся стек, очередь и дек. В отличие от прочих типов списков, по которым можно перемещаться, используя находящиеся в звеньях указатели, в нульсвязных списках доступны только элементы на одном или обоих концах. Только после удаления из такого списка доступного элемента, можно получить доступ к следующему элементу, который теперь становится крайним в списке.

В нульсвязных списках нет заглавных звеньев. У них есть только начало и конец. Началом (или начальным звеном) называется звено, которое можно взять из списка, концом – звено, после которого можно добавить в список новый элемент (новое звено).

В языке Паскаль нет средств, позволяющих описывать переменные типа нульсвязных списков. Их приходится моделировать односвязными списками с запретом перемещения по указателям звеньев. Работа с нульсвязными списками выполняется, только используя специальные процедуры и функции. Обычно достаточно использовать функцию проверки, не пуст ли список, и две процедуры: добавления элемента к списку и выбора элемента из списка (с удалением выбираемого звена).

Рассмотрим варианты нульсвязных списков.

Стек – это нульсвязный список, иногда называемый очередью с правилом обслуживания LIFO ( Last In – First Out – последним пришел – первым ушел). У стека начало и конец – это одно и то же звено, обычно называемое вершиной стека.

Создание пустого стека – это, по сути, создание указателя на вершину стека (N), и присвоение ему значения nil. Этот указатель в дальнейшем играет роль адреса начала и конца стека текущего звена.

Формирование вершины стека можно произвести следующим образом:

Var

S:P1;

Begin

new(S);

. . .

Очередь – нульсвязный список с правилом обслуживания FIFO ( First In – First Out – первым пришел – первым ушел).

Для работы с очередью необходимы такие же процедуры, как и для стека. При создании пустой очереди указателям N и K присваивается значение nil. Процедурам добавления в очередь и выбора из очереди приходится передавать указатели на оба конца, так как при создании первого звена, его адрес необходимо занести в оба указателя, а при удалении последнего звена очереди, обоим указателям надо присвоить значение nil.

Дек – это нульсвязный список, в котором добавление и выбор элементов возможен с любого конца. Его можно рассматривать как двусторонний стек или двустороннюю очередь. Название (deque) расшифровывается как double-ended queue – очередь с двумя концами.

Проще всего дек моделировать двусвязным линейным списком, по которому запрещено перемещаться. Формально для него приходится составлять две процедуры добавления и две процедуры удаления элементов, находящихся на первом и втором концах дека. На практике процедуры добавления можно объединить в одну, используя дополнительный признак – к какому концу добавляется элемент. Хотя оба конца дека равноправны, для определенности одну сторону будем называть началом, обозначая указателем NK, а вторую – концом, с обозначением KN.

Глава 11.Стандартный модуль работы с текстовым экраном Crt

Использование экрана дисплея в модуле Crt

Назначение модуля

Модуль Crt предназначен для работы со стандартными устройствами ввода и вывода в нестандартных режимах. Пояснения: стандартный режим системных устройств ввода/вывода выполняется через процедуры и функции операционной системы, нестандартный режим - через функции, записанные в ПЗУ BIOS и прямо через видеопамять.

В этом модуле есть процедуры работы с экраном (в текстовом режиме), с клавиатурой, со звуком и отдельная процедура задержки.

Координаты экрана

При работе с экраном, как и в стандартном режиме, экран разбивается на строки, каждая строка - на одинаковые прямоугольные позиции (знакоместа). В каждую позицию можно поместить один символ. Знакоместа задаются двумя координатами: номером строки и номером столбца (номером символа в строке). Строки нумеруются сверху экрана вниз, начиная с 1, столбцы - слева направо, также начиная с 1.

Модуль Crt позволяет работать с любым прямоугольным окном экрана. Окна задаются координатами двух углов

Работа с текстом

Работа с цветом

При выводе символа прямоугольник знакоместа можно

закрасить цветом фона, а сам символ изображать цветом переднего плана.

Работа со звуком

Пример программы

Глава 12.Стандартный модуль работы с графическим экраном Graph

1) назначение модуля

Чтобы использовать графику в программах на Турбо-Паскале необходимо научиться планировать размещение на экране выводимой информации (т.е. разобраться в алгоритме вывода графических объектов на экран) и уметь подключать и использовать стандартные графические процедуры и функции Турбо-Паскаля. Рассмотрим последовательно обе эти проблемы.

Для начала следует твердо усвоить, что экран дисплея может использоваться или в текстовом или в графическом режиме, но только не в обоих одновременно. Стандартное состояние экрана при работе в Турбо-Паскале (рассчитанном на операционную систему DOS) – в текстовый режим. При этом никакой графический вывод на экран невозможен, попытки вызова процедур графики приведут к ошибке и останову программы. После инициализации графики, бесполезными будут обращения к процедурам вывода на экран текстовой информации (с помощью Write и WriteLn), правда, без всяких сообщений и прерываний выполнения программы.

Перевод дисплея в графический режим (инициализация графики) позволяет получить доступ к любой точке экрана. При этом система координат экрана начинается в левом верхнем углу с точки, имеющей координаты 0,0. Ось Х направлена слева направо, ось У – сверху вниз. Каждая точка экрана имеет две координаты Х и У и какой-то цвет из допустимой палитры. Такая точка называется пикселем. В зависимости от состава аппаратных средств ПЭВМ, на экране максимально может помещаться или 350 (для EGA-адаптера), или 480 (для VGA-адаптера) строк по 640 пикселей в каждой строке. Палитра обычно содержит 16 цветов.

Подключаются процедуры и функции по работе с экраном в графическом режиме, т.е. когда доступной становится любая точка (пиксель) экрана. Для их использования необходимо:

  • подключить раздел графических подпрограмм Турбо-Паскаля, что выполняется в самом начале раздела описаний оператором USES Graph;

  • инициализировать графику в выполняемом блоке, для чего загрузить в память драйвер управления монитором в графическом режиме. Это делается процедурой InitGraph(...). Далее выполняется выбор цветов и характеристик графических примитивов (точек, линий, стандартных фигур и полигонов, символов текста) и изображаются нужные объекты, с помощью стандартных процедур и функций. По окончании работы графический режим монитора выключается (закрытием графики процедурой CloseGraph).