Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Bileti_po_infe.doc
Скачиваний:
15
Добавлен:
31.03.2015
Размер:
225.28 Кб
Скачать

Побочный эффект

ПОБОЧНЫМ ЭФФЕКТОМ называется незапланированное (случайное) изменение глобальных переменных в процедуре или функции.

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

При разработке процедур надо следовать рекомендациям:

1. Использовать процедуры с параметрами (чистые процедуры), за исключением явных случаев, когда параметры не нужны. Доводы в пользу использования чистых процедур:

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

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

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

- чистая процедура является более надежной, т.к. контроль параметров осуществляется Паскаль-системой.

2. Глобальные переменные в процедуре целесообразно использовать в след. Основных случаях:

- когда процедуры используют общие данные большого объема и сложной структуры, то эти данные можно задать как глобальные для всех процедур;

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

Правила записи программируемого модуля

МОДУЛИ

Модуль - независимая часть программы, которая описывает абстрактное действие и к которому можно обращаться по имени. Структура модуля:

{<Абстрактное действие >}

<Заголовок>

<Блок> // <Блок> ::=<Раздел описаний>

<Составной оператор>

При проектировании используется 2 типа модуля: главный модуль и процедурный модуль (процедура). Структура главного модуля (с главного модуля начинается выполнение программы):

{Цель программы}

Program <имя> (<имена файлов>); //Перечислены имена файлов с входными и выходными данными программы.

Раздел описаний //Должен содержать определение типов входных, выходных данных задачи.

begin

Главный алгоритм

end.

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

Аппарат процедур в языках программирования состоит из двух частей: описание процедуры и вызов процедуры.

Описание процедуры (процедура) - это фрагмент программы, оформленный по определенным правилам и имеющий имя, по которому его можно вызвать.

Структура процедурного модуля (описание процедуры) (Выполняется процедура только при выполнении оператора процедуры, вызове ее из другого модуля):

{Цель, описание входных, выходных данных}

Procedure <имя> (<описание параметров>); //Содержит описания типов входных выходных данных процедуры.

Раздел описаний //Содержит описания внутренних данных процедуры.

begin

Алгоритм

end.

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

<Описание входных формальных параметров>:=<список описаний переменных>

<Описание выходных формальных параметров>:=var<список описаний переменных>

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

{Цель, описание входных, выходных данных}

Function <имя> (<описание параметров>): <тип>;

Раздел описаний

begin

Алгоритм //Должен содержать оператор, который присваивает результат имени функции.

end.

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

Среди входных параметров процедуры может быть формальное имя функции (процедуры). Для описания типа этой функции в языке Турбо Паскаль существует

процедурный тип, который описывает заголовок этой формальной функции (процедуры).

Дпя того чтобы установилась такая связь формального и фактического процедурного параметра, необходимо перед описанием функции вставить директиву компилятора {$F+}. Параметры, предаваемые процедуре при вызове, называются фактическими параметрами.

Вызов процедуры включает следующие шаги:

- среди описаний процедур ищется процедура с именем <имя процедуры>;

- вместо формальных параметров подставляются (передаются) соответствуют фактические параметры;

- выполняется модифицированное тело процедуры;

- управление возвращается из процедуры к оператору, следующему за оператором процедуры.

МОДУЛИ

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

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

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

СТРУКТУРА МОДУЛЕЙ

модуль имеет следующую структуру:

UNIT <имя>;

INTERFACE

<интерфейсная часть>

IMPLEMENTATION

<исполняемая часть>

BEGIN

<инициирующая часть>

END.

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

ЗАГОЛОВОК МОДУЛЯ И СВЯЗЬ МОДУЛЕЙ ДРУГ С ДРУГОМ

Для правильной работы среды Турбо Паскаля и возможности подключена средств, облегчающих разработку крупных программ, это имя должно совпадать с именем дискового файла, в который помещается исходный текст модуля. Модули могут использовать другие модули. Предложение USES Может располагаться в обеих частях модуля (интерфейс, исполнительная).

ИТЕРФЕЙСНАЯ ЧАСТЬ

Объявление всех глобальных объектов модуля, а так же заголовков глобальных подпрограмм.

ИСПОЛНЯЕМАЯ ЧАСТЬ

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

ИНИЦИИРУЮЩАЯ ЧАСТЬ

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

Простейшие конструкции

Процедуры

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

Процедура являегся одним из важных средств программирования, традици­онным назначением которой является экономия труда программиста. Например, зачем много раз писать программу вычисления sin(x), если ее можно написать один раз и многократно использовать для различных значений х.

Аппарат процедур в языках программирования состоит из двух частей: опи­сание процедуры и вызов процедуры.

Описание процедуры (процедура) - это фрагмент программы, оформленный по определенным правилам и имеющий имя, по которому его можно вызвать.

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

Формальные параметры описывают входные и выходные данные процеду­ры.

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

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

Функция может вычислять только одно значение скалярного типа.

Вызов процедуры общего вида производится оператором процедуры.

С точки зрения структурного программирования оператор процедуры явля­ется элементарным оператором, наряду с оператором присваивания, т.е. рассмат­ривается как однократное действие по преобразованию входных данных в выход­ные.

Параметры, передаваемые процедуре при вызове, называются фактиче­скими параметрами.

Процедуры общего вида:

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

{<Раскрываемая абстракция>}

<Заголовок>

<Тело процедуры>

<Раскрываемая абстракция> является комментарием, в котором кратко оп­ределена цель процедуры.

<Тело процедуры> описывает алгоритм.

<Заголовок процедуры> имеет вид:

procedure <имя процедуры> (<список описаний формальных параметров>)

Список параметров может отсутствовать, и тогда процедура является про­цедурой без параметров.

Вызов процедуры осуществляется с помощью оператора процедуры:

<оператор процедуры>::=<имя процедуры>(<список фактических пара­метров>);

Вызов процедуры включает следующие шаги:

- среди описаний процедур ищется процедура с именем <имя процедуры>;

- вместо формальных параметров подставляются (передаются) соответствующие фактические параметры;

- выполняется модифицированное тело процедуры;

- управление возвращается из процедуры к оператору, следующему за операто­ром процедуры.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]