Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 280; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.128.17 (0.007 с.) |