Материал: Алгоритмический язык Turbo Pascal 7.0. Юршин Е.Д., Рог А.И

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Следует отметить, что с примерами процедур и функций мы уже сталкивались – это стандартные процедуры ввода и вывода данных, оформленные следующими операторами: READ, READLN, WRITE, WRITELN, а также набор стандартных функций. В этом случае стандартными они называются потому, что созданы одновременно и совместно со всеми элементами системы TURBO PASCAL и является ее неотъемлемой частью. Таким образом, в TURBO PASCAL имеется много стандартных процедур и функций. Наличие такой так называемой библиотеки готовых программных заготовок существенно облегчает разработку прикладных инженерных программ. Однако в большинстве случаев многие специфичные для данной прикладной программы действия не находят прямых аналогов в библиотеке TURBO PASCAL и тогда программисту приходится разрабатывать свои нестандартные процедуры и функции. Данные нестандартные процедуры и функции необходимо обязательно описать в начале программы, чтобы компилятор мог установить связь между оператором вызова и теми действиями, которые приводят к процедуре или функции.

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

Procedure_{имя}_(список параметров);

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

– перечень имен через запятую для обозначения исходных данных и результатов работы процедуры с

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

Procedure_com (a:real; b:integer);

Как видно, параметры в списке отделяются точкой с запятой. Если имеется несколько следующих друг за другом однотипных параметров, то их можно отделить запятыми:

Procedure_com (a:real; b:real; c:real);

Можно записать проще:

Procedure_com (a, b, c:real);

Что касается следующего за заголовком блока, то он должен состоять из раздела описаний (war) и раздела операторов, заключенным в операторные скобки beginend. Заканчиваться блок должен стоящий слева на End и точкой с запятой.

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

<какой-либо оператор> <имя процедуры> <список фактических параметров>;

В то же время вызов процедуры можно осуществить без оператора, указав в нужной точке программы имя процедуры, например:

<имя процедуры>< список фактических параметров>

В данном случае в качестве фактических параметров могут выступать конкретные числовые значения, переменные (последние переменные должны в головной программе получить числовые значения, например с помощью оператора read или арифметического оператора присваивания) или арифметическое выражение, которое в результате вычисления должно получить конкретное числовое значение.

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

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

Таким образом, например, если при вызове процедуры после имени ее указаны пять фактических параметров, то и в процедуре должно быть пять формальных параметров (какие-либо переменные с другими именами).

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

Очень важно знать, что любой формальный параметр процедуры может быть либо параметром значения, либо параметром-переменной, либо параметром-константой. Если параметры определяются как параметры-переменные, то перед ними необходимо ставить описатель var, а если это параметры-константы, то – описатель const.

Procedure_zet (var_a:real; b:real; const_с: integer);

Здесь:

a – параметр переменной; b – параметр значения; с – параметр const;

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

Если же формальный параметр объявлен, как параметр-значение или параметр-константа, то при вызове ему могут соответствовать произвольные математические выражения. Контроль за неукоснительным соблюдением этого правила осуществляется компилятором TURBO PASCAL.

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

Если формальный параметр определен, как параметр-значение, то перед вызовом процедуры это значение либо вычисляется, либо вводится с помощью оператора read, а затем передается в процедуру, при этом в головной программе (при передаче) остается «копия» данного значения.

Следовательно, любые возможные изменения в процедуре параметра-значения никак не воспринимаются в головной программе. Если же формальный параметр определен, как параметрпеременная, то при вызове процедуры передается сама переменная, а не ее числовые значения (фактически в этом случае передаѐтся процедуре память с числовым значением для этой переменной).

В этом случае при изменении такого параметра в процедуре происходит изменение в головной программе, так как память общая.

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

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

Источник: https://studfile.net/preview/16565609/