Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

Insert (chr (k-80), t, I);

end;

if k=241 then

begin

delete (t, i, 1);

Insert (‘е’, t, I);

end;

en

writeln (t);

end.

Глава 6 Процедуры и функции

Программы, которые не разделяются на отдельные структурные элементы, называются монолитными. Большие монолитные программы сложны для разработки, отладки и сопровождения.

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

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

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

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

6.1 Процедуры

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

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

Program

Const

Var

. . . . .

Процедура_1

. . . . .

Процедура_n

Begin { Начало основной программы }

. . . . . .

End.

Сама процедура оформляется следующим образом:

Procedure Имя(Формальные_параметры); {заголовок процедуры}

Описание локальных переменных

Begin

Операторы <= Тело процедуры

End;

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

Формальные параметры – это список, который содержит имена переменных, массивов и типов, являющихся исходными данными и результатами процедуры. Он может отсутствовать. Элементы списка параметров описываются полностью, с указанием типов.

Локальные переменные — это переменные, которые используются только внутри данной процедуры.

На вход процедуры (в качестве исходных данных) поступает совокупность параметров – аргументов, а на выходе формируются параметры – результаты. Причем процедура позволяет получить один или несколько результатов, а функция — только один.

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

Procedure GorLine(n : Integer; Sim : char);

{Изображение горизонтальной линии символом Sim}

Var

I : Integer;

Begin

For i := 1 To n Do

Write(Sim);

End;

Здесь n и Sim – формальные параметры, являющиеся входными величинами; i – локальная переменная.

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

Например:

Имя; { если процедура не имеет параметров } или

Имя (Фактические_параметры); {если процедура с параметрами}

Обращения к процедуре GorLine возможны в следующих формах:

GorLine(25);

GorLine(WhereX + 10);

После выполнения процедуры происходит возврат в основную программу к оператору, стоящему после вызывающего.

Пример 6.1. Пусть в массиве Dan имеются 20 значений целого типа (1≤ Dan[i] ≤75), которые нужно представить в виде гистограммы (графика, представляемого столбцами символов). Значения элементов массива можно получить с помощью генератора случайных чисел. Для простоты примем, что ось Y располагается вдоль экрана.

При составлении программы воспользуемся ранее написанной процедурой GorLine. Столбцы графика будем изображать символом "*" (звездочка).

Program Graf1;

Const

N = 20;

Var

Dan : Array[1..N] of Integer;

K,I : Integer;

Procedure GorLine(n : Integer; Sim : char);

Var