- •1.1. Основные этапы создания программы
- •1.2. Алгоритмы
- •2.1. Структура типов в Turbo Pascal
- •Стандартные скалярные типы. Типы целых чисел
- •2.3. Операции побитовой обработки
- •2.4. Представление вещественных чисел в эвм
- •2.5. Символьный тип
- •2.6. Булевский тип
- •2.7. Перечисленный тип
- •2.8. Интервальный тип (диапазон)
- •3.1. Структура программы на turbo pascal
- •3.2. Основные операторы языка
- •3.2.1. Простые операторы
- •3.2.2. Операторы ввода-вывода
- •3.2.3. Структурные операторы
- •3.2.4. Условные операторы
- •3.2.5. Операторы повтора (цикла)
- •4.1. Массивы
- •4.2. Строковый тип
- •4.3. Множества
- •5.1. Процедуры и функции
- •5.2. Процедуры и функции пользователя
- •5.3. Передача параметров по значению и по ссылке
- •5.4. Рекурсивные процедуры и функции
- •6.1. Структура модулей
- •6.2. Компиляция и использование модулей
- •7.1. Записи
- •7.2. Вложенные записи
- •7.3. Записи с вариантами (вариантные записи)
- •7.4. Файлы
- •7.5. Подпрограммы для работы с файлами
- •7.5.1. Процедуры
- •7.5.2. Функции
- •7.6. Примеры программ для обработки файлов
- •7.7. Текстовые файлы
- •8.1. Структура оперативной памяти для программ на Turbo Pascal
- •8.2. Динамические структуры данных
- •8.3. Основные процедуры и функции для работы с динамическими переменными
- •8.4. Динамика выделения памяти в куче
- •8.5. Линейные списки. Способы создания и обработки
- •8.6. Нелинейные списки. Способы создания и обработки
- •Библиографический список
- •Оглавление
- •394026 Воронеж, Московский просп., 14
5.2. Процедуры и функции пользователя
Технология программирования с использованием процедур и функций, организованных пользователем, дает ряд преимуществ:
- обеспечивает одновременную работу нескольких программистов над одной программой;
- позволяет проводить независимую отладку каждой подпрограммы в автономном режиме;
- экономит память, так как многократно используемый участок программы заносится в память только один раз.
Язык Паскаль предоставляет пять основных способов использования и размещения подпрограмм:
- основная программа, процедуры и функции расположены в одном файле;
- подпрограммы расположены в отдельных файлах и включаются в основной файл с помощью директивы компилятора $I;
78
- подпрограммы организуются как оверлейные структуры и поочередно загружаются в одно и то же место памяти;
- подпрограммы пишутся на машинном коде и включаются в программу одним из перечисленных способов;
- подпрограммы оформляются как внешние и вызываются из основной программы.
Описание процедуры пользователя включает заголовок процедуры и тело процедуры.
Заголовок состоит из зарезервированного слова Procedure, имени процедуры и необязательного списка параметров с указанием типа каждого параметра:
Procedure Sum(x, y : integer; z:real);
Procedure Ort; {Заголовок процедуры без параметров}
Параметры в заголовке процедуры, заключенные в скобки, называются формальными параметрами.
Имя процедуры – идентификатор, уникальный в пределах программы. Тело процедуры – локальный блок, по структуре аналогичный программе.
Для обращения к процедуре используется оператор вызова процедуры:
Sum (a,b,c);
Ort;
Параметры в операторе вызова процедуры, заключенные в скобки, называются фактическими параметрами. Эти параметры передаются в процедуру.
Между фактическими параметрами в операторе вызова процедуры и формальными параметрами в заголовке описания процедуры устанавливается взаимнооднозначное соответствие путем перебора слева направо. Количество и тип формальных и фактических параметров должно совпадать. Механизм параметров позволяет вызывать процедуру с различными начальными условиями.
79
Если процедура должна возвратить в вызвавшую ее программу какие-то параметры, то эти параметры в заголовке процедуры пишутся со словом var.
Prozedure Delta(x: real; y: real; var z: boolean);
Параметр z возвращается в программу, вызвавшую процедуру Delta.
Для иллюстрации использования процедур рассмотрим программу, которая обеспечивает ввод двух целых чисел, нахождение их среднего арифметического и вывода результата на экран. Нахождение среднего арифметического и вывод результата на экран оформим в виде процедуры.
Program Dem;
var a, b: integer;
Prozedure Ras(x,y : integer); {Заголовок процедуры}
var z: real;
begin
z: = (x+y)/2;
writeln(‘Среднее арифметическое = ‘, z);
end;
begin
writeln(‘Введите значения a и b’);
readln(a,b);
Ras(a,b); {Оператор вызова процедуры}
end.
В следующей программе результат расчета возвращается в головную программу и выводится на экран в головной программе.
Program Dem;
var a, b: integer; c : real;
Prozedure Ras(x, y : integer; var z: real);
begin
z: = (x+y)/2;
end;
80
begin
writeln(‘Введите значения a и b’);
readln(a,b);
Ras(a,b,c);
writeln(‘Среднее арифметическое = ‘, c);
end.
Функция, определяемая пользователем, состоит из заголовка и тела функции. Заголовок состоит из зарезервированного слова Function, имени функции, необязательного списка формальных параметров с указанием их типа, а также типа значения, возвращаемого функцией.
Function Swot(x: real; y: integer): integer;
Function Zast: real; {Функция без параметров}
Тело функции представляет локальный блок, по структуре аналогичный программе. Однако в теле функции обязательно должен присутствовать хотя бы один оператор, присваивающий имени функции значение, поскольку функция возвращает значение по имени своего идентификатора. Если таких присваиваний в теле функции будет несколько, то результатом работы функции будет значение последнего оператора присваивания.
Решим предыдущую задачу с использованием функции.
Program Dem;
var a, b: integer;
Function Ras(x,y : integer): real; {Заголовок функции}
begin
Ras: = (x+y)/2;
end;
begin
writeln(‘Введите значения a и b’);
readln(a,b);
writeln(‘Среднее арифметическое = ‘, Ras(a,b));
end.
81