Подпрограммы (функции). Подпрограммы Подпрограмма определение


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

  • подпрограмма позволяет экономить память. Каждая подпрограмма, которая существует в программе, загружается в оперативную память в одном экземпляре, а вызывать ее можно из разных мест программы;
  • использование подпрограмм целесообразно с точки зрения современных методов модульного программирования. В соответствии с методологией, алгоритм решения представляется последовательностью подпрограмм. Каждую подпрограмму можно разбить на менее крупные подпрограммы, а те в свою очередь - еще на подпрограммы более низкого уровня.

В языке Pascal имеется два вида программных единиц, относящихся к подпрограммам:

  • процедуры;
  • функции.

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

В языке Паскаль имеется два вида процедур и функций:

  • стандартные;
  • нестандартные.

Стандартные являются принадлежностью самого языка и в языке находятся в так называемых стандартных библиотеках и такие библиотеки находятся в языке в виде самостоятельных программных единицах (модулях). Язык Turbo-Pascal имеет несколько стандартных модулей: System, Dos, WinCrt, Printer, Graph, Overlay. Они подключаются в Uses. Это требование не относится к System, в котором находятся основные процедуры и функции, так как это модуль автоматически подключается компилятором.

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

Описание процедур и функций может быть реализовано двумя способами:

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

Описание процедур и функций внешне выглядит как описание программы, но вместо заголовка программы пишется заголовок функции или процедуры. Описать подпрограмму означает указать ее заголовок и тело. В заголовке формируются параметры и объявляется имя подпрограммы. В функции, в заголовке для возвращаемого результата указывается тип. За заголовком располагается тело подпрограммы, которое состоит из разделов: описания и операторов. В подпрограмме, в разделе описаний могут быть описаны подпрограммы низшего уровня. Структурно программа с использованием подпрограмм выглядит в следующем виде:

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

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

Объявление подпрограмм на языке Pascal

Объявление функции:

Function [имя] ([список_формальных_параметров]:[тип]):[тип];

[раздел_описаний_функции];

[операторы_тела_функции];

[имя]:=[результат_работы_операторов_тела_функции];

Function - служебное слово. [имя] - идентификатор имени. [список_формальных_параметров] - параметры в общем виде. [тип] - тип параметров. Имеет раздел описаний и раздел операторов. Вызов функции осуществляется в разделе операторов:

[переменная]:=[имя](список_формальных_параметров);

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

Объявление процедуры:

Procedure [имя] ([список_входных_параметров]:[тип];

Var [выходной_формальный_параметр_1]:[тип];

Var [выходной_формальный_параметр_К]:[тип];):[тип];

[раздел_описаний_процедуры];

[операторы_тела_процедуры];

Поскольку процедура может возвращать несколько выходных параметров, то каждый выходной параметр в заголовке процедуры следует после отдельного служебного слова Var.

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

Вызов процедуры:

[имя](список_фактических_параметров);

Методология структурного программирования основывается на использовании подпрограмм и независимых структур данных.

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

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

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

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

В простейшем случае (в ассемблерах) подпрограмма представляет собой последовательность команд (операторов), отдельную от основной части программы и имеющую в конце специальную команду выхода из подпрограммы. Обычно подпрограмма имеет имя, по которому её можно вызвать, хотя ряд языков программирования допускает использование и неименованных подпрограмм. В языках высокого уровня описание подпрограммы обычно состоит по меньшей мере из двух частей: заголовка и тела. Заголовок подпрограммы описывает её имя и, возможно, параметры, то есть содержит информацию, необходимую для вызова подпрограммы. Тело - набор операторов, который будет выполнен всякий раз, когда подпрограмма будет вызвана.

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

Формальные и фактические параметры. Чтобы отличать параметры подпрограммы, описанные в её заголовке и теле, от параметров, указываемых при вызове подпрограммы, первые принято называть формальными параметрами, вторые - фактическими параметрами.


Подпрограмма – это блок кода между операторами Sub и End Sub или Function и end Function .

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

Подпрограмма-процедура Sub и End Sub . Обычно подпрограмму-процедуру принято называть процедурой.

При написании программы нужно учесть одно правило: «Внутри одной процедуры не может быть описана другая процедура».

Процедура - это любая подпрограмма, которая не является функцией.

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

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

Подпрограммы, входящие в состав классов в объектных языках программирования, обычно называются методами . Этим термином называют любые подпрограммы-члены класса, как функции, так и процедуры; когда требуется уточнение, говорят о методах-процедурах или методах-функциях.

6.2.4 Принцип проектирования программ сверху-вниз и снизу–вверх.

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

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

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

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

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

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

Пример. Чтобы написать число 512, сначала пишут цифру 5, затем 1 и, наконец, 2. При этом цифры рисуют, последовательно прорисовывая линии, из которых они состоят. Принтер напечатает это число точками.

При разработке программы пошагово, методом «сверху вниз » сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.

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

Программирование «вширь» - ориентиром провозглашается набор однородных модулей. В одной программе может быть выявлено несколько однородных наборов. После того как однородные модули выявлены, приступают к непосредственному программированию, которое, собственно, и разбивается на этапы. На первом этапе создается лишь минимальное число представителей каждого из выделенных однородных наборов. Если поиск однородности проводился достаточно энергично, то обычно оказывается, что объем работ первого этапа реализации сравнительно невелик.

Наименование параметра Значение
Тема статьи: Подпрограммы
Рубрика (тематическая категория) Программирование

Методология структурного программирования основывается на использовании подпрограмм и независимых структур данных.

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

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

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

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

В простейшем случае (в ассемблерах) подпрограмма представляет собой последовательность команд (операторов), отдельную от основной части программы и имеющую в конце специальную команду выхода из подпрограммы. Обычно подпрограмма имеет имя, по которому её можно вызвать, хотя ряд языков программирования допускает использование и неименованных подпрограмм. В языках высокого уровня описание подпрограммы обычно состоит по меньшей мере из двух частей: заголовка и тела. Заголовок подпрограммы описывает её имя и, возможно, параметры, то есть содержит информацию, необходимую для вызова подпрограммы. Тело - набор операторов, который будет выполнен всякий раз, когда подпрограмма будет вызвана.

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

Формальные и фактические параметры. Чтобы отличать параметры подпрограммы, описанные в её заголовке и телœе, от параметров, указываемых при вызове подпрограммы, первые принято называть формальными параметрами, вторые - фактическими параметрами.

Подпрограмма - ϶ᴛᴏ блок кода между операторами Sub и End Sub или Function и end Function .

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

Подпрограмма-процедура Sub и End Sub . Обычно подпрограмму-процедуру принято называть процедурой.

При написании программы нужно учесть одно правило: ʼʼВнутри одной процедуры не должна быть описана другая процедураʼʼ.

Процедура - это любая подпрограмма, которая не является функцией.

Подпрограмма-функция - ϶ᴛᴏ блок кода, заключенный между операторами Function и End Function. Она выполняет какую-то операцию, но при этом обязательно возвращает какое-нибудь значение. Значение возвращается через имя функции.

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

Подпрограммы, входящие в состав классов в объектных языках программирования, обычно называются методами . Этим термином называют любые подпрограммы-члены класса, как функции, так и процедуры; когда требуется уточнение, говорят о методах-процедурах или методах-функциях.

6.2.4 Принцип проектирования программ сверху-вниз и снизу–вверх.

Программирование ʼʼсверху внизʼʼ, или нисходящее программирование - ϶ᴛᴏ методика разработки программ, при которой выработка начинается с определœения целœей решения проблемы, после чего идет последовательная детализация, заканчивающаяся детальной программой. Является противоположной методике программирования ʼʼснизу вверхʼʼ.

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

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

Программирование ʼʼснизу вверхʼʼ, или восходящее программирование - ϶ᴛᴏ методика разработки программ, начинающаяся с разработки подпрограмм (процедур, функций), в то время когда проработка общей схемы не закончилась. Является противоположной методике программирования ʼʼсверху внизʼʼ.

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

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

Пример.
Размещено на реф.рф
Чтобы написать число 512, сначала пишут цифру 5, затем 1 и, наконец, 2. При этом цифры рисуют, последовательно прорисовывая линии, из которых они состоят. Принтер напечатает это число точками.

При разработке программы пошагово, методом ʼʼсверху вниз ʼʼ сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста͵ вставляется вызов подпрограммы, которая будет выполнять данный фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются ʼʼзаглушкиʼʼ, которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём выработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной ʼʼзатычкиʼʼ, которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и должна быть уверен, что общая структура всœех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.

В теории и практике программирования наиболее популярны стратегии ʼʼсверху внизʼʼ и ʼʼснизу вверхʼʼ. Такие полярные варианты взаимодействия процессов проектирования и реализации оказываются применимыми только для программ небольшого или среднего размера. Создание же крупной программы обычно связано с поиском разумного компромисса между этими вариантами. Существует и еще одно решение – программирование ʼʼвширьʼʼ.

Программирование ʼʼвширьʼʼ - ориентиром провозглашается набор однородных модулей. В одной программе должна быть выявлено несколько однородных наборов. После того как однородные модули выявлены, приступают к непосредственному программированию, ĸᴏᴛᴏᴩᴏᴇ, собственно, и разбивается на этапы. На первом этапе создается лишь минимальное число представителœей каждого из выделœенных однородных наборов. В случае если поиск однородности проводился достаточно энергично, то обычно оказывается, что объём работ первого этапа реализации сравнительно невелик.

Подпрограммы - понятие и виды. Классификация и особенности категории "Подпрограммы" 2017, 2018.

  • - Call имя подпрограммы (фактические параметры).

    Вызов подпрограммы процедуры Sub Синтаксис процедуры типа Sub Процедура типа Sub [ Public | Private] Sub имя [(параметры)] [операторы внутри процедуры] End Sub Public - процедура доступна для всех других процедур модулей проекта. По умолчанию... .


  • - ПРОГРАММЫ И ПОДПРОГРАММЫ. СВЯЗЬ ПО УПРАВЛЕНИЮ И ПО ДАННЫМ

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


  • - Программы и подпрограммы. связь по управлению и по данным

    Лабораторная работа № 3. В целях структуризации программ, облегчения их разработки, отладки и понимания большие программы принято разбивать на отдельные модули, логически связанные друг с другом и достаточно автономные. Идея структурного программирования... .


  • - Основы программирования на языке Visual Basic for Applications (VBA). Подпрограммы-процедуры и подпрограммы-функции. Модульная структура программы.

    При вызове процедуры или функции передают в них некоторые переменные путем замены формальных параметров на фактические. (Фактические параметры берутся при вызове ф-ции. Формальные параметры берутся из задач.) Внутри процедуры этим переменным может быть присвоено... .


  • - Подпрограммы пользователя

    Begin Var s:real; s1: integer;{Ввод числовых данных} s:=StrToFloat(Edit1.Text); s1:=StrToInt(InputBox("Ввод данных","Введите s","")); {Вывод числовых данных} Edit2.Text:=FloatToStr(s); Label1.Caption:=IntToStr(s1); ShowMessage(FloatToStr(s)) End; Для вывода чисел по формату используются: - Процедура Str(F[:Width[:Decimals]], S), которая... .


  • - Вызов подпрограммы на С из подпрограммы на ассемблере

    Вызов подпрограммы на С не отличается от вызова подпрограммы на ассемблере. Однако при вызове С/С++-функции следует учитывать, что она работает в соответствии с рассмотренными положениями функционирования среды выполнения. Поэтому, если вложенная asm-процедура в... .


  • - Вызов подпрограммы на ассемблере из программы на С

    Хорошим стилем программирования считается описание прототипа ассемблерной функции для определения аргументов функции и интерфейса между программой на С и подпрограммой на ассемблере. Run-time модель выполнения определяет некоторые регистры как рабочие (Scratch), а... .


  • - Подпрограммы

    Begin Uses Uses End. Begin . . .//код проектаРабота с модулем: 1. Создать консольное приложение командой Файл => Новый => Другое => Console Application. 2. Cохранить проект в папке KR командой Файл => Сохранить проект как..=> Blank. 3.... .


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

    Программное обеспечение USB Библиотечные подпрограммы разработаны для использования с компоновщиком. Нет необходимости создавать дополнительные включаемые файлы. Подпрограммы предлагаются упакованными в следующие файлы: USB_CH9 .ASM - обработка всех команд в... .


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

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

    В языке Паскаль механизм подпрограмм реализуется в виде ПРОЦЕДУР и ФУНКЦИЙ, которые вводятся в программе с помощью своего описания, но их способом их использования.

    Процедура- это независимая часть программы, которую можно вызвать по имени для выполнения определенных действий. Процедура не может выступать как операнд в выражении. Упоминание имени процедуры в тексте программы приводит к активизации процедуры и называется ее вызовом. Например,

    Delay (10); вызывает задержку выполнения программы на 10мс.

    Функция аналогична процедуре, но имеются два отличия: функция передает в точку вызова скалярное значение; имя функции в выражении может выходить как операнд. Например, функция SQR(x)-возведет в квадрат значение целого или вещественного значения X и передаст в точку вызова вычисленное значение квадрата переменной X.

    Все процедуры и функции языка Паскаль делятся на две группы:

    à Встроенные (стандартные) - входят в состав языка и вызываются для выполнения по строго фиксированному имени.

    à Определенные пользователем – разрабатываются и имеются самим пользователем.

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

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

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

    Параметром называется переменная, которой присваивается какое-либо значение в рамках указанного применения.

    Фактические параметры - это параметры, которые передаются подпрограмме при общении с ней.

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

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

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

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

    Подпрограммы процедуры

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

    Листинг 1. Пример подпрограммы - процедуры

    G_Per=56 ; PeredatByte(); ... G_Per=37 ; PeredatByte(); ... /********************************************** Подпрограмма передачи байта через последовательный порт **********************************************/ void PeredatByte(void ) {do ;while (TI==0) SBUF=G_Per //то передать очередной байт }

    Часто подпрограмма должна выполнять действия над каким то числом, значение которого неизвестно в момент написания программы. Это число можно передать через глобальную переменную как показано на рисунке 1. Однако намного удобнее использовать подпрограмму с параметрами . На языке высокого уровня вызов такой подпрограммы будет выглядеть следующим образом:

    PeredatByte(56 ); ... PeredatByte(57 ); ... void PeredatByte(char byte) {do ;while (TI==0 ) //Если предыдущий байт передан SBUF=byte; //то передать очередной байт }

    Сравните с программой, приведённой в листинге 1. Как по вашему, какая из программ более наглядная? В подпрограмму можно передавать и значительные объёмы данных, как например:

    PeredatStroky("Напечатать строку");

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

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

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

    Y=sin(x);

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

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

    Листинг 2. Пример подпрограммы - процедуры с передачей данных через параметр подпрограммы

    ... if (PeredatByte("A" )!=0 )printf(“Отказ последовательного порта” ); ... /******************************************************* Подпрограмма передачи байта через последовательный порт ********************************************************/ int PeredatByte(char byte) {for (i=1000 ;i0;) {if (TI==0 ) //Если предыдущий байт передан {SBUF=byte; //то передать очередной байт return(0 ); //и вернуть признак нормального выполнения подпрограммы } } return(-1 ); //Если превышено время ожидания, то вернуть признак отказа передатчика }

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