Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Совместное использование операторов цикла и условного операторовСодержание книги
Поиск на нашем сайте При одновременном использовании в процедурах и функциях операторов цикла и условных операторов должно выполняться так называемое правило вложенности. Если среди операторов, выполняющихся в цикле (циклы For-Next и Do-Loop), имеется условный оператор (If-Endlf), то условный оператор должен целиком содержаться внутри цикла (между операторами For-Next или Do-Loop). Если в Then — блоке или Else ~ блоке условного оператора It’-Endlf имеются выполняющиеся в цикле операторы (циклы For-Next и Do-Loop), то эти циклы Должны целиком содержаться в этих блоках. ПРОЦЕДУРЫ И ФУНКЦИИ · В предыдущих разделах рассматривались процедуры обработки событий, которые в процессе выполнения программы инициировались (запускались) в результате свершения некоторого определенного события (щелчок мыши, нажатие клавиши и т.п.). Однако в Visual Basic имеется возможность выделить неоднократно повторяющиеся фрагменты программы в определенным образом организованные функциональные блоки операторов, которые можно использовать без их повторного написания и отладки. При этом сложные программы получаются более компактными, а функциональные блоки при их правильной организации могут использоваться в других программных разработках. Организовать функциональные блоки в Visual Basic можно в виде процедур (procedure) и функции (function). Любая программа на Visual Basic является процедурой или функцией. Схема, показанная на, иллюстрирует последовательность выполнения программы, состоящей из процедур и функций. Выполнение профаммы начинается в основной (первой) функции или процедуре, iij которой вызываются другие процедуры или функции (Процедура А). После вызова выполняется вызванная процедура (Процедура А), которой передается управление выполнением программы. В свою очередь в вызванной процедуре могут быть обращения к другим процедурам или функциям (Функция Б) и т.д. (Visual Basic отслеживает до нескольких сот уровней вызовов). Прекращение выполнения вызванной процедуры или функции (Возврат) означает возвращение в вызывающую процедуру или функцию, выполнение которой продолжается с оператора, следующего за вызывающим оператором. В программе, состоящей из нескольких процедур или функций, необходимо остановиться на понятии локальные и глобальные данные. Локальные данные определены только в момент выполнения процедуры или функции и память для них выделяется только на момент выполнения. После завершения выполнения процедуры или функции локальные данные не сохраняются (выделенная память используется Другими процедурами и функциями). При этом экономится память, так как она выделяется только по мере необходимости и операционные системы современных компьютеров это делают очень эффективно. Однако и Visual Basic имеется и возможность сохранять локальные данные до следующего обращения (специальный параметр Static, см. ниже). Глобальные данные сохраняются пока выполняется программа и они доступны для всех входящих в программу процедур и функции. При запуске программы Visual Basic отводит для глобальных данных необходимую память. Повторный вьпов процедуры или функции внутри этой же процедуры пли функции (обращение к самой себе) называется рекурсией. Visual Basic допускает рекурсивное обращение. Программный код процедур и функций, не являющихся процедурами обработки событии, помещается в раздел general списка Object формы (щелчок мыши по кнопке Wiew Code окна Project и далее щелчок мыши по элементу раскрывающегося списка general). Кроме того, в раскрывающемся меню Insert Главного меню имеется пункт Procedure. выбор которого раскрывает специальное окно для выбора процедуры или функции п задания имени. Для заданной процедуры или функции появляется шаблон (заготовка) в окне кода (первая п последняя строки программы), в который можно ввести текст программы. Процедуры Синтаксически процедура определяется [Private | Public] [Static] Sub имя процедуры [(список аргумен- [операторы объявления] [операторы} [Exit Sub] [операторы} End Sub где Private, Public, Static, Sub, Exit Sub, End Sub - ключевые слова. Sub определяет обязательный первый оператор процедуры. End Sub - обязательный последний оператор процедуры; имя процедуры образуется в соответствии с общими правилами образования имен, но не может иметь описателей типа (имя процедуры не принимает значения); список аргументов имеет следующий синтаксис: [Optional] [ By Val | ByRef] [ParainArray] имя [()] [As тип] где Optional, ByVal, ByRef, ParaniArray и As ключевые слова; имя — имя переменной, массива (в случае массива используется имя () без указания границ значения индексов, что позволяет использовать одну процедуру для разного числа элементов массива в каждом конкретном случае), элемента управления или формы (в последних двух случаях тип принимает значения Control и Form). Тип может быть Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String (только переменной длины). Variant, пользовательский тип или Control и Form. As тип необходимо применять для каждого аргумента. Список аргументов определяет связь по данным между вызывающей (процедура, из которой происходит вызов) и вызываемой (процедура, которая вызывается) процедурами. Локальные данные, определенные внутри процедуры (кроме тех, что определены в списке general для форм), не могут использоваться в других процедурах (например, переменные с одинаковыми именами, но объявленные в разных процедурах, хранятся в разных ячейках памяти и изменение переменной в одной из процедур не ведет к изменению одноименной переменной в другой процедуре). Процедуры, относящиеся к форме, но не являющиеся процедурами обработки событий, помещаются в раздел general формы. Процедура не может быть определена внутри какой-либо процедуры или функции. Пример процедуры вычисления площади прямоугольника по заданным значениям сторон: Sub SubDemo (RLen, Rwid) ' 'заголовок процедуры ‘SubDemo с двумя аргументами- ‘R1en-длина и Rwid-ширина Dim Area ' объявление локальной переменной Area = RLen * Rwid ' расчет площади MsgBox “Площадь равна” & Area “печать результата End-Sub Пример процедуры на основе рассмотренного выше фрагмента программы формирования вектора из сумм элементов столбцов матрицы: Sub SubMatrVektor (A() As Single, B() As Single,. MaxI As Integer, MaxJ As Integer)’ Dim J, I As Integer For J = 1 To MaxJ 'верхняя граница индекса J 'определяется передаваемым 'аргументом процедуры Л (J) = 0 'присвоение начального значения 'элемента вектора For I = 1 То MaxI 'верхняя граница индекса 'I определяется Передаваемым аргументом процедуры А(J) = А(J) + B(I,J) 'вычисление суммы в цикле Next I Next J End Sub Изменяя значения аргументов данную процедуру можно использовать для работы с матрицами произвольного размера. Рассмотрим, что означают другие используемые ключевые слова в определении процедуры. Exit Sub вызывает прекращение выполнения процедуры и пыход из нее в вызывающую программу. Static определяет, что локальные данные (переменные, массивы), определенные внутри процедуры (переменная Area в примере), сохраняются в промежутках между вызовами данной процедуры. Определение Static не распространяется на данные, которые объявлены вне данной процедуры, но используются в ней (т.е. эти данные будут изменяться независимо от определения Static). Нельзя использовать при рекурсивном вызове процедуры. Private определяет, что процедура может быть вызвана (доступна) только ц том модуле, в котором она объявлена (никакие другие процедуры в других модулях не могут вызвать данную процедуру). Определение Private не имеет смысла, если процедура определена для какой-либо формы (в этом случае процедура недоступна из вне данной формы). Public определяет, что процедура может быть вызвана из любого модуля приложения. Поскольку имя процедуры определяется (глобально распознается) в рамках всех процедур всех модулей одной программы, имя процедуры не должно совпадать с другими глобально распознаваемыми именами программы. Такими глобально распознаваемыми именами являются имена других процедур Visual Basic или процедур динамически подключаемых библиотек (dynamic-link library [DLL|) и данных, объявленных как Global (см. выше). Чтобы избежать конфликта в объявлении одних и тех же имен, можно использовать определение Private, т.е. сделать процедуру доступной только в рамках модуля. В этом случае имя процедуры не может совпадать с такими именами, объявленными на уровне модуля, как имена переменных, массивов, констант и имена других процедур данного модуля. Optional определяет, что аргумент не является обязательным. При его использовании все последующие аргументы в списке аргументов также являются необязательными и для них также необходимо использовать данное ключевое слово. Аргументы, объявленные Optional, должны иметь тип Variant. He может использоваться для аргумента, для которого задан параметр ParamArray. ByVal определяет, что аргумент передается в процедуру по значению (см. ниже). ByRef определяет, что аргумент перелается в процедуру по ссылке (см. ниже). ParamArray относится к последнему аргументу в списке аргументов и определяет, что конечный (заключительный) аргумент является необязательным массивом. Не может использоваться совместно с параметрами ByVal, ByRef, Optional. Пример. Sub ReturnTwice(ReturnValue, Optional A) If IsMissing(A) Then 'функция IsMissing () “проверяет передачу аргумента А в процедуру ReturnValue =Null 'если аргумент не передается, 'вычисляемое значение присваивается О Else ReturnValue = A * 2 'если аргумент передается, 'вычисляется значение от аргумента End If End Sub Синтаксис оператора обращения к процедуре следующий: имя процедуры[список значении} или Call имя процедуры[{список значении)} где Call — ключевое слово; список значений — список значений аргументов (соответствует списку аргументов в операторе Sub no количеству, порядку следования и типу, кроме случая когда используется параметр Optional). Кроме того должно выполняться следующее соответствие между списками аргументов и значениями: Аргумент Значение Переменная | Константа, переменная, I элемент массива, выражение. Массив Массив форма Форма Элемент управления; Элемент управления I Следующие примеры показывают правильное согласование между списками аргументов и значении: Пример 1. Sub Sum (A As Integer, B As Integer, С As Integer) 'список аргументов состоит из переменных С = А + В • End Sub Sub Form Click () Static X(3) As Integer X(1) = 1 X(2) =2 Call Sum(X(l), X(1) + X(2), X(3)) 'список ' -значений включает элементы массива и выражение Print Х(1), Х(2), Х(3) End Sub Пример 2. Sub Sum (A As Integer, В As Integer, С As Integer) 'список аргументов состоит из переменных С—А + В End Sub Sub Forrri_Click () Dim X, Z As Integer X = 5 Call Sum(X, 4, Z) 'список значений включает ' переменные и константу Print X, Z End Sub Пример 3. Sub Sum (A () As Integer) 'список аргументов включает массив А(3) = А(1) + А(2) End Sub Sub Form_Click () Static X(3) As Integer X(1) - 1 X(2) =2 Sum X (,)'список значений включает массив Print Х(1), Х(2), Х(3) End Sub Следует обратить внимание, что в последнем примере обращение к процедуре не содержит ключевого слова Call и отсутствуют скобки, обрамляющие список значений. Для рассмотренного примера списка аргументов с использованием параметра Optional, обращения могут иметь следующий вид: Call ReturnTwice(ReturnValue,) 'значение ReturnValue равно О Call ReturnTwice(ReturnValue, 2) ‘ значение ReturnValue равно 4 Пример программы. Поместим рассмотренную выше процедуру формирования вектора из сумм элементов столбцов матрицы в раздел general формы: Option Explicit Sub SubMatrVektor (A() As Single, B() As Single, MaxI As Integer, Max.J As Integer) Dim J, I As Integer For J == 1 To MaxJ A(J) -- 0 For I = 1 To MaxI A(J) = A(J) + B(I, J) Next I Next J End Sub Private Sub Form_Ciick() Static X(1 To 2, 1 To 3) As Single, Y(1 To 3) As Single X(1, 1) = 1 X(1, 2) = 2 Х(1, 3) = 3 X(2, i) = 4 Х(2, 2} = 5 Х(2, 3) = 6 SubMatrVektor Y(), X(), 2, 3 Print Y(li, Y(2), Y(3) End Sub Результат выводится на форму. Функции Синтаксически функция определяется [Public | Private] [Static] Function имя функции [(список аргументов)} [As тип] [операторы объявления] [операторы} [имя функции = выражение] [Exit Function] [операторы] [имя функции = выражение] End Function
|
||
|
Последнее изменение этой страницы: 2016-08-12; просмотров: 352; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.62 (0.01 с.) |