Механизм параметров

В список параметров включаются исходные данные для работы процедуры/функции (входные параметры) и, если надо, указания, куда поместить результаты работы процедуры (выходные параметры).

Существует два способа передачи данных через список параметров из вызывающей программы в процедуру. Первый способ заключается в том, что процедуре передается некоторое данное в виде его значения, например, если данное числового типа, передается само число. Второй способ заключается в том, что передается не значение данного, а адрес ячейки, где это данное находится (говорят, что передается имя переменной). Таким образом, параметры могут передаваться по значению и по имени. В каких случаях какой способ следует использовать? Обычно входные параметры передаются в процедуру по значению, а выходные – всегда по имени.

Есть некоторые особенности при передаче массивов (и других составных данных большого размера) в качестве фактических параметров. Даже если массив представляет собой входные данные и не меняется в процессе выполнения процедуры, его обычно передают по имени, так как это требует передачи только адреса начала массива, а не копии всего массива, как это потребовалось бы при передаче массива по значению. Кроме того, массив основной программы (фактический параметр) и массив в списке формальных параметров должны иметь один и тот же тип – т.е. должен использоваться один и тот же явный описатель.

Отметим, что когда параметры передаются по имени, они занимают в памяти по 4 байта. Подробнее об этом смотри лабораторную работу № 9.

Примеры написания списков формальных и фактических параметров:

..(A,B,C:real;VAR X1,X2:real;VAR N:integer); – формальные,

..(0.762,Alfa,C[3]-1.2,X,Y,Num); соответствующие фактические.

 

 

Для передачи массива в процедуру:

TYPE

Vect = array[1..10] of real;

Mas5x8 = array[1..5,1..8] of integer;

. . .

VAR

C1,C2: Vect;

A: Mas5x8;

Metod: Integer;

. . .

PROCEDURE GetMatr(M:integer; Var X,Y:Vect;

Var Z:Mas5x8;...);

VAR A1,C1:integer;

. . .

Begin

<Операторы тела процедуры >

End;

FUNCTION MinValueMatr( Var Z:Mas5x8; M,N:integer)

:Integer;

VAR MinZ, I, j :integer;

Begin

<Операторы тела функции >

MinValueMatr:= MinZ;

End;

BEGIN

<Операторы основной программы >

. . .

GetMatr(0, C2, C1, A,...); {обращение к процедуре}

. . .

If MinValueMatr(A,5,7) div 2 < 3 then {обращение к функции}

. . .

END.


Разбор контрольного варианта

Задание

Таблица 24. Данные к заданию 31 варианта

№ вар. Программа Процедуры (Функции) M<= N<= Файл с данными
Прямоугольный массив заполнить числами из файла, начиная с 33 числа. С помощью функции в исходном массиве сделать элементы последнего столбца равными сумме всех четных элементов соответствующей строки. 1)Исходный и полученный массивы печатать процедурой. 2)Построить функцию, которая возвращает сумму четных по значению элементов заказанной строки прямоугольного массива. DATI.BIN

Таблица идентификаторов

Составляется как для основной программы, так и для каждой подпрограммы пользователя.

Таблица 25. Идентификаторы программы 31 варианта

Имя Тип Р-р (байт) Назначение
Основная программа
KorrMass Имя программы - Обработка массива
Massiv Описатель типа - Описатель целочисл. массивов
Stroka Описатель типа - Описатель строки до 30 символов
M Целое Количество строк массива
N Целое Количество столбцов массива
i Целое Номер текущей строки массива
j Целое Номер текущего столбца массива
Fin Двоичный файл прямого доступа Файл с исходн. целыми числами
Fout Последовательный символьный файл Файл с результатами работы
Ouest1 Инициализирован-ная строка Запрос числа строк массива
Ouest2 Инициализирован-ная строка Запрос числа столбцов массива
A Целочисленный массив Обрабатываемый массив
InpMN Имя процедуры - Ввод размеров массива
PrintMas Имя процедуры - Вывод массива в файл протокола
DATI.BIN Строка – константа Имя набора данных с числами
Umnik_7.res Строка – константа Имя набора данных с протоколом
Sum Имя функции - Суммирование четных значений
InpMN –-Процедура ввода размеров массива
Txt Строка Формальный параметр – строка запроса
Kol Адрес целочисленной переменной Формальный параметр – имя переменной для результата ввода
MaxK Целое Формальный параметр – предельное возможное значение
PrintMas–- Процедура вывода массива в файл протокола (распечатки массива)
Txt Строка Формальный параметр – текст заголовка
Mas Адрес массива Формальный параметр – имя выводимого массива
NStr Целое Формальный параметр – число строк массива
NKol Целое Формальный параметр – число столбцов массива
i Целое Номер строки
j Целое Номер столбца
Sum – Функция вычисления суммы четных элементов заданной строки массива
Mas Адрес массива Формальный параметр – имя исходного массива
N Целое Формальный параметр – число столбцов массива
St Целое Формальный параметр – номер обрабатываемой строки
J Целое Номер элемента
S Целое Сумма
Odd Стандартная логическая функция - Проверка нечетности аргумента

 

 


 
 

Блок-схема алгоритма