- 17 - 4. ЛАБОРАТОРНАЯ РАБОТА "ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ" 4.1. Цель работы Ознакомиться с заданием и использованием ссылочного типа (указателей), рассмотреть процесс создания и обращения к дина- мическим обектам и ссылкам, их уничтожения. Изучить порядок работы со сложными динамическими структурами: списками, очере- дями, стеками. 4.2. Методические указания к лабораторной работе Переменные, массивы, записи, имена которых в программе на Паскале указываются в разделе описания переменных VAR, представляют собой статические программные объекты, которые порождаются непосредственно перед выполнением программы, су- ществуют в течение всего времени ее выполнения и размер зани- маемой ими памяти не изменяется в ходе выполнения программы. Использование только статических переменных может вызвать трудности, когда при проектировании программы заранее неиз- вестно размера значения того или иного программного объекта или даже и то, будет существовать этот объект или нет. Типич- ное решение: использовать максимально возможную длину для оп- ределения объектов или описывать одновременно существование всех временных объектов, часто приводит к неэффективным прог- раммам, а иногда и невозможно из-за ограничений в памяти. Дру- гое решение: использовать динамические объекты, т.е. такие, которые возникают уже в процессе выполнения программы или раз- мер значений которых определяется или изменяется при выполне- нии программы. Для использования динамических переменных используются ссылочный тип значений, переменные ссылочного типа (указатели) и переменные с указателем. Во многих ЭВМ вместо стрелки "^" используется символ "@" - коммерческое "в". Для создания динамических объектов определенного типа используется процедура NEW, которая резервирует свободный участок оперативной памяти под этот объект, а в указатель по- мещает ссылку (адрес) на созданный объект. При создании боль- шого количества динамических объектов возможно переполнение памяти, поэтому для освобождения памяти, занимаемой не исполь- зуемыми более динамическими объектами используется процедура DISPOSE. Динамические объекты сложной структуры реализуются обычно с помощью списков, состоящих из отдельных звеньев, содержащих кроме информационных полей одну или несколько ссылок на оче- редное звено списка. Двунаправленные списки содержат не только ссылку на сле- дующее, но и ссылку на прыдущее звено, поэтому просмотр звень- ев такого списка может осуществляться как в прямом, так и в обратном направлении или с переменой направления. Стеки - упорядоченный набор элементов, в котором размеще- ние новых элементов и удаление существующих производится толь- ко с одного его конца, называемого вершиной стека. Дисциплина обслуживания стека описывается так: "последний вошел, первый вышел" или LIFO - Last In First Out. Очередь - такая динамическая структура данных, добавление - 18 - новых элементов и исключение (обслуживание) существующих эле- ментов в которой производится с разных концов. Дисциплина обслуживания очереди описывается так: "первый вошел, первый вышел" или FIFO - First In First Out. 4.3. Порядок выполнения работы 4.3.1. Ознакомиться с программами обработки динамических переменных. 4.3.2. Написать, отладить программу и получить контроль- ный пример, проверяющий все варианты обработки. 4.3.3. В отчет по лабораторной работе включается: постановка задачи; иерархическая схема программы; блок-схема программы; текст программы; контрольный пример. 4.4. Задания Разработать программу, в которой описать переменные для создания соответствующей динамической структуры. Рекомендуется в программе предусмотреть меню с режимами, обеспечивающими: создание динамической структуры, распечатку исходного состоя- ния в прямом и обратном направлении, запрос изменения и преоб- разование, распечатку преобразованного состояния. При невоз- можности выполнить изменение - выдать сообщение об ошибке. Варианты динамической структуры: 1). Очередь. 2). Стек. 3). Двунаправленный список. 4). Однонаправленный список. Варианты информационного элемента: 1). Целое число. 2). Символ. 2). Вещественное число. Варианты преобразования: 1). Удалить. 2). Заменить или вставить. Место изменения: 1). По указанному порядковому номеру элемента. 2). Перед элементом с указанным порядковым номером. 3). За элементом с указанным порядковым номером. 4). По указанному значению. 5). Перед элементом с указанным значением. 6). За элементом с указанным значением. 4.5. Контрольные вопросы 1. Описание динамических объектов. 2. Ссылочные переменные и переменные с указателем. 3. Допустимые действия над ссылочными переменными. 4. Константы ссылочного типа. 5. Прямой и обратный просмотр элементов динамической структуры. 6. Списки, стеки, очереди. . - 19 - ЛИТЕРАТУРА 1. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988. 2. Васюкова Н.Д., Троляева В.В. Практикум по основам программирования. Язык Паскаль: Учеб. пособие для сред. спец. учеб. заведений. - М.: Высш. шк., 1990. 3. Кастеллани К. Автоматизация решения задач управления: Пер. с франц. - М.: Мир, 1982. 4. Перминов О.Н. Программирование на языке Паскаль. - М.: Радио и связь, 1988. 5. Пильщиков В.Н. Сборник упражнений по языку Паскаль. - М.: Радио и связь, 1988. 6. Фаронов В.В. Турбо Паскаль. Книга 1. Основы Турбо Паскаля. - М.: МВТУ - ФЕСТО ДИДАКТИК, 1992.