Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
For inti = 1 to 10
If intArray(intI) > 0 Then
intResult = intArray(intI) Exit For
End If Next
Теперь в переменной intl 'содержится значение индекса 'найденного элемента массива
Работа с массивами
Массивом называется упорядоченная последовательность элементов одного типа, обращение к которым осуществляется при помощи его имени и индекса (т. е. порядкового номера элемента). Как правило, работа с элементами массива выполняется в циклах, где в качестве индекса выступает счетчик цикла.
У каждого массива определены нижняя и верхняя границы, в пределах которых может изменяться значение индекса. По умолчанию нижней границей любого массива является 0. Объем памяти, который требуется для массива, равен произведению байтов, выделяемых для одной переменной соответствующего типа, на количество его элементов.
Существует две разновидности массивов: статические и динамические.
Статические массивы. При объявлении такого массива значения его верхней и нижней границ не могут быть изменены в программе.
Данный вид массивов описывается в программе так же, как и переменные - при помощи одного из служебных слов: Dim, Private, Public или Static с последующим указанием типа после служебного слова As. При этом может быть указана как верхняя граница, так и обе границы одновременно, например:
Dim arrA(9) As Byte Dim arrB(l To 10) As Byte
В данном случае оба массива содержат одно и то же количество элементов одинакового типа. Однако нумерация элементов аггА начинается с нуля, в то время как нумерация arrB - с еди-
ницы. Для явного указания границ следует использовать служебное слово То, в то время как при описании стандартного массива.
с нумерацией элементов от нуля необходимо просто указать значение верхней границы.
Следует отметить, что значения границ не должны выходить за пределы диапазона, используемого для типа Long, в противном случае компилятор выдаст ошибку переполнения Overflow.
Заполнение элементов массива, как правило, выполняется в, цикле, например:
Dim arrA(l То 10) As Integer Dim intl As Byte For intl = 1 to 10
arrA(intI) = intl^2 Next
В качестве значений элементов массива могут выступать как значения определенного типа, так и другие массивы, которые могут иметь разные типы. При этом в последнем случае объявляемый массив должен иметь тип Variant.
Массивы бывают одномерными и многомерными. Для описания многомерных массивов используются конструкции, аналогичные рассмотренным, однако отличие состоит в том, что границы размерностей указываются через запятую, например:
Dim аrrА(4, 4) As Byte Dim arrB(l To 5, 1 To 5) As Byte
В данном примере объявленные массивы являются двумерными и содержат одинаковое количество элементов, нумерация которых, однако, отличается: аггА нумеруется начиная с нуля, arrB — начиная с единицы.
При объявлении многомерных массивов следует иметь в виду, что объем занимаемой ими памяти пропорционален количеству элементов, поэтому не следует использовать массивы с большим количеством размерностей.
Динамические массивы. Используются в том случае, когда количество элементов массива заранее неизвестно и будет определяться в процессе выполнения программы. Как следствие, после того как работа с динамическим массивом в программе была выполнена, можно освободить память, которую он занимает. Описание динамических массивов осуществляется в два этапа:
1. Объявить массив с использованием одного из служебных слов, например Dim, но без указания размерности (или размерностей).
2. В нужном месте процедуры описать данный массив с требуемым значением для размерности при помощи оператора ReDim.
Например:
Dim arrA() As Byte ' Описание типа массива
ReDim аrrА(5) ' Указание размерностей
Следует отметить, что при указании значений для размерностей динамического массива оператором ReDim его тип не может быть изменен. В том случае, если в данном операторе тип будет указан, то он должен совпадать с тем, который объявлен в операторе Dim, иначе на стадии компиляции приложения будет выдано сообщение об ошибке.
Например:
Dim arrA() As Byte ' Тип Byte
ReDim arrA(5) As Byte ' Тип Byte
ReDim arrA(10) As Integer ' Ошибка
При помощи оператора ReDim можно устанавливать любые значения границ и количество размерностей, а также менял» любой из установленных параметров, как в сторону увеличения, так и в сторону уменьшения. Например:
Dim arrA() As Byte
ReDim arrA(5)
' Диапазон: (0 to 5)
ReDim arrA(2, 2)
' Диапазон: (0 to 2, 0 to 2)
ReDim arrA(l To 4)
' Диапазон: (1 to 4)
ReDim arrA(3, 3, 1 То 3)
' Диапазон: (0 to 3, 0 to 3, 1 to 3)
В качестве значений как верхней, так и нижней границы могут быть использованы не только числа, но и переменные целого типа, например: |
Dim intl As Integer
Dim arrA() As Integer
intl =10
ReDim arrA(intI)
Необходимо иметь в виду, что при каждом выполнении оператора ReDim все значения элементов массива, которые до этого в нем хранились, будут потеряны, так как данный оператор обнуляет все элементы в соответствии с их типом (см. табл. 6.14).
Для того чтобы значения, имеющиеся в массиве, не пропали при его переопределении, следует использовать служебное слово Preserve, например:
Dim intl As Integer
Dim arrA() As Integer
ReDim arrA(l To 10)
For intl = 1 To 10
arrA(intI) = intl^2
Next
ReDim Preserve arrA(1 To 15)
Однако в том случае, когда граница не увеличивается, а уменьшается, значения "лишних" элементов все равно будут потеряны.
Следует обратить особое внимание на тот факт, что при помощи ключевого слова Preserve может быть изменена только верхняя граница последней размерности массива, попытка изменения других границ, например:
ReDim Preserve arrA(15)
приведет к ошибке при выполнении программы. В частности приведенный оператор изменяет не только верхнюю, но и нижнюю границу аrrА.
В Visual Basic существует возможность определения значений нижней и верхней границы массива, для чего используются функции LBound и Ubound... соответственно.
Например: I
Dim intLow As Integer, intHigh As Integer
Dim arrA(-10 To 10) As Integer
intLow = LBound(arrA) ' infcLow = -10
intHigh = UBound(arrA) ' intHigh = 10
функцию UBound удобно использовать, например, в том случае, когда текущее значение верхней границы массива неизвестно, и при этом ее необходимо увеличить на определенное число.
Важным преимуществом при использовании динамических массивов является то, что занимаемая ими память может быта освобождена по окончании их обработки с помощью оператора Erase, в отличие от статических массивов.
Например:
Dim inti As Integer
Dim arrA() As Integer
intl=1000
ReDim arrA(intI)....' Память для arrA: 1000 * 2 = 2000 байт
Erase arrA....' Память для arrA: 0 байт
Работа со строками
Строками называются такие переменные, которые предназначены для работы с текстом или с какой-либо символьной информацией, обозначаемой в тексте программы в двойных кавычках. Для описания строковых переменных используется тип String.
Например:
Dim strA As String
stzA = "Строковая переменная "
Существует две разновидности строк:
Строки переменной длины. Данный тип используется поумолчанию, при этом длина объявленной строки может изменяться в
процессе выполнения программы, т. е. строка не занимает фиксированный объем памяти. В рассмотренном выше примере была использована строка переменной длины.
Строки постоянной длины. Используются в том случае, когда требуется заранее определить длину объявляемой строки, причем ее длина не может изменяться при выполнении программы, т. е. строка постоянной длины занимает фиксированный объем памяти. Объявляется строка постоянной длины так же, как и переменная, но после служебного слова String указывается количество символов (т. е. байтов), которые она будет занимать.
Например:
Dim strA As String * 20
strA = "Строковая переменная"
При выполнении первой из указанных команд для строки strA в памяти будет выделено место в 20 байт.
Следует отметить тот факт, что значение, присваиваемое строке переменной длины, может состоять как из меньшего, так и из большего количества символов, которые выделены для переменной. В первом случае в конец строки вместо недостающих символов автоматически будут добавлены пробелы, а во втором - удалятся лишние символы в конце строки.
Например:
Dim strA As String * 20
Dim strB As String * 10
Dim strC As String * 25
stxA = "Строковая переменная" ' Результат: "Строковая переменная"
strB = strA ' Результат: "Строковая "
strC = strA ' Результат: "Строковая переменная "
Для удаления лишних пробелов в начале и конце строки используются следующие функции: LTrim, RTrim или Trim. Например:
Dim strA As String
Dim strB As String
strA = " Строковая переменная "
strB = LTrim(strA) ' Результат; "Строковая переменная "
strB = RTrim(strA) ' Результат: " Строковая переменная"
strB = Trim(strA) ' Результат: "Строковая переменная"
Таким образом, LTrim удаляет все лишние пробелы в начале строки, RTrim - все пробелы в конце строки, и, наконец, функция Trim удаляет их как в начале, так и в конце строки.
При объединении двух и более строк используется операция, называемая конкатенацией, которая реализуется с помощью оператора &.
Например:
Dim strA As String
Dim strB As String
Dim strC As String
strA = "Строковая "
strB = "переменная"
strC = strA & strB ' Результат: "Строковая переменная"
Помимо оператора &, объединять строки можно также при помощи сложения: +, например:
strC = strA + strB
Такая операция будет верной в том случае, когда объединяемые величины являются строками. С другой стороны, при объединении числовой и строковой величин возникнет ошибка несовпадения типов.
Например:
Dim strA As String
Dim strB As Integer
Dim strC As String
strA = "X"
strB =1
strC = strA & strB ' •Результат: "XI"
strC = strA + strB ' Результат: ОШИБКА
В том случае, когда необходимо преобразовать величину числового типа в строку, следует использовать функцию Str, указывая в качестве параметра изменяемую переменную.
Например:
Dim strA As String
Dim curB As Currency
Dim strC As String
strA = "X = "
curB = 45.77
strC = strA + Str(curB) ' Результат: "X = 45.77"
Следует отметить, что в случае использования функции Str самый первый символ в получаемой строке отводится для знака преобразуемого числа. Следовательно, если переменная содержала положительное значение, то результатом операции преобразования будет строка, первым символом которой будет пробел. Поэтому в рассмотренном выше примере последнюю операцию можно записать следующим образом:
strC = strA + LTrim(Str(curB))
Для создания или добавления строки пробелов заданной длины используется функция Space, параметром которой является задаваемое количество пробелов, например:
Dim strA As String
Dim strB As String
Dim strC As String
strA = "Строковая"
strB = "переменная"
strC = strA & Space(5) & strB ' Результат; "Строковая переменная"
В данном примере при помощи функции Space между объединяемыми строками было добавлено 5 пробелов.
В языке Visual Basic существует возможность изменения строки таким образом, чтобы все используемые в ней буквы были преобразованы либо в верхний регистр (ВСЕ ПРОПИСНЫЕ), либо в нижний (все строчные). Для этих целей используются, соответственно, функции UCase и LCase.
Например:
Dim strA As String
Dim strB As String
strA = "Строковая Переменная"
strB = Ucase(strA) ' Результат: "СТРОКОВАЯ ПЕРЕМЕННАЯ"
strB = LCase(strA) ' Результат: "строковая переменная"
Для того чтобы заменить какую-либо часть строки или определенные символы, следует использовать функцию Replace. Например:
Dim strA As String
Dim strB As String
strA = "Строковая Переменная"
strB = Replace(strA, "овая", "а") ' Результат; " Строка Переменная"
strB = Replace(strA, "o", "O") ' Результат: " СтрОкОвая Переменная"
Кроме обязательных параметров - результирующей, заменяемой и заменяющей строк — могут также использоваться необязательные параметры, а именно: позиция в строке для начала замены и количество возможных изменений. Следует отметить,чтопри этом часть строки, которая расположена перед позицией начала замены, будет удалена.
Например:
strB = Replace(strA, "е", "Е", 10, 3) ' Результат: "ПЕрЕмЕнная"
strB = Replace(strA, "о", "О", 1, 1) ' Результат: " СтрОковая Переменная"
Для определения количества символов в строке применяется функция Len, при этом в качестве параметра указывается рассматриваемая строка.
Например:
Dim strA As String
Дата публикования: 2015-01-23; Прочитано: 304 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!