- •7. Одномерные массивы 114
- •8. Обработка двумерных массивов (матриц) 162
- •9. Обработка строк 183
- •10. Тип данных, определенный пользователем. Структуры 214
- •11. Использование подпрограмм 228
- •Приложение 52 310 Список литературы 313 Введение
- •1. Этапы создания Windows-приложения
- •2. Среда Visual Basic 2005
- •2.1. Структура среды Visual Basic 2005
- •2.2. Создание нового проекта
- •2.3. Сохранение проекта
- •2.4. Выполнение приложения
- •2.5. Основные команды среды Visual Basic 2005
- •2.6. Методы тестирования
- •2.7. Отладка приложений в среде vb
- •3. Разработка интерфейса в среде vb. Основные элементы управления
- •3.1. Метка
- •3.2. Текстовое поле
- •3.3. Кнопка
- •3.4. Окно списка
- •3.5. Выравнивание положения элементов управления
- •4. Программа линейной структуры
- •4.1. Понятие переменной
- •4.2. Типы данных
- •4.3. Объявление переменных
- •4.4. Оператор присваивания
- •Оператор присваивания работает справа налево.
- •4.5. Константы
- •4.6. Арифметические операции
- •4.7. Математические функции
- •4.8. Арифметическое выражение
- •4.9. Окно ввода (InputBox)
- •4.10. Окно вывода сообщения (MsgBox)
- •4.11. Пример. Вычисление площади треугольника
- •4.12. Пример. Нахождение цифр числа
- •5. Организация ветвлений
- •5.1. Логические константы и переменные
- •5.2. Операции сравнения
- •5.3. Логические операции
- •5.4. Логическое выражение
- •5.5. Условный оператор
- •5.6. Функция iIf
- •5.7. Оператор множественного ветвления ElseIf
- •5.8. Оператор выбора Select Case
- •5.9. Оператор безусловного перехода GoTo
- •5.10. Пример. Решение линейного уравнения
- •5.11. Пример. Программа-калькулятор
- •6. Программирование повторений
- •6.1. Цикл со счетчиком
- •6.1.1. Табуляция функции
- •6.1.2. Вычисление факториала
- •6.1.3. Обработка совокупности чисел с известным числом элементов
- •6.2. Цикл с условием
- •6.2.1. Ввод с проверкой
- •6.2.2. Обработка совокупности чисел с неизвестным числом элементов
- •6.2.3. Вычисление суммы ряда по общей формуле
- •Вычисление суммы ряда с использованием рекуррентного соотношения
- •6.2.5. Вычисление произведения ряда
- •Решение нелинейных уравнений методом простой итерации
- •7. Одномерные массивы
- •Массивы всегда обрабатываются в цикле.
- •7.1. Ввод массива
- •Вывод массива в окно списка и в текстовое поле
- •7.3. Вычисление суммы и произведения элементов массива
- •7.4. Определение количества элементов массива, удовлетворяющих некоторому условию
- •7.5. Вычисление среднего арифметического и среднего геометрического элементов массива, удовлетворяющих некоторому условию
- •7.6. Нахождение максимального элемента массива
- •7.7. Нахождение минимального элемента массива, удовлетворяющего некоторому условию
- •7.8. Поиск первого элемента массива, удовлетворяющего некоторому условию
- •7.9. Поиск последнего элемента массива, удовлетворяющего некоторому условию
- •7.10. Замена одного элемента массива
- •7.11. Замена всех элементов массива, удовлетворяющих некоторому условию
- •7.12. Перестановка местами двух элементов массива
- •7.13. Формирование нового массива из некоторых элементов исходного массива
- •7.14. Проверка совпадения всех элементов массива
- •7.15. Проверка упорядоченности всех элементов массива
- •7.16. Сортировка массива методом пузырька
- •7.17. Линейная сортировка массива (методом поиска минимума)
- •Никогда нельзя использовать одновременно оба способа перестановки элементов массива.
- •8. Обработка двумерных массивов (матриц)
- •8.1. Ввод прямоугольной матрицы
- •8.2. Вывод прямоугольной матрицы в окно списка и в текстовое поле
- •8.3. Поиск максимального элемента матрицы
- •8.4. Обработка матрицы по строкам
- •8.5. Обработка матрицы по столбцам
- •8.6. Обработка квадратных матриц
- •Для обработки элементов, стоящих на любой диагонали, достаточно одного цикла. Для обработки элементов, принадлежащих к одному из треугольников, необходимо использовать вложенные циклы.
- •9. Обработка строк
- •9.1. Основные функции обработки строк
- •9.2. Посимвольная обработка строки
- •9.3. Формирование массива слов строки
- •9.4. Формирование строки из массива слов
- •9.5. Слова-палиндромы
- •9.6. Выделение чисел из строки
- •9.7. Сравнение строк
- •9.8. Обработка многострочного текста
- •10. Тип данных, определенный пользователем. Структуры
- •10.1. Описание структуры. Область видимости. Понятие метода
- •10.2. Оператор With
- •10.3. Ввод массива структур
- •10.4. Вывод массива структур
- •10.5. Поиск в массиве структур
- •10.6. Формирование нового массива из некоторых элементов исходного массива
- •10.7. Сортировка массива структур
- •11. Использование подпрограмм
- •11.1. Определение процедуры и функции. Описание процедуры и функции
- •11.2. Передача параметров по ссылке и по значению
- •11.3. Формальные параметры и фактические переменные
- •11.4. Локальные и глобальные переменные
- •11.5. Static-переменные
- •Приложение 1
- •Приложение 2
- •Приложение 3
- •Приложение 4
- •Приложение 5
- •Приложение 6
- •Приложение 7
- •Приложение 8
- •Приложение 9
- •Приложение 10
- •Приложение 11
- •Приложение 12
- •Приложение 13
- •Приложение 14
- •Приложение 15
- •Приложение 16
- •Приложение 17
- •Приложение 18
- •Приложение 19
- •Приложение 20
- •Приложение 21
- •Приложение 22
- •Приложение 23
- •Приложение 24
- •Приложение 25
- •Приложение 26
- •Приложение 27
- •Приложение 28
- •Приложение 29
- •Приложение 30
- •Приложение 31
- •Приложение 32
- •Приложение 33
- •Приложение 34
- •Приложение 35
- •Приложение 36
- •Приложение 37
- •Приложение 38
- •Приложение 39
- •Приложение 40
- •Приложение 41
- •Приложение 42
- •Приложение 43
- •Приложение 44
- •Приложение 45
- •Приложение 46
- •Приложение 47
- •Приложение 48
- •Приложение 49
- •Приложение 50
- •Приложение 51
- •Приложение 52
- •Список литературы
11.5. Static-переменные
Локальная переменная – это переменная, описанная в теле подпрограммы. После завершения подпрограммы значение локальной переменной теряется. Чтобы этого не происходило, локальную переменную можно объявить с помощью оператора Static. Тогда значение переменной будет сохраняться между двумя обращениями к подпрограмме, но в отличие от глобальной переменной оно будет недоступно для других подпрограмм проекта. Рассмотрим пример использованияStatic-переменной.
Сначала опишем все необходимые подпрограммы.
Процедура printпредназначена для вывода значения целочисленной переменной в окно списка. У нее два входных параметра:stroka– это поясняющий текст, который будет выводиться перед значением переменной,znach– значение, которое надо вывести. Это значение может быть только целым числом. Так как обе переменных в процессе вывода не меняют своих значений, то они передаются по значению. Перед их именами ставим ключевое словоByVal. Обратите внимание, что по правилам языка Visual Basic 2005 режим передачи указывается отдельно для каждого параметра.
Private Sub print(ByVal stroka As String, _
ByVal znach As Integer)
В окно списка lstAвыводим поясняющий текст и значение, которое предварительно преобразуем с помощью функцииStr.
lstA.Items.Add(stroka + Str(znach))
End Sub
Процедура Test4предназначена для увеличения значения целочисленного параметраa, передаваемого по ссылке, на величину, равную количеству обращений к данной процедуре.
Private Sub Test4(ByRef a As Integer)
С помощью оператора Static объявляем локальную переменнуюb,в которой мы будем подсчитывать количество обращений к данной процедуре.
Static b As Integer
Анализируем значение переменной b.
If b = Nothing Then
Если процедура Test4вызвана впервые, то значение переменнойbеще не определено и по умолчанию равно специальной константеNothing. В этом случае зададим начальное значение переменойbравным единице.
b = 1
Else
В противном случае значение переменной bуже определено, значит, данная процедура вызывается не в первый раз. Следовательно, значение переменнойbнадо увеличить на единицу.
b += 1
End If
После завершения условного оператора в переменной bзаписано количество обращений к процедуреTest4. Нам остается только добавить это значение к формальному параметруa.
a += b
Для проверки правильности работы программы выведем значение локальной переменной b, используя процедуруprint.
print("Sub Test4 b=", b)
End Sub
Теперь рассмотрим вызывающую (главную) программу. В ней мы описываем локальную целочисленную переменную a.
Dim a As Integer
Задаем начальное значение этой переменной.
a = 2
Очищаем окно списка от результатов предыдущих запусков программы.
lstA.Items.Clear()
Выводим поясняющий текст.
lstA.Items.Add("Static")
С помощью процедуры printвыводим значение переменнойa,
print("Main prog. a=", a)
Затем пять раз вызываем процедуру Test4для изменения переменной a. После каждого вызова процедуры печатаем значение переменнойaс помощью процедурыPrint.
Test4(a)
print("Main prog. a=", a)
Test4(a)
print("Main prog. a=", a)
Test4(a)
print("Main prog. a=", a)
Test4(a)
print("Main prog. a=", a)
Test4(a)
print("Main prog. a=", a)
Пример работы программы приведен на рис. 73. Проанализируем полученные результаты. Первым выводится начальное значение переменной a. Оно равно двум. Затем управление передается в процедуру Test4. В ней определяется значение переменнойb. Так как это первое обращение к процедуре, то оно задается равным единице. Соответственно значение переменной a увеличивается на единицу и становится равным трем. При следующем обращении к процедуреTest4значение переменнойbбудет уже равно двум. Следовательно, значение переменнойaувеличится на два и будет равно пяти. При третьем обращении к этой же подпрограмме мы получим значение переменнойbравное трем и, соответственно, значение переменнойaстанет равно восьми. На четвертом шаге алгоритма переменнаяbравна четырем, а значение переменнойaбудет равно 12. Наконец после пятого обращения к процедуреTest4мы получаем, что переменнаяbравна пяти, а в переменнойaзаписано значение 17. Таким образом, мы видим, что значениеStatic-переменнойbсохраняется между двумя вызовами подпрограммыTest4, хотя переменнаяbне является глобальной.
Рис. 73.Static-переменные
Приложения. Полные тексты всех рассматриваемых программ