- •Оглавление
- •Виды данных
- •Программирование линейных алгоритмов
- •Программирование разветвляющихся алгоритмов
- •Программирование циклических алгоритмов
- •Описание и использование типа массив
- •Ввод и вывод массивов
- •Процедуры и функции для работы со строками
- •Описание и использование данных строкового типа
- •Операции над строками
- •Описание и использование процедур и функций
- •Функции
- •Формальные и фактические параметры
- •Описание и использование типа запись
- •Описание и использование множеств
- •Файловый тип данных. Описание и использование типизированных файлов
- •Описание и использование текстовых файлов
- •Модуль пользователя
- •Объектно-ориентированное программирование. Классы. Основные понятия
- •Основные понятия
- •Инкапсуляция
- •Наследование
- •Полиморфизм
- •Составляющие класса Поля
- •Свойства
- •Программные файлы. Файл проекта. Файл формы
- •Система программирования Delphi
- •Основные окна Delphi
- •Литература
Описание и использование процедур и функций
Подпрограмма – это часть программы, оформленная в виде отдельной синтаксической конструкции и снабженная именем. Структура подпрограммы аналогична структуре программы. В языке Паскаль имеется два вида подпрограмм - процедуры и функции.
Процедуры
Подпрограмма-процедура предназначена для выполнения некоторой законченной последовательности действий. Описание процедуры состоит из заголовка, раздела описаний и раздела операторов. Завершается описание процедуры точкой с запятой. Заголовок процедуры имеет вид:
procedure имя процедуры (список формальных параметров);
Формальные параметры подпрограммы указывают, с какими параметрами следует обращаться к этой подпрограмме (количество параметров, их последовательность, типы). Они задаются в заголовке подпрограммы в виде списка формальных параметров, разбитого на группы, разделённые точками с запятыми. В группу формальных параметров включаются однотипные параметры. Для каждого формального параметра указывается имя и тип. Тип формального параметра - идентификатор. Список формальных параметров может отсутствовать.
Примеры:
procedure summa(a:integer; b,c:real); {a,b,c формальные параметры}
procedure t;
При обращении к подпрограмме формальные параметры заменяются на соответствующие фактические параметры вызывающей программы или другой подпрограммы.
Оператор вызова процедуры имеет вид:
имя процедуры (список фактических параметров);
В операторе вызова процедуры фактические параметры отделяются друг от друга запятыми. Фактические параметры должны соответствовать формальным параметрам по их числу, типу и порядку записи.
Например: t; {нет списка фактических параметров}
summa(x,y,z); {x,y,z –фактические параметры; x: integer; y, z: real}
Функции
Подпрограмма-функция предназначена для вычисления единственного значения порядкового, вещественного, стандартного типа string или указателя. Заголовок функции имеет вид:
function имя функции (список формальных параметров): тип функции;
Тип функции – это тип возвращаемого результата. При описании функции в разделе операторов имени функции должно быть присвоено значение возвращаемого результата.
Примеры: function f (x:integer):real;
begin f :=sin(x)+sqr(x) end;
Для вызова функции из программы или другой подпрограммы следует указать имя функции со списком фактических параметров в выражении, где необходимо использовать значение функции.
Например: y :=f(a); {a- фактический параметр}
writeln(f(2+b)); {2+b –фактический параметр}
Формальные и фактические параметры
Формальные параметры можно разбить на несколько категорий. Рассмотрим две из них:
параметры-значения;
параметры-переменные.
Параметры-значения передаются основной программой в подпрограмму через стек в виде их копий и, следовательно, подпрограмма не может изменить собственный параметр программы. Другими словами, формальный параметр-значение при вызове подпрограммы получает свое значение путем копирования соответствующего ему фактического параметра и при изменении такого формального параметра соответствующий ему фактический параметр не меняется.
Параметр-значение указывается в заголовке подпрограммы своим именем и через двоеточие – типом. Тип параметра-значения может быть любым за исключением файлового. В качестве фактического параметра на месте параметра-значения при вызове подпрограммы может выступать любое выражение совместимого для присваивания типа.
При передаче параметров-переменных в подпрограмму через стек передаются их адреса в порядке, объявленном в заголовке подпрограммы. Следовательно, подпрограмма имеет доступ к этим параметрам и может их изменять. Параметр-переменная используется в том случае, когда значение должно передаваться из подпрограммы вызывающей программе. При вызове подпрограммы на месте параметра-переменной в качестве фактического параметра должна использоваться переменная идентичного типа.
Параметр-переменная указывается в заголовке подпрограммы аналогично параметру-значению, но только перед именем параметра записывается зарезервированное слово var. Действие var распространяется до ближайшей точки с запятой, т.е. в пределах одной группы.
procedure summa(a:integer;b:real; var c:real);
begin c:=a+b
end; {a, b- параметры-значения; c – параметр-переменная.}
Локальные и глобальные параметры
Параметры, объявленные внутри подпрограммы и доступные только ей самой, называются локальными.
В разделе описаний подпрограммы могут встретиться описания подпрограмм низшего уровня, а в них – описания других подпрограмм и т.д. При входе в подпрограмму низшего уровня становятся доступными не только объявленные в ней имена, но и сохраняется доступ ко всем именам верхнего уровня. Подпрограмме доступны только те объекты верхнего уровня, которые описаны до описания данной подпрограммы. Эти объекты называются глобальными по отношению к этой подпрограмме.
Параметры, объявленные до описания данной подпрограммы, доступны этой подпрограмме и называются глобальными параметрами.
Одноименные глобальные и локальные параметры – это разные параметры. Любое обращение к таким параметрам в подпрограмме трактуется как обращение к локальным параметрам, то есть глобальные параметры в этом случае недоступны.
Обмен информацией между основной программой и подпрограммой может осуществляться не только с помощью формальных и фактических параметров, но и глобальных параметров.
Примеры:
1) program prim1;
var x,y,z:integer;
procedure newval;
var x,y:integer; {x и y- локальные параметры}
begin x:=1; y:=1end;
begin x:=0; y:=0; newval; z:=x+y; writeln(z) end.
Результат z=0, так как x и y, используемые в основной программе, остаются равными нулю.
2) program prim2;
var x,y,z:integer;
procedure newval;
begin x:=1; y:=1end;
begin x:=0; y:=0; newval; z:=x+y; writeln(z) end.
Результат z=2, так как x и y – глобальные параметры.
