Процедуры
Оценка 5

Процедуры

Оценка 5
docx
27.11.2021
Процедуры
Л2-002941.docx

Процедуры.

 

 

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

 

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


Delay(i)

 

осуществляет              задержку  выполнения   программы  на   i   миллисекунд

(тысячных долей секунды)

 

GotoXY(a,b)

 

переводит курсор в точку экрана с координатами a,b

 

Halt

 

завершает выполнение программы и передает управление операционной системе

 

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

 

В данной программе цифры выводятся с помощью цикла с уменьшающимся значением счетчика (см. раздел «Оператор For»). В теле цикла используется ряд стандартных процедур. Так, перед выводом очередного числа, курсор посредством стандартной процедуры GotoXY каждый раз перемещается в левый верхний угол экрана для того, чтобы все числа выводились в одной и той же позиции. Далее, для того,   чтобы очередное число сразу не исчезало с экрана, а оставалось на некоторое время, используется процедура Delay. Затем экран очищается с помощью процедуры ClrScr, для того, чтобы освободить место для вывода следующего числа. После завершения работы цикла с помощью тех же стандартных процедур на экран выводится слово «Старт».

 

 

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


 

 


 

 

 

 

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


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

 

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

 

заголовок процедуры; раздел описаний процедуры; begin

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

 

end;

 

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

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

 

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

 

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


переменными (не константами и не выражениями). Вызываемая процедура получает доступ к ячейкам памяти, в которых хранятся эти фактические параметры, и может изменять значения этих параметров в ходе своей работы.

 

 

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

 

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

 

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

 

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

 

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

 

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

 

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


 


 

 

 

Рис 28. Программа определения минимального и максимального из

4 чисел и результаты ее работы.


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

 

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

 

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

 

На рис. 28 приводятся результаты работы данной программы при a

равном 65, b 111, c 678 и d 215.

 

Выше уже говорилось о том, что в процедуру могут передаваться не только значения переменных, но и числовые константы. Приведем пример программы где реализована как раз такая возможность. Это программа, которая по введенному пользователем текущему числу и номеру месяца определяет дату следующего дня (см. рис. 29). Данная задача не представляет сложности (нужно только прибавить единицу к текущему числу), но лишь для всех чисел месяца кроме последнего. В этом случае следующий день будет первым числом следующего месяца, а если последний день месяца 31 декабря, то следующим днем будет первый день нового года. Необходимо также предусмотреть защиту от неверного ввода данных (чтобы пользователь случайно не ввел число, большее, чем количество дней в текущем месяце). Поэтому для упрощения решения данной задачи решим ее сперва в общем виде. Данное решение будет содержаться в созданной программистом процедуре next.

 

В заголовке процедуры next описываются один параметр-значение kol и два параметра-переменные mes и n. При обращении к процедуре next параметру kol присваивается значение, равное количеству дней в текущем месяце. Так как это значение зависит от номера текущего месяца m, то оно определяется с помощью условного оператора case, в котором в роли


 


 


 

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


переменной-селектора как раз и выступает m. Для m, равного 1,3,5,7,8,10,12 то есть для января, марта, мая, июля, августа, октября, декабря данное значение равно 31. Для m равного 4,6,9,11, то есть для апреля, июня, сентября, ноября m будет равно 30.

 

Сложнее решается вопрос с февралем (m=2), так как в этом случае значение, присваиваемое параметру kol, зависит от того, является ли текущий год високосным или нет. В первом случае kol будет равно 29, во втором – 28. Необходимую информацию программа запрашивает у пользователя, который на вопрос о том, является ли текущий год високосным, должен дать положительный или отрицательный ответ. Для защиты от ошибочного ответа используется сокращенный условный оператор if. Если пользователь вместо

«ДА» или «НЕТ» введет что-либо другое, программа выдаст сообщение об ошибке и прекратит работу по команде Halt. Для того, чтобы пользователь успел прочитать сообщение об ошибке, после его вывода работа программы приостанавливается на некоторое время процедурой Delay.

 

Параметрам mes и n ставятся в соответствие фактические параметры – переменные m и d, в которых содержится порядковый номер текущего месяца и текущее число.

 

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

 

Следующий условный оператор проверяет, не является ли введенное число 31 декабря. В этом случае параметрам mes и n присваиваются значения 1 и 1 (так как следующее число будет 1 января) и затем работа процедуры next завершается командой exit, после чего происходит возвращение в основную программу.

 

С помощью последнего в данной процедуре оператора if определяется следующее число для всех остальных дней года. Если число не является последним в данном месяце (n<kol) , то значение параметра n увеличивается на единицу, а mes остается без изменений. В противном случае n присваивается значение 1 (следующее число – начало нового месяца) , а значение параметра mes увеличивается на единицу. На этом работа процедуры завершается, соответствующие формальным параметрам mes и n фактические параметры m и d получают новые значения, которые передаются в основную программу.


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

 

 

На рис. 29 приводятся результаты работы данной программы для различных исходных данных (для обычного дня в середине месяца и для 31 декабря).

 

 

 


 

Скачано с www.znanio.ru

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

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

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

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

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

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

Такое обращение называют также вызовом процедуры

Такое обращение называют также вызовом процедуры

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

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

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

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

В основной части программы обращение к процедуре minmax встречается 4 раза

В основной части программы обращение к процедуре minmax встречается 4 раза

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

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

Для m, равного 1,3,5,7,8,10,12 то есть для января, марта, мая, июля, августа, октября, декабря данное значение равно 31

Для m, равного 1,3,5,7,8,10,12 то есть для января, марта, мая, июля, августа, октября, декабря данное значение равно 31

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

Затем на экран компьютера выводятся эти новые значения (завтрашнее число и соответствующий ему номер месяца) и на этом программа завершает свою работу
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.