ПРОГРАММИРОВАНИЕ В TURBO PASCAL |
Здравствуйте
уважаемые подписчики!
В одной из рассылок мы уже затрагивали
тему процедур. На сей раз об этом более подробно.
ПРОЦЕДУРЫ И ФУНКЦИИ
При создании программ для решения сложной задачи выполняется декомпозиция (разделение) на подзадачи, а подзадач - на еще меньшие подзадачи и так далее, до легко программируемых элементов. Для этого в языке Turbo Pascal имеется две разновидности подпрограмм - процедуры и функции.
Локальные и глобальные переменные
Все параметры, которые использует подпрограмма, можно разбить на две категории: локальные параметры, объявленные внутри подпрограммы и доступные только ей самой, и глобальные - объявленные в основной программе и доступные как в программе, так и всем ее подпрограммам. В случае совпадения имен глобального и локального параметра действовать будет только внутренний локальный идентификатор. Локальные данные создаются при вызове процедуры функции и существуют только во время ее выполнения. Выделение памяти для локальных данных происходит автоматически в начале выполнения подпрограммы, а освобождение этой памяти - как только выполнение подпрограммы заканчивается.
Структура описания процедур и функций
Отличительные особенности функции:
- она имеет только один результат выполнения (но может иметь несколько входных параметров); результат обозначается именем функции и передается в основную программу;
- вызов процедуры выполняется отдельным оператором;
- вызов функции может выполняться там. где допускается ставить выражение, в частности, в правой части оператора присваивания.
Формальные и фактические параметры. Параметры, указываемые в заголовке подпрограммы, называются формальными параметрами. Параметры, указываемые при вызове подпрограммы, называются фактическими параметрами (находятся в разделе описания переменных). Список формальных параметров необязателен и может отсутствовать.
Описание процедуры:
PROCEDURE {имя} ( {формальные
параметры} );
{раздел описания переменных}
BEGIN
{раздел операторов}
END;
Описание функции:
FUNCTION {имя} ( {формальные
параметры} ): Тип;
{раздел описания переменных}
BEGIN
{раздел операторов}
END;
Все формальные параметры можно разбить на четыре категории:
- параметры-значения (эти параметры в основной программе подпрограммой не меняются и при вызове ему может соответствовать произвольное значение, например, Inp(Abs(Z), -Y, 2* K); M:=Mult(X+Y, X-Y));
- параметры-переменные (эти параметры подпрограмма может изменить в основной подпрограмме и при вызове подпрограммы ему должен соответствовать фактический параметр в виде переменной нужного типа);
- параметры-константы;
- параметры-процедуры и параметры-функции.
Заголовок подпрограмм с описанными параметрами-значениями имеет следующий вид:
procedure Inp (Max, Min: Real; N: Word);
function Mult (X,Y: Integer): Real;
Заголовок подпрограмм с описанными параметрами-переменными имеет такой вид:
Procedure Inp (Var Max, Min: Real; Var N: Word);
Function Mult ( VarX,Y: Integer): Real;
Тип формального параметра может быть практически любым, однако в заголовке подпрограммы нельзя вводить новый тип. Например, ошибочной будет запись
Function Max(A: array[1..100] of Real): Real;
Чтобы правильно записать этот заголовок, следует в основной программе ввести тип-массив, а затем использовать его в заголовке:
Type Tar = array[1..100] of Real;
Function Max(A: Tar): Real;
При обращении к подпрограмме формальные параметры заменяются на соответствующие фактические вызывающей программы или подпрограммы.
Примеры вызова подпрограмм
Например задан заголовок процедуры:
PROCEDURE SUMMA(A, B, C: INTEGER);
где A, B, C - формальные параметры. Вызвать процедуру можно следующим образом:
SUMMA(5, M, 7);
где 5, М, 7 - фактические параметры. Т.о. в процедуре будем иметь следующие значения: А=5, В=М, С=7.
Пример:
В программе задаются два целых числа 5 и 7, эти
числа передаются процедуре DIA, в которой они
удваиваются. Один из параметров передается как
параметр-переменная, другой - как
параметр-значение.
Program Pro;
Uses Crt;
Const a: integer=5; b: integer=7;
Procedure Dia(Var c: integer; b: integer);
Begin
c:=c+c;
b:=b+b;
WriteLn(' Удвоенные: ',c:5, b:5);
end;
Begin ClrScr;
WriteLn(' Исходные: ',a:5, b:5);
Dia(a,b);
WriteLn(' Результат: ',a:5, b:5);
end.
В результате выполнения программы на экране будет выведено:
Исходные : 5 7
Удвоенные: 10 14
Результат: 10 7
Параметрами-переменными следует объявлять только те, через которые подпрограмма в действительности передает результаты вызывающей программе.
Предлагаем Вам самим выбрать ТЕМУ для следующей рассылки. Если у Вас есть какие-либо вопросы по программированию в Pascal или же Вы наоборот хотите поделиться своими навыками, то вот наш адрес:
Мы ответим на ВСЕ присланные сообщения. Заранее спасибо за любые пожеланиям и рекомендациям по поводу.
Акция: "ДОЛОЙ ОШИБКИ!"
При компиляции набранного кода или его выполнении программа Pascal выполняет проверку на наличие ошибок и выдает о них сообщения (Error...). Не все знают точно, что они означают и как с ними "бороться". Именно для них и предназначена эта акция. Теперь, если у Вас что-то не получается, а программа находит ошибку, то Вы можете прислать нам ее номер, название или весь Ваш код целиком, не забыв указать обратный e-mail, а мы со своей стороны обязательно постараемся Вам помочь:
!!!>>>
Задать вопрос про "ошибку" <<<!!!
http://subscribe.ru/
E-mail: ask@subscribe.ru |
В избранное | ||