- •ПОДПРОГРАММЫ
- •Подпрограмма - автономно оформленный алгоритм, который может быть использован другим алгоритмом.
- •Подпрограммы необходимы:
- •Подпрограммы - результат декомпозиции задачи на подзадачи при нисходящем
- •Основной вопрос: передача данных между подпрограммой и главной программой
- •ПОДПРОГРАММЫ
- •ФОРМАЛЬНЫЕ ПАРАМЕТРЫ ПОДПРОГРАММЫ
- •ФАКТИЧЕСКИЕ ПАРАМЕТРЫ ПОДПРОГРАММЫ
- •Соответствие между формальными и фактическими параметрами
- •Замена формальных параметров на фактические (вызов)
- •Замена формальных параметров на фактические по значению
- •Замена формальных параметров на
- •Когда применять замену по адресу,
- •ПОДПРОГРАММЫ
- •ПОДПРОГРАММЫ В СИ -ФУНКЦИИ
- •ПОДПРОГРАММЫ В ПАСКАЛЕ
- •ПАСКАЛЬ: ОПИСАНИЕ ПРОЦЕДУР
- •ПАСКАЛЬ: список формальных параметров подпрограммы
- •Данные подпрограммы
- •Обращение к процедуре
- •Пример. Даны две матрицы: а из 3-х строк и 5 столбцов и b
- •Блок-схема программы
- •Передача n,m,a
- •Программа примера
- •Программа примера (продолжение)
- •Программа примера (продолжение)
- •ПАСКАЛЬ: ОПИСАНИЕ ФУНКЦИЙ
- •Пример функции
- •Обращение к функции
- •Пример. Вычислить значение У:
- •Пример программы, использующей функции
- •Пример программы, использующей функции (продолжение)
- •Пример программы, использующей функции (продолжение)
- •Пример программы, использующей функции (продолжение)
- •Глобальные и локальные имена
- •Область памяти для локальных и глобальных имен
- •Схема заполнения стэка
- •Область действия имени
- •Время жизни (существования) данных
- •Пример
Замена формальных параметров на фактические по значению
Схема памяти |
Схема памяти |
|
||||
программы – |
подпрограммы – |
|
||||
фактические параметры |
формальные параметры |
|||||
|
|
при вызове подпрограммы |
Имена |
|||
A |
|
|
D |
|
|
|
|
|
|
|
|||
|
|
|
|
формальных и |
||
|
|
|
|
|
|
фактических |
|
… |
|
… |
|||
B1 |
|
|
B1 |
|
|
параметров никак |
|
|
|
|
|||
|
… |
|
|
не связаны |
||
|
|
|||||
|
|
|
|
|
|
B5 |
|
B5 |
|
При пересылке значений подпрограмма работает с копией фактических параметров, изменения копий не передаются в программу
результаты нельзя передавать по значению.
Замена формальных параметров на
фактические по ссылке (адресу)
Схема памяти |
|
Схема памяти |
программы – |
|
|
|
подпрограммы – |
|
фактические параметры |
|
|
|
формальные параметры |
|
при вызове подпрограммы |
|
|
|
|
Двойная адресация: |
A |
D |
формальный параметр |
(адрес данного) |
||
… |
… |
значение данного (из |
B1 |
B |
памяти программы) |
|
B5
При пересылке адресов подпрограмма работает с памятью программы, все изменения происходят с данными программы результаты
передаются по ссылке.
Когда применять замену по адресу,
акогда - по значению?
•Переменные, являющиеся результатом выполнения
подпрограммы, должны вызываться по адресу.
•Если фактическое значение может быть константой или выражением,то надо использовать вызов по значению.
•Массивы, как правило, передаются по адресу (с целью экономии памяти).
•Как правило, использование вызова по адресу вместо вызова по значению приводит к уменьшению быстродействия подпрограммы (за счет переадресации) и к экономии памяти.
ПОДПРОГРАММЫ
ОБЩЕГО
НАЗНАЧЕНИЯ
ФУНКЦИИ
Имя функции - не только имя алгоритма, но и имя результата.
Функция, как правило, имеет один основной результат.
ПОДПРОГРАММЫ В СИ -ФУНКЦИИ
ОБЩЕГО НАЗНАЧЕНИЯ – функции типа void
ФУНКЦИИ,
возвращающие значения (любого типа, отличного от void)
ПОДПРОГРАММЫ В ПАСКАЛЕ
ОБЩЕГО НАЗНАЧЕНИЯ – процедуры (procedure)
ФУНКЦИИ
(function)
ПАСКАЛЬ: ОПИСАНИЕ ПРОЦЕДУР
Заголовок;procedure ИмяПроцедуры [(CписокФормальныхПараметров)]
Блок Описания (Const… Type… Var…
процедуры и функции) begin
Операторы
end;
«вход» и «выход» процедуры
ПАСКАЛЬ: список формальных параметров подпрограммы
Секция1; Секция2;...;СекцияN Секция имеет вид:
[VAR] CписокПеременных :Тип;
если VAR имеется, то передача по ссылке (параметр-переменная); иначе
– по значению (параметр-значение)
стандартный или имя нестандартного
Секция
параметров-значений параметров-переменных параметров-подпрограмм
Данные подпрограммы
локальные
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
формальные и |
|
|
|
|
|
|
доступны |
|
|||||
внутреннего |
|
|
|
|
|
|
только в блоке |
|
|||||
блока |
|
|
|
|
|
|
подпрограммы |
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
место в |
|
|
|
|
|
существуют |
|
|||||
|
памяти - стэк |
|
|
|
|
|
пока работает |
|
|||||
|
|
|
|
|
|
|
|
|
подпрограмма |
|
|||
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
память
распределяется при выполнении
глобальные
описаны по внешнем блоке (программе)
место в памяти – статический сегмент
память
распределяется при компиляции (вызове подпрограммы)
доступны во всей программе; в подпрограмме недоступны, если есть локальное данное с тем же именем
существуют все время работы программы
Обращение к процедуре
ИмяПроцедуры [(CписокФактическихПараметров)]