- •Содержание
- •Часть 1. Основные понятия программирования §1.1. Этапы разработки программного обеспечения
- •§1.2. Основные сведения об алгоритмах Понятие алгоритма
- •Свойства алгоритма
- •Формы записи алгоритмов
- •Блок-схемы алгоритмов
- •§1.3. Языки программирования
- •§1.4. Паскаль и Object Pascal, Турбо-Паскаль и Delphi
- •Контрольные вопросы
- •Язык, оболочка и интегрированная среда разработки
- •Часть 2. Общие сведения о языке Паскаль §2.1. Алфавит и служебные слова
- •Описание общих конструкций языка
- •§2.2. Структура программы
- •§2.3. Разделы описаний Описание меток
- •Определение констант
- •Определение типов
- •Описание переменных
- •Контрольные вопросы
- •Часть 3. Простые типы данных Иерархия типов
- •§3.1. Целые типы
- •§3.2. Вещественные типы
- •§3.3. Логический тип
- •§3.4. Литерный тип
- •§3.5. Перечисляемый тип
- •§3.6. Диапазоны (интервальный тип)
- •Дополнительные типы в Delphi
- •Контрольные вопросы
- •Глава 4. Операторы языка Паскаль Выражения
- •§4.1. Оператор присваивания
- •§4.2. Ввод-вывод данных
- •§4.3. Составной оператор
- •§4.4. Пустой оператор
- •§4.5. Безусловный оператор перехода
- •§4.6. Условный оператор
- •§4.7. Оператор цикла с параметром for
- •§4.8. Оператор цикла с предусловием while
- •§4.9. Оператор цикла с постусловием repeat
- •§4.10. Оператор выбора case
- •Контрольные вопросы
- •Глава 5. Процедурное программирование §5.1. Функции
- •Параметры – значения
- •Параметры – переменные
- •Бестиповые параметры
- •§5.2. Процедуры
- •Правила использования подпрограмм
- •Рекурсия
- •Директивы
- •Процедурные типы
- •Пример использования подпрограмм
- •Контрольные вопросы
- •Глава 6. Структурированные типы данных
- •§6.1. Массивы
- •§6.2. Строки
- •§6.3. Записи
- •§6.4. Множества
- •Пример использования множеств
- •§6.5. Файлы
- •Установочные и завершающие операции
- •Операции ввода-вывода
- •Перемещения по файлу
- •Пример работы с файлом
- •Обработка ошибок ввода-вывода
- •Специальные операции
- •Пример объединения двух файлов
- •Текстовые файлы
- •Стандартные текстовые файлы
- •Файлы без типа
- •Контрольные вопросы
- •Глава 7. Динамические структуры данных §7.1. Динамические переменные
- •§7.2. Указатели
- •Работа с динамическими переменными
- •Пример двухсвязанного циклического списка
- •Указатели без типа
- •Контрольные вопросы
- •Глава 8. Низкоуровневые возможности Паскаля §8.1. Язык Ассемблер
- •§8.2. Доступ к аппаратуре Доступ к памяти
- •Доступ к портам ввода-вывода
- •Работа по прерываниям
- •Контрольные вопросы
- •Глава 9. Модули §9.1. Основные понятия
- •§9.2. Использование модулей
- •§9.3. Стандартные модули
- •§9.4. Модуль Crt
- •Работа с экраном в текстовом режиме
- •Работа с клавиатурой
- •Работа со звуком
- •§9.5. Модуль dos
- •§9.6. Графический режим монитора
- •Контрольные вопросы
- •Глава 10. Введение в объектно-ориентированное программирование §10.1. История развития программирования
- •Понятие объекта
- •§10.2. Свойства объектов
- •Раннее и позднее связывание
- •§10.3. Виртуальные методы
- •Конструкторы и деструкторы
- •§10.4. Динамические объекты
- •Скрытые поля и методы
- •Контрольные вопросы
- •Литература
Глава 7. Динамические структуры данных §7.1. Динамические переменные
Все рассмотренные ранее структуры данных являются статическими. Память под переменные выделяется на этапе трансляции, ее объем и распределение не может изменяться во время решения задачи в зависимости от вводимых условий. Исключение составляют файлы. Однако файл не рассматривается как единое целое. Его обработка — это, по сути дела, обработка отдельных компонентов. Здесь постоянно может требоваться «подкачка» компонент в буферную область оперативной памяти. Работа с компонентами файла — очень медленная операция с точки зрения процессора.
Все предыдущие структуры объединяет следующее. К переменной любого типа можно обратиться с помощью имени: указывается или просто имя, или имя с индексами, или составное имя и т.д. Любой объект может быть явно обозначен, для его хранения выделяются конкретные ячейки памяти еще до выполнения программы, которые связываются с его именем. Транслятор может обработать и проконтролировать все статические переменные без выполнения программы, на основании лишь ее статического текста.
В языке Паскаль, как практически во всех современных языках высокого уровня, есть переменные, которые создаются и уничтожаются в процессе выполнения программы. Они не входят в явные описания программы и, следовательно, к ним нельзя обращаться с помощью имен. Память для них выделяется только динамически в ходе работы программы.
Доступ к динамическим переменным осуществляется с помощью указателей (или ссылок), которые становятся определенными после создания динамического объекта.
Динамические переменные очень широко используется в программировании, более того, современные операционные системы имеют функции поддержки динамических областей памяти.
Динамические переменные используются при заранее неизвестном количестве элементов обрабатываемой информации: строк текста, таблиц, больших матриц данных и т.п. Естественно, можно было бы использовать и другие структуры данных, например массивы, но память тогда будет использоваться неэкономно и, самое важное, придется указывать максимальные размеры данных, что крайне нежелательно. Более того, существуют ситуации, когда без динамических переменных просто не обойтись.
1. В IBM-совместимых компьютерах используется сегментная организация памяти. Для 16-разрядных ОС, которой является и MS-DOS, максимальный размер сегмента данных не может превышать 64 Кбайт. Поэтому, если общее количество описанных статических переменных выходит за эту границу, возникает сообщение об ошибке «Выход за пределы памяти». Динамические переменные могут находиться в разных сегментах, поэтому их размер ограничен только размером оперативной памяти. Начиная с Delphi 2.0 (предназначенной для работы в Windows 95 OCR2, – 32-разрядной операционной системы, и выше) это ограничение снимается. Но здесь широко используются объекты, которые и являются динамическими.
2. Если в программе используются буфера памяти для временного хранения данных заранее неизвестного размера, обычно хранящихся в файлах. Это относится, например, к созданию текстовых редакторов.
3. Если в программе используются структуры данных, по своей природе являющиеся динамическими, или наиболее просто описываемые с помощью динамических структур. Например, используются объекты, связанные списки или деревья.
