Каких параметров подпрограммы не существует

Подпрограмма

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

Содержание

Назначение подпрограмм.

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

Механизм подпрограмм, их описание и вызов

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

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

В следующем примере на языке Паскаль подпрограмма subprog вызывается из основной программы трижды:

Результатом выполнения такой программы станет вывод строки «Hello» и трёх строк «Bye».

Некоторые языки программирования (например, Паскаль, Ада, Модула-2) допускают описание вложенных подпрограмм, то есть помещение подпрограмм внутрь других подпрограмм. Такие вложенные подпрограммы могут использоваться только в той подпрограмме, в которой они описаны. В иных случаях (например, в языке Си) вложение подпрограмм не допускается. Никаких принципиальных преимуществ вложение подпрограмм не даёт, но может быть удобно для более логичной структуризации программы (если какая-то подпрограмма используется только в некоторой другой подпрограмме, логично поместить первую во вторую).

Параметры подпрограмм

Назначение параметров

Подпрограммы часто используются для многократного выполнения стереотипных действий над различными данными. Подпрограмма обычно имеет доступ к объектам данных, описанным в основной программе (по крайней мере, к некоторым из них), поэтому для того, чтобы передать в подпрограмму обрабатываемые данные, их достаточно присвоить, например, глобальным переменным. Но такой путь не особенно удобен и чреват ошибками.

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

В приведённом примере параметр Line подпрограммы subprog в каждом вызове получает различное значение, благодаря чему выводятся не одинаковые строки, а разные.

Формальные и фактические параметры

Способ передачи параметров в подпрограмму

Существует несколько способов передачи параметров в подпрограмму.

Язык программирования может предоставлять возможность передавать параметры в подпрограммы либо только по значению (так сделано в языке Си), либо по значению и по ссылке (это реализовано в Паскале, Аде, C++), либо по имени и значению (это реализовано в языках Алгол и Алгол 68). В последних двух случаях для различения способов передачи параметра используются отдельные синтаксическая конструкции (в Паскале это ключевое слово var при описании параметра). В действительности, если язык содержит понятие ссылки (указателя), то можно обойтись и без передачи параметра по ссылке (её всегда можно смоделировать, описав параметр типа «ссылка»), но эта возможность удобна, так как позволяет работать с формальным параметром-ссылкой без разыменования, а также повышает надёжность и безопасность программы.

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

Виды подпрограмм

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

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

Источник

Каких параметров подпрограммы не существует

«Любой дурак может написать программу, которую поймет компилятор. Хорошие программисты пишут программы, которые смогут понять другие программисты»

20. Параметры подпрограмм

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

Формальные параметры можно классифицировать на следующие виды: параметры значения, переменные, константы и выходные (var, const и out).

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

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

Параметры переменные и параметры значения.

Параметры значения передаются как значения, в то время как параметры переменные передаются по ссылке (reference). Для пояснения различия между ними сравните две функции:

function DoubleByValue(X: Integer): Integer; // X is a value parameter

function DoubleByRef(var X: Integer): Integer; // X is a variable parameter

Эти функции возвращают одинаковые значения, однако вторая изменяет значение соответствующего фактического параметра:

var I, J, V, W: Integer;

J := DoubleByValue(I); // J = 8, I = 4

W := DoubleByRef(V); // W = 8, V = 8

Даже если одна и та же переменная используется как два или более параметров, никаких копий не создается, например:

procedure AddOne(var X, Y: Integer);

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

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

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

Эти параметры (out parameters), подобно параметрам переменным, также передаются по ссылке. Вместе с тем начальное значение выходного параметра игнорируется, так как он предназначен только для возврата результата. Например,

procedure GetInfo(out Info: SomeRecordType);

При вызове этой процедуры ей передается некоторая переменная типа SomeRecordType и она не используется для передачи каких-либо данных процедуре. Выходные параметры часто используются при использовании COM и CORBA моделей. Кроме того, параметр необходимо объявлять выходным, если процедуре передается неинициализированная переменная.

Любой из параметров – var, const или out – может быть объявлен как не имеющий типа, т.е. нетипизированный. Исключение составляет лишь параметр значение, тип которого должен быть указан обязательно. Пример:

procedure TakeAnything(var A; const B; out C);

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

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

Function Equal(var Source, Dest; Size: Integer): Boolean;

Источник

Pascal | Лекция №6

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

СОДЕРЖАНИЕ:

Подпрограммы (см. Рапаков стр.143-157!)

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

Использование подпрограмм позволяет:

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

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

Структура подпрограмм

Структура подпрограмм почти в точности повторяет структуру всей Pascal-программы.

При описании подпрограммы в общем случае необходимо задать три основные компоненты:

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

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

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

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

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

Описание процедур и функций. Формальные параметры

Описание процедур и функций в общем виде:

Каких параметров подпрограммы не существует. Смотреть фото Каких параметров подпрограммы не существует. Смотреть картинку Каких параметров подпрограммы не существует. Картинка про Каких параметров подпрограммы не существует. Фото Каких параметров подпрограммы не существует

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

Здесь — имя процедуры.

Раздел описаний, как и в основной программе, может включать разделы Label, Const, Type, Var и раздел процедур и функций.

Формальные параметры представляют собой список переменных с указанием их типа, которые отделяются друг от друга «;». Эти переменные не описываются в разделе описания процедур. Допускается использование процедур без параметров.

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

Параметры процедур бывают двух типов:

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

Список переменных1: тип1; список переменных2: тип2;

Соответственно описание выходных параметров выглядит следующим образом:

Var Список переменных1: тип1; Var список переменных2: тип2;

Вызов процедуры в основной программе имеет следующий вид:

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

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

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

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

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

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

Функции имеют несколько отличительных особенностей:

Область действия имен

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

Переменные, описанные в подпрограмме, действуют только в теле данной подпрограммы и в любой, объявляемой внутри нее, подпрограмме. Такие переменные называются локальными. Они недоступны для операторов основной программы и др. подпрограмм.

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

Каких параметров подпрограммы не существует. Смотреть фото Каких параметров подпрограммы не существует. Смотреть картинку Каких параметров подпрограммы не существует. Картинка про Каких параметров подпрограммы не существует. Фото Каких параметров подпрограммы не существует

Самый внешний блок программы обозначен буквой A (имена этого блока «видны» во всех остальных блоках), B и D – подпрограммы, описанные во внешнем блоке, C – подпрограмма, описанная в блоке B (объекты этого блока известны только внутри самого блока).

При написании программ, имеющих вложенные подпрограммы, необходимо соблюдать следующие правила:

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

Пример 1: вычислить площадь выпуклого четырехугольника

В результате выполнения данной программы на экран будет выведено:

Источник

Основные типы параметров подпрограмм

Списки формальных параметров

Параметры подпрограмм

Подпрограммы могут быть с параметрами и без параметров, т.е. список параметров может отсутствовать. В подпрограммах без параметров можно использовать как глобальные, так и локальные объекты.

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

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

PROCEDURE MNMX ( A : REAL ; M : ITEGER ; VAR MN, MX : REAL ) ;

FUNCTION FACT ( B : MYTYPE ; N : INTEGER ) : INTEGER ;

MN, MX – параметры-переменные. A, B, M, N – параметры-значения.

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

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

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

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

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

В версии 7.0 могут быть использованы параметры-константы, которые в подпрограммах не изменяются. Их объявление осуществляется по форме:

PROCEDURE P (CONST Par : WORD ) ;

Если в теле процедуры появится оператор:

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

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

FUNCTION EQUAL (VAR PARAM1, PARAM2; LEN : WORD ) ;

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

В качестве открытых параметров-переменных в языке Паскаль могут использоваться массивы и строки. Открытые массивы – это параметры-массивы подпрограмм, размер которых не указывается в списке формальных параметров заголовка подпрограммы:

FUNCTION SUM ( VAR A : ARRAY OF BYTE ) : BYTE ;

Ключевое слово VAR в объявлении параметра открытого типа обязательно.

Фактическим параметром открытого массива может быть массив любого размера. Тип элементов фактического массива должен совпадать с типом массива – формального параметра. В качестве открытых массивов могут использоваться только одномерные массивы. Внутри подпрограмм границы переданного массива могут определяться с помощью функций LOW (low (x) возвращает минимальное значение порядкового типа) и HIGH (high (x) возвращает максимальное значение порядкового типа). При этом результат вызова функции LOW всегда даст 0. А результат вызова функции HIGH – верхнее значение индекса при нумерации его элементов от 0.

Открытые строки аналогичны открытым массивам. Для их использования после объявления имени программы необходимо включить директиву <$P+>. Формальные параметры объявляются в виде string. В качестве фактических параметров при этом можно использовать строки любой длины. Внутри подпрограммы строка-параметр всегда трактуется по максимуму, т.е. как строка на 255 символов.

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

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

TYPE PROC1 = PROCEDURE ( A, B, C, : REAL ; VAR D : REAL ) ;

PROC2 = PROCEDURE ( VAR A, B, C, : REAL ) ;

FUNC1 = FUNCTION ( S : STRING ) : REAL ;

FUNC2 = FUNCTION : STRING ;

Каких параметров подпрограммы не существует. Смотреть фото Каких параметров подпрограммы не существует. Смотреть картинку Каких параметров подпрограммы не существует. Картинка про Каких параметров подпрограммы не существует. Фото Каких параметров подпрограммы не существует

Использование подпрограмм, в которых в качестве формальных параметров применяются процедурные типы и в качестве фактических – имена подпрограмм, требует директивы компилятора <$f+>или опции компилятора OPTIONS / COMPILE / FORCE FAR CALLS – дальний вызов подпрограмм.

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Источник

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

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

4.1 Общие сведения о подпрограммах. Локальные и глобальные переменные

Для правильного определения области действия идентификаторов (переменных) необходимо придерживаться следующих правил:

4.2 Формальные и фактические параметры. Передача параметров в подпрограмму

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

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

Формальные параметры процедуры можно разделить на два класса: параметры-значения и параметры-переменные.

При передаче данных через параметры-значения в подпрограмму передаются значения фактических параметров, и доступа к самим фактическим параметрам из подпрограммы нет. При передаче данных параметры-переменные заменяют 1 Реально в подпрограмму передаются адреса фактических параметров. формальные параметры, и, следовательно, в подпрограмме есть доступ к значениям фактических параметров. Любое изменение параметров-переменных в подпрограмме приводит к изменению соответствующих им формальных параметров. Следовательно, входные данные следует передавать через параметры-значения, для передачи изменяемых в результате работы подпрограммы данных следует использовать параметры-переменные.

От общетеоретических положений перейдём к практическому использованию подпрограмм при решении задач. Изучение подпрограмм начнем с процедур.

4.3 Процедуры

Описание процедуры имеет вид:

procedure name_1( r : real; i : integer; c : char );

Однотипные параметры могут быть перечислены через запятую:

procedure name_2( a, b : real; i, j, k : integer );

Список формальных параметров необязателен и может отсутствовать:

Если в заголовке процедуры будут применяться параметры-переменные, то перед ними необходимо указывать служебное слово var :

procedure name_4( x, y : real; var z : real );

Для обращения к процедуре необходимо использовать оператор вызова:

Фактические параметры в списке оператора вызова отделяются друг от друга запятой:

a : = 5. 3; k : = 2; s := ’ a ’;

Если в описании процедуры формальные параметры отсутствовали, то и при вызове их быть не должно:

Алгоритм решения этой задачи был подробно описан в задаче 3.3 (рис. 3.14). Однако там не была рассмотрена ситуация некорректного ввода значений коэффициентов. Например, если пользователь введёт Каких параметров подпрограммы не существует. Смотреть фото Каких параметров подпрограммы не существует. Смотреть картинку Каких параметров подпрограммы не существует. Картинка про Каких параметров подпрограммы не существует. Фото Каких параметров подпрограммы не существует, то уравнение из квадратного превратится в линейное. Алгоритм решения линейного уравнения тривиален: Каких параметров подпрограммы не существует. Смотреть фото Каких параметров подпрограммы не существует. Смотреть картинку Каких параметров подпрограммы не существует. Картинка про Каких параметров подпрограммы не существует. Фото Каких параметров подпрограммы не существует, при условии, что Каких параметров подпрограммы не существует. Смотреть фото Каких параметров подпрограммы не существует. Смотреть картинку Каких параметров подпрограммы не существует. Картинка про Каких параметров подпрограммы не существует. Фото Каких параметров подпрограммы не существует. Чтобы не усложнять уже составленный алгоритм решения квадратного уравнения, запишем его в виде подпрограммы-процедуры. Далее приведён фрагмент программы с комментариями:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *