Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч.пособие_ИНФОРМАТИКА_2010исправ.doc
Скачиваний:
59
Добавлен:
01.04.2015
Размер:
13 Мб
Скачать
☆

7.9.2. Процедуры

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

Процедуры отличаются от функций тем что, если при обращении к функции мы можем получить только один результат – значение данной функции, то результатом работы процедура может быть несколько значений. Существуют стандартные процедуры, которые подобно стандартным функциям, являются частью языка Паскаль. К таким стандартным процедурам относятся уже известные нам команды ClrScr, TextColor и TextBackground.. Наряду с этими стандартными процедурами в языке Паскаль широко используются также следующие:

Delay(i) - осуществляет задержку выполнения программы на i миллисекунд (тысячных долей секунды);

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

GotoXY(a,b) - переводит курсор в точку экрана с координатами a,b;

Halt - эта процедура не имеет параметров. Она завершает выполнение программы и передает управление операционной системе;

Str(x,s) - производит преобразование числовой величины x в строковую s;

Val(s,x,n) - производит преобразование строки s, изображающей число, в числовую величину x. В процедуре также должен присутствовать параметр n, относящийся к целочисленному типу. Если преобразование было выполнено успешно, то значение n будет равно нулю. Если преобразование не может быть выполнено, то в переменной n присваивается номер символа, который явился причиной ошибки.

В качестве примера использования стандартных процедур Паскаля приведем программу «обратный отсчет» (рис. 7.9.3). Эта программа создает на экране компьютера «электронное табло», на котором в одном и том же месте последовательно выводятся числа от 10 до 1, то есть производиться обратный отсчет времени, как перед стартом космического корабля, а затем выводится слово «Старт».

Рис. 7.9.3. Программа «обратный отсчет» (исходный текст и программа в действии)

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

Общий вид описания процедуры следующий:

 заголовок процедуры ;

 раздел описаний процедуры ;

begin

 раздел операторов процедуры 

end;

Теперь разберем более подробно составные части данного описания.

Общий вид заголовка процедуры следующий:

procedure  имя_процедуры  ( параметры процедуры );

где: procedure – служебное слово,

 имя_процедуры  - имя процедуры задается по тем же правилам, что и имена переменных в Паскале,

( параметры процедуры  - формальные параметры перечисляются в скобках через запятую с указанием их типа.

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

Пример заголовка процедуры:

procedure vspomog(a,b:integer; var c,d:real);

где vspomog – имя процедуры, a,b,c,d – имена формальных параметров, причем a и b являются параметрами-значениями, а c и d – параметрами-переменными.

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

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

Рассмотрим программу определения наибольшего и наименьшего числа в группе из 4 чисел (рис.7.9.4). Напишем несложную процедуру minmax, которая определяет наибольшее и наименьшее из двух чисел. Затем разобьем введенные числа на пары и в каждой паре с помощью этой процедуры определим большее и меньшее число. Далее с помощью той же процедуры minmax определим наибольшее из двух больших и наименьшее из двух меньших. Это и будет искомый результат.

Рис. 7.9.4. Программа определения наименьшего и наибольшего из 4 чисел и результаты ее работы.

В заголовке процедуры minmax описаны два формальных параметра-значения x1 и x2, которые используются для ввода в процедуру исходных данных и два параметра-переменные min и max, используемые для вывода полученных результатов. Внутри процедуры параметры-значения сравниваются между собой и значение меньшего из них присваивается переменной min, а большего - переменной max.

В основной части программы обращение к процедуре minmax встречается 4 раза. В первых двух случаях в качестве фактических параметров выступают введенные с клавиатуры значения переменных a и b при первом вызове процедуры и c и d при втором. Результатами являются соответственно фактические параметры min1 и max1 (меньшее и большее в первой паре чисел) и min2 и max2 (меньшее и большее во второй паре).

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

Искомые наибольшее и наименьшее значения выводятся на экран с помощью оператора writeln.

На рис. 7.9.4 приводятся результаты работы данной программы при a равном 65, b – 111, c – 678 и d – 215.