КАТЕГОРИИ: Архитектура-(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) |
Описание процедур
Лекция 29.Процедуры и функции Как записывается текст песни? Припев даётся один раз. Если нужно повторять его, то указывается одно слово – припев. Зачем же повторять несколько раз одно и тоже? Этот же принцип действует и в программировании. Если какая-нибудь часть программы многократно повторяется, то её оформляют отдельно от основной программы и называют подпрограммой. К ней обращаются при необходимости ее использования. Более того, рекомендуется большую задачу разбивать на отдельные смысловые места, и программировать их отдельно, а затем объединять в единую программу. Подпрограммы располагаются в разделе описания основной программы. Выполнение программы начинается с выполнения операторов основной программы. При необходимости выполнения программы, она вызывается по имени. Данные из основной программы передаются в подпрограмму (входные данные), которая начинает выполняться. Затем результаты подпрограммы (входные данные) передаются в основную программу в то место, откуда был сделан вызов подпрограммы, и продолжает выполняться основная программа. Подпрограмма оформляется подобно основной программе, то есть состоит из заголовка, раздел описаний и раздел операторов. Все имена, представленные в разделе описаний основной программы, называются глобальными. Они действуют как в разделе операторов основной программы, так и в любой подпрограмме. Имена, представленные в разделе описаний подпрограммы, называются локальными. Они действуют только в рамках подпрограммы и недоступны операторам основной программы. В языке программирования Паскаль есть два вида подпрограмм: Procedure – процедура и Function - функция. Процедуры и функции аналогичны программам в миниатюре и имеют общее название – подпрограммы. Применение подпрограмм дает возможность уменьшить число повторений одной и той же последовательности операторов, а также конструировать программу как набор отдельных подпрограмм (модулей), т.е. по принципу структурного программирования. Описание каждой процедуры начинается с заголовка, где задаются имя процедуры и список формальных параметров с указанием их типов. Оформление процедур в общем виде выглядит следующим образом: Procedure имя (список формальных параметров); Раздел описаний Begin Раздел операторов End; Раздел описаний процедуры подобен разделу описаний программы и состоит из разделов меток, констант, типов, переменных, процедур и функций. Он может отсутствовать вообще. Раздел операторов заключён в операторные скобки Begin End; Процедура может быть и без параметров, тогда в заголовке указывается только её имя. С помощью параметров осуществляется передача исходные данных в процедуру, а также передача результатов работы в вызвавшую её программу. Список формальных параметров может включать в себя: параметры – значений параметры - переменных (перед ними должно стоять слово var), параметры – процедуры (перед ними должно стоять служебное слово Procedure), параметры – функции (перед ними должно стоять служебное слово Function) Выполнение процедуры происходит при её вызове по имени: Имя (фактические параметры). Между формальными и фактическими параметрами должно быть полное соответствие: - количество формальных и фактических параметров должно быть одинаково, - порядок следования формалтных и фактических параметров должен быть один и тот же, - тип каждого фактического параметра жлдэен совпадать с типом соответствующего ему формального параметра. С помощью формальных и фактических параметров данные передаются из программы в процедуру и наоборот. В качестве формальных параметров могут использоваться только переменные с указанием их типа. В качестве фактических параметров могут использоваться константы, переменные, выраженные без указания их типа. При вызове процедуре сначала передаются параметры, при этом параметры-значения передаются по значению, а параметры-переменные – по ссылке. Основное отличие этих способов передачи заключается в том, что присвоение значений параметру переменной внутри процедуры одновременно выполняются и для соответствующего аргумента. То есть параметры, в которые записываются результаты работы процедуры, должны передаваться только по ссылке. Параметры, через которые в процедуру передаются исходные данные, передаются по значению. Хотя параметры процедуры делятся на отдельные виды, но в простых программах чаще всего используются параметры-значения и параметры-переменные. Данные этих параметров передаются в обоих направлениях, из программы в процедуру и наоборот. Параметры–значения (перед ними не стоит слово var) можно передавать только в одном направлении: из программы в процедуру. То есть, параметры-значения могут быть только входным для процедуры, а параметры-переменные как входными, так и выходными. Процедура может содержать несколько операторов и несколько результатов выполнения. Каждый результат обозначается своим именем. В основной программе после вызова процедуры мы можем использовать эти результаты, сохраняя те же имена или давая другие. Пример: Пусть в программе необходимо многократно вычислять площадь квадрата sк=а^2 и площадь прямоугольника sp=a*b при различных значениях сторон а и b. Procedure Place (x, y: real); Begin Sk:=x*x Sp:=x*y End; Вызвать эту процедуру можно, используя фактические переменные: Place (A, B); где значения параметра А и В передаются в процедуру параметром X, Y. Другой вариант: Procedure Place (x, y: real; Var Sk, Sp: real); Тогда обращение к ней: Place (A, B, S1, S2); При вызове процедуры вместо переменных А, В можно указать конкретные значения: Place (2.5, 4, S1, S2). Допускается одинаковое обозначение соответствующих формальных и фактических параметров. Пример: В 1-ой вводимой с терминала строке подсчитать количество точек, а во 2-ой – количество букв ‘A’. Подсчёт символов реализовать в процедуре Podshet. Program Pod; Const Tochka =’.’; Var S:Integer; Procedure Podchet (Sim: Char; Var Kol:Integer); Var C:char; Begin kol:=0; Writeln (‘Введите строку’); Repeat read (c); If c=sim then kol:=kol+1; Until EOLN End; Begin Readln; Podchet (Tochka,S); Writeln (‘Кол-во точек=’,S:3); Podchet (Tochka’A’,S); Writeln (‘Кол-во букв А’,S:3); End. Здесь процедура Podschet имеет два формальных пар-ра: Sim - входной параметр (параметр значения), определяет символ, который подсчитывается в строке; Kol - выходной параметр, через который передаётся количество подсчитанных символов. Для того, чтобы результаты работы процедуры Podschet был доступен в программе, он передается по ссылке. Фактический параметр, соответствующий формальному параметру sim, при первом вызове процедуры задается именем константы, определенной в основной программе, а при втором вызове – в явном виде. Обе формы задания правильны, так как в качестве фактического параметра, передаваемого по значению, м. использоваться произвольное выражение соответствующего типа. Процедуры возвращают результат в основную программу не только при помощи параметров – переменных, но непосредственно изменяя глобальные переменные. Переменные, описанные в основной программе, являются глобальными по отношению к внутренним процедурам и функциям. Переменные, описанные внутри процедур и функций, являются локальными. Локальные переменные существуют только при выполнении процедуры и недоступны в основной программе. Переменная с символьного типа, описанная в процедуре Podschet, является локальной, а переменная s целого типа, описанная в основной программе, является глобальной. Изменим процедуру Podschet, чтобы она передавала результат своей работы через глобальную переменную. Program Pod1; Const Tochka=’.’; Var s:integer; Procedure Podshet (Sin:Char); Var c:char; Begin s:=0 Writeln (‘Введите строку’); Repeat Read (c); If c=sim then S:=s+1; Until EOLN End; Begin Readln; Podshet (tochka); Writeln (‘Кол-во точек=’s:3); Podshet (‘A’); Writeln (‘Кол-во букв A=’,S:3); End. Программы Pod и Pod1 работают одинаково. Для конкретной задачи программист можно выбирать тот или иной способ передачи результатов работы процедуры и вызвавшую её программу. Однако в сложных программных комплексах не рекомендуется использовать глобальные переменные, т.к. это ухудшает структурированность программы. Пример: Procedure Summa (A:integer;var B:Integer); Begin A:=A+3;B:=B+3; End; В основной программе: A:=5; B:=5; Summa (A,B); Write (A,B); Здесь значения A:=5; B:=5 передаются в процедуру, где вычисляются новые значения A=5+3=8 и B=5+3=8. Новое значение В передается в программу, а значение А нет. Поэтому в основной программе будет А=5, В=8. Если в процедуру нужно передать в качестве параметра не просто одно значение, а массив, то в этом случае фактически параметрами является имя массива. При этом формальный параметр указывается после слова var вместе с типом массива. Само же описание массива делается в разделе type основной программы. В языке программирования Паскаль допускается использование процедур без параметров. В этом случае отсутствует как формальные, так и фактические параметры.
Дата добавления: 2014-10-23; Просмотров: 487; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |