
- •Var «Имя переменной »:set of «базовый тип » ;
- •Построение множеств :
- •Массив множеств.
- •Операция со множествами .
- •Операция включения и исключения одиночного элемента: реализуется с помощью .
- •Достоинство и недостатки множеств:
- •1 Способ : через определение соответствие типа
- •2 Способ : в разделе описания переменных:
- •Массивы записей
- •Записи со стартовыми значениями .
- •Вложенные записи
- •Оператор присоединения.
- •Вариантные записи .
- •Глобальные и локальные переменные
- •Вызов подпрограмм .
- •Формальные и фактические параметры .
- •Параметры подпрограмм.
- •Параметры – переменные.
- •Параметры –константы.
- •Функции
- •Обособленный вызов функций
- •Вложенные подпрограммы
- •Дальний и ближний вызов подпрограмм . Дальний вызов
- •Ближний вызов.
- •Подпрограмма с не типизированными параметрами .
- •Опережающее описание подпрограмм .
- •Рекурсивные подпрограммы
- •Внешние подпрограммы.
- •Процедуры и функции как параметры подпрограмм .
- •Расположение блоков программы в памяти .
- •Сегментный и адресный типы данных .
- •Динамическое распределение памяти
- •Динамические структуры используются в следующих случаях :
- •Ссылочный тип данных . Работа с адресами.
- •Синтаксис описания переменой ссылочного типа :
- •Основные операции с ссылочными переменными
- •Операция разыменования к указателям типа pointer .
- •Присваивание разыменование ссылок
- •Операция сравнивания
- •Процедуры работы с динамической памятью
- •Выделение блока памяти.
- •Процедура освобождения памяти
- •Выделение блока памяти из кучи
- •Процедура очистки памяти
- •Процедура маркировки адреса динамической памяти.
- •Процедура освобождения памяти
- •Функции анализа свободной памяти в «куче»
- •Управление размерами динамической памяти и размером стека.
- •Предопределенные указатели Администратор дп(кучи) .
- •Особенности при выделение блоков
- •Анализ ресурсов дп при размещение динамических данных.
- •Линейные динамические списки.
- •Определение элемента однонаправленного линейного списка.
- •Организация динамических списков и операции над ними.
- •1.Организация списка типа стек.
- •2.Формирование списка типа очередь(fifo).
- •Добавление элемента
- •Просмотр списка
- •Вставка элемента
- •Удаление узла из существующего списка.
- •Удаление текущего узла списка.
- •Удаление всего списка.
- •Открытие файла на запись (перезапись).
- •Буфер ввода-вывода.
- •Запись данных в файл.
- •Чтение данных из файла(read,readln).
- •Файлы ввода/вывода. Текстовые файлы. Процедуры работы с текстовыми файлами. Запись и чтение в текстовый файл информации различного типа (числовая, строковая). Процедуры работы с текстовым файлами.
- •Запись и чтение символьной информации.
- •Запись и чтение числовой информации
- •Запись и чтение строковой информации.
- •Типизированные файлы.
- •Доступ к компонентам файла осуществляется с помощью следующих процедур:
- •Добавление записи в типизированный файл
- •Удаление записи
- •Другие функции используемые при прямом доступе
- •Не типизированные файлы и операции над ними.
- •Структура модуля .
- •Var «библиотечные переменные »
- •Раздел реализации.
- •Компиляция модулей .
- •Подключение модулей
- •Закольцованность модуля.
Опережающее описание подпрограмм .
Так как текст программ транслируется в выполнимый код последовательно с верху в низ (в визуальном восприятии пользователя) , то типизированные – переменные , константы , подпрограммы должны описываться до того , как будут использоваться . В противном случае компилятор считается не определенным имя неизвестным и приходится перемещаться вверх по тексту , объявляя неизвестные компилятору данные . Однако в случае с подпрограммами этого можно избежать , используя опережающее описание подпрограмм применяя директиву Forward .
Синтаксис описания
Procedure P1 ; Forward;
Function f1 (x:byte ):char ; Forward;
……
Procedure p1 ;
Begin
……
End;
Function f1 ;
Begin
……..
End;
Указание директивы Forward говорит о том , что описание процедур или функций откладывается на потом , при чем при описании реализации функций или процедур , определяется ранее с директивой Forward ; списанные параметры можно не указывать . Очень часто директива Forward ; используется в случае взаимных обращений подпрограмм друг к другу
Пример
Procedure P1 (y:type x y );forward;
Procedure P2 (x: type x y );
Begin
P1 (p);
….
End;
Procedure P1;
Begin
P2(q);
….
End;
В
данном случае не обходимо осуществлять
конкретный выход из выполнения подпрограмм
, чтобы не было зацикливание вызовов
переполнение стека локальными
переменными и параметрами .
Рекурсивные подпрограммы
Под рекурсией понимают обращение подпрограммы к самой себе , то есть внутри тело подпрограммы стоит вызов стоит вызов самой подпрограммы .
Рекурсия в Паскале является возможной , так как при вызове подпрограммы динамически создаются новые локальные переменные . Распространенным применением рекурсии является вычисление факториалов и возведение в степень .
Пример подсчета факториала
1, n=0
N!=
N*(n-1)!, >0
Рекурсия заключается в том , т для каждого последующего значения необходимо знать предыдущее .
Var
M:longint ;
Function factorial (n :word ): longint ;
Begin
If n=0 then factorial :=1
Else Factorial :=n * Factorial (n-1 );
End;
Begin
M:=factorial (4);
End.
Работа данной функции : при вызове функции Factorial(4) в стек поступает копия параметра n elau n=0 , то вызывает эта же функция с параметром n-1
Значение параметра , который так же сохраняется в стеке . Такие последовательные сохранения значений параметров будут происходить до тех пор пака выражение определяющее функцию не будет полностью определенно . Таким образом в стеке будет храниться столько параметров , сколько рекурсий произошло до момента определения выражения . После определения выражения (при n=0 ) алгоритм начинает разворачиваться в обратную сторону изымаю из памяти отложенные в ней значения параметров . Поскольку при этом на каждом очередном шаге все элементы выражений будут известны , то через n обратных шагов будет получен конечный результат .
Для работы способности рекурсивных подпрограмм необходимым условием является наличие условия окончания рекурсии вызовов . Если они отсутствуют или не выполняются , то глубина рекурсии будет бесконечна , что приведет переполнению стека практически завершается фатальной ошибкой . Не смотрю на то , что рекурсии подпрограмм наглядно отражают алгоритм , они приводят к большому расходу памяти . В настающее время очень часто вместо использования рекурсивных программ эффективно используются итерационные методы решения задач , не требующей лишней памяти при сопоставимой скорости вычисления .
Лекция №6
Подпрограммы. Внешние подпрограммы. Подпрограммы в качестве параметров подпрограмм. Примеры.