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

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

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

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

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

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

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

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

Процедуры.

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

procedure имя_процедуры(формальные_параметры);

label

описание_меток;

const

описание_констант;

type

описание_типов;

var

описание_переменных;

begin

//Тело процедуры.

end;

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

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

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

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

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

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

procedure name_3;

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

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

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

//z – параметр-переменная.

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

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

имя_процедуры(список_фактических_параметров);

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

a:=5.3; k:=2;

s:=’a’;

name_1(a, k, s);

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

name_3;__

Функции.

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

function имя_функции(формальные_параметры):тип;

label

описание_меток;

const

описание_констант;

type

описание_типов;

var

описание_переменных;

begin

//Тело функции.

end;

Заголовок функции содержит: служебное слово function, любой допустимый в языке Free Pascal идентификатор - имя_функции; имена формальных параметров и их типы, разделенные точкой с запятой - формальные_параметры, тип возвращаемого функцией значения - тип (функции могут возвращать скалярные значения целого, вещественного, логического, символьного или ссылочного типа).

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

function fun_1 (x:real):real;

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

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

Например:

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

begin

fun_2:=(a+b)/2;

end;

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

имя_функции (список_фактических_параметров);

Например:

y:=fun_1(1.28);

z:=fun_1(1.28)/2+fun_2(3,8);


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

Массивы.

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

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

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

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

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

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

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

type

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

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

type

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

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

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

//Тип данных dabc из 10 элементов, элементы нумеруются от -3 до 6.

var

x,y:massiv;

z: dabc;

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

var

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

Например:

var

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

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

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

g:array[-3..7] of real;

//Массив g из 11 значений типа real, которые нумеруюся от -3 до 7.

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

const

n=10;

m=12;

var

a: array[1..n] of real;

b: array[0..m] of byte;

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

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

type

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

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

var

ab:matrica;

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

Type

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

var

ab:matrica;

или

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

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

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

type

abc=array [1..4,0..6,-7..8,3..11] of real;

var b:abc;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: