Имя процедуры (список фактических параметров)

Процедуры и функции

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

Оператор процедуры

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

Формат заголовка процедуры:

Procedure имя процедуры(список формальных параметров).

Перед списком формальных параметров должно стоять зарезервированное слово var.

Вызов и выполнение процедуры осуществляется следующим образом:

Имя процедуры (список фактических параметров).

Между формальными и фактическими параметрами должно быть полное соответствие: количество, тип фактического параметра должен совпадать с типом формального параметра.

При вызове процедуры сначала передается параметры, при этом параметры значения передаются по значению, а параметры переменные по ссылке.

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

Пример: Сравнить площади треугольников. Площадь найти в процедуре.

 
  Имя процедуры (список фактических параметров) - student2.ru

program proc;

var a,b,c:integer;s1,s2,u:real;

procedure tr(x,y,z:integer;var s:real);

begin

read(x,y,z);

s:=sqrt((x+y+z)/2*(9x+y+z)/2-x)*((x+y+z)/2-y)*((x+y+z)/2-z));

end;

begin

tr(a,b,c,s1);

writeln(‘площадь 1 тр’,s1:5:2);

u:=s1;

tr(a,b,c,s2);

writeln(‘площадь 2 тр’,s2:5:2);

u:=s2;

if s1>s2 then

writeln(‘пл 1 тр >’)

else writeln(‘пл 2 тр >’);

end.

Пример 2.Описать процедуру diskrimenant(A, B, C) целого типа, определяющую количество корней квадратного уравнения A∙x2 + B∙x + C = 0 (A, B, C — вещественные параметры, А Имя процедуры (список фактических параметров) - student2.ru 0). С ее помощью найти количество корней для каждого из трех квадратных уравнений. Количество корней определять по значению дискриминанта:D = B2 −4∙A∙C.

program proz;

var a1,b1,c1,s,x1,x2:real;

procedure discrimenant(a,b,c:real;var d:real);

begin

d:=sqr(b)-4*a*c;

writeln('d=',s);

if s<0 then writeln('noy')else

if s=0 then begin x1:=-b/(2*a); writeln('x=',x1); end

else begin

x1:=(-b-sqrt(s))/(2*a);

x1:=(-b+sqrt(s))/(2*a);

writeln('x1=',x1,' x2=',x2)

end;

end;

begin

writeln('vvod a,b,c');

readln(a1,b1,c1);

discrimenant(a1,b1,c1,s);

end.

Ответ

d=-3

noy

vvod a,b,c

d=0

x=-1

vvod a,b,c

d=1

x1=-1 x2=0

vvod a,b,c

d=5

x1=-0.381966011250105 x2=0

Функции

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

Формат:

Function имя функции(список формальных параметров):тип результата.

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

Вызов функции:

Наши рекомендации