Механизм передачи параметров в подпрограмму

Информационные технологии 1

Процедуры и функции

1. Функции

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

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

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

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

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

function ( ): ;

const … ;

var … ;

begin

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

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

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

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

Пример 3.1. Найти значение следующего выражения:

Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму,

где Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму.

program prf;

var t,c,r:real;

function F(x:real):real;

begin

F:=sqrt(x)+2*sqr(x)+3*x;

begin

Writeln(‘Введите числа’);

Write(‘t=’); Readln(t);

Write(‘c=’); Readln(c);

writeln(‘результат = ’, r:8:3);

Источник

ИНФОРМАТИКА 1.1.

* Процедуры и функции

1. Функции

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

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

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

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

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

function ( ): ;

const … ;

var … ;

begin

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

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

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

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

Пример 3.1. Найти значение следующего выражения:

Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму,

где Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму.

program prf;

var t,c,r:real;

function F(x:real):real;

begin

F:=sqrt(x)+2*sqr(x)+3*x;

begin

Writeln(‘Введите числа’);

Write(‘t=’); Readln(t);

Write(‘c=’); Readln(c);

writeln(‘результат = ’, r:8:3);

Источник

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

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

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). Однако там не была рассмотрена ситуация некорректного ввода значений коэффициентов. Например, если пользователь введёт Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму, то уравнение из квадратного превратится в линейное. Алгоритм решения линейного уравнения тривиален: Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму, при условии, что Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму. Чтобы не усложнять уже составленный алгоритм решения квадратного уравнения, запишем его в виде подпрограммы-процедуры. Далее приведён фрагмент программы с комментариями:

Источник

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

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

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

В Паскале существует четыре вида параметров:

Кроме того, по другим критериям можно выделить особые виды параметров:

– открытые массивы и строки;

– процедурные и функциональные параметры;

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

Например, передача величины целого типа в процедуру Р записывается так:

procedure P(x : integer);

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

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

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

Например, если в вызывающей программе описаны переменные

Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму

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

Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму

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

Признаком параметра-переменной является ключевое слово var перед описанием параметра:

Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму

Например, передача параметра-переменной целого типа в процедуру Р записывается так:

Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму

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

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

Параметр-константу можно узнать по ключевому слову const перед описанием параметра

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

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

Параметры составных типов (массивы, записи, строки) предпочтительнее передавать как константы, потому что при этом не расходуется время на копирование и место в стеке. Размер стека, как упоминалось, не может превышать 64 Кбайт, а по умолчанию устанавливается равным 16 Кбайт.

Источник

Передача параметров в подпрограмму.

Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму

Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму

Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму

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

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

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

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

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

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

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

Процедуры.

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

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

Рассмотрим примеры заголовков процедур с параметрами-значениями:

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

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

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

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

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

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

//x, y – параметры-значения,

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

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

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

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

Функции.

Описание функции также состоит из заголовка и тела:

Механизм передачи параметров в подпрограмму. Смотреть фото Механизм передачи параметров в подпрограмму. Смотреть картинку Механизм передачи параметров в подпрограмму. Картинка про Механизм передачи параметров в подпрограмму. Фото Механизм передачи параметров в подпрограмму

Примеры описания функций:

function fun_1 (x:real):real;

function fun_2(a, b:integer):real;

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

function fun_2(a, b:integer):real;

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

Приложение 2.

Массивы.

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

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

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

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

Описание массивов

Для описания массива служат служебные слова array of. Описать массив можно двумя способами:

Ввести новый тип данных, а потом описать переменные нового типа. В этом случае формат оператора type следующий:

имя_типа = array [тип_индекса] of тип_компонентов;

В качестве типа_индекса следует использовать перечислимый тип. Тип_компонентов — это любой ранее определенный тип данных, например:

massiv=array[0..12] of real;

//Тип данных massiv из 13 элементов, элементы нумеруются от 0 до 12.

dabc=array[-3..6] of integer;

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

переменная: array [тип_индекса] of тип_переменной;

z,x: array[1..25] of word;

//Массивы z и x из 25 значений типа word,

//элементы нумеруются от 1 до 25.

Для описания массива можно использовать предварительно определенные константы:

Константы должны быть определены до использования, так как массив не может быть переменной длины!

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

massiv=array[1..200] of real;

matrica=array[1..300] of massiv;

Такая же структура получается при использовании другой формы записи:

matrica = array [1..300,1..200] of real;

var ab:array [1..300,1..200] of real;

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

Аналогично можно ввести трехмерный массив, или массив большего числа измерений:

Источник

Leave a Reply

Your email address will not be published. Required fields are marked *