Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции информатика.doc
Скачиваний:
61
Добавлен:
11.04.2015
Размер:
2.47 Mб
Скачать

5.2 Функции

Функция отличается от процедуры тем, что результат работы функции возвращается в виде значения через ее имя. Вызов процедуры – это отдельный оператор, а вызов функции может быть использован в выражениях вместе с другими операторами (в правой части оператора присваивания или в операторе write/writeln).

Пример:

стандартные процедуры: write, writeln, read, readln, delay, clrscr…

стандартные функции: sqr, sqrt, abs, odd, exp, ln, sin, cos…

Описание функции:

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

<раздел описаний>;

begin

<тело функции>;

end;

Пример 1: f(x,y)=;

function f (x,y: integer): real;

begin

f:=sqrt(sqr(x)+sqr(y));

end;

begin

……

z:=f(2,3);

writeln(‘f=’, f(6,8));

end.

Пример 2:

var s:real;

i,n: integer;

function fact(k: integer): longint;

var f: longint;

j: integer;

begin

f:=1;

for j:=1 to k do f:=f*j;

fact:=f;

end;

begin

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

readln(n);

S:=0;

for i:=1 to n do s:=(s+1)/(fact(i)+fact(i+1)+fact(i+2));

writeln(‘S = ’,s:6:4);

end.

5.3 Области действия имен

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

  2. Имена переменных, описанных в подпрограмме, называются локальными и доступны в этой подпрограмме и во всех вложенных в нее подпрограммах (это же относится и к именам формальных параметров!)

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

А – основная порграмма, все переменные доступны везде

B, E – подпрограммы, вложенные в А

C, D – подпрограммы, вложенные в В

5.4 Параметры процедур и функций

Формальные параметры – это параметры, используемые при описании процедур и функций

Фактические параметры – это параметры, используемые при вызове процедур и функций.

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

Пример:

var c: integer;

procedure p(b: integer);

begin

end;

b – формальный параметр

begin с – фактический параметр

p(c);

end.

По способу описания и передачи значения формальные параметры делятся на параметры-значения и параметры-переменные.

  • Параметры-значения (имя: тип)

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

Пример1:

var a: integer;

procedure proc(x: integer);

begin

x:=x+2;

end;

begin

a:=10;

proc(a); writeln(a); 10

proc(a*a); writeln(a); 10

proc(25); writeln(a); 10

end.

  • Параметры-переменные ( (var имя: тип); )

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

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

Пример 1:

var a,b: integer;

procedure proc(x: integer; var y: integer);

begin

y:=x+y;

~

end;

begin

a:=10; b:=10;

proc(a,b);

writeln(‘a = ’,a,’ b= ‘,b); a = 10 b = 20

end.

Пример2: Программа вычисления объема шара V=4/3πR3

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

var r,v: real;

function vol (r:real): real;

begin

vol:=4/3*pi*r*r*r;

end;

begin

write(‘Введите радиус шара’);

readln(r);

v:=vol(r);

writeln(‘Объем шара = ’, v);

end.

var r,v: real;

procedure vol(r: real; var v:real);

begin

v:=4/3*pi*r*r*r;

end;

begin

write(‘Введите радиус шара’);

readln(r);

vol(r,v);

writeln(‘Объем шара = ’, v);

end.

~

v:=4/3πr3