- •Уфимский государственный нефтяной технический университет
- •Основные типы алгоритмических структур
- •Программирование на Microsoft Visual Basic 6.0
- •Основные термины Visual Basic
- •Разработка приложений в vb6
- •Разработка программного кода Тип, имя и значение переменной в Visual Basic
- •Функции в языке vb
- •Ввод, вывод
- •Конструкции управления
- •Графические возможности языка vb
- •Анимация
- •Общие процедуры. Область видимости процедур
- •Работа с массивами
- •Работа с файлами в vb
- •Основы объектно-ориентированного визуального программирования
- •Классы объектов, экземпляры класса и семейства объектов
- •Свойства объектов
- •Методы объектов
- •События
- •Visual Basic. Среда разработки приложения
- •Элементы управления и их свойства
- •Font(Шрифт) –выдает диалоговое окно, в котором можно устанавливать имя шрифта для метки, начертание и размер.
- •Текстовые окна (элементы Text Box)
- •Командная кнопка
- •Переключатель
- •Комбинированный список
- •Линейки прокрутки
- •Графические элементы управления
- •Меню пользователя
- •Стандартные диалоговые окна
- •Работа с фокусом
- •Работа с буфером обмена в vb
- •Работа с мышью
- •Использование клавиатуры
Работа с массивами
Массивом называется упорядоченная последовательность элементов одного типа, обращение к которым осуществляется при помощи его имени и индекса (порядкового номера элемента). Как правило, работа с элементами массива выполняется в циклах, где в качестве индекса используется счетчик цикла.
Массивы
бывают одномерные (вектор
) и многомерными (матрица
размером
- двумерный массив). Отсюда видно, что
массив состоит из пронумерованной
последовательности элементов, номера
называются индексами, массив иначе
можно назвать переменной с индексом.
Массив обозначается ИмяМассива(Индекс)
Например: arrA(I), arrMatr(I,J)
Массивы могут быть различных типов: числовые, строковые, и т.д. Индексы являются целыми числами. Каждый элемент массива принимает собственное значение, например: arrA(5)=12.8 или arrStroka= “д”
У каждого массива определены нижняя и верхняя границы, в пределах которых может изменяться значение индекса. По умолчанию нижней границей любого массива является 0.
Существуют две разновидности массивов: статические и динамические.
Статические массивы
При объявлении такого массива значения его верхней и нижней границ не могут быть изменены в программе. Данный вид массива описывается с помощью ключевых слов Dim, Private, Public или Static.
Например: Dim arrA(9) As Byte Dim arrB(1 To 10) As Byte
В данном случае оба массива содержат одно и то же количество элементов одинакового типа, однако нумерация элементов arrA начинается с 0, а массива arrB с 1.
Динамические массивы
Применяются в том случае, когда количество элементов массива заранее неизвестно и будет определяться в процессе выполнения программы. Описание динамических массивов осуществляется в два этапа:
Объявить массив с использованием одного из ключевых слов, например Dim, но без указания размерностей
В нужном месте процедуры описать данный массив с требуемым значением размерности при помощи оператора ReDim
Например:
Dim arrA() As Byte ‘ описание типа массива
ReDim arrA(5) ‘ указание размерности
Заполнение массива
Для работы с массивом необходимо предварительно его заполнить, т.е. присвоить элементам массива определенные значения.
Заполнение с клавиатуры осуществляется с помощью функции InputBox.
Например: Заполнение двумерного массива размерностью
Dim intN, intM, intI , intJ As Integer
Dim strIJ As String
Dim arrA() As Single
Private Sub cmdok_Click()
intN = Val(txtn.Text)
intM = Val(txtm.Text)
ReDim arrA(1 To intN, 1 To intM)
Print "Исходные данные"
For intI = 1 To intN
For intJ = 1 To intM
strIJ = InputBox("Ввод элемента a" & intI & intJ & " :", "Ввод массива")
arrA(intI, intJ) = CSng(strIJ)
Next intJ
Next intI
For intI = 1 To intN
For intJ = 1 To intM
Print arrA(intI, intJ);
Next intJ
Next intI
Заполнение
с помощью оператора присваивания.
Например: Вычислить элементы квадратной
матрицы:
,
где
Dim arrA() As Single
Dim sngS As Single
Dim intI, intJ, intk, intN As Integer
Private Sub cmdC1_Click()
intN = Val(txtT1.Text)
intk = Val(txtT2.Text)
ReDim arrA(1 To intN, 1 To intN)
Print Tab(5), "матрица a"
For intI = 1 To intN
For intJ = 1 To intN
arrA(intI, intJ) = (-1) ^ (intI + intJ) * (intI * intN + intJ * intK)
Print " " + Format(arrA(intI, intJ), "##0.###");
Next intJ
Next intI
Поиск в массивах
Поиск в строковых массивах обычно реализуется в форме поиска индекса элемента массива, значение которого совпадает с заданным. Например, в строковом массиве, содержащем буквы русского алфавита, осуществляется поиск заданной буквы и определяется ее порядковый номер в алфавите. Алгоритм поиска представлен на рисунке 2. В числовых массивах обычно производится поиск наименьшего или наибольшего элемента. Например: пусть задан массив целых чисел: 13, 23, 4, 8, 19, 55. Определить наименьший элемент массива и его индекс. Алгоритм поиска представлен на рисунке 3.
Рис.2
Рис. 3
Сортировка массива
Рассмотрим задачу упорядочивания (сортировки) числового массива по возрастанию значений его элементов. Пусть у нас имеется целочисленный массив arrA(bytI), состоящий из N элементов и заполненный случайными числами. Идея алгоритма состоит в следующем. Проводим поиск минимального элемента в массиве среди элементов с первого по N-й и меняем его местами с элементом с индексом 1, т.е. ставим минимальный элемент на первое место, далее находим минимальный элемент среди элементов со 2-го по N-й и ставим его на второе место и так повторяем процедуру N-1 раз (последний элемент не с чем сравнивать). В результате массив упорядочивается. Программный модуль формы должен содержать: событийную процедуру заполнения массива случайными числами, событийную процедуру сортировки и общую процедуру поиска минимального элемента:
Dim bytA(1 To 10), bytMin, bytI, bytJ, bytK, bytR, bytN As Byte
'общая процедура поиска минимального элемента
Sub МинЭлемент(bytJ, bytN As Byte)
bytMin = bytA(bytI)
bytN = bytI
For bytJ = bytI + 1 To 10
If bytA(bytJ) < bytMin Then
bytMin = bytA(bytJ)
bytN = bytJ
End If
Next bytJ
End Sub
'заполнение массива
Private Sub cmd1_Click()
txt1.Text = ""
For bytI = 1 To 10
bytA(bytI) = Int(Rnd * 10)
txt1.Text = txt1.Text + CStr(bytA(bytI))
Next bytI
End Sub
'событийная процедура сортировки
Private Sub cmd2_Click()
txt2.Text = ""
For bytI = 1 To 9
'вызов общей процедуры поиска минимального элемента
Call МинЭлемент(bytJ, bytN)
'перестановка
bytR = bytA(bytI)
bytA(bytI) = bytA(bytN)
bytA(bytN) = bytR
'печать массива для каждого цикла перестановки
Next bytI
For bytK = 1 To 10
txt2.Text = txt2.Text + Str(bytA(bytK))
Next bytK
End Sub
Private Sub cmd3_Click()
End
End Sub
Так же упорядочивание элементов массива можно произвести с помощью вложенных циклов.
Задача. Упорядочить по возрастанию элементы одномерного массива arrX(bytI), где xi=sini+cosi Алгоритм решения следующий:
Примеры на работу с массивами
Задача 1. Определить число слов в тексте, если между словами один пробел.
Dim strA, strB As String
Dim intk, intl, inti As Integer
Private Sub cmd1_Click()
strA = txt1.Text
intl = Len(strA)
intk = 1
For inti = 1 To intl
strB = Mid(strA, inti, 1)
If strB = " " Then intk = intk + 1
Next inti
txt2.Text = CStr(intk)
End Sub
Private Sub cmd2_Click()
End
End Sub
Задача 2. Дана матрица n x m, элементы которой вводятся с клавиатуры. В матрице поменять местами первый и последний элементы и вычислить сумму элементов первого столбца.
Dim intN, intM, intI, intj As Integer
Dim strIJ As String
Dim arrA() As Single
Dim sngp, sngs As Single
Private Sub cmd2_Click()
End
End Sub
Private Sub cmd1_Click()
Cls
intN = Val(txt1.Text)
intM = Val(txt2.Text)
ReDim arrA(1 To intN, 1 To intM)
Print "Исходные данные"
For intI = 1 To intN
For intj = 1 To intM
strIJ = InputBox("Ввод элемента a" & intI & intj & " :", "Ввод массива")
arrA(intI, intj) = CSng(strIJ)
Print arrA(intI, intj);
Next intj
Next intI
sngp = arrA(1, 1)
arrA(1, 1) = arrA(intN, intM)
arrA(intN, intM) = sngp
Print "Первый и последний элементы поменялись местами"
For intI = 1 To intN
For intj = 1 To intM
Print arrA(intI, intj);
Next intj
Next intI
sngs = 0
For intI = 1 To intN
sngs = sngs + arrA(intI, 1)
Next intI
Print "Сумма элементов первого столбца ="; sngs
End Sub
