Билет 6. Вопрос 1 . Порядок и формат описания процедур пользователя в программе.
При решении объемных задач по программированию рекомендуется всю задачу разбивать на подзадачи. Решая каждую подзадачу в отдельности, их после объединяют в одну общую задачу. Такой способ решения задач называется МЕТОДОМ СТРУКТУРИРОВАННОГО ПРОГРАММИРОВАНИЯ. Аналогично поступают и в том случае, когда одни и те же команды необходимо выполнить в разных участках программы. Выделенные подзадачи называют подпрограммами. Подпрограммы иначе называют ВСПОМОГАТЕЛЬНЫМИ АЛГОРИТМАМИ.
ПОДПРОГРАММЫ - это набор команд, объединенных одним именем, которые можно выполнить в любом месте головной программы, где есть вызов по имени.
При вызове подпрограммы выполнение основной программы приостанавливается и управление передается в подпрограмму. По окончанию работы подпрограммы управление возвращается основной программе. Любая подпрограмма должна быть описана до того, как она будет вызвана в основной программе или в другой подпрограмме. (Но в любом случае - ДО ТЕЛА ГОЛОВНОЙ ПРОГРАММЫ !!!). Подпрограммы представляют собой автономные блоки, имеющие имена, к которым можно обращаться в нужном месте. Их можно вкладывать друг в друга. ЛЮБАЯ ПОДПРОГРАММА обладает той же структурой, которой обладает и вся программа, т.е. ИМЕЕТ ЗАГОЛОВОК, ОПИСАТЕЛЬНУЮ ЧАСТЬ И СОБСТВЕННО ТЕЛО. В языке PASCAL существует 2 вида подпрограмм: 1) ПРОЦЕДУРЫ; 2) ФУНКЦИИ. Для оформления подпрограмм последовательности операторов присваивается имя, и в дальнейшем при необходимости выполнить эту последовательность в программе упоминают имя последовательности. В языке Паскаль такую поименованную последовательность операторов называют процедурой. Если в результате выполнения поименованной последовательности операторов получается только 1 результат, то имя этой последовательности можно использовать в выражении, и тогда такую последовательность называют функцией. Все данные, которые используются в подпрограмме, могут быть: - либо ГЛОБАЛЬНЫМИ; - либо ЛОКАЛЬНЫМИ.
ГЛОБАЛЬНЫЕ ДАННЫЕ описываются в основной программе и являются доступными не только ей, но и всем ее подпрограммам.
Например: program имя;
объявление глобальных данных
определение процедур и функций begin .... end.
ЛОКАЛЬНЫЕ ДАННЫЕ
описываются только внутри конкретной подпрограммы и доступны только ей самой.
Например:
procedure имя;
объявление локальных данных
определение процедур и функций, используемых внутри данной процедуры
begin .... end;
Обмен информацией между основной программой и подпрограммой может осуществляться только с помощью глобальных переменных. Подпрограмма может непосредственно использовать любые глобальные переменные за исключением тех, которые имеют те же имена, что и ее локальные переменные.
ПОЛЬЗОВАТЕЛЬСКИЕ ПРОЦЕДУРЫ.
Общий вид описания процедур:
PROCEDURE имя_процедуры (список формальных параметров);
label ...; const ...; type ....; var .....; BEGIN ....... END;
Любая процедура начинается с заголовка, который является обязательным. Он состоит из зарезервированного слова PROCEDURE, за которым следует идентификатор имени процедуры, а далее в круглых скобках - список ФОРМАЛЬНЫХ ПАРАМЕТРОВ. За заголовком следуют такие же разделы, что и в основной программе. Завершается процедура точкой с запятой. Досрочный выход из подпрограмм возможен только с помощью команды EXIT.
ФОРМАЛЬНЫЕ ПАРАМЕТРЫ - это имена переменных и констант, которым в команде вызова процедуры присвоятся фактические значения.
Формальные параметры бывают ВХОДНЫМИ И ВЫХОДНЫМИ.
ВХОДНЫЕ ПАРАМЕТРЫ - это те параметры, значения которых передаются в данную процедуру.
ВЫХОДНЫЕ ПАРАМЕТРЫ - это те параметры, значения которых возвращаются в ту часть программы, которая вызывала данную процедуру.
Например : PROCEDURE mmm (a,b,c,d: тип ; var f,g: тип ); Здесь формальные параметры a,b,c,d являются входными, а f,g - выходными. Выходные параметры описываются после служебного слова VAR. Если какой-либо параметр является и входным и выходным, то его все равно нужно описывать после слова VAR. Входные параметры иначе называют АРГУМЕНТАМИ процедуры, а выходные параметры называют РЕЗУЛЬТАТАМИ процедуры. ДЛЯ ВЫЗОВА ПРОЦЕДУРЫ в тексте программы указывается ее имя, а в скобках через запятую перечисляются имена или значения ФАКТИЧЕСКИХ ПАРАМЕТРОВ. ФАКТИЧЕСКИЕ ПАРАМЕТРЫ - это конкретные значения переменных и констант, используемых в данной процедуре и получаемых в результате ее выполнения.
Например: mmm (m,n,i,j,k,l); - вызов процедуры с именем mmm.
Здесь конкретные значения m, n, i, j передаются в процедуру, т.е. являются фактическими входными параметрами. Их значения используются в данной процедуре и не возвращаются в вызывающую часть программы. В результате выполнения данной процедуры получаются 2 значения, которые необходимо возвратить в вызывающую часть программы. В списке фактических параметров вы обязаны указать 2 имени, которым присвоятся результаты работы процедуры (им соответствуют k и l).
ПРАВИЛА РАБОТЫ С ФОРМАЛЬНЫМИ И ФАКТИЧЕСКИМИ ПАРАМЕТРАМИ :
Типы, количество и порядок следования формальных и фактических параметров должны совпадать. На месте фактических входных параметров можно использовать арифметические выражения, константы и переменные. На месте фактических выходных параметров можно указывать только имена отдельных переменных.
ПРИМЕР 1. procedure swap (var x,y:real); var t:real; begin t:=x; x:=y; y:=t; end;
Здесь переменные х и y являются и входными и выходными формальными параметрами. Переменная t является локальной.
Пример. program vv; var x,y:real; procedure swap (var x,y:real); var t:real; begin t:=x; x:=y; y:=t; end; begin x:=5; y:=2.3; swap (x,y); writeln(x,y) end.
Ответ : x=2.3; y=5.
Здесь переменные х и y являются глобальными. Они же являются фактическими входными и выходными параметрами процедуры swap. Процедура может и не содержать параметров. В этом случае заголовок имеет вид:
procedure имя_процедуры; Оператор вызова такой процедуры имеет вид: имя_процедуры;
ПРИМЕР 2.
program delo; var a,b,g,r: integer; procedure ostatok; begin g:=a div b; r:=a mod b; end; begin a:=12; b:=5; ostatok; writeln(g,r) end.
Ответ: g=2 , r=2. Здесь переменные a, b, g, r являются глобальными. В результате выполнения процедуры ostatok находятся значения переменных g и r (целой части и остатка от деления целого числа a на b). При этом, конечно, переменные a, b, g, r должны быть описаны в программе, содержащей описание этой процедуры, а значения переменных a и b должны быть заданы до выполнения операторов процедуры.
ОТЛИЧИЯ ПРОЦЕДУР ОТ ФУНКЦИЙ:
Результат функции присваивается ее имени. Результат процедуры имени выходного фактического параметра. У функций всегда один результат. У процедур их может быть несколько или ни одного.
Главная программа может содержать описание нескольких процедур и функций. Любая из них может быть вызвана в главной программе, или ее вызов может содержаться в теле другой процедуры, описанной в программе. Описание процедуры или функции может быть также приведено в теле другой процедуры или функции, т.е. возможны вложенные процедуры и функции. Главная программа может получать начальные данные, с которыми ей предстоит работать извне, читая их файла input. Процедуры и функции обычно получают такие начальные данные из той программы или процедуры, которая их вызывает. Передача этих данных осуществляется через параметры. В операторе вызова процедуры или при вызове функции указываются фактические параметры, подставляемые вместо формальных параметров и используемые при вычислении. Аналогично результат может быть передан в вызывающую программу через соответствующий параметр. Передача значений между вызывающей. программой и процедурой может осуществляться также с помощью глобальных переменных.
|