На главную

 

 

Сайт основан 1 марта 2003 года

= Основы алгоритмизации и программирования =


Подпрограммы-функции и подпрограммы-процедуры

Определение 1. Подпрограмма – это специально оформленная отдельная часть программы, предназначенная для решения какой-то частной задачи и на которую есть ссылка из основной программы.

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

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

Описывают подпрограммы в разделе описаний главной программы:

program name;

uses … … … ;

label … … … ;

const … … … ;

type … … … ;

var … … … ;

описание подпрограмм

begin

… … ….

end.

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

Определение 2. Формальные параметры – это переменные, описываемые в заголовке подпрограммы.

Определение 3. Фактические параметры – это переменные, константы, выражения, записанные в команде вызова подпрограммы.

Правило 1.   Количество и тип фактических параметров должны строго соответствовать количеству и типам формальных параметров. Смысл используемых фактических параметров зависит от того, в каком порядке они перечислены в команде вызова подпрограммы.

Определение 4.  Локальные переменные – это переменные, описанные в разделе описаний подпрограммы. Локальные переменные могут использоваться и меняться только операторами данной подпрограммы.

Определение 5.  Глобальные переменные – это переменные, описанные в разделе описаний главной программы. Глобальные переменные доступны из любой точки программы.

В Turbo Pascal есть два вида подпрограмм: процедуры и функции. Главное различие между ними заключается в том, что процедура может иметь любое количество входных (аргументов) и выходных (результатов) данных, а функция – произвольное число входных и только единственное выходное значение.

Правило 2.   Подпрограмма-функция – это фрагмент программы, начинающийся заголовком function, имеющий раздел описаний, раздел операторов и возвращающий при вызове единственное значение, носителем которого является имя функции.

Описание подпрограммы-функции:

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

описание локальных переменных

begin

должен присутствовать оператор присваивания,

в левой части которого указано имя функции, а в правой выражение;

end;

Команда вызова подпрограммы-функции:

имя функции (список фактических аргументов);

например:

Программа вычисления квадратного корня из суммы квадратов

Подпрограмма-функция вычисления квадратного корня из суммы квадратов

program sq;

 var a,b,c : real;

begin

 read (a,b);

 c:= sqrt(sqr(a)+sqr(b));

 writeln (c);

end.

function sq (a,b : real) : real;

 var т.к. нет промежуточных переменных;

begin

 read (a,b);

 sq:= sqrt(sqr(a)+sqr(b));

 writeln (c);

end;

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

например:

Составить программу вычисления значения выражения , используя подпрограмму вычисления корня квадратного из суммы квадратов.

program primer;

 var x,y,m,n,k,l,r,s,z : real;

 function sq (a,b : real) : real;

  begin

  sq:= sqrt(sqr(a)+sqr(b));

  end;

begin

 read (x,y,m,n,k,l,r,s);

 z:= sq(x,y)/sq(m,n)+sq(k,l)/sq(r,s);

 writeln (z);

end.

Правило 4.   Подпрограмма-процедура – это фрагмент программы, начинающийся заголовком procedure, имеющий раздел описаний, раздел операторов и либо имеющая формальные параметры, либо нет.

Описание подпрограммы-процедуры, не имеющей формальных параметров:

procedure имя процедуры;

описание локальных переменных

begin

… … …

end;

Команда вызова подпрограммы-процедуры, не имеющей формальных параметров:

имя процедуры;

Описание подпрограммы-процедуры, имеющей формальные параметры:

procedure имя процедуры ( список  аргументов  :  тип;  var  список  результатов  :  одного  типа;  var  список  результатов  :  другого  типа;   и  т.д.);

описание локальных переменных

begin

… … …

end;

Команда вызова подпрограммы-процедуры, имеющей формальные параметры:

имя процедуры (список фактических аргументов и результатов);

например:

program kvur;

    var a,b,c,d,x1,x2: real; i:integer; y:string;

procedure vvod;

begin

writeln('введите коэффициенты ',i,' уравнения');readln (a,b,c);

end;

procedure qvadr (a,b,c:real;var x1,x2:real;var y:string);

    var d: real;

begin

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

if d<0 then y:='нет корней' else begin

                                    if d>0 then begin

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

                                                x2:=(-b-sqrt(d))/(2*a);

                                                y:='разные корни';

                                                end

                                           else begin

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

                                                y:='одинаковые корни';

                                                end;

                                 end;

end;

procedure vivod;

begin

writeln(y,' x1=',x1:1:4,' x2=',x2:1:4);

end;

begin

for i:=1 to 3 do begin

                   vvod;

                   qvadr(a,b,c,x1,x2,y);

                   vivod;

                 end;

end.


Наверх

На главную

 

Дизайн : WWS corporation & ROKI company.