Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция 7. Подпрограммы: процедуры и функции




Подпрограммы: процедуры и функции

Представление программы в виде совокупности отдельных подпрограмм (блоков) со строго определенными интерфейсами делает ее более ясной, легко проверяемой и приводит к повышению качества и эффективности программы. Подпрограмма является самостоятельной частью программы, имеет свое имя и оформляется в соответствии с правилами. Практически любой составной оператор может стать подпрограммой.
Использование подпрограмм позволяет избежать повторений одной и той же последовательности инструкций в программе, упростить отладку больших программ и проектировать программу иерархическим способом, применяя технологию разработки "сверху-вниз". Эта технология заключается в том, что вначале разрабатывается общий алгоритм решения, осуществляющий декомпозицию задачи и ее представление в виде отдельных последовательных блоков. Блоки разбиваются на более мелкие подблоки нижнего уровня и т.д. Этот процесс продолжается до тех пор, пока не будет достигнут нижний уровень иерархии, на котором подблоки реализуют достаточно простую функцию, программируемую в виде небольшой подпрограммы (обычно < 100 строк). В процессе декомпозиции для каждого подблока необходимо указать: назначение, исходные данные и результаты работы. При разбиении блока на подблоки необходимо строго следить за тем, чтобы последовательность подблоков действительно решала задачу блока, каждый подблок использовал только данные, которые являются исходными для блока и этих данных ему достаточно для решения своей задачи.
В языке Турбо-Паскаль существует два типа подпрограмм: процедуры и функции. Программу, состоящую из процедур и функций, называют модульной.
Перед использованием процедуры или функции в основной программе их необходимо объявить. Каждая процедура и функция объявляется один раз, но может использоваться многократно внутри программы. Объявления процедур и функций осуществляются в программе после объявления переменных. Для этого указывается заголовок подпрограммы и ее тело. В заголовке указывается имя и формальные параметры, если они есть. Для функции добавляется ее тип. Тело подпрограммы состоит из раздела описаний и раздела исполняемых операторов. Если подпрограмма объявлена, ее можно вызвать в программе. Вызов подпрограммы приводит к выполнению инструкций, составляющих ее тело.
Процедуры и функции, имея аналогичную структуру, различаются назначением и способом их использования. Процедура, как правило, предназначена для определения совокупности значений переменных. Функция подобна выражению, которое вычисляет некоторое единственное значение заданного типа. Вызов процедуры реализуется заданием ее имени, за которым, если необходимо, следует список фактических параметров. Для вызова функции достаточно указать ее имя (возможно с фактическими параметрами) в выражении.
Рассмотрим задачу вычисления таблицы квадратных корней и логарифмов для первых 100 целых чисел с использованием процедуры печати линии.

Пример program ModulProgram; {модульный вариант программы} var I, W: integer; procedure DrLine; {печать линии} var J: integer; begin for J:= 1 to W do write('_'); writeln; end; {конец определения процедуры} begin {основная часть программы} write('Введите W - число символов в строке'); read(W); DrLine; {вызов процедуры} writeln('Таблица квадратных корней '); writeln; for I:= 1 to 10 do writeln(I:8, Sqrt(I):10:4); DrLine; {вызов процедуры} writeln('Таблица натуральных логарифмов'); writeln; for I:= 1 to 10 do writeln(I:8, Ln(I):10:4); DrLine; {вызов процедуры} end.

 

В процедуре DrLine объявлена переменная J, которая известна только этой процедуре. Переменная W, объявленная в программе, используется в процедуре. Говорят, W - глобальная переменная, J - локальная переменная. Остановимся на этих понятиях.
Как уже отмечалось, каждый блок (процедура или функция) должен быть объявлен в программе. Допускаются вложенные объявления блоков. Все имена (меток, констант, типов, переменных, других блоков), описанные внутри блока, являются локальными, т.е. они невидимы извне блока. Другими словами, вне блока локальные переменные являются недоступными, невозможно изменить их значения. При входе в блок более низкого уровня все объявленные в нем имена становятся доступными. Кроме того, блоку доступны имена верхнего уровня, описанные до появления данного блока. Такие имена называются глобальными. Подчеркнем, что локальные имена можно использовать только внутри блока, в то время, как глобальные имена используются во всей программе. Локальные имена в блоке могут совпадать с ранее объявленными глобальными именами. В этом случае локальное имя делает недоступным глобальное имя. Рассмотрим пример:

program VarGlobLocal; var A, B: integer; procedure N1; var A: integer; begin A:= '200; B:= B + 1; end; begin {Тело программы} A: = 0; B:= 100; N1; {вызов процедуры} writeln('A=', A,'; B=', B); end.

В этой программе переменная B является глобальной, она доступна процедуре N1, после вызова которой значение переменной B увеличивается на 1. В примере имеется две разных переменных A: в основной программе переменной A присваивается значение 0, а в процедуре - другой переменной A присваивается значение 200, но это никак не влияет на вызывающую программу. Таким образом приведенная программа напечатает два значения:

A = 0; B = 101

Функция отличается от процедуры только тем, что возвращает в точку вызова скалярное значение. Перечислим особенности функций:

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

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




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 583; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.