 
        
        - •ПОДПРОГРАММЫ
- •Подпрограмма - автономно оформленный алгоритм, который может быть использован другим алгоритмом.
- •Подпрограммы необходимы:
- •Подпрограммы - результат декомпозиции задачи на подзадачи при нисходящем
- •Основной вопрос: передача данных между подпрограммой и главной программой
- •ПОДПРОГРАММЫ
- •ФОРМАЛЬНЫЕ ПАРАМЕТРЫ ПОДПРОГРАММЫ
- •ФАКТИЧЕСКИЕ ПАРАМЕТРЫ ПОДПРОГРАММЫ
- •Соответствие между формальными и фактическими параметрами
- •Замена формальных параметров на фактические (вызов)
- •Замена формальных параметров на фактические по значению
- •Замена формальных параметров на
- •Когда применять замену по адресу,
- •ПОДПРОГРАММЫ
- •ПОДПРОГРАММЫ В СИ -ФУНКЦИИ
- •ПОДПРОГРАММЫ В ПАСКАЛЕ
- •ПАСКАЛЬ: ОПИСАНИЕ ПРОЦЕДУР
- •ПАСКАЛЬ: список формальных параметров подпрограммы
- •Данные подпрограммы
- •Обращение к процедуре
- •Пример. Даны две матрицы: а из 3-х строк и 5 столбцов и b
- •Блок-схема программы
- •Передача n,m,a
- •Программа примера
- •Программа примера (продолжение)
- •Программа примера (продолжение)
- •ПАСКАЛЬ: ОПИСАНИЕ ФУНКЦИЙ
- •Пример функции
- •Обращение к функции
- •Пример. Вычислить значение У:
- •Пример программы, использующей функции
- •Пример программы, использующей функции (продолжение)
- •Пример программы, использующей функции (продолжение)
- •Пример программы, использующей функции (продолжение)
- •Глобальные и локальные имена
- •Область памяти для локальных и глобальных имен
- •Схема заполнения стэка
- •Область действия имени
- •Время жизни (существования) данных
- •Пример
 
Пример. Даны две матрицы: а из 3-х строк и 5 столбцов и b из 7 строк и 3 столбцов. Вычислить минимальные значения элементов для каждой строки каждой из этих
матриц. Состав данных программы
| Имя | Смысл | Тип | Структура | 
| 
 | 
 | Исходные данные | 
 | 
| а | заданные матрицы | вещественный | двумерный массив размером 7*5 | 
| b | 
 | 
 | 
 | 
| 
 | 
 | Выходные данные | 
 | 
| mina | минимальные | вещественны | одномерный массив из 7 | 
| 
 | значения | й | элементов | 
| 
 | элементов строк | 
 | 
 | 
| minb | матрицы a(b) | 
 | 
 | 
| 
 | 
 | 
 | 
 
Блок-схема программы
начало
Ввод матрицы а matrin(3,5,’a’,a)
Ввод матрицы b matrin(7,3,’b’,b)
Обработка матрицы а minstr(a,3,5,mina)
Обработка матрицы а minstr(b,7,3,minb)
Вывод minа masout(3,’a’,mina)
Вывод minb masout(7,’b’,minb)
Промежуточных переменных нет: все мелочи – в подпрограммах!
конец
 
Передача n,m,a
i:=1
нет
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | i | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | да | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | n | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
 | min[i]:=a[i][1] | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | j=2 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | нет | 
 | 
 | 
 | ||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | j | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||
| 
 | 
 | нет | 
 | 
 | m | 
 | 
 | 
 | 
 | 
 | 
 | 
 | да | 
 | 
 | 
 | ||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||
| 
 | 
 | 
 | 
 | 
 | a[i] | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||
| 
 | 
 | 
 | 
 | 
 | [j]<min[i] | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | min[i]=a[i][j] | 
 | 
 | 
 | ||||||||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | j=j+1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
i=i+1
Передача min
Блок-схема процедуры определения минимальных значений строк матрицы
 
Программа примера
program primer2_2;
Type matr=array[1..7,1..5] of real; mas= array[1..7] of real; Var a,b:matr; mina,minb:mas; {далее-раздел процедур и функций}
Procedure minstr(Var a:matr; n,m:integer; Var min:mas); Var i,j:integer;
Begin
for i:=1 to n do begin
min[i]:=a[i,1]; for j:=2 to m do
if min[i]>a[i,j] then min[i]:=a[i,j];
end End{minstr};
 
Программа примера (продолжение)
Procedure matrin(n,m:integer; c:char; Var p:matr); Var i,j:integer;
Begin
Writeln('Введите матрицу ',c,' размером ',n,'*',m); for i:=1 to n do
for j:=1 to m do read(p[i,j]);
readln;
End{matrin};
Procedure masout(n:integer;c:char;Var min:mas); Var i:integer;
Begin
Writeln('Минимальные значения строк матрицы ',c); for i:=1 to n do
writeln(' ',min[i]); End{masout};
 
Программа примера (продолжение)
Begin {начинается раздел действий программы} matrin(3,5,'a',a);
matrin(7,3,'b',b); minstr( a,3,5,mina); minstr( b,7,3,minb); masout(3,'a', mina); masout(7,'b', minb); readln
End.
 
| ПАСКАЛЬ: ОПИСАНИЕ ФУНКЦИЙ | ||||
| Заголовок; | function ИмяФункции [(CписокФормалПарам)] :ТипФункции | |||
| Блок | Описания (Const… Type… Var… | |||
| 
 | ||||
| 
 | процедуры и функции) | 
 | ||
| 
 | begin | 
 | 
 | |
| 
 | Операторы | 
 | 
 | |
| 
 | ИмяФункции :=результат | 
 | ||
| 
 | end; | 
 | 
 | |
| Не разрешены операторы | 
 | Основное выходное значение | ||
| накапливания: | 
 | |||
| вход и неосновные результаты | ||||
| ИмяФункции:= ИмяФункции+… | ||||
| 
 | 
 | |||
 
Пример функции
function sum(var v:mas; n:integer):real;
{функция вычисляет сумму первых n (n<=10) элементов массива v}
var s:real; i:integer; begin
s:=0; {sum нельзя использовать для накапливания суммы}
for i:=1 to n do s:=s+v[i]; sum:=s;
end;
 
Обращение к функции
Обращение к функции производится в выражениях посредством использования указателя фукции:
ИмяФункции[(Список фактических параметров)];
Указатель функции может стоять только в правой части оператора присваивания.
 
Пример. Вычислить значение У:
| 
 | 10 | 
 | 5 | 
 | 
 | 5 | 
| 
 | 
 | 
 | bi 5 | 
 | 
 | bi | 
| 
 | ai | 
 | ||||
| y | i 1 | i 1 | 
 | 
 | i 1 | |
| 
 | 
 | 
 | 
 | 
 | ||
| 
 | 
 | 
 | 10 | 
 | 
 | 
 | 
| 
 | 
 | 
 | ai | 
 | 
 | 
 | 
| 
 | 
 | 
 | i 1 | 
 | 
 | 
 | 
