Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Podprogrammy.doc
Скачиваний:
37
Добавлен:
23.08.2019
Размер:
1.92 Mб
Скачать

Тема 9. Подпрограммы

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

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

Работа с подпрограммой имеет два этапа:

  1. описание подпрограммы;

  2. вызов подпрограммы.

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

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

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

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

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

  • с использованием файлов;

  • с помощью глобальных переменных;

  • с помощью параметров.

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

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

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

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

Процедуры

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

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

Procedure <Имя> [ (формальные параметры) ];

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

Пример. Использование процедур.

Рассмотрим процедуру обработки события нажатия кнопки Buttoni, в которой Вызываются две процедуры DecodeDate И ChangeStr.

procedure TForm1.Button1Click(Sender: TObject);

// Описание пользовательской процедуры ChangeStr

procedure ChangeStr(таг Source: string; const charl, char2: char);

label 10;

var n: integer;

begin

10:

n := pos(charl, Source);

if n > 0 then begin

Source[n] := char2;

goto 10;

end;

end;

var strl: string;

Year, Month, Day: word;

begin

// Вызов процедуры DecodeDate

DecodeDate(Now, Year, Month, Day);

strl := Editl.Text;

// Вызов пользовательской процедуры ChangeStr

ChangeStr(strl, '1', ' * ' ) ;

Editl.Text := strl;

end;

Процедура DecodeDate выполняет декодирование даты на отдельные составляющие (год, месяц и день) и может быть использована без предварительного описания, так как она описана в модуле sysutils. Процедура Changestr выполняет замену в строке source всех вхождений символа, который задает параметр chari, на символ, задаваемый параметром char2.

Предварительное описание пользовательской процедуры changestr выполнено непосредственно в обработчике события нажатия кнопки Buttoni. Это описание можно вынести за пределы обработчика, в этом случае процедуру Changestr можно будет вызывать не только из данного обработчика.

Вызов процедуры changestr обеспечивает замену повсюду в строке str1 символа 1 на символ *.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]