- •Федеральное агенство по образованию российской федерации
- •1. Основные категории и понятия информатики
- •Предмет информатики как науки
- •1.2. Информация: структура, форма, измерение
- •2. Техническое и программное обеспечение пэвм
- •2.1. Структура аппаратных средств пэвм
- •2.2. Программное обеспечение пэвм
- •3. Основы алгоритмизации
- •Этапы разработки программ
- •3.2.Формы представления алгоритмов
- •Действие 1
- •Действие 2
- •Классификация и примеры алгоритмических структур
- •3.2.1. Алгоритм линейной структуры.
- •3.2.2. Алгоритм разветвляющейся структуры.
- •Да нет да да Рис 3.11
- •3.2.3. Алгоритмы циклической структуры.
- •4.2. Структура программы на языке Паскаль
- •4.3. Скалярные стандартные типы данных
- •4.4. Скалярные, пользовательские типы данных
- •5. Структурные типы данных
- •Массивы
- •5.3. Записи
- •5.4. Записи с вариантами
- •Множества
- •5.6.Файлы
- •6. Операции над данными скалярных типов. Выражения
- •7. Операторы языка Паскаль
- •7.1. Простые операторы
- •7.2. Структурные операторы
- •Оператор 2
- •8. Примеры программ на языке Паскаль
- •8.1. Пример 1. Арифметические выражения. Оператор присваивания
- •Пример 2. Условные операторы
- •Ввод чисел х, а
- •8.3. Пример 3. Программа обработки одномерного массива
- •8.4. Пример 4. Программа обработки двумерного массива
- •True False True False False
- •8.5. Пример 5. Программа обработки символьных строк
- •8.6. Пример 6. Программа обработки двумерного массива с вводом элементов матрицы из текстового файла
- •9.Разработка программ сложной структуры
- •9.1. Процедуры и функции
- •9.2. Область действия идентификаторов при использовании процедур и функций. Локальные и глобальные переменные
- •9.3. Передача данных в подпрограмму с помощью параметров. Формальные и фактические параметры
- •9.4. Использование процедур и функций
- •True False Рис. 9.4
- •9.5. Массивы – параметры процедур и функций
- •True False True False Рис. 9.7
- •True False True False True False Рис 9.9
- •9.6. Рекурсивные процедуры и функции
- •True False Рис. 9.10 True False
- •True False Рис. 9.12
- •9.7. Модули
- •10. Динамические структуры данных
- •Основные определения
- •10.2. Объявление и создание динамических структур данных. Указатели
- •Операции над указателями
- •Программа создания и обработки линейного списка
- •Приложение. Контрольные вопросы
- •Литература
10. Динамические структуры данных
Основные определения
По способу распределения памяти данных в программах делятся на статические и динамические. Данные статической структуры – это данные, размещение которых в памяти ЭВМ и взаимосвязи между элементами остаются неизменными во время выполнения программы в области их действия. К данным статической структуры относятся переменные базовых типов, массивы, записи, множества, объявляемые в программе, как локальные, так и глобальные.
Данные динамической структуры – это данные, которые могут размещаться в памяти ЭВМ и удаляться из памяти во время выполнения программы с помощью системных процедур, таких как NewиDispose.
Динамические структуры данных бывают двух видов:
несвязанные динамические данные;
связанные динамические данные.
Несвязанные динамические данные бывают таких же типов, что и статические. За исключением того, что несвязанные динамические данные размещаются в памяти программистом, а не автоматически. К связанным динамическим данным относятся списки, очереди и стеки; это комбинированные данные, элементы которых связаны между собой с помощью адресных ссылок. Рассмотрим средства языка Паскаль для создания и обработки динамических структур данных.
10.2. Объявление и создание динамических структур данных. Указатели
В языке Паскаль имеются средства создания динамических структур данных, которые позволяют изменять количество элементов данных во время выполнения программы, т.е. создавать динамические переменные, размещать их в памяти и уничтожать, когда в них уже нет необходимости.
При объявлении динамической переменной в разделе описаний указывается не сама переменная, а указатель (ссылка) на нее, следующим образом:
<имя указателя>: ^ <тип указателя>;
Такое объявление называется объявлением типизированного указателя.
Например,
VarP: ^char; {указатель на переменную типаchar}
Указатель – это переменная, значением которой является адрес другой переменной заданного в объявлении указателя типа.
Рассмотрим пример использования указателя типа char. Указатель объявляется с помощью операции разыменования (^). Использование имени указателя в программе означает обращение к адресу ячейки памяти. Чтобы обратиться к содержимому ячейки, на которую ссылается указатель, требуется после имени указателя поставить символ ‘^’.
P^ - содержимое ячейки, адрес которой является значением указателяP.
P: ^ char P^
Адрес‘*’
Выделение и освобождение памяти под динамические переменные выполняются стандартными процедурами New,Dispose,GetMem,FreeMem,MarkиRelease, соответственно, где
ProcedureNew(Varp:pointer); размещает динамическую переменную и возвращает ее адрес как значение указателяp;
ProcedureDispose(Varp:pointer); уничтожает динамическую переменную;
ProcedureGetMem(Varp:pointer;Size:word); размещает динамическую переменную указанного размера и возвращает ее адрес как значение указателяp;
ProcedureFreeMem(Varp:pointer;Size:word); уничтожает динамическую переменную указанного размера;
ProcedureMark(Varp:pointer); размещает динамическую переменную и возвращает ее адрес как значение указателяp; эта переменная уничтожается с помощью процедурыRelease;
ProcedureRelease(Varp); уничтожает динамическую переменную указанного размера.
Описатель pointerиспользуется для объявления нетипизированного указателя, который совместим с указателями любого типа.