Управление
образования Администрации Перевальского района
Перевальский
районный методический кабинет работников образования
Районное
методическое объединение учителей информатики
ИСПОЛЬЗОВАНИЕ
ПРОЦЕДУР
И ФУНКЦИЙ
ПРИ
СОСТАВЛЕНИИ ПРОГРАММ
Подготовила:
учитель информатики
ГОУ
«Селезнёвская школа № 18»
Клыженко
Татьяна Сергеевна
Перевальский
район
2016
г.
В практике программирования довольно часто встречается ситуация,
когда одну и ту же группу операторов, реализующих определенную цель, требуется
повторить без изменений в нескольких других местах программы. Чтобы избавить
программиста от столь нерационального занятия, предложена концепция
подпрограмм, получившая широкое распространение практически во всех
языках программирования.
Подпрограмма
(англ. subroutine) - это специальным
образом оформленный фрагмент программы, к которому можно обратиться из любого
места внутри программы. Подпрограммы существенно упрощают жизнь программистам,
улучшая читабельность исходного кода, а также сокращая его, поскольку отдельные
фрагменты кода не нужно писать несколько раз.
В
любом языке программирования существуют подпрограммы. В языке C они называются
функциями, в ассемблере - подпрограммами, а в Pascal существуют даже два вида
подпрограмм: процедуры и функции.
1.
Назначение подпрограмм
Подпрограммы
изначально появились как средство оптимизации программ по объёму занимаемой
памяти - они позволили не повторять в программе идентичные блоки, а описывать
их однократно и вызывать по мере необходимости. К настоящему времени данная
функция подпрограмм стала вспомогательной, главное их назначение -
структуризация программы с целью удобства её понимания и сопровождения.
Выделение
набора действий в подпрограмму и вызов её по мере необходимости позволяет
логически выделить целостную подзадачу, имеющую типовое решение. Такое действие
имеет ещё одно (помимо экономии памяти) преимущество перед повторением
однотипных действий: любое изменение (исправление ошибки, оптимизация,
расширение функциональности), сделанное в подпрограмме, автоматически
отражается на всех её вызовах, в то время как при дублировании каждое изменение
необходимо вносить в каждое вхождение изменяемого кода.
Даже
в тех случаях, когда в подпрограмму выделяется однократно производимый набор
действий, это оправдано, так как позволяет сократить размеры целостных блоков
кода, составляющих программу, то есть сделать программу более понятной и
обозримой...
2.
Механизм подпрограмм, их описание и вызов
В
простейшем случае (в ассемблерах) подпрограмма представляет собой
последовательность команд (операторов), отдельную от основной части программы и
имеющую в конце специальную команду выхода из подпрограммы. Обычно подпрограмма
также имеет имя, по которому её можно вызвать, хотя ряд языков программирования
допускает использование и неименованных подпрограмм. В языках высокого уровня описание
подпрограммы обычно состоит, по меньшей мере, из
двух частей: заголовка и тела. Заголовок подпрограммы
описывает её имя и, возможно, параметры, то есть содержит информацию,
необходимую для вызова подпрограммы. Тело - набор операторов, который будет
выполнен всякий раз, когда подпрограмма будет вызвана.
Вызов
подпрограммы выполняется с помощью команды вызова, включающей в себя имя
подпрограммы. В большинстве современных языков программирования команда вызова
представляет собой просто имя вызываемой подпрограммы, за которым могут
следовать фактические параметры.
В
следующем примере на языке Паскаль подпрограмма subprog вызывается из основной
программы трижды:
program
SubProgExample;
//
Описание подпрограммы subprog
procedure
subprog; // Заголовок, включающий имя подпрограммы
begin
// начало тела подпрограммы
WriteLn('Bye');
end;
// конец тела подпрограммы
begin
WriteLn('Hello');
subprog;
// 1-й вызов
subprog;
// 2-й вызов
subprog;
// 3-й вызов
end.
Результатом
выполнения такой программы станет вывод строки «Hello» и трёх строк «Bye».
Для
сохранения и восстановления контекста выполнения вызывающей процедуры, с целью
исключения побочных эффектов, связанных с возможным нежелательным изменением
используемых машинных регистров, компилятор формирует для каждой процедуры
специальные последовательности команд, называемые прологом и эпилогом
процедуры.
Некоторые
языки программирования (например, Паскаль, Ада, Модула-2) допускают описание
вложенных подпрограмм, то есть помещение подпрограмм внутрь других подпрограмм.
Такие вложенные подпрограммы могут использоваться
только в той подпрограмме, в которой они описаны. В иных случаях (например, в
языке Си) вложение подпрограмм не допускается. Никаких принципиальных
преимуществ вложение подпрограмм не даёт, но может быть удобно для более
логичной структуризации программы (если какая-то подпрограмма используется
только в некоторой другой подпрограмме, логично поместить первую во вторую).
3. Параметры
подпрограмм. Назначение параметров
Подпрограммы
часто используются для многократного выполнения стереотипных действий над
различными данными. Подпрограмма обычно имеет доступ к объектам данных,
описанным в основной программе (по крайней мере, к некоторым из них), поэтому
для того, чтобы передать в подпрограмму обрабатываемые данные, их достаточно
присвоить, например, глобальным переменным. Но такой путь не особенно удобен и
чреват ошибками.
Для
обеспечения контролируемой передачи параметров в подпрограмму и возврата
результатов из неё используется механизм параметров. Параметры описываются при
описании подпрограммы (в её заголовке) и могут использоваться внутри процедуры
аналогично переменным, описанным в ней. При вызове процедуры значения каждого
из параметров указываются в команде вызова (обычно после имени вызываемой
подпрограммы).
program
SubProgExample2;
//
Описание подпрограммы subprog
procedure
subprog(Line: String); // Заголовок, включающий имя подпрограммы
begin
// начало тела подпрограммы
WriteLn(Line);
end;
// конец тела подпрограммы
begin
WriteLn('Hello');
subprog('Good
bye,'); // 1-й вызов
subprog('my
love,'); // 2-й вызов
subprog('good
bye!'); // 3-й вызов
end.
В
приведённом примере параметр Line подпрограммы subprog в каждом вызове получает
различное значение, благодаря чему выводятся не одинаковые строки, а разные.
4.
Формальные и фактические параметры
Чтобы
отличать параметры подпрограммы, описанные в её заголовке и теле, от
параметров, указываемых при вызове подпрограммы, используются формальные и
фактические параметры. Так, в последнем примере
параметр Line в заголовке и теле подпрограммы subprog - это формальный
параметр, а строка 'Good bye' , использованная в первом вызове этой
подпрограммы - фактический параметр. При вызове подпрограммы фактические
параметры, указанные в команде вызова, становятся значениями соответствующих
формальных параметров, чем и обеспечивается передача данных в подпрограмму.
5.
Виды параметров в Паскале
Различают
четыре вида параметров: - параметры- значения; - параметры- переменные; -
параметры- процедуры; - параметры- функции.
Параметры-
значения - используются для передачи исходных
данных в подпрограмму. Формальные параметры при этом записываются через запятую
с указанием их типов. Они получают значения фактических параметров, но не могут
передавать свои значения фактическим параметрам.
Параметры-
переменные - играют роль как входных, так и
выходных (возвращаемых) параметров процедуры. В списке формальных параметров
они перечисляются после слова Var с указанием их типов.
Параметры-
процедуры - указываются после слова Procedure.
Параметры-
функции - указываются после слова Function.
Язык
программирования может предоставлять возможность передавать параметры в
подпрограммы либо только по значению, либо по значению и по ссылке, либо по
имени и значению. В последних двух случаях для различения способов передачи
параметра используются отдельные синтаксическая конструкции (в Паскале это
ключевое слово var при описании параметра). В действительности, если язык
содержит понятие ссылки (указателя), то можно обойтись и без передачи параметра
по ссылке (её всегда можно смоделировать, описав параметр типа «ссылка»), но
эта возможность удобна, так как позволяет работать с формальным
параметром-ссылкой без разыменования, а также повышает надёжность и
безопасность программы.
6.
Виды подпрограмм
В
языках программирования высокого уровня используется два типа подпрограмм: процедуры
и функции.
Функция
- это подпрограмма специального вида, которая, кроме получения параметров,
выполнения действий и передачи результатов работы через параметры имеет ещё
одну возможность - она может возвращать результат. Вызов функции является, с
точки зрения языка программирования, выражением, он может использоваться в
других выражениях или в качестве правой части присваивания.
Процедура
- это независимая именованная часть программы, которую после однократного
описания можно многократно вызвать по имени из последующих частей программы для
выполнения определенных действий.
7.
Процедуры в Паскале
Структура
процедуры аналогична структуре программы и состоит из заголовка и блока (тела
процедуры).
PROCEDURE
<имя>(<сп. форм. пар.>);
<блок>
где PROCEDURE - зарезервированное слово процедура;
<имя>
- имя процедуры, является уникальным, выбирается по общим правилам, желательно
чтобы оно отражало смысл процедуры;
<сп.
форм. пар.> - список формальных параметров т.е. список имен обозначающих исходные
данные и результат работы процедуры с указанием их типов;
<блок>
- тело процедуры представляющее разделы описаний и раздел операторов,
представляющий составной оператор (совокупность операторов, заключенных в
операторные скобки BEGIN END). Разделы описаний процедуры содержат те же
разделы что и основная программа, в том числе описания подпрограмм низшего
уровня (вложенных).
Глобальные
объекты - это объекты, описанные в разделах
описаний основной программе. Областью их действия является программа и все,
содержащиеся в ней подпрограммы.
Локальные
объекты - это объекты, описанные в разделах
описаний подпрограммы. Областью их действия является подпрограмма и все
содержащиеся в ней подпрограммы низшего уровня.
Локальные
описания отменяют глобальные.
Оператор
вызова процедуры активизирует процедуру. Он имеет вид: <имя>(<сп.
факт. пар.>); где: <имя> - имя процедуры; <сп. факт. пар.> -
список фактических параметров. Это список конкретных значений, имен и выражений
подставляемых вместо формальных параметров и передаваемых в подпрограмму, а так
же возвращаемые результаты обработки. Список фактических параметров может
отсутствовать. Между формальными и фактическими параметрами существует взаимно
- однозначное соответствие по количеству, порядку следования и типу.
8.
Функции в Паскале
Структура
описания и механизм использования функции аналогичен процедуре с учетом
некоторых особенностей. Описание состоит из заголовка и блока (тела функции).
FUNCTION
<имя>(<сп. форм. пар.>):<тип>;<блок>; где: FUNCTION -
зарезервированное слово функция; <имя> - имя функции, является
уникальным, выбирается по общим правилам, желательно чтобы оно отражало смысл
функции; <сп. форм. пар.> - список формальных параметров т.е. список имен
обозначающих исходные данные функции с указанием их типов;
<тип>
- тип результата возвращаемого функцией и присваиваемого имени функции;
<блок> - тело процедуры представляющее разделы описаний и раздел
операторов, представляющий составной оператор (совокупность операторов,
заключенных в операторные скобки BEGIN END).
Разделы
описаний функции содержат те же разделы что и основная программа, в том числе
описания подпрограмм низшего уровня (вложенных). В содержательной части функции
ее имени должен быть присвоен результат работы функции. Вызов функции представляет
собой операнд (указатель функции) в отличии от процедуры обращение к которой
представляет оператор. Он имеет вид: <имя>(<сп. факт. пар.>); где:
<имя> - имя функции (указатель); <сп. факт. пар.> - список
фактических параметров. Это список конкретных значений, имен и выражений
подставляемых вместо формальных параметров и передаваемых в функцию.
9.
Отличие процедуры от функции
1.
Функция в отличие от процедуры возвращает единственное скалярное значение
2.
Результат вычисления функции присваивается имени, а процедуре входит в список
параметров.
3.
Имя функции имеет тип.
4.
Обращение к функции представляет операнд, а процедуры оператор.
Список
литературы
1. Подпрограмма
- Википедия [Электронный ресурс] - Электр. Дан. - Режим доступа:
ru.wikipedia.org/wiki/Подпрограмма
2. Процедуры
и функции в Паскале [Электронный ресурс] - Электр. Дан. - Режим доступа:
http://life-prog.ru/view_algoritmleng.php?id=103
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.