Использование процедур и функций при составлении программ

Раздел Информатика
Класс -
Тип Другие методич. материалы
Автор
Дата
Формат docx
Изображения Нет
For-Teacher.ru - все для учителя
Поделитесь с коллегами:

Управление образования Администрации Перевальского района

Перевальский районный методический кабинет работников образования

Районное методическое объединение учителей информатики











ИСПОЛЬЗОВАНИЕ

ПРОЦЕДУР И ФУНКЦИЙ

ПРИ СОСТАВЛЕНИИ ПРОГРАММ







Подготовила: учитель информатики

ГОУ «Селезнёвская школа № 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. Процедуры и функции в Паскале [Электронный ресурс] - Электр. Дан. - Режим доступа: life-prog.ru/view_algoritmleng.php?id=103



© 2010-2022