Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С_испр_обработка_массивов_new.doc
Скачиваний:
25
Добавлен:
14.08.2019
Размер:
2.49 Mб
Скачать

Подпрограммы-процедуры Описание процедуры

Описание процедуры размещается в разделе описаний вызывающего модуля и состоит из заголовка, раздела описания и раздела операторов процедуры (см. раздел «Структура программы, использующей подпрограммы»).

Так как структура раздела описаний и раздела операторов подпрограммы аналогична структуре соответствующих разделов основной программы, рассмотрим подробно только правила составления заголовка подпрограммы-процедуры.

Формат заголовка:

Procedure <имя> [(<список формальных параметров>)];

Список формальных параметров подпрограммы-процедуры можно условно разделить на:

1) параметры, значения которых передаются в процедуру и остаются неизменными после её завершения (т.е. входные данные);

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

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

Замечание. В описаниях параметров подпрограммы нельзя создавать новые типы. Поэтому структурированные типы (массивы, записи, строки, файлы и т.д.) необходимо описывать в разделе type.

Примеры заголовков процедур:

Procedure Drawline; {процедура без параметров}

Procedure Kvadrant (A,B:real);

Procedure Sort(nx: integer; var x:massiv);

Procedure Amax(na: integer; const a:massiv; var max:real; var im, jm: integer);

Вызов процедуры

Вызов процедуры - это отдельный оператор, в котором указывается

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

Фактические параметры в списке перечисляются через запятую.

Примеры вызовов процедур:

Drawline;

Kvadrant(2,3);

Kvadrant(y,z);

Kvadrant(x+y,z+2)

Sort(n,a);

amax(n,x,xmax,imax,jmax);

Примеры использования подпрограмм-процедур

Задача 1: найти среднее арифметическое двух пар чисел А и В, С и D.

Program Primer_Procedure_1;

Var

A, B, C, D, S1, S2 : real;

Procedure Sum (N, M: integer; var S:real); {заголовок процедуры}

Begin{раздел операторов процедуры}

S := (N + M) / 2

End; {конец описания процедуры}

Begin {начало основной программы}

Writeln(’Введите 4 числа’);

Readln(A,B,C,D);

Sum(A, B, S1); {вызов процедуры с фактическими параметрами A, B, S1}

Sum(C, D, S2) {вызов процедуры с фактическими параметрами C,D, S2}

Writeln (’S1=’, S1:6:2,’S2=’, S2:6:2)

End.

Задача 2: найти сумму элементов главных диагоналей матриц A(n,n) и B(m,m) (n<=10, m<=15).

Program Primer_Procedure_2;

Const

Nmax=15;{наибольшее количество строк и столбцов матриц А и В}

Type

tmatr=array[1..Nmax, 1..Nmax] of real; {матричный тип}

Var{описание глобальных переменны }

A, B: tmatr;

n, m: byte;

Sa, Sb, Sab :real;

procedure EnterMatr(var matr : tmatr; var nm : byte; ch:char);

var

i, j : byte;

begin

write(‘Введите размерность квадратной матрицы ’,ch);

readln(nm);

writeln(‘Введите элементы матрицы по строкам’);

for i:=1 to nm do

for j:=1 to nm do

begin

write(ch,’[’,i, ’,’,j, ’]=’);

read(matr[i,j]);

end;

end;

Procedure Summa(const matr : tmatr; nm : byte; var s : real); {заголовок}

Var{раздел описания локальных переменных}

i: byte;

begin

s:=0;

for i:=1 to nm do

s:= s+ matr[ i, i ];

end; {конец описания процедуры}

begin {начало основной программы}

EnterMatr(A, n, ’А’); {вызов процедуры для ввода матрицы А}

EnterMatr(В, m, ’B’); {вызов процедуры для ввода матрицы В}

Summa (A, n, Sa);{вызов процедуры вычисления суммы в матрице А}

Summa (B, m, Sb) ; {вызов процедуры для вычисления суммы в матрице B}

Sab := Sa + Sb;

Writeln (’Sab=’, Sab:6:2)

end.