ПРОЦЕДУРЫ И ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ Если в программе возникает необходимость частого обращения к некоторой группе операторов, выполняющих действия или вычисляющих значение какого-либо выражения, то рационально сгруппировать такую группу операторов в самостоятельный блок, к которому можно обращаться, указывая его имя. Такие разработанные программистом самостоятельные программные блоки называются подпрограммами пользователя. Они являются основой модульного программирования. Разбивая задачу на части и формируя логически обособленные модули как процедуры и функции, программист реализует основные принципы широко используемого в практике системного подхода и методов нисходящего программирования. Вызов подпрограммы, то есть выполнение действий, заданных в подпрограмме в виде операторов может быть произведен в некоторой точке программы посредством указания имени этой подпрограммы. При вызове подпрограммы (процедуры или функции), определенной программистом, работа глазной программы на некоторое время приостанавливается и начинает выполняться вызванная подпрограмма. Она обрабатывает данные, переданные ей из главной программы. По завершении выполнения подпрограммы возобновляется работа главной программы. Передача данных из главной программы в подпрограмму осуществляется с помощью параметров. Параметром называется переменная, которой присваивается некоторое значение в рамках указанного применения. Различают формальные параметры — параметры, определенные в заголовке подпрограммы, и фактические параметры — выражения, задающие конкретные значения при обращении к подпрограмме. При обращении к подпрограмме ее формальные параметры замещаются фактическими, переданными из главной программы. ПРОЦЕДУРЫ Процедуры пользователя должны быть описаны в декларативной части основной программы. Описание процедуры включает заголовок, знак ―;‖ и тело процедуры. Заголовок состоит из зарезервированного слова 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.