Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 2 семестр.doc
Скачиваний:
14
Добавлен:
01.04.2025
Размер:
609.28 Кб
Скачать

1.2. Обращение к подпрограммам

Описав подпрограмму, ее можно использовать в нужном месте программы. Обращение к функции, представляющее собой <Имя_функции> (<Список фактических параметров>), может входить в состав выражений и в список элементов оператора вывода. Для обращения к процедуре используют оператор вызова процедуры, имеющий следующий вид:

<Имя_процедуры> (<Список фактических параметров>);.

При замене формальных параметров на фактические в обращении к подпрограмме следует соблюдать соответствие в числе, типе и порядке следования параметров. Покажем использование подпрограмм на примере.

Пример 3. Найти сумму элементов матрицы с использованием подпрограмм ввода элементов вектора и вычисления их суммы.

program Sum_mat;

const k = 10; {Максимально возможное число элементов в векторе}

type

vector = array[1..k] of real; {Тип-вектор}

matrix = array[1..k] of vector; {Тип-матрица}

var

m : matrix;

col, row : byte; {Количество столбцов и строк в матрице}

v : vector;

i : byte;

function Summa(u : vector; n : byte) : real;

var

i : byte;

sum : real;

begin

sum := 0;

for i := 1 to n do

sum := sum + u[i];

Summa := sum

end; { Summa }

procedure Vvod(var w : vector; n : byte);

var

i : byte;

begin

writeln('Введите через пробел ', n, ' чисел');

for i := 1 to n do read(w[i])

end; {Vvod}

{Тело основной программы}

begin

writeln('Введите число строк и столбцов в матрице');

readln(row, col);

for i := 1 to row do {Ввод матрицы: }

Vvod(m[i], col); {каждая ее строка – это вектор}

for i := 1 to row do

v[i] := Summa(m[i], col); {Сумма элементов i-й строки}

writeln('Сумма элементов матрицы pавна ',Summa(v, row) : 3 : 0);

writeln('Нажмите ENTER'); readln

end.

1.3. Виды параметров подпрограмм

Для организации правильного взаимодействия с основной программой подпрограмма использует формальные параметры разного вида.

1.3.1. Параметры-значения и параметры-переменные

Для передачи исходных данных в подпрограмму применяют параметры-значения, которые могут быть любого типа, кроме файлового. При обращении к подпрограмме происходит замена формального параметра его конкретным значением, которое передается в подпрограмму в виде копии через стек. Стек представляет собой особым образом организованную область памяти компьютера (сегмент стека, размер которого можно изменять директивой). Данные, помещенные в стек, выбираются из него по правилу: последним вошел, первым вышел. Возвращаются результаты выполнения подпрограммы с помощью параметров-переменных, которые описываются в ее заголовке с использованием служебного слова var и могут быть любого типа. При обращении к подпрограмме происходит передача в нее адреса конкретной переменной. Поэтому такой вид передачи часто называют передачей по ссылке. В приведенных примерах формальные параметры u и n являются параметрами-значениями, а параметр w – параметром-переменной. Покажем на простейшем примере принципиальную разницу между этими двумя видами параметров, для чего оформим в программе две процедуры изменения аргумента: первая имеет параметр-значение, а вторая – параметр-переменную.

Program Raznica;

var x : byte;

procedure Izm1(arg : byte); begin arg := 1 end;

procedure Izm2(var arg : byte); begin arg := 1 end;

begin

x := 5;

Izm1(x); writeln(x); {Выводится число 5}

Izm2(x); writeln(x) {Выводится число 1}

end.