Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций часть 1.doc
Скачиваний:
6
Добавлен:
04.11.2018
Размер:
352.77 Кб
Скачать

21.2. Функции.

Функция предназначена для вычисления какого-либо произвольного параметра. Общая структура функции совпадает с процедурой. В отличие от процедуры в теле функции , имя функции должно быть определено, то есть ему должно быть присвоено какое-либо значение.

Конструкция заголовка:

FUNCTION <имя_функции>(список_формальных_параметров): <тип функции>;

Тип функции - это тип возвращаемого параметра. Функция может возвращать параметры любого порядкового, вещественного типа или типа string.

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

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

21.3. Параметры формальные и фактические.

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

Формальные параметры могут быть пяти видов:

  1. параметры-значения, которые в основной программе не меняются;

  2. параметры-переменные, которые подпрограмма может изменить в основной программе;

  3. параметра - константы;

  4. параметры – процедуры и параметры - функции;

  5. параметры без типа.

Для каждого формального параметра нужно указать имя и, как правило, тип. Для параметра-переменной или параметра константы – его категорию.

Имена параметров могут быть любыми. Имена формальных параметров могут совпадать с именами других объектов программы, но в этом случае параметр основной программы становится недоступным для использования подпрограммой.

Тип формальных параметров может быть любым, однако в заголовке подпрограммы нельзя вводить новый тип.

Например:

Procedure ABC(A : array[1..100] of real); {неправильно}

Чтобы правильно записать заголовок следует в основной программе ввести тип-массив, а затем использовать его в ПП.

Type

Vector = array[1..100] of real;

Procedure ABC(A : Vector);

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

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

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

21.5. Параметры-переменные.

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

Параметры-переменные в заголовке подпрограммы записываются так же, как параметры-значения, но перед именем параметра записывается слово VAR.

Если параметров несколько, то действие слова VAR распространяется на переменные после этого слова до ближайшей точки с запятой.

Например: Ввести вектор А. Сформировать на его базе вектор В, каждый элемент которого равен элементу а[i] возведенному в степень i/10 и вывести его на печать.

Program Primer;

Uses Crt, printer;

Const max =100;

Type vector: array [1..max] of real;

Var

a, b:vector;

j,n:integer;

FUNCTION X_V_ST_Y(x,y:real):real;

BEGIN

X_V_ST_Y=exp(y*ln(x));

END;

FUNCTION ASK_YN:boolean;

Var

ch:char;

BEGIN

ASK_YN:=false;

Write(‘ (Y / N) ‘);

REPEAT ch:= read key;

until up case (ch) in [‘Y’, ‘N’];

if ((ch=’Y’) or (ch=’y’) then ASK_YN:= TRUE;

END;

FUNCTION ASK_PRINTER:boolean;

BEGIN

ASK_PRINTER:=False;

Write(‘Хотели бы вы вывести данные на принтер’);

If (ASK_YN=True) then ASK_PRINTER:=True;

END;

РROCEDURE WOD_VECT( Var v:vector; Var n:byte);

Var

i:byte;

BEGIN

CLRSCR;

Writeln (‘Введите значение n<100’);

Readln(n);

for i:=1 to n do

BEGIN

Write (‘Введите’, i:3, ‘-й элемент‘);

Readln(v[i]);

END;

END;

PROCEDURE OUT_VECT( V:vector;Var n:byte);

Var

i:byte;

file_out:txt;

BEGIN

if (ASK_PRINTER) then

Asiggn(file_out, ‘prn’0 else

Asiggn( fl - out, ‘can’);

for i:=1 to n do

BEGIN

if (i mod 10) =0 then

Writeln(fl -out, v[i]:8:5)

else Write (fl-out,v[i]:8:5)

END;

END;

BEGIN

WOD_VECTOR(A,N);

for j:=1 to n do

BEGIN

B[j]:=X_V_ST_Y(a[j]), j /10.0);

OUT_VECT(B,N);

END;

END.