Читайте также: |
|
1.Процедуры языка BASIC. В программировании довольно часто возникают случаи, когда одинаковые вычисления приходится производить в разных местах программы. Чтобы каждый раз не выписывать одинаковые операторы, в языки программирования включают средства, позволяющие описывать повторяющиеся в программе вычисления только раз, а по мере необходимости использовать эти описания в тех местах, где это требуется. Для обозначения такого рода средств обычно используется общее наименование - процедуры. Имеются такие средства и в языке BASIC, хотя в разных версиях этого языка этот вопрос решается по-разному. К таким средствам относятся определяемые функции (или функции пользователя), подпрограммы и подпрограммы с параметрами.
Подпрограмма представляет собой логически законченный участок вычислительного процесса, завершаемый оператором RETURN (возврат). Подпрограмма располагается в произвольном месте общей программы, а ее строки нумеруются в обычном порядке. Существенное значение при этом имеет номер первой строки программы, так как он используется при обращении к подпрограмме. Обращение к подпрограмме осуществляется с помощью специального оператора GOSUB (сокращение от английских слов GOTO (идти к) и SUBROUTINE (подпрограмма)). После служебного слова слова GOSUB указывается число - номер строки, с которой начинается подпрограмма, например:
GOSUB 1250
После обращения к подпрограмме выполняются все предусмотренные в ней действия, а когда очередь доходит до оператора RETURN, он осуществляет возврет в основную программу, т. е. передает управление тому оператору, который стоит за соответствующим оператором вызова подпрограммы GOSUB.
Подпрограммы могут входить одна в другую, однако оператор GOSUB нельзя применять для входа внутрь цикла. Если подпрограмма имеет в своем составе цикл, то он должен заканчиваться в этой подпрограмме (т. е.) оператор NEXT цикла должен стоять раньше оператора RETURN соответсвующей подпрограммы).
Программист может по своему усмотрению определять часто используемые в программе математические функции, а затем использовать их так, как используются стандартные встроенные функции типа SIN, COS LOG и т. п. Определяется функция пользователя с помощью оператора DEFFN (служебное слово DEFFN образовано сокращением двух английских: DEFINITION (определение) и FUNCTION (функция)), который записывается в виде:
DEFFN <имя FN> (<прост. числ. перем.>) = <арифм. выраж.>
Здесь < имя FN > - цифра или буква латинского алфавита, выполняющая роль обозначения определяемой функции. Пример определения функции:
DEFN A(X) = X ^ 2 + 5 * X + 6
Если в ходе выполнения программы необходимо использовать значение определенной в программе новой функции при конкретном значении ее аргумента, то достаточно вставить в нужном месте идентификатор этой функции вида FN, < имя FN >, всед за которым в круглых скобках вместо <простой чиловой переменной>, выполняющей роль формального параметра, вставить нужное значение аргумента.
Так, например, вызов определенной выше функции A(X) может быть осуществлен обращением:
FNA(3)
Действие оператора DEFFN вызавается только при упоминании функции FN, сам по себе он не является исполняемым оператором и может быть размещен в любом месте программы. Правая часть определения функции FN может включать в себя и другие определяемые функции, но если, например, функция A вызывает функцию В, то В не может вызывать А (получается бесконечный цикл).
Формальные параметры это те, которые перечисляются в списке параметров в заголовке процедуры при её объявлении. Фактические параметры это те, которые подставляются в оператор вызова процедуры вместо соответствующих формальных параметров.
Список формальных параметров представляет собой перечень имён переменных, массивов, процедур или функций, содержащих передаваемые процедуре данные для обработки, а также перечень имён переменных или массивов, возвращаемых процедурой с результатами обработки.
Параметры можно передавать процедуре по ссылке (с использованием ключевого слова ByRef) и по значению (с использованием ключевого слова ByVal). При передаче параметра по ссылке процедура получает физический адрес переменной в памяти. Значение этой переменной может быть изменено в процедуре. По умолчанию все параметры передаются процедуре по ссылке. В этом случае необходимо явно указывать тип переменной: Private Sub P (ByRef n As Integer).
При передаче параметра по значению процедуре передаётся только копия переменной. Если процедура изменяет эту переменную, то это затрагивает только её копию. Значение же самой переменной в оперативной памяти не изменяется. Признаком передачи параметра по значению служит ключевой слово ByVal.
Например: Private Sub P (ByVal n As Integer).
· локальная: переменная доступна только в текущей процедуре;
· контейнера: переменная доступна только в текущей форме, модуле или классе;
· глобальная: переменная доступна во всем проекте. Локальными называются переменные, определяемые внутри процедуры или функции. Они доступны только внутри этой процедуры. Поэтому не возникает конфликтов при использовании разными процедурами переменных с одним и тем же именем. При выходе из процедуры все ее локальные переменные сразу же удаляются из памяти, а при новом вызове этой процедуры переменные создаются вновь.
Переменные контейнера определяются в секции (General) (Declarations) с помощью оператора Dim и доступны только внутри соответствующего контейнера, т, е. формы, модуля или класса.
Глобальные переменные определяются в секции (General) (Declarations) модуля. При этом вместо оператора Dim используется Public. Глобальные переменные доступны во всех модулях и процедурах проекта.
Локально объявленные переменные при выходе из процедуры удаляются из памяти, а при новом вызове процедуры инициализируются заново. Их содержимое при этом не сохраняется, что не всегда желательно. Этого можно избежать путем расширения области определения, т. е. объявив переменную глобальной или как минимум переменной контейнера. Но это разрешает доступ к переменной из других процедур.
Дата добавления: 2015-01-30; просмотров: 102 | Поможем написать вашу работу | Нарушение авторских прав |