Процедуры и функции часть 3
Оператор EXIT Оператор EXIT предназначен для «аварийного» завершения любой подпрограммы. После его выполнения управление
Побочные эффекты при использовании процедур и функций
Опережающее описание процедур и функций (ссылка вперед)
Главная программа п/п А п/п В
69.37K
Категория: ПрограммированиеПрограммирование

1_процедуры и функции часть 3

1. Процедуры и функции часть 3

1

2. Оператор EXIT Оператор EXIT предназначен для «аварийного» завершения любой подпрограммы. После его выполнения управление

передается в главную программу.
Форма записи:
exit;
2

3.

1 procedure TForm1.Button1Click( );
2 var
3 n,s: integer;
4 function fact (n1: integer): integer;
5 var
6
i, k: integer;
7 begin
8
k:=1;
9
exit;
10 for i:=1 to n1 do
11
k:=k*i;
12 fact:=k
13 end;
14 begin
15 n:=strtoint(edit1.text);
16 s:=fact(n);
17 edit2.text:=inttostr(s)
18 end;
3

4. Побочные эффекты при использовании процедур и функций

4

5.

Побочным эффектом называется непредусмотренное
программистом искажение подпрограммой
(процедурой или функцией) исходных данных,
передаваемых в нее, и глобальных переменных.
Рекомендации:
1)
внимательнее относиться к разделению всех
параметров подпрограмм на параметры-значения
и параметры-переменные;
2)
особое внимание должно быть обращено на
использование процедур и функций без
параметров, т.к. они могут быть работать с
глобальными переменными;
3)
не рекомендуется использовать в подпрограммах
функциях параметры-переменные.
5

6.

Пример 1: В теле функции изменяется (перевычисляется глобальная
переменная):
1 procedure TForm1Button1Click( );
Глобальные переменные – V, Q, P
2 var
10
V=1
3 V, Q, P: real;
11
Q=2
12 P=F(2)+V=
4 function F(x: real): real;
6 V= 1*2=2
5 begin
7 F(2)= Abs(2)+2=4
6 V:= V*x;
12 P=F(2)+V=4+2=6
7 F:= Abs(V)+x
14 V=1
8 end;
15 Q=2
9 begin
16 P=V+F(Q)=1+F(2)=
10 V:=1;
6 V= 1*2=2
11 Q:=2;
7 F(2)= Abs(2)+2=4
12 P:=F(Q)+V;
16 P=V+F(Q)=1+F(2)=1+4=5
13 edit1.text:=floattostr (P);
14 V:=1;
При одних и тех же входных значениях
15 Q:=2;
V=1 Q=2 получаем
16 P:=V+F(Q);
V+F(Q) не равно F(Q)+V
17 edit2.text:=floattostr (P);
18 end;
6

7.

Пример 1: В теле функции изменяется (перевычисляется глобальная
переменная):
1 procedure TForm1Button1Click( );
2 var
3 V, Q, P: real;
4 function F(V1, x: real): real;
5 begin
6 V1:= V1*x;
7 F:= Abs(V1)+x
8 end;
9 begin
10 V:=1;
11 Q:=2;
12 P:=F(V, Q)+V;
13 edit1.text:=floattostr (P);
14 V:=1;
15 Q:=2;
16 P:=V+F(V, Q);
17 edit2.text:=floattostr (P);
18 end;
7

8.

Пример 2: Найти третий член последовательности
an+1=3an-1 при а1=1
1 procedure TForm1Button1Click( );
2 var
3 a, n, AN: integer;
4 function F (NF: integer;
var A1: integer): integer;
5 var
6 i: integer;
7 begin
8 for i:=1 to NF do
9
A1:=3*A1-1;
10 F:=A1
11 end;
12 begin
13 a:=1;
14 n:=2;
15 AN:=F(n, a);
16 edit2.text:=inttostr (a);
17 end;
13 a=1
14 n=2
15 AN=F(2, 1)=
8
i=1
9 A1=3*1-1=2
8
i=2
9 A1=3*2-1=5
10 F=A1=5
15 AN=F(2, 1)= 5
А=5
Функция «портит» значение А, т.к. А1параметр-переменная (его убрать, ввести
локальную переменную). Правило: не
использовать в функциях параметрыпеременные.
8

9.

Пример 2: Найти третий член последовательности an+1=3an-1
при а1=1
1 procedure TForm1Button1Click( );
2 var
3 a, n, AN: integer;
4 function F (NF: integer;
A1: integer): integer;
5 var
6 b, i: integer;
7 Begin
8 b:=a1;
9 for i:=1 to NF do
10
b:=3*b-1;
11 F:=b
12 end;
13 begin
14 a:=1;
15 n:=2;
16 AN:=F(n, a);
17 edit2.text:=inttostr (a);
18 end;
9

10. Опережающее описание процедур и функций (ссылка вперед)

10

11. Главная программа п/п А п/п В

11

12.

Пусть процедуры объявляются друг за другом: процедура
А и процедура В. Кроме того в процедуре А мы
вызываем процедуру В, которая к этому моменту еще
не объявлена, а из процедуры В вызываем А.
В языке Паскаль нельзя использовать в описаниях
конструкции, которые ранее не объявлены. Сначала
объяви – потом используй. Что делать?
Прежде чем описывать процедуру А нужно указать ЭВМ
о том, что в ней (т.е. в А) будет использоваться другая
процедура (т.е. В), которую мы выпишем позже.
Это указание состоит из записи заголовка процедуры (с
параметрами, а также с типом результата в случае
функции) с помощью оператора FORWARD. Тело этой
процедуры начинается заголовком, в котором список
формальных параметров не приводится (в случае
функции не приводится и тип результата).
12

13.

1
procedure TForm1.Button1Click( ); главная программа
2

3 procedure B (j: real); forward; опережающее описание процедуры В
4 procedure A (i: real);
5 begin
6 B (i); вызов процедуры В
7 end;
8 procedure B;
тело процедуры В без параметров
9 begin
10 A(j)
11 end;
12 begin главная программа, где вызываются A и B

А(n);

14 end;
Иногда слово FORWARD называют директивой.
13
English     Русский Правила