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

Вызов процедур и функций

Вызов процедуры (функции) имеет вид:

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

Параметры, перечисленные в <списке параметров> при вызове процедуры (функции), называются фактическими.

<Список параметров> при вызове процедуры или функции заключается в круглые скобки и содержит последовательность фактических параметров, разделенных запятыми:

<идентификатор1>,<идентификатор2>…

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

!!! Количество, порядок следования и типы фактических параметров должны соответствовать количеству, порядку следования и типам формальных параметров!!!

При вызове процедур и функций формальные параметры заменяются фактическими.

Если процедура или функция не имеет параметров, то при объявлении и при вызове (<Список параметров>) опускается.

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

{****** 1. РАЗДЕЛ ОБЪЯВЛЕНИЙ И СОГЛАШЕНИЙ**********}

var x,y:real;

{****** 2. РАЗДЕЛ ПРОЦЕДУР И ФУНКЦИЙ***************}

function lg (x_:real):real;

begin

log:=ln(x_)/ln(10);

end;

{************3. РАЗДЕЛ ОСНОВНОЙ ПРОГРАММЫ**********}

BEGIN

writeln;

writeln('введите, x:');

readln(x);

writeln('введите y:');

readln(y);

writeln('lg(’, x , ’)=’, lg(x):8:5);

readln;

END.

Задача. Разработать программу, в которой с помощью функции пользователя, которая для введенного с клавиатуры числа n вычисляется значение n!.

{****** 1. РАЗДЕЛ ОБЪЯВЛЕНИЙ И СОГЛАШЕНИЙ**************}

var n: integer;

{****** 2. РАЗДЕЛ ПРОЦЕДУР И ФУНКЦИЙ*******************}

function fact(n1:integer):longint; {n!}

var i: byte;

f: longint;

begin

f:=1;

for i:=1 to n1 do

f:=f*i;

fact:=f;

end;

{************3. РАЗДЕЛ ОСНОВНОЙ ПРОГРАММЫ***************}

BEGIN

Writeln(‘Введите n’);

Readln(n);

Writeln(‘ n!=’, fact(n));

END.

Задача. Даны два одномерных массива А и В. Найти их скалярное произведение.

Скалярным произведением двух массивов одинаковой размерности называется сумма произведений соответствующих элементов: а[1]*b[1] + а[2]*b[2] +... + a[n-l]*b[n-l] + a[n]*b[n], где n — это количество элементов в массивах.

Program SCALAR_PROIZV_VEKT;

Uses Crt;

Const n=5;

Type mas=array[1..n] of integer;

Var i:integer;

x,y:mas;

function SCALAR(a,b:mas):integer;

var s:integer;

begin

s:=0;

for i:=1 to n do

s:=s+a[i]*b[i];

SCALAR:=s;

end;

BEGIN

clrscr;

randomize;

Writeln('massiv x');

for i:=1 to n do

begin

x[i]:=1+random(10);

Write(' x[',i,']=',x[i]);

end;

Writeln;

Writeln('massiv y');

for i:=1 to n do

begin

y[i]:=1+random(10);

Write(' y[',i,']=',y[i]);

end;

Writeln;

Writeln('x*y=',SCALAR(x,y));

END.

Результат работы программы:

massiv x

x[1]=1 x[2]=4 x[3]=3 x[4]=2 x[5]=3

massiv y

y[1]=8 y[2]=2 y[3]=2 y[4]=3 y[5]=1

x*y=31

Отличия процедур и функций

1. Функция возвращает в точку вызова некоторое значение, связанное с именем функции; процедура же не возвращает по имени никакого значения (поэтому при объявлении функции указывается тип возвращаемого значения).

2. При объявлении функции в основном блоке должен присутствовать как минимум один оператор, в котором имени функции присваивается некоторое значение. Данное значение и будет возвращено функцией в точку вызова. В случае с процедурой применение подобных операторов недопустимо (следствие из п.1). (пример: функции MyFunc, MyFunc1).

3. В отличие от вызовов процедур, вызов функции можно использовать в выражениях в качестве операнда (следствие из п.1). (примеры с присваиванием значений переменной e).