Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 2 семестр.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
609.28 Кб
Скачать

70

1. Подпрограммы

1.1. Описание подпрограмм

Идея использования подпрограмм для выполнения одинаковых действий по отношению к разным однотипным исходным данным реализована в языке Turbo Pascal с помощью процедур и функций. Так как подпрограмма является частью программы, то ее синтаксическая конструкция повторяет с некоторыми особенностями структуру программы в целом. Подпрограмма должна быть представлена в описательной части программы. Заголовок подпрограммы служит для задания ей собственного имени, используемого для обращения к ней, и ее формальных параметров. Список формальных параметров включает в себя параметры, с помощью которых в подпрограмму передаются исходные данные, и параметры, предназначенные для возвращения из подпрограммы в основную программу результатов выполнения подпрограммы. Имена формальных параметров служат своеобразными шаблонами, которые при обращении к подпрограмме заменяются конкретными объектами программы. Все необходимые действия в подпрограмме образуют ее тело, заключенное между ключевыми словами begin и end. Между заголовком подпрограммы и ее телом могут содержаться разделы описания необходимых исключительно для самой подпрограммы объектов: ее констант, типов, переменных и подпрограмм.

Заголовок процедуры имеет следующий вид:

procedure <Имя>(<Список формальных параметров>);.

Параметры в списке описываются с указанием имени типа, например так: (arg1, arg2 : byte; var arg3 : word). Однотипные параметры описывают через запятую. Перед параметром arg3 стоит служебное слово var, именно с ним должны описываться формальные параметры, представляющие результаты выполнения действий в подпрограмме.

Процедура является общим видом подпрограммы. С ее помощью можно выполнять различные действия, например ввод или вывод данных, их сортировку и т.п., а также возвращать в программу несколько результатов, например максимальный элемент массива и его индексы. Функция - это частный случай подпрограммы, которая содержит в своем имени результат (как, например, стандартная функция sin(x)). Функция может возвращать значения, относящиеся к любому порядковому или действительному типу, типу string (без указания длины), к любому указателю. Поэтому в заголовке функции обязательно указывают тип возвращаемого ею значения, а в теле функции должен присутствовать оператор присваивания возвращаемого значения имени функции. В общем случае заголовок функции имеет следующий вид:

Function <Имя>(<Список формальных параметров>):<Тип результата>;.

Пример 1. Напишем подпрограмму, определяющую сумму элементов вектора. Так как результатом выполнения подпрограммы является число, то оформим подпрограмму-функцию. Предусмотрим работу с векторами, содержащими разное количество компонент, – параметр n.

function Summa (u : vector; n : byte) : real; {Заголовок функции}

var k : byte; {Локальные переменные}

sum : real;

begin {Тело подпрограммы}

sum:= 0; {Исходная сумма}

for k := 1 to n do

sum := sum + u[k];

Summa := sum {Присвоение имени функции результата}

end;

Используемый для описания параметра u тип vector должен быть объявлен в программе до его применения в заголовке функции Summa. Для получения результата функция Summa использует локальные переменные k и sum, которые объявлены внутри подпрограммы. Задействовать для этих же целей однотипные глобальные переменные из основной программы не рекомендуется. Это может приводить к их нежелательным изменениям в подпрограмме. К тому же функция является инструментом решения задачи для программы, но не программа с ее объектами обслуживает подпрограмму. В связи с использованием понятий локальных и глобальных параметров приведем следующую полезную иллюстрацию взаимодействия блоков программы. Пусть (рисунок ниже) самый внешний ее блок A содержит внутри себя блоки B и D, а блок B содержит блок C. Тогда описанные в блоке A константы, типы, переменные, подпрограммы являются глобальными для блоков B, C и D, т.е. они “видимы” в них и могут быть использованы (и в блоке A – тоже).

Аналогичные объекты, но объявленные в блоке B, “видимы” только в блоке C и не доступны для использования в блоках A и D. Объекты, описанные в блоках C и D, являются их локальными объектами и могут быть использованы только в этих блоках.

Пример 2. Напишем подпрограмму для ввода нужного числа элементов вектора. Эти действия реализуем с помощью процедуры.

procedure Vvod (var w : vector; n : byte);

var i : byte; {Локальная переменная}

begin

writeln(‘Введите через пробел ’, n, ‘натуральных чисел  255’);

for i := 1 to n do read(w[i])

end;