Некоторая последовательность инструкций которая может вызываться в нескольких местах программы

Подпрограммы

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

В большинстве
языков программирования для решения этой проблемы введено понятие подпрограммы (название
зависит от языка). Подпрограмма – это «кусок» кода, который вынесен из основной
программы и которому дано уникальное имя. Тогда в месте, где необходимо
выполнить эту последовательность кода, необходимо просто сослаться на  имя подпрограммы. Это называется вызовом
подпрограммы (процедуры, функции,…).

Например, мы
хотим несколько раз напечатать несколько одинаковых строчек.

print *,’—————————‘

print *,’*********************‘

print *,’—————————‘

Вместо того, чтобы несколько
раз в теле программы набирать (или копировать, что несколько лучше:) эти 3
строки, можно оформить их в виде подпрограммы:

subroutine PrtSomething()               ! имя подпрограммы

print *,’—————————‘

print
*,’*********************‘

print
*,’—————————‘

end

Теперь в любом месте программы, где должна
производиться соответствующая печать, нужно вызвать эту
подпрограмму по ее имени:

call PrtSomething()

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

Важно запомнить одно правило: подпрограмма
НИЧЕГО не знает о том, кто и когда ее вызывает!
Для нее не существует
ничего вне ее кода. Она НИЧЕГО не знает о переменных вне
ее. Можно представить ее живущей в тюремной камере без
окон. Все, что ей нужно, передается через окошечки в стене, над которыми
написано названия формальных
параметров. Подпрограммы общается с внешним
миров через ИНТЕРФЕЙС. Это правила общения подпрограммы с внешним миров. Для того, чтобы передать
какое-то значение в подпрограмму, его кладут в окошечко с названием какого-то
формального параметра. Подпрограмма берет это значение по имени формального
параметра (надпись над окошком).

Другими словами, чтобы сделать доступными какие-то
данные подпрограмме, их надо передать в списке параметров, который стоит сразу
за именем подпрограммы в скобках: subroutine PrеValues(a,b,c). Параметры,
записанные в заголовке подпрограммы, называются формальными параметрами
(аргументами). Для подпрограммы это просто 
переменные. Параметры, подставленные в месте вызова подпрограммы,
называются фактическими параметрами. В качестве фактических параметров могут
быть константы, переменные или (неявные) результаты выражений.

subroutine PrеValues(a,b,c)             ! имя подпрограммы

!   
описание переменных – формальных параметров

            integer a,b

            real c

!

print *,’a= ‘,a

print *,’b= ‘,b

print
*,’
c= ‘,c

return

end

В подпрограмму PrеValues(a,b,c)   передаются
значения 3-х переменных, которые и печатаются. Формальные параметры – переменные,
существующие ТОЛЬКО в подпрограмме. Они ВИДНЫ ТОЛЬКО в подпрограмме. Если вне
подпрограммы есть переменные с такими же именами, они не имеют ничего общего!

Вызов этой
подпрограммы может выглядеть так:

integer a1/4/,a2/7/

real pi/3.14159/

call PrеValues(a1,a2,pi)        !напечатает             4
         7          3.14159

call PrеValues(1,2,7.)            ! 1        2          7.

call PrеValues(1,2.,7.)           ! ERROR!

При первом
вызове подпрограммы в переменную (форм. пар-ер) а будет положено значение из переменной  a1(4), в b
– из a2 (7), в c – из pi (3.14…).
Соответственно подпрограмма и распечатает их в таком виде:

a=4

b=7

            c=3.14159

Параметры, с
которыми вызывается подпрограмма, называются фактическими. a1,a2,pi 
фактические параметры при первом вызове, 1,2,7. фактические
параметры при втором.

Почему неправильный
последний пример? Интерфейс подпрограммы предписывает, что подпрограмма ДОЛЖНА
вызываться с 3-мя фактическими параметрами, имеющими соответствующий тип.
Соответственно она и распределяет память. Если вызвать с фактическими
параметрами, имеющими другой тип, значение положится в вызывающей программе в
память по одному, а внутри подпрограммы будет взято из той-же памяти по другому. Результат становится
полностью неопределен! Отсюда вытекает следующее
правило:

Список формальных и фактических параметров должен
совпадать по количеству и характеристикам аргументов.

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

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

subroutine Sum(a,b,c)

            real a,b,c

            c=a+b

return

            end

call Sum(1.,3.,s)         

В переменную s 
поместится результат сложения фактических параметров – констант 1 и 3.
Важно обратить внимание, что если формальный параметр в подпрограмме является [in] – входящим (вводящим
значение в подпрограмму), то в качестве фактического параметра может быть
переменная или константа (первые 2 параметра Sum). Если же формальный параметр в подпрограмме
является [out], или [in/out] – выходящим (возвращающем значение
из подпрограммы), то в качестве фактического параметра может быть только
переменная (3 параметр Sum).

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

FUNCTION < имя функции>(
[< формрг >])

< объявление формрг >

< объявление локальных объектов
>

< вычисляемые операторы,
присваивание результата >

END [ FUNCTION [ < имя функции > ] ]

Пример:

function Sum_(a,b)

real a,b,Sum_

            Sum_=a+b

            return

end

s=Sum_(1.,3.)

Результат полностью аналогичен пред.

На что надо обратить внимание:
имя функции как бы является формальным параметром, имеет тип и ему должно
быть присвоено какое-то значение. Имя функции выбрано Sum_, а не Sum, т.к. последнее часто является
зарезервированным в разных языках.

            Теперь
рассмотрим задачу – составить подпрограмму нахождения мин в одномерном массиве.
Т.к. поиск мин/макс – частая задача, совершенно логично заключить ее в виде
подпрограммы-функции. Теперь об интерфейсе. Подпрограмма должна принимать в
качестве входных данных массив. Далее в цикле она будет искать мин. Но
подпрограмма не знает размер массива! Следовательно, вторым параметром надо
передать подпрограмме кол-во элементов в массиве, которые надо обработать.

            program sub_min

            implicit none

            real a(10),min,GetMin

            integer i,n

a=(/(50/i,i=1,5),(i*10,i=1,5)/)           !
50.00000       25.00000       16.00000       12.00000       ! 10.00000       10.00000       20.00000       30.00000       ! 40.00000       50.00000

            n=10

            min=GetMin(a,n)

            print *,a

            print *,min

            end program sub_min

            real function GetMin(ar,n)

                        real ar(*)

                        integer n

                        GetMin=ar(n)

                        do n=n-1,1,-1

                                   if (ar(n)<GetMin)
GetMin=ar(n)

                        end do

                        return

            end

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

В подпрограмме используется один
спорный прием. Для уменьшения кол-ва переменных в качестве переменной цикла
используется формальный параметр, через который был передан размер массива. Но
если при вызове в качестве фактич. параметра
использовалась константа (min=GetMin(a,10)), то программа
вызовет AV ошибку
обращения к памяти, т.к. внутри подпрограммы попытается положить по адресу
константы новое значение. Для надежности лучше такую «оптимизацию»  не допускать. Более того, даже если при
вызове подпрограммы фактическим параметров являлась переменная, хранящее кол-во
элементов массива, то после вызова GetMin ее значение будет равно 0!
Пользователь вашей подпрограммы может ничего не знать об этом.

            Как
это работает: при вызове первым параметром является массив a, вторым – размер массива. Затем
происходит переход на выполнение подпрограммы. Значения формальных переменных –
ar
– является массивом а, n
=10.

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

min=GetMin(a(1:4),n)

Еще одно замечание: внутри
подпрограммы можно объявлять любые переменные. Но, как уже говорилось,
подпрограмма отделена от остального мира. Поэтому эти переменные существуют
только внутри подпрограммы и не видны остальному миру! Кроме того, после выхода
из подпрограммы (по оператору return или end) и повторного ее вызова значения локальных переменных
внутри подпрограммы не сохраняются. (Этого можно достичь с
помощью оператора/атрибута SAVE).

Когда использовать подпрограммы? Есть мнение, что если в какой-то программе больше 10 строк кода, то ее надо разбить на подпрограммы. Общие правила написания
структурированных, хорошо читаемых программ – если некоторый участок кода имеет
какое-то обособленное смысловое значение – выделяйте его в виде подпрограммы.
Это дает несколько преимущества: удобство чтения, уменьшение вероятности внесения
ошибок, уменьшения кол-ва переменных, удобство отладки.

Вызов подпрограмм может быть
вложенным (рис. 5). Вообще говоря, выполнение начинается с главной программы.
Во многих языках она называется MAIN.
В Fortran-е – она не
имеет названия и не имеет заголовка в отличие от всех остальных подпрограмм.

Более того, подпрограмма subroutine2 может вызвать
опять subroutine1:

            ………………………………

            n=1

            call subroutine1(n)

            ………………………………

            subroutine subroutine1(n)

                        integer n

                        if (n<5) then

                                   n=n+1

                                   call subroutine2(n)

                        end if

                        return

            end

            subroutine subroutine2(n)

                        integer n

                        if (n<5) then

                                   n=n+1

                                   call subroutine1(n)

                        end if

                        return

            end

рис. 5

Сведения из стандарта для справки.

Структура программы

Фортран программа состоит из одной или нескольких программных блоков (units).

Программный блок (ПБ) – это, обычно,
последовательность операторов, определяющих данные и действия, которые
необходимо предпринять для выполнения вычислений. Завершается ПБ оператором
END.

ПБ может быть:

Главной программой (main program);

Внешней подпрограммой (external subprograms);

Модулем (module);

Блоком Данных (block data).

Исполняемая
программа

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

Внешняя
подпрограмма

– это 
function или subroutine, которая не содержится внутри главной программы,
модуля, или другой подпрограммы. Она определяет алгоритм, который должен быть
выполнен, и может быть вызвана из других ПБ.
Модули
и Блоки Данных не исполняемы. (Modules can contain module procedures, though, which are executable.)

Модули содержат определения,
которые могут быть сделаны доступными другим ПБ: определения типов и данных,
определения процедур (
module subprograms) и
интерфейсы процедур (
procedure interfaces)

Module subprograms могут быть или
functions
или subroutines. Они могут быть вызваны другими module subprograms
в модуле, или другими ПБ, которые имеют доступ к модулю.

Блок данных (block data)
определяет начальные значения объектов данных в именованном common blocks. В Fortran 95/90  блок данных может быть заменен модулем.

Главная программа, внешние подпрограммы, и
подпрограммы модулей (
module subprograms)
могут содержать внутренние подпрограммы (
internal subprograms).
Объект, содержащий внутренние подпрограммы называется хозяином (
host). Внутренние подпрограммы
могут быть вызваны только своим хозяином или другими внутренними подпрограммами
в том же хозяине. Внутренние подпрограммы не могут содержать внутри себя другие
внутренние подпрограммы (т.е. не иерархичны).

Последовательность
выполнения

Если программа содержит фортрановскую главную программу, выполнение начинается с
первой исполняемой конструкции главной программы. Выполнение любой программы
заключается в выполнении исполняемых конструкций в области программы. Когда
программы вызвана  выполнение начинается
с первой исполняемой конструкции после вызванной точки входа. За исключением
приведенных ниже условий эффект выполнения как если бы исполняемые конструкции
выполняются в том порядке, в котором они записаны в программе до тех пор, пока
не будет выполнен один из операторов
STOP, RETURN, or END.
Исключения:

1 – Выполнение оператора
ветвления изменяет последовательность выполнения. Эти операторы явно  определяют новую точку исполнения;

2 —  CASE, DO, IF, или SELECT TYPE конструкция содержит структуру внутренних
операторов, и выполнение этих конструкций приводит к неявному внутреннему
ветвлению;

3 — END=, ERR=, and EOR=
спецификаторы могут приводить к ветвлению;

4 Альтернативный Return
может приводить к ветвлению.

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

Нормальное прекращение
выполнения программы происходит если будет выполнен или оператор
STOP или
оператор конца программы.

Встроенные функции

Глава 7

ТЕХНОЛОГИЯ СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ

7.1. ПОНЯТИЕ СТРУКТУРЫ ПРОГРАММЫ

Структура программы — искусственно выделенные программистом взаимодействующие части программы. Использование рациональной структуры устраняет проблему сложности разработки; делает программу понятной людям; повышает надежность работы программы при сокращении срока ее тестирования и сроков разработки вообще.

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

Описание подпрограммы (функции или процедуры) состоит из двух частей: заголовка и тела. Заголовок содержит идентификатор подпрограммы. Тело состоит из одной или нескольких инструкций. Идентификатор подпрограммы используется в качестве сокращенной записи в тех местах программы, где встречается соответствующая последовательность инструкций.

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

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

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

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

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

Если видеть в поэтапной декомпозиции и одновременном развитии и детализации программы постепенное продвижение вглубь, то такой метод при решении задач можно охарактеризовать как нисходящий (сверху вниз). И наоборот, возможен такой подход к решению задачи, когда программист сначала изучает имеющиеся в его распоряжении вычислительную машину и/или язык программирования, а затем собирает некоторые последовательности инструкций в элементарные процедуры, типичные для решаемой задачи. Элементарные процедуры затем используются на следующем уровне иерархии процедур. Такой метод перехода от примитивных машинных команд к требуемой реализации программы называется восходящим (снизу вверх).

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

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

Читайте также

2.2. Диаграммы структурного системного анализа

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

Глава 2 Среда программирования UNIX

Глава 2
Среда программирования UNIX
Одной из целей, которые изначально ставились перед разработчиками UNIX, являлось создание удобной среды программирования. Во многом это справедливо и сегодня.Разговор в данной главе пойдет о программировании в UNIX. Может показаться, что

Глава 9. Технология «drag-and-drop»

Глава 9. Технология «drag-and-drop»

Технология «drag-and-drop» («перетащить и отпустить») является современным и интуитивным способом передачи информации внутри одного приложения или между разными приложениями. Она часто является дополнением к операциям с буфером обмена по

Глава 3. Основы программирования на VBA.

Глава 3. Основы программирования на VBA.
В этой главе …~ Запуск редактора Visual Basic~ Использование справочной системы VBA~ Программирование в VBA — краткое и нестрогое руководствоМакросы хороши до определенных пределов, но гораздо больше можно получить от полноценных

ГЛАВА 2. Технология создания приложений на языке C#

ГЛАВА 2. Технология создания приложений на языке C#
Как разработчик программ на языке C#, вы имеете возможность выбрать любой из множества доступных инструментов разработки .NET-приложений. Целью этой главы является обзор самых разных инструментов разработки .NET, включая,

УСТАНОВКА СТРУКТУРНОГО ШАБЛОНА

УСТАНОВКА СТРУКТУРНОГО ШАБЛОНА
     Структурный шаблон является основной схемой, описывающей как собирается структура. Наш шаблон выглядел бы так: struct book {char title [MAXTIT];char author [MAXAUT];float value;};Этот шаблoн описывает структуру, составленную из двух символьных массивов и одной

Глава 32. Стиль программирования

Глава 32. Стиль программирования
Возьмите в привычку структурный и систематический подход к программированию на языке командной оболочки. Даже для сценариев «выходного дня» и «писаных на коленке», не поленитесь, найдите время для того, чтобы разложить свои мысли по

Глава 8 Стиль и методы программирования

Глава 8
Стиль и методы программирования
В этой главе мы рассмотрим некоторые общие принципы хорошего программирования и обсудим, в частности, следующие вопросы: «Как представлять себе прологовские программы? Из каких элементов складывается хороший стиль

Глава 3 Технология создания информационного обеспечения ГИС

Глава 3
Технология создания информационного обеспечения ГИС

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

Глава 9 WAP-ТЕХНОЛОГИЯ. ДЛЯ ИНТЕРНЕТА БОЛЬШЕ НЕ НУЖЕН КОМПЬЮТЕР!

Глава 9
WAP-ТЕХНОЛОГИЯ. ДЛЯ ИНТЕРНЕТА БОЛЬШЕ НЕ НУЖЕН КОМПЬЮТЕР!
Нередко люди путают назначение технологий WAP и GPRS. Внесем ясность. Если вы прочитали предыдущую главу, то знаете, что GPRS – это современная технология передачи данных в GSM-сетях, пришедшая на смену устаревшей

Глава 18 Основы программирования во Flash

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

Глава 8 ТЕХНОЛОГИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

Глава 8
ТЕХНОЛОГИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

8.1. ИСТОРИЯ СОЗДАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
Практически сразу после появления языков третьего поколения (1967) ведущие специалисты в области программирования выдвинули идею

8.3. СРАВНИТЕЛЬНЫЙ АНАЛИЗ ТЕХНОЛОГИЙ СТРУКТУРНОГО И ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

8.3. СРАВНИТЕЛЬНЫЙ АНАЛИЗ ТЕХНОЛОГИЙ СТРУКТУРНОГО И ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
Для проведения сравнительного анализа технологий структурного и объектно-ориентированного программирования разработана специальная методика, основанная на таких

9.2. ТЕХНОЛОГИЯ ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ

9.2. ТЕХНОЛОГИЯ ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ
Начальные шаги технологии визуального программирования определяются оболочкой самой среды визуального программирования. Сначала создаются экранные формы простейшей буксировкой мыши. В инспекторе объектов производится

Содержание

  1. 7.1. ПОНЯТИЕ СТРУКТУРЫ ПРОГРАММЫ
  2. Читайте также
  3. Понятие о стилях CSS
  4. 1.4.8. Понятие о монтировании
  5. Понятие об ODS
  6. 55. Понятие системы VВА
  7. Понятие выделения
  8. Понятие шаблона
  9. 5. Понятие индексов
  10. Понятие текстуры
  11. 9.1. Понятие о моделях
  12. 4.1. ПОНЯТИЕ СТРУКТУРЫ ДАННЫХ ПРОГРАММ
  13. Понятие доверия

7.1. ПОНЯТИЕ СТРУКТУРЫ ПРОГРАММЫ

Структура программы — искусственно выделенные программистом взаимодействующие части программы. Использование рациональной структуры устраняет проблему сложности разработки; делает программу понятной людям; повышает надежность работы программы при сокращении срока ее тестирования и сроков разработки вообще.

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

Описание подпрограммы (функции или процедуры) состоит из двух частей: заголовка и тела. Заголовок содержит идентификатор подпрограммы. Тело состоит из одной или нескольких инструкций. Идентификатор подпрограммы используется в качестве сокращенной записи в тех местах программы, где встречается соответствующая последовательность инструкций.

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

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

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

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

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

Если видеть в поэтапной декомпозиции и одновременном развитии и детализации программы постепенное продвижение вглубь, то такой метод при решении задач можно охарактеризовать как нисходящий (сверху вниз). И наоборот, возможен такой подход к решению задачи, когда программист сначала изучает имеющиеся в его распоряжении вычислительную машину и/или язык программирования, а затем собирает некоторые последовательности инструкций в элементарные процедуры, типичные для решаемой задачи. Элементарные процедуры затем используются на следующем уровне иерархии процедур. Такой метод перехода от примитивных машинных команд к требуемой реализации программы называется восходящим (снизу вверх).

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

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

Читайте также

Понятие о стилях CSS

Понятие о стилях CSS Для создания представления Web-страниц предназначена технология каскадных таблиц стилей (Cascading Style Sheets, CSS), или просто таблиц стилей. Таблица стилей содержит набор правил (стилей), описывающих оформление самой Web- страницы и отдельных ее фрагментов. Эти

1.4.8. Понятие о монтировании

1.4.8. Понятие о монтировании Особого внимания заслуживает операции монтирования. На вашем жестком диске, кроме Linux-разделов, есть разделы других операционных систем (например, Windows). Для того чтобы получить доступ к файлам, находящимся в этих разделах, вам нужно

Понятие об ODS

Понятие об ODS ODS — это аббревиатура для On-Disk Structure, т. е. структура данных баз данных InterBase на диске. ODS определяет, как организованы данные внутри файлов базы данных. Определение основных констант и структур данных для реализации On-Disk Structure находится в файле из комплекта

55. Понятие системы VВА

55. Понятие системы VВА VBA представляет собой подмножество VB и включает средства образования приложений VB, его структуры данных и управляющие структуры, возможность создания пользовательских типов данных. Также как и VB, VBA является системой визуального программирования,

Понятие выделения

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

Понятие шаблона

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

5. Понятие индексов

5. Понятие индексов Создание ключей в базовых отношениях автоматически связано с созданием индексов.Дадим определение понятия индекса.Индекс – это системная структура данных, в которой размещается обязательно упорядоченный перечень значений какого-либо ключа со

Понятие текстуры

Понятие текстуры Бытует мнение, что текстура — это изображение, накладываемое на трехмерную модель. Данное утверждение совершенно не верно. Изображение, накладываемое на модель в рамках текстуры, называется картой (Map), понятие же текстуры — шире.Текстура в 3ds Max

9.1. Понятие о моделях

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

4.1. ПОНЯТИЕ СТРУКТУРЫ ДАННЫХ ПРОГРАММ

4.1. ПОНЯТИЕ СТРУКТУРЫ ДАННЫХ ПРОГРАММ Под структурой данных программ в общем случае понимают множество элементов данных, множество связей между ними, а также характер их организованности.Под организованностью данных понимается продуманное устройство с целью

Понятие доверия

Понятие доверия Новым популярным словом двадцать первого века стало слово «доверие». Доверие затрагивает многие стороны жизни людей, начиная от экономической, финансовой, деловой сфер и заканчивая принятием политических решений. Доверие требуется при приобретении

Источник

Оператор
безусловного перехода имеет следующий
вид: goto,
здесь
goto
— зарезервированное слово: <метка>
— метка.

Метка
это
произвольный идентификатор, позволяющий
име­новать некоторый оператор программы
и таким образом ссылаться на
него.

Можно
теоретически показать, что достаточно
if
и
whileоператоров,
чтобы
записать любую необходимую управляющую
структуру.
Однако есть несколько вполне определенных
ситуаций, где лучше использовать оператор
goto.

Первая
состоит в том, что многие циклы не могут
завершаться в
точке входа, как этого требует цикл
while.

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

В
языке С
нет
никаких средств для обработки этой
ситуации (не
подходит даже goto
по
причине ограниченности рамками от­дельной
процедуры), поэтому для обработки
серьезных ошибок нужно
использовать средства операционной
системы.

В
современных языках Object
Pascal,
Ada,
C++
и
Eiffel
есть
спе­циальные
языковые конструкции, так называемые
исключения, ко­торые
непосредственно решают и эту проблему.

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

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

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

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

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

Описание
процедуры состоит из заголовка и тела.
Заголовок процедуры
имеет вид:

procedure
<имя> [ (<сп.ф.п.>) ] ;

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

Список
формальных параметров необязателен и
может отсутст­вовать.
Если же он есть, то в нем должны быть
перечислены имена формальных
параметров и их типы, например procedure
MyProc
(a:
Real;
b:
Integer;
с: Char);

Функция
отличается
от процедуры тем, что результат ее работы
возвращается
в виде значения этой функции, и,
следовательно, идентификатор
функции может использоваться наряду с
другими операндами
в выражениях. Описание функции состоит
из заголов­ка и тела. Заголовок функции
имеет следующий вид:

function
<имя>
[(<сп.ф.п.>)]:
<тип>;

здесь
<тип> — тип возвращаемого функцией
результата. Заголовок
функции может иметь следующий вид:

function
MyFunc (a,
b: Real): Real;

Операторы
тела подпрограммы рассматривают список
фор­мальных
параметров как своеобразное расширение
раздела описа­ний:
все переменные из этого списка могут
использоваться в лю­бых
выражениях внутри подпрограммы. Так
осуществляется на­стройка
алгоритма подпрограммы на конкретную
задачу. Работа с
процедурами и функциями отличаются в
следующем:

  1. в
    заголовке функции помимо описания
    формальных пара­метров
    обязательно указывается тип возвращаемого
    ею результата;

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

  3. вызов
    процедуры выполняется отдельным
    оператором;

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

Соседние файлы в предмете Программирование

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

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

ПО — программное обеспечение автоматизированных систем.

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

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

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

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

Поле объекта (data members) — порция данных объекта, значения которых определяют текущее состояние объекта.

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

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

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

Предок — это класс, предоставляющий свои возможности и характеристики другим классам.

Программная документация — единая система программной документации (ЕСПД).

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

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

Программное изделие — программа на носителе данных, являющаяся продуктом промышленного производства.

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

Проект (от лат. projectus — брошенный вперед) — совокупность проектных документов в соответствии с установленным перечнем, которая представляет результат проектирования.

Проектирование — это разработка проекта, процесс создания спецификации, необходимой для построения в заданных условиях еще несуществующего объекта на основе первичного описания этого объекта. Результатом проектирования является проектное решение или совокупность проектных решений, удовлетворяющих заданным требованиям. Заданные требования обязательно должны включать форму представления решения.

Проектная задача (англ. engineering Task) — характеризуется неопределенностью априори информации: что требуется получить, что задано. Более того, способ решения задачи является объектом проектирования. И наконец, решение проектной задачи должно быть найдено в рамках ограничений внешней среды: доступных денежных средств, заранее заданных сроков, возможностями технических средств и инструментария программирования, научных знаний программных заделов и т. д.

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

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

Проектная ситуация — реальность (ситуация), в которой ведется проектирование.

Проектное решение — описание в заданной форме объекта проектирования или его части, необходимое и достаточное для определения дальнейшего направления проектирования.

Проектный документ — документ, выполненный по заданной форме, в котором представлено какое-либо проектное решение. В программировании проектные решения оформляются в виде программной документации. Различают внешнюю программную документацию, которая согласуется с заказчиком, и внутреннюю промежуточную документацию проекта, которая необходима самим программистам для их работы.

Простое наследование классов — наследование, при котором определенный пользователем класс имеет только одного родителя. Схема иерархии классов в этом случае представляет собой ряд одиночно стоящих деревьев (hierarchical classification).

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

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

Рабочий проект (РП) — наименование стадии и программный документ, содержащий описание реализованного изделия.

Раннее связывание — связи между объектами определяются статически во время компиляции.

Резидентная программа — не удаляемая ОС программа, постоянно находящаяся в оперативной памяти ЭВМ.

Родитель — непосредственный класс-предок, стоящий у корня схемы иерархии, и от которого порождаются первые потомки, а от потомков еще потомки.

Родительский класс — начальный класс, от которого наследуются классы-потомки.

РП — рабочий проект.

САПР — система автоматизированного проектирования.

Свойства (property) — это особым образом оформленные методы, предназначенные как для чтения и контролируемого изменения внутренних данных объекта (полей), так и выполнения действий, связанных с поведением объекта.

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

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

Система — множество элементов, находящихся в отношениях и связях друг с другом, которое образует определенную целостность, единство.

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

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

Сквозной структурный контроль — использование на многих этапах проекта контроля корректности спецификации связей частей программы.

Слияние — объединение нескольких небольших, но тесно взаимодействующих классов в один.

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

Спецификация — в сфере проектной деятельности это какое-либо описание в точных терминах.

Это тоже интересно:

  • Нековак вакцина инструкция по применению в ветеринарии
  • Нек массажер для шеи инструкция по применению
  • Нейче лакс нсп инструкция по применению
  • Нейче лакс инструкция по применению цена отзывы
  • Нейтральный гипохлорит кальция инструкция по применению

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии