Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Подпрограммы. Применение подпрограмм при структурном подходе в программировании. Понятие процедур и функций. Область видимости переменных, локальные и глобальные переменные





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

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

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

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

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

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, а так же вложенные процедуры и функции. Переменные, объявляемые в разделе описаний подпрограммы, являются для нее локальными. При вызове процедуры или функции фактические аргументы перечисляются через символ, (запятая).Если в программе описаны несколько процедур и/или функций,то в каждой из последующих можно обращаться в предыдущем.

 

Date: 2015-12-12; view: 1116; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию