Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР5 (Процедуры и функции).doc
Скачиваний:
6
Добавлен:
04.12.2018
Размер:
150.02 Кб
Скачать

2.3 Подпрограмма-процедура

Любая процедура начинается с заголовка. В отличие от основной программы заголовок в процедуре обязателен. Общий вид заголовка:

procedure <имя процедуры>(<формальные параметры> : <тип>);

За заголовком могут идти такие же разделы, что и в основной программе. В отличие от основной программы процедура завершается точкой с запятой.

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

Разрешается описывать процедуры без формальных параметров, тогда организация передачи информации из программы в процедуру и обратно проводится с помощью глобальных переменных, а заголовок процедуры будет иметь более простой вид: procedure <имя процедуры>;

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

Streug(a,b,c,s);

Streug(a/b,c+5,7,s1); .

Вызов процедуры без формальных параметров осуществляется по имени.

Пример 1. Даны два массива из N целых элементов из интервала [-20,20]. В каждом массиве найти максимальный элемент и затем сравнить их.

Program SravMas; {сравнение максимальных и минимальных элементов}

Const n=15;

Type massiv=Array[1..n] оf Integer;

Var m1, m2 : massiv;

max1, max2 : Integer;

{ процедура заполнения матрицы случайными числами }

Procedure RandomMas(Var x:massiv);

Var i:Integer;

Begin

Randomize;

For i:=1 To n Do x[i] := -20+Random(41);

End;

{ процедура вывода матрицы }

Procedure VivodMas(Var x:massiv);

Var i:Integer;

Begin

For i:=1 To n Do write(x[i]:5);

End;

{ процедура нахождения максимального элемента матрицы }

Procedure MaxMas(Var x:massiv; Var MX:Integer);

Var i:integer;

Begin

MX:=x[1];

For i:=2 to n do

if x[i]>MX then MX:=x[i];

End;

{ основная программа }

Begin

RandomMas(m1);

Writeln('Первый массив:');

VivodMas(m1);

RandomMas(m2);

Writeln('Второй массив:');

VivodMas(m2);

{вызов процедуры нахождения максимального элемента}

MaxMas(m1,max1);

MaxMas(m2, max2);

if max1>max2 then writeln('В 1-м массиве максимальный элемент больше и =',max1) else

if max1<max2 then writeln('Во 2-м массиве максимальный элемент больше и=',max2)

else writeln('В обоих массивах максимальные равны ',max1);

End.

2.4 Подпрограмма-функция

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

Основные отличия функции от процедуры:

1.     Заголовок функции состоит из слова function, за которым следует имя функции, далее в круглых скобках - список формальных параметров, затем через двоеточие записывается тип функции - тип возвращаемого параметра. Функция может возвращать параметры следующих типов: любого порядкового, любого вещественного, стандартного строкового типа string, любого указателя.

2.     В теле функции хотя бы раз имени функции должно быть присвоено значение:

<имя функции> := <результат>; .

3.     Функция вызывается в каком-нибудь выражении.

Пример 2. Составить программу табулирования функции на отрезке с шагом h.

Program pr_2;

Var a,b,h,x : real;

Function f(t : real) : real;

Begin

f:=t*cos(t);

End;

Begin

Write('Введите начало и конец отрезка: ');

Readln(a,b);

Writeln('Введите шаг табуляции: ');

Readln(h);

Writeln('Аргумент Функция f(x)=x cos(x) ');

x:=a;

Repeat

writeln(x:6:3, f(x):20:3);

x:=x+h;

Until x>b;

End.