Пример 8.2.
…
const
a: integer = 5;
b: integer = 7;
{объявление процедуры}
procedure Inc2 (var c: integer; b: integer); {заголовок процедуры}
begin {начало тела подпрограммы}
c := c+c;
b := b+b;
writeln (‘удвоенные :’, c:5, b:5);
end; {конец тела подпрограммы}
begin {начало тела основной программы}
writeln (‘исходные :’, a:5, b:5);
inc2(a, b); {вызов тела подпрограммы}
writeln (‘результат :’, a:5, b:5);
end. {конец тела подпрограммы}
В результате прогона программы, на экран будет выведено:
Исходные : 5 7
Удвоенные : 10 14
Результат : 10 7
Задача 8.1. Определить расстояние между двумя точками.
Блок-схема алгоритма
Листинг процедуры DLINA
PROCEDURE DLINA (X1, X2, Y1, Y2 : REAL; VAR L : REAL);
BEGIN
L:= SQRT(SQR(X2-X1)+SQR(Y2-Y1));
END;
Блок-схема алгоритма основной программы
Листинг основной программы
PROGRAM TASK;
VAR Q1, Q2, K1, K2, D : REAL;
PROCEDURE DLINA(X1,X2,Y1,Y2 :REAL; VAR L : REAL);
BEGIN
L:= SQRT(SQR(X2-X1)+SQR(Y2-Y1));
END;
BEGIN
READLN (Q1, Q2, K1, K2);
DLINA (Q1, Q2, K1, K2, D);
WRITELN (D);
END.
Здесь,
Q1, Q2, K1, K2, D – глобальные переменные,
X1, X2, Y1, Y2, L – формальные параметры, где
X1, X2, Y1, Y2 – входные параметры-значения и
L – выходной параметр-переменная.
Задача 8.2. Определить в одномерном массиве минимальный элемент и его номер.
Примечание. Если в качестве параметров используются массивы, их необходимо объявлять в разделе типов.
Блок-схема алгоритма подпрограммы-процедуры MINVECTOR
Листинг подпрограммы-процедуры MINVECTOR
PROCEDURE MINVECTOR (D : VECTOR; L : INTEGER; MIN : INTEGER);
VAR
I: INTEGER;
BEGIN
MIN:= 1;
FOR I:=2 TO L DO
IF D[MIN] > D[I] THEN MIN:= I;
END;
Блок-схема алгоритма основной программы
Листинг основной программы
PROGRAM TASK;
CONST N = 25;
TYPE VECTOR = ARRAY[1..N] OF REAL;
VAR I, M : INTEGER; A: VECTOR;
PROCEDURE MINVECTOR (D : VECTOR; L : INTEGER; MIN : INTEGER);
VAR I: INTEGER;
BEGIN
MIN:= 1;
FOR I:=2 TO L DO
IF D[MIN] > D[I] THEN MIN:= I;
END;
BEGIN
FOR I := 1 TO N DO READLM (A[I]);
MINVECTOR (A, N, M);
WRITELN (‘Минимальный элемент массива равен - ’, A[M]:3);
ENDЗадача 8.3. Даны три массива А (20), В (30), С (25). Расположить элементы по возрастанию. Использовать процедуры для формирования массива, вывода первоначальных значений на экран и вывода упорядоченных элементов массива.
Блок-схема алгоритма подпрограммы InputVector
Листинг подпрограммы InputVector
PROCEDURE INPUTVECTOR (L: INTEGER; VAR D: VECTOR);
VAR I : INTEGER;
BEGIN
RANDOMIZE;
FOR I:=1 TO L DO D[I]:=RANDOM (101) - 50;
END;
Блок-схема алгоритма подпрограммы OutputVector
Листинг подпрограммы OutputVector
PROCEDURE OUTPUTVECTOR (L: INTEGER; D: VECTOR);
VAR I : INTEGER;
BEGIN
FOR I:=1 TO L DO WRITELN (D[I]);
END;
Блок-схема алгоритма подпрограммы SortVector (сортировка посредством выбора)
Листинг подпрограммы SortVector
PROCEDURE SORTVECTOR (L: INTEGER; VAR D: VECTOR);
VAR
I, J, T : INTEGER;
BEGIN
FOR I:=1 TO L-1 DO
FOR J:=I+1 TO L DO
IF D[J]>D[I] THEN
BEGIN
T:= D[I];
D[I]:= D[J];
D[J]:= T;
END;
END;
Блок-схема алгоритма основной программы
Листинг основной программы
PROGRAM TASK;
USES CRT;
CONST N = 30;
TYPE
VECTOR = ARRAY[1..N] OF INTEGER;
VAR
A, B, C : VECTOR;
PROCEDURE SORTVECTOR
(L: INTEGER; VAR D: VECTOR);
VAR
I, J, T : INTEGER;
BEGIN
FOR I:=1 TO L-1 DO
FOR J:=I+1 TO L DO
IF D[J]>D[I] THEN
BEGIN
T:= D[I];
D[I]:= D[J];
D[J]:= T;
END;
END;
BEGIN
CLRSCR;
INPUTVECTOR(20, A);
INPUTVECTOR(30, B);
INPUTVECTOR(25, C);
WRITELN (‘Сформированный массив А: ’);
OUTPUTVECTOR(20, A);
WRITELN (‘Сформированный массив В: ’);
OUTPUTVECTOR(30, B);
WRITELN (‘Сформированный массив С: ’);
OUTPUTVECTOR(25, C);
WRITELN (‘Отсортированный массив А: ’);
SORTVECTOR(20, A);
WRITELN (‘Отсортированный массив В: ’);
SORTVECTOR(30, B);
WRITELN (‘Отсортированный массив С: ’);
SORTVECTOR(25, C);
READLN;
END.
Вопросы для самопроверки
1. Дайте определение подпрограммы?
2. Каково основное назначение подпрограммы?
3. Как можно описать процедуру?
4. Каким образом процедура возвращает результат?
5. Где указывается список формальных параметров?
6. Для чего используются фактические параметры?
7. Каков принцип действия выходных и входных параметров?
8. В чём заключается различие между параметрами-значениями и параметрами-переменными?
9. Каков формат вызова процедуры и передачи параметров?
10. Какие три правила необходимо учитывать при передаче параметров?
11. В чём состоит принцип использования глобальных и локальных переменных?