procedure and function

advertisement
ПРОЦЕДУРЫ И ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ
Если в программе возникает необходимость частого обращения к некоторой группе операторов,
выполняющих действия или вычисляющих значение какого-либо выражения, то рационально
сгруппировать такую группу операторов в самостоятельный блок, к которому можно обращаться,
указывая его имя. Такие разработанные программистом самостоятельные программные блоки
называются подпрограммами пользователя. Они являются основой модульного программирования.
Разбивая задачу на части и формируя логически обособленные модули как процедуры и функции,
программист реализует основные принципы широко используемого в практике системного подхода и
методов нисходящего программирования.
Вызов подпрограммы, то есть выполнение действий, заданных в подпрограмме в виде операторов
может быть произведен в некоторой точке программы посредством указания имени этой
подпрограммы.
При вызове подпрограммы (процедуры или функции), определенной программистом, работа
глазной программы на некоторое время приостанавливается и начинает выполняться вызванная
подпрограмма. Она обрабатывает данные, переданные ей из главной программы. По завершении
выполнения подпрограммы возобновляется работа главной программы.
Передача данных из главной программы в подпрограмму осуществляется с помощью параметров.
Параметром называется переменная, которой присваивается некоторое значение в рамках
указанного применения. Различают формальные параметры — параметры, определенные в заголовке
подпрограммы, и фактические параметры — выражения, задающие конкретные значения при
обращении к подпрограмме. При обращении к подпрограмме ее формальные параметры замещаются
фактическими, переданными из главной программы.
ПРОЦЕДУРЫ
Процедуры пользователя должны быть описаны в декларативной части основной программы.
Описание процедуры включает заголовок, знак ―;‖ и тело процедуры. Заголовок состоит из
зарезервированного слова procedure, идентификатора (имени) процедуры и необязательного,
заключенного в круглые скобки, списка формальных параметров с указанием типа каждого параметра.
Имя процедуры — идентификатор, уникальный в пределах программы. Тело процедуры представляет
собой локальный блок, по структуре аналогичный Pascal-программе, со своей декларативной
(описательной) и выполнимой частью.
Формат описания процедур пользователя следующий:
PROCEDURE <имя_процедуры>[(список формальных параметров)];
[<декларативная часть>]
Begin
<выполнимая часть>
End;
Символами [ ] обозначены необязательные элементы.
При описании списка формальных параметров необходимо указывать их тип, причем:
 параметры одинакового типа могут быть перечислены через ‖,‖ ;
 параметры разных типов отделяются ―;‖.
Примеры описания процедур:
PROCEDURE proc_1(a,b: integer);
Begin
Writeln(a+b);
End;
PROCEDURE proc_2(a,b: integer; c:real);
Begin
Writeln((a+b)/c);
End;
Переменные, описанные в декларативной части основной программы называют глобальными
переменными.
Переменные, описанные в декларативной части подпрограммы называют локальными
переменными.
Описанные в подпрограмме локальные переменные могут быть использованы только в теле
данной подпрограммы. Глобальные переменные могут использоваться в теле основной программы и в
теле любой подпрограммы.
Для того чтобы использовать созданную процедуру, необходимо в соответствующем месте
указать имя процедуры и значения фактических параметров. При обращении к процедуре ее
формальные параметры замещаются фактическими, переданными из главной программы. Поэтому
количество и типы фактических параметров должны совпадать с количеством и типами формальных
параметров.
Program prim_1;
Var a,b: integer;
{описание глобальных переменных a,b}
PROCEDURE proc(x,y: integer);
{описание процедуры и еѐ формальных параметров x,y}
Var c: integer;
{описание локальной переменной c}
Begin
C:=x*y;
Writeln(c);
End;
BEGIN
WriteLn(‘Введите два числа’);
ReadLn(a,b);
proc(a,b);
{вызов процедуры с указанием фактических параметров}
END.
Если значения фактических параметров в теле процедуры предполагается изменять, то в заголовке
процедуры при описании соответствующих формальных параметров перед ними добавляется ключевое
слово VAR. Такие параметры называют выходными параметрами или параметрами-переменными.
Если значения фактических параметров в процедуре используются лишь как исходные данные, то
при описании соответствующих формальных параметров ключевое слово VAR перед ними не ставится.
Такие параметры называют входными параметрами или параметрами-значениями.
PROCEDURE my_proc(k,s: integer; var z: real);
Begin
z:=(k+s);
End;
Параметры k,s – входные параметры (параметры-значения)
Параметр z – выходной параметр (параметр-переменная)
Процедуры бывают трех типов:
1. без параметров;
2. с входными параметрами;
3. с выходными параметрами.
Примеры:
1. процедура без параметров.
Procedure proc1;
Var x:integer;
Begin
writeLn(‘Введите число’);
ReadLn(x);
writeLn(‘Результат ’, x*x);
End;
2. процедура с входными параметрами. (параметр а просто используется в процедуре)
Procedure proc2(a: integer);
Begin
writeLn(‘Результат ’, a*a);
End;
3. процедура с выходными параметрами. (значение параметра b в процедуре меняется)
Procedure proc3(a: integer, var b: integer);
Begin
b:=a*a;
writeLn(‘Результат ’, b);
End;
Задача №1. Даны стороны треугольника. Вычислить при помощи процедуры площадь данного
треугольника.
Program prim_1;
Var x,y,z,d: real;
Procedure plosh(a,b,c: real; Var s:real);
Var p: real;
Begin
P:=(a+b+c)/2;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
End;
BEGIN
WriteLn(‘Введите стороны треугольника: ’);
ReadLn(x,y,z);
plosh(x,y,z,d);
WriteLn(‘Площадь равна: ’,d);
END.
Задача №2. Написать процедуру обмена двух переменных значениями.
Program prim_1;
Var a,b: real;
Procedure obmen(var x,y: real);
Var k: real;
Begin
k:=x;
x:=y;
y:=k;
End;
BEGIN
WriteLn(‘Введите два числа: ’);
ReadLn(a,b);
obmen(a,b);
WriteLn(‘Числа после обмена: ’,a,b);
END.
Download