- •1.Этапы разработки компьютерной программы.
- •2.Алгоритмы и их свойства.
- •3.Формы существования алгоритмов; Блок-схемы; Примеры записи алгоритма в виде блок схемы.
- •4.Классификация алгоритмических языков.
- •5.Понятие структурного программирования.
- •6.Характеристика алгоритмического языка Паскаль.
- •7.Элементы языка Паскаль (алфавит, индентификаторы, константы, выражения, операции).
- •8.Структура программ, при использовании для разработки программы алгоритмического языка Паскаль.
- •9.Операторы Паскаля.
- •1. Составной и пустой операторы
- •2. Операторы ветвлений
- •3. Операторы повторений
- •10.Ввод и вывод данных в Паскале.
- •11.Операторы Паскаля: составной оператор и пустой оператор.
- •12. Операторы Паскаля: условный оператор.
- •13. Операторы Паскаля: операторы повторений.
- •14. Операторы Паскаля: операторы цикла с предусловием.
- •16. Операторы Паскаля: оператор цикла с постусловием (repeat… until).
- •17.Операторы Паскаля: оператор цикла с параметрами (for …to …do).
- •18. Операторы Паскаля: оператор безусловного перехода, метки. Оператор безусловного перехода goto
- •19.Подпрограммы в Паскале.
- •20.Процедуры в Паскале.
- •21.Функции в Паскале.
- •Описание и вызов процедур и функций
- •22.Типы данных в Паскале: простые типы.
- •23. Типы данных в Паскале: структурированные типы. Массивы.
- •24. Типы данных в Паскале: структурированные типы. Записи.
- •25. Типы данных в Паскале: структурированные типы. Множества.
- •26. Типы данных в Паскале: структурированные типы. Файлы (понятие файла, доступ к файлу, процедуры и функции для работы с файлами).
- •27. Типы данных в Паскале: структурированные типы. Файлы (текстовые, типизированные, нетипизированые).
- •28.Аппарат формальных и фактических параметров при работе с подпрограммами.
- •Назначение подпрограмм.
- •Механизм подпрограмм, их описание и вызов
- •Параметры подпрограмм ]Назначение параметров
- •[Править]Формальные и фактические параметры
- •[Править]Способ передачи параметров в подпрограмму
- •[Править]Виды подпрограмм
- •29.Массивы.
- •30.Сортировки массивов. Прямые методы сортировки.
- •31.Сортировка вставкой.
- •32.Сортировка массивов. Прямые методы сортировки.
- •33.Сортировка обменом.
- •34.Сортировка массивов. Прямые методы сортировки
- •35. Сортировка выбором.
- •36.Двоичный поиск в массиве.
- •37. Поиск данных в массиве по ключу.
- •38.Средства тп для работы с файлами.
- •39.Классификация структур данных в Паскале.
- •40.Данные статической структуры в Паскале.
- •41.Переменные строкового типа.
- •42.Динамические структуры данных в Паскале.
- •43.Динамическая память. Понятия адреса и указателя. Объявление указателей. Динамическая память
- •Адреса и указатели
- •Объявление указателей
- •44.Динамическая память. Выделение и освобождение динамической памяти.
- •45.Процедуры и функции для работы с динамической памятью.
- •46.Связанные динамические данные.
- •47. Связанные динамические данные: очередь.
- •Принципы работы с динамической очередью
- •48. Связанные динамические данные: стек.
- •Описание стека
- •Работа с динамическим стеком
- •49. Связанные динамические данные: списки. Динамические структуры данных
- •Классификация структур данных
- •Данные динамической структуры:
- •Статические и динамические переменные в Паскале
- •Указатели
- •Объявление указателей
- •Выделение и освобождение динамической памяти
- •Присваивание значений указателю
- •Операции с указателями
- •Присваивание значений динамическим переменным
- •Динамические структуры
- •Описание списка
- •Формирование списка
- •Просмотр списка
- •Удаление элемента из списка
- •Динамические объекты сложной структуры
- •50. Связанные динамические данные: деревья.
- •51.Понятие рекурсии, примеры рекурсивных алгоритмов.
42.Динамические структуры данных в Паскале.
Ранее изучаемые типы данных относятся к так называемым статическим. Память под них выделяется во время компиляции, количество таких объектов не меняется во время выполнения программы. Однако существует ряд задач, где статические структуры неэффективны. В языке Паскаль имеются средства создания динамических структур данных, которые позволяют во время выполнения программы:
образовывать объекты;
выделять для них память;
уничтожать, когда в них исчезает необходимость.
Другое название динамической памяти – куча.
Для получения ясного представления о динамических переменных надо рассмотреть структуру памяти во время выполнения программы на языке Паскаль (см. рис.1).
Данные в динамической памяти размещают с использованием указателей. Указатель - это ссылка на определенную ячейку памяти, начиная с которой записывается значение переменной, поэтому данные такого типа называются еще и ссылочным типом данных.
Фо Type <тип указателя> = ^ <идентификатор типа>,
то есть указатель связан с некоторым типом данных. Такие указатели называются типизированными.
Пример описания переменных ссылочного типа:
Type p1=^integer; p2=^real; Var A,B,C:p1; X,Y,Z:p2; P:^char;
Cсылочные переменные A, B, C указывают на динамические объекты целого типа, X,Y,Z - вещественного, P - символьного. Значением ссылочной переменной является адрес в динамически выделенной памяти, где хранится объект этого типа.
Рис. 1. Структура памяти во время выполнения программы
Для обращения к ссылочной переменной используют запись “ A^ ”, что означает: ”идти по адресу, хранящемуся в A”. Память под указатели отводится на этапе компиляции.
Однако в Турбо Паскале можно объявлять указатель и не связывать его с конкретным типом данных. Такой указатель называется нетипизированным. Для его объявления служит стандартный тип pointer. Структура и тип таких данных могут меняться во время выполнения программы.
При работе с указателями обязательны этапа два:
объявление указателя;
формирование динамических данных, память которых отводится во время выполнения программы.
Для работы с указателями используются следующие процедуры:
New(P) - процедура, которая создает в динамической памяти новую переменную. Р - указатель переменной того типа, который надо создать. Каждая отдельная процедура new может создать только одну динамическую переменную.
Dispose(P) - процедура, позволяющая вернуть в кучу участок памяти, занятый объектом с указателем Р.
Параметрами процедур new и dispose может быть только типизированный указатель. Для работы с нетипизированными указателями используются аналогичные процедуры:
GetMem(P,Size) - резервирование памяти;
FreeMem(P,Size) - освобождение памяти.
Здесь Р - нетипизированный указатель,Size - размер в байтах требуемой или освобождаемой части кучи ( до 65521 байт).
Над указателями могут быть определены операции проверки на равенство и присваивание (рис.2):
Рис. 2. Допустимое присваивание
Пример.
Var x,y:^integer; Begin new(x); {порождаем динамический объект целого типа} x^:=13; {по адресу x заносим значение 13} y:=x; {в у заносим значение того же адреса, что и х} writeln(y^); end.
Ссылочной переменной может быть присвоенной “пустое” значение адреса, обозначенное служебным словом nil, что означает, что ссылочная переменная не указывает ни на один динамический объект. Это присваивание можно делать до выполнения процедуры new. Значение nil - это два нулевых слова. Оно может быть присвоено указателю любого типа.
Динамически размещенные данные можно использовать в любом месте программы, например:
Var a, b, c = ^ real; Begin a^:=sqr(b^)+c^-17;
Недопустимо писать a:=sqr(b^), так как указателю нельзя присвоить значение вещественного выражения.