
- •1.Язык Object Pascal. Алфавит языка. Операторы. Выражения. Структура программы.
- •2. Простые типы данных. Преобразование типов. Приведение типов. Составной оператор.
- •3. Управляющие конструкции языка.
- •3.1 Безусловные конструкции
- •3.2 Условные конструкции.
- •3.3 Циклические конструкции.
- •4. Комментарии в крограммах. Директивы.
- •5. Структурные типы данных.
- •5.3 Записи.
- •6. Подрограммы.
- •6.1 Процедуры и функции. Состав. Синтаксис.
- •6.2 Список формальных параметров.
- •6.3 Параметры-значения. Параметры-переменные. Параметры-константы. Нетипизированные параметры.
- •6.4 Передача массивов в подпрограммы. Параметры типа открытый массив.
- •6.5 Локальные переменные. Область видимости. Время жизни.
- •6.6 Рекурсия. Виды рекурсии. Опережающее описание подпрограмм.
- •6.7 Процедурные типы
- •7. Модули
- •7.1 Назначение. Синтаксис.
- •8. Файлы
- •8.1 Общий алгоритм работы с файлом.
- •8.2 Подпрограммы для открытия файла.
- •8.3 Типизированные файлы. Режимы доступа к файлу. Переменная Filemode.
- •8.4 Обработка ошибок ввода-вывода.
- •8.5 Нетипизированные файлы.
- •8.6 Текстовые файлы
- •9. Динамическая память и указатели.
- •9.1 Указатель. Синтаксис. Допустимые операции.
- •9.2 Типизированные и нетипизированные указатели.
- •9.3 Операция резадресации (разыменования) указателя. Операции взятия адреса. Пустой указатель.
- •10. Типы с управляемым временем жизни.
- •10.1 Длинные строки. Механизм подсчета ссылок.
- •12.2 Динамические массивы.
- •11. Динамические структуры данных. Связные списки. Вставка и удаление узлов.
- •11.1 Односвязные списки. Структура. Особенности обработки.
- •11.2 Двусвязные списки
- •11.3 Кольцевые списки.
- •12. Отладка программ.
- •12.1 Виды программных ошибок.
- •12.2 Отладка программ.
- •12.3 Принципы контрактного программирования.
- •12.4 Принципы модульного тестирования.
- •12.5 Трассировка. Точки контрольного останова
- •12.6 Ведение протокола программы.
- •12.8 Основные принципы оформления исходного кода программы.
- •13. Алгоритмы
- •13.1 Алгоритм последовательного поиска.
- •13.2 Алгоритм бинарного поиска.
- •13.3 Алгоритм интерполирующего поиска.
- •13.4 Алгоритм вставки элемента в отсортированный массив.
- •13.5 Алгоритм поиска минимального (максимального) элемента массива.
- •13.6 Алгоритм пузырьковой сортировки.
- •13.7 Алгоритм сортировки перемешиванием.
- •13.8 Алгоритм сортировки прочесыванием.
- •13.9 Алгоритм сортировки методом выбора.
- •13.10 Алгоритм сортировки методом вставок.
- •13.11 Алгоритм сортировки методом Шелла.
- •13.12 Алгоритм сортировки слиянием.
- •13.13 Алгорим быстрой сортировки (сортировка Хоара).
9. Динамическая память и указатели.
9.1 Указатель. Синтаксис. Допустимые операции.
При загрузке в память программа располагается в ней следующим образом
Секция кода – это та часть программы где хранится исполняемый код модулей, а также основной программы.
Стек – это специальным образом организованная область памяти для временного хранения данных. Обычно стек используется для хранения фактических параметров передаваемых в подпрограммы, а также локальных переменных и констант.
Динамическая память – это оперативная память компьютера, предоставляемая программе при ее работе. В отличие от статического размещения данных, осуществляемого компилятором Object Pascal в процессе компиляции программы, при динамическом размещении заранее не известны ни тип, ни количество размещаемых данных.
Учитывая, что при работе программа может использовать любые ячейки памяти, то необходимо вести учет занятых или учет свободных ячеек памяти. Иначе возможна ситуация когда различные части программы будут использовать одну и ту же область памяти, что может привести к порче данных и краху приложения. Эту функцию выполняет специальная часть программы называемая менеджером памяти. Менеджер памяти находится в модуле System.
Динами́ческая переме́нная — переменная в программе, место в оперативной памяти под которую выделяется во время выполнения программы. По сути, она является даже не переменной, а участком памяти, выделенным системой программе для конкретных целей.
Указатель – это переменная, которая в качестве своего значения содержит адрес ячейки памяти. С помощью указателей можно размещать в динамической памяти любой из известных в Object Pascal типов данных. Лишь некоторые из них (Byte, Char, Shortlnt, Boolean) занимают во внутреннем представлении один байт, остальные –несколько смежных.
Общий синтаксис объявления типизированного указателя имеет вид: ^<тип>;
В качестве типа можно использовать любой тип данных, кроме файлового.
9.2 Типизированные и нетипизированные указатели.
Указатель может связывается с некоторым типом данных. Такие указатели называют типизированными.
Указатели, не связанные с каким-либо конкретным типом данных, называются нетипизированными. В Object Pascal для этого служит стандартный тип Pointer. Поскольку нетипизированные указатели не связаны с конкретным типом, с их помощью удобно динамически размещать данные, структура и тип которых меняются в ходе работы программы.
var p: pointer; //нетипизированный указатель
9.3 Операция резадресации (разыменования) указателя. Операции взятия адреса. Пустой указатель.
Для определения адреса переменной используется оператор @, например
Var a:integer; //целочисленная переменная
p:^integer;//указатель на целочисленную переменную
begin
...
p:=@a; {вычисляем адрес переменной a и
помещаем его в переменную p}
...
end.
Чтобы получить доступ к данным, адрес которых содержит указатель, необходимо применить к указателю операцию резадресации (разыменования). Сделать это можно с помощью оператора «^», например
var a:integer; //целочисленная переменная
p:^integer;//указатель на целочисленную переменную
begin
...
p:=@a; {вычисляем адрес переменной a и помещаем его в переменную p}
p^:=1;{в ячейку памяти адрес которой содержится в указателе p записываем единицу}
writeln(a);{на экран будет выведена единица}
...
end.
Пустой указатель служит для определения указателей которым еще не присвоен адрес какой-либо переменной с целью исключения обращения программы по несуществующему или неправильному адресу.