- •ПОДПРОГРАММЫ
- •Подпрограмма - автономно оформленный алгоритм, который может быть использован другим алгоритмом.
- •Подпрограммы необходимы:
- •Подпрограммы - результат декомпозиции задачи на подзадачи при нисходящем
- •Основной вопрос: передача данных между подпрограммой и главной программой
- •ПОДПРОГРАММЫ
- •ФОРМАЛЬНЫЕ ПАРАМЕТРЫ ПОДПРОГРАММЫ
- •ФАКТИЧЕСКИЕ ПАРАМЕТРЫ ПОДПРОГРАММЫ
- •Соответствие между формальными и фактическими параметрами
- •Замена формальных параметров на фактические (вызов)
- •Замена формальных параметров на фактические по значению
- •Замена формальных параметров на
- •Когда применять замену по адресу,
- •ПОДПРОГРАММЫ
- •ПОДПРОГРАММЫ В СИ -ФУНКЦИИ
- •ПОДПРОГРАММЫ В ПАСКАЛЕ
- •ПАСКАЛЬ: ОПИСАНИЕ ПРОЦЕДУР
- •ПАСКАЛЬ: список формальных параметров подпрограммы
- •Данные подпрограммы
- •Обращение к процедуре
- •Пример. Даны две матрицы: а из 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 |
|
|
|