Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Подпрограммы. Применение подпрограмм при структурном подходе в программировании. Понятие процедур и функций. Область видимости переменных, локальные и глобальные переменные ⇐ ПредыдущаяСтр 5 из 5 Подпрограммы нужны для того, чтобы упростить структуру программы и облегчить ее отладку. В виде подпрограмм оформляются логические законченные части программы. Подпрограмма - это фрагмент кода, к которому можно обратиться по имени. Она описывается один раз, а вызываться может столько раз, сколько необходимо. Одна и та же подпрограмма может обрабатывать различные данные, переданные ей в качестве аргументов. В Паскале два вида подпрограмм: процедуры и функции. Они имеют незначительные отличия в синтаксисе и правилах вызова. Процедуры и функции описываются в соответствующих разделах описания, до начала блока исполняемых операторов. Само по себе описание не приводит к выполнению подпрограммы. Для того чтобы подпрограмма выполнилась, ее надо вызвать. Вызов записывается в том месте программы, где требуется получить результаты работы подпрограммы. Подпрограмма вызывается по имени, за которым следует список аргументов в круглых скобках. Если аргументов нет, скобки не нужны. Список аргументов при вызове как бы накладывается на список параметров, поэтому они должны попарно соответствовать друг другу. Процедура вызывается с помощью отдельного оператора, а функция - в правой части оператора присваивания, например: inc(i); writeln(a, b, c); { вызовы процедур } y:= sin(x) + 1; { вызов функции } Внутри подпрограмм можно описывать другие подпрограммы. Они доступны только из той подпрограммы, в которой они описаны. Рассмотрим правила описания подпрограмм. Процедуры Структура процедуры аналогична структуре основной программы: procedure имя [(список параметров)]; { заголовок } разделы описаний begin раздел операторов end; Любая подпрограмма должна быть описана до того, как она будет вызвана в программе или в другой подпрограмме. Все переменные, которые использует подпрограмма, могут быть либо глобальные либо локальные. Глобальными называются переменные, объявленные в основной программе и доступные как программе, так и всем ее подпрограммам. Локальными называются переменные, объявленные внутри подпрограммы и доступные только ей самой. Обмен информацией между основной программой и подпрограммой может осуществляться только с помощью глобальных переменных. Подпрограмма может использовать любые глобальные переменные кроме тех, которые имеют те же имена, что и локальные переменные. Переменные с совпадающими именами, которые могут быть описаны в основной программе или других подпрограммах, не имеют ничего общего с локальными переменными. если переменная описана. Если переменная описана в основной программе и не переопределена в подпрограмме, она может использоваться в подпрограмме. Память для локальных (т.е. описанных в подпрограмме) переменных выделяется на время исполнения данной подпрограммы в специальной области, называемой стеком. При завершении работы подпрограммы память освобождается, поэтому все внутренние результаты работы подпрограммы не сохраняются от одного обращения к другому. Если говорить о плюсах использования в программировании подпрограмм, то можно назвать следующие: Программы с использованием подпрограмм позволяют реализовать один из самых прогрессивных методов программирования - структурное программирование. Программа становится более читаемой. Экономия памяти, которая получается из-за того, что память для хранения переменных, используемых в подпрограммах, выделяется только на время работы подпрограммы. В языке Паскаль выделяют два вида подпрограмм: процедуры (Procedure) и функции (Function). Любая программа может содержать несколько процедур и функций. Структура любой подпрограммы аналогична структуре всей программы. Подпрограмма должна быть описана до того, как будет использована в программе или другой подпрограмме. Процедуры и функции объявляются в разделе описания вслед за разделом переменных. Область видимости переменной, а особенно, локальная, существенно облегчает управление кодом. Если бы все переменные были глобальными, то их можно было бы менять в любом месте скрипта. Это привело бы к хаосу и больших скриптах, так как очень часто разные части скрипта используют переменные с одинаковыми именами. Ограничивая область видимости локальным контекстом вы определяете границы кода, который может получить доступ к переменной, что делает код более устойчивым, модульным и простым в отладке. Переменные с глобальной областью видимости называются глобальными, а с локальной областью видимости - локальными.
Обмен данными между основной программой и подпрограммой. Входные и выходные параметры. Формальные и фактические параметры. Объявление процедур и функций. Параметры-значения и параметры-переменные. Обмен данными между основной программой и подпрограммой реализован в механизме входных и выходных параметров. Входными параметрами называют величины, которые передаются из основной программы в подпрограмму (исходные данные для работы подпрограммы). Выходные параметры, которые имеют смысл только для под-программ-функций, передаются из подпрограммы в основную программу (результат работы). Параметры, указываемые при описании подпрограммы, называются формальными. Параметры, указываемые при вызове подпрограммы, называются фактическими. При вызове процедуры или функции транслятор выполняет следующие операции: 1. В теле основной программы вычисляются выражения, стоящие на месте фактических параметров. 2. В оперативной памяти выделяется место под формальные параметры в соответствии с их типами. 3. Выполняется проверка соответствия типов формальных и фактических параметров. При несоответствии типов происходит ошибка трансляции. 4. Если количество, порядок и типы параметров совпадают, начинает работать механизм передачи параметров, заключающийся в установлении взаимно однозначного соответствия между формальными и фактическими пара-метрами. Объявление процедуры в языке Pascal имеет следующий синтаксис: procedure имя(список_параметров); {Раздел описаний} begin операторы; end; Первая строка называется заголовком процедуры, операторы между операторными скобками begin и end называются телом процедуры. Список формальных параметров подпрограммы указывается в круглых скобках после ее имени. Список состоит из набора отдельных описаний, разделяемых символом; (точка с запятой). Каждое такое описание включает перечисление через запятую идентификаторов пе-ременных и указание типа. Выделяют два типа формальных парамет-ров, различающиеся способом объявления в заголовке процедуры: 1. Параметры-значения. Описываются обычным образом: список_переменных:тип;, например, a,b:integer;, c:real:=7.35; В ячейки памяти, соответствующие формальным параметрам-значениям, при вызове процедуры заносятся копии значений соответствующих фактических параметров. Последние могут быть константами и выражениями, совместимыми по присваиванию с формальными параметрами. Если формальный параметр является параметром-значением, то говорят, что он передается по значению. 2. Параметры-переменные. При описании должны предваряться зарезервированным словом Var или Const, например Var a,b:integer; Const c:real:=7.35;. При вызове процедуры память под параметры-переменные не выделяется. Вместо этого имена параметров-переменных становятся синонимами фактических параметров. Отсюда, в частности, следует, что фактический параметр, связанный с формальным параметром-переменной, не может быть константой или вычисляемым выражением, но обязательно должен быть переменной. Если в теле процедуры параметр-переменная изменяет значение, то изменяет значение и переменная, которая была использована как фактический параметр. Это позволяет изменять значения глобальных переменных из подпрограммы. Если формальный параметр является параметром-переменной, то говорят, что он передается по ссылке. Замечание. После последнего описания формальных параметров символ; (точка с запятой) не ставится. Он ставится после закрывающей круглой скобки. Имена формальных параметров не должны совпадать с именем подпрограммы и именами переменных в разделе описаний подпрограммы. Пример заголовка процедуры: procedure MyProc(a:integer; flag:boolean; d,e:char);. Если в качестве формальных параметров используются структурированные данные, то первоначально необходимо объявить пользовательский тип данных, соответствующий структурному типу, например: type MyType=array [1..10] of integer; procedure MyProc(a:integer; massiv:MyType; d,e:char); Подпрограмма-функция описывается аналогично процедуре, за исключением того, что вместо слова procedure используется function и указывается тип возвращаемого результата. Синтаксис объявления функции: function имя(список_параметров):тип_значения; {Раздел описаний} begin операторы; end; Имя функции можно использовать внутри тела этой функции как переменную, которой присваивается возвращаемое функцией значение. Идентификатор функции нельзя использовать в выражениях внутри тела функции. В PascalABC.NET определена специальная переменная Result, в которую заносится возвращаемое функцией значение. В отличие от идентификатора функции, переменную Result можно использовать в выражениях. Если внутри тела функции не присвоить идентификатору функции или переменной Result какого-либо значения, то результатфункции считается неопределенным.Раздел описаний процедур и функций может содержать блоки,аналогичные блокам раздела описаний основной программы: Label,Const, Var, Type, а так же вложенные процедуры и функции. Переменные, объявляемые в разделе описаний подпрограммы, являются для нее локальными. При вызове процедуры или функции фактические аргументы перечисляются через символ, (запятая).Если в программе описаны несколько процедур и/или функций,то в каждой из последующих можно обращаться в предыдущем.
|