Sub Form_Click ()
Dim I As Integer
Static A(1 To 5)
I = 1
Do While I <= 5
A (‘I^=Val (InputBox ( “Введите элемент массива”( Str(-T) ) )
MsgBox “Значение элемента массива” •+ Str(A(I))
1=1+1
Loop
End Sub
Sub Form_Click ()
Dim I As Integer
Static A(1 To 5) 1=1 Do Until I > 5
A (I)=Val(InputBox(“Введите элемент массива” + Str(-I) ) )
MsgBox “Значение элемента массива” + Str(A(‘I))
1=1+1
Loop
End Sub
Окна для ввода и вывода в приведенных примерах имеют вид на рис. 3.11 и 3.12. Альтернативным способом ввода нескольких значении элементов массива может быть использование текстового окна и его свойств SelLength, SelStart, SelText (см описание текстового окна) В определенных позициях текстового окна можно задавать значения различных элементов массива и с использованием указанных функции эти поля выделять (аналогично тому, как осуществлялся ввод данных в текстовой строке ввода в операционнои системе DOS и др ) Создадим форму и разместим на ней текстовое окно, определив максимальное число символов 80 (свойство MaxLength = 80)
Исторический экскурс' когда-то недавно на перфокарте можно было “набить” 80 символов и строка фортран-программы состояла из 80 позиции Каждый элемент массива будем располагать последовательно в четырех позициях строки (число символов вводимого числа, включая десятичную точку, не превышает 4) Пробелы между числами отсутствуют
Имя текстового окна Input_Txt Остальные параметры определяются по умолчанию Определим процедуру обработки события нажатия клавиши KeyPiess
Sub Inpui:_Txt_KeyPress (KeyAscii As Integer) Static A(1 To 5) As Single If KeyAscii = 13 Then For I = 1 To 5 Input-_txt. SalStart-f’I 1) *4 'последовательно
'определяется начальная позиция вводимого числа lnput_txt.SelLength= 4 'определяется количество ' вводимых символов
A(I) = Val(Input_txt.SelText) 'выделяются 'необходимые символы и преобразуются
'в числовое значение (функция Val) Print A(I}; 'печать введенных значении на форме Next I End If
Процедура обеспечивает ввод значении пяти элементов массива при нажатии клавиши “Enter” (ASC1I-код клавиши равен 13). Стоящая “,” после оператора Punt A(I) обеспечивает печать следующего элемента массива на той же строке сразу после предыдущего.
Альтернативно можно использовать “,” (выводимые значения располагаются на одной строке в фиксированных зонах формы) При отсутствии указанных символов выводимые значения располагаются на отдельных строках На рис 3 13 показаны вводимые символы и распечатываемые значения Пример программы.
В качестве примера приводится программа нахождения суммы элементов матрицы 3*4 (три строки и четыре столбца), хотя бы один индекс которых кратен трем.
Текст программы размешается в процедуре обработки события щелчка мыши по форме. Для ввода исходных данных (значений каждого из элементов матрицы) используется три текстовых окна (одно окно для каждой строки матрицы). Каждое значение занимает последовательные четыре позиции строки окна. Введенная матрица и результат выводятся на форму.
Текст процедуры:
Private Sub Form_Click ()
Static A(1 То 3, 1 То 4), Sum As Single For J = 1 To 4 Input_txtl.SelStart = (J - 1) * 4 'последовательно
“определяется начальная позиция вводимого числа Input_txtl.SelLength = 4 'определяется количество
'вводимых символов А(1, J) = Val(Input_txtl.SelText) 'выделяются
'необходимые символы и
'преобразуются в числовое значение (функция Val) Next J
Print А(1, 1), А(1, 2), А(1, 3), А(1, 4) For J = 1 То 4 Input_txt2.SelStart = (J - 1) * 4 'последовательно
'определяется начальная позиция вводимого числа Input_txt2.SelLength = 4 'определяется количество
'вводимых символов А(2, J) = Val(Input_txt2.SelText) 'выделяются
'необходимые символы и преобразуются в числовое
'значение (функция Val) Next J
Print А(2, 1), А(2, 2), А(2, 3), А(2, 4) For J = 1 То 4 Input_txt3.SelStart = (J - 1) * 4 'последовательно
'определяется начальная позиция вводимого числа Input txt3.SelLength = 4 'определяется количество
'вводимых символов А(3, J) = Val(Input_txt3.SelText) 'выделяются
'необходимые символы и преобразуются
'в числовое значение (функция Val) Next J
Print А(3, 1), А(3, 2), А(3, 3), А(3, 4) Sum = О
For I = 1 То 3 алгоритм For J = 1 То 4 суммирования IfI/3=I\30rJ/3=J\3 Then элементов Sum = Sum + A(I, J) матрицы, один
Рис. 3.14
3.5.6. Совместное использование операторов цикла и условного операторов
При одновременном использовании в процедурах и функциях операторов цикла и условных операторов должно выполняться так называемое правило вложенности.
Если среди операторов, выполняющихся в цикле (циклы For-Next и Do-Loop), имеется условный оператор (If-Endlf), то условный
оператор должен целиком содержаться внутри цикла (между операторами For-Next или Do-Loop). Если в Then — блоке или Else ~ блоке условного оператора It’-Endlf имеются выполняющиеся в цикле операторы (циклы For-Next и Do-Loop), то эти циклы Должны целиком содержаться в этих блоках.
Следующие схемы иллюстрируют принцип корректного совместного использования циклов и условных операторов:
3.6. ПРОЦЕДУРЫ И ФУНКЦИИ
Любая программа на Visual Basic является процедурой или функцией.
Схема, показанная на рис. 3.15, иллюстрирует последовательность выполнения программы, состоящей из процедур и функций (рис. 3.15).
Рис Ч 15
Выполнение профаммы начинается в основной (первой) функции или процедуре, iij которой вызываются другие процедуры или функции (Процедура А). После вызова выполняется вызванная процедура (Процедура А), которой передается управление выполнением программы. В свою очередь в вызванной процедуре могут быть обращения к другим процедурам или функциям (Функция Б) и т.д. (Visual Basic отслеживает до нескольких сот уровней вызовов).
Прекращение выполнения вызванной процедуры или функции (Возврат) означает возвращение в вызывающую процедуру или функцию, выполнение которой продолжается с оператора, следующего за вызывающим оператором.
В программе, состоящей из нескольких процедур или функций, необходимо остановиться на понятии локальные и глобальные данные.
Локальные данные определены только в момент выполнения процедуры или функции и память для них выделяется только на момент выполнения.
После завершения выполнения процедуры или функции локальные данные не сохраняются (выделенная память используется Другими процедурами и функциями). При этом экономится память, так как она выделяется только по мере необходимости и операционные системы современных компьютеров это делают очень эффективно. Однако и Visual Basic имеется и возможность сохранять локальные данные до следующего обращения (специальный параметр Static, см. ниже).
Глобальные данные сохраняются пока выполняется программа и они доступны для всех входящих в программу процедур и функции. При запуске программы Visual Basic отводит для глобальных данных необходимую память.
Повторный вьпов процедуры или функции внутри этой же процедуры пли функции (обращение к самой себе) называется рекурсией. Visual Basic допускает рекурсивное обращение.
Программный код процедур и функций, не являющихся процедурами обработки событии, помещается в раздел general списка Object формы (щелчок мыши по кнопке Wiew Code окна Project и далее щелчок мыши по элементу раскрывающегося списка general). Кроме того, в раскрывающемся меню Insert Главного меню имеется пункт Procedure (рис. 3.16). выбор которого раскрывает специальное окно для выбора процедуры или функции п задания имени (рис. 3.17).
Для заданной процедуры или функции появляется шаблон (заготовка) в окне кода (первая п последняя строки программы), в который можно ввести текст программы.
Рис. 3 16
3.6.1. Процедуры
Синтаксически процедура определяется [Private | Public] [Static] Sub имя процедуры [(список аргумен-
[операторы объявления] [операторы} [Exit Sub] [операторы} End Sub
Рис. 3.17
где Private, Public, Static, Sub, Exit Sub, End Sub - ключевые слова. Sub определяет обязательный первый оператор процедуры. End Sub - обязательный последний оператор процедуры;
имя процедуры образуется в соответствии с общими правилами образования имен, но не может иметь описателей типа (имя процедуры не принимает значения);
список аргументов имеет следующий синтаксис:
[Optional] [ By Val | ByRef] [ParainArray] имя [( )] [As тип] где Optional, ByVal, ByRef, ParaniArray и As ключевые слова;
имя — имя переменной, массива (в случае массива используется имя ( ) без указания границ значения индексов, что позволяет использовать одну процедуру для разного числа элементов массива в каждом конкретном случае), элемента управления или формы (в последних двух случаях тип принимает значения Control и Form).