Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Ввод элементов массива



For inti = 1 to 10

If intArray(intI) > 0 Then

intResult = intArray(intI) Exit For

End If Next

Теперь в переменной intl 'содержится значение индекса 'найденного элемента массива

Работа с массивами

Массивом называется упорядоченная последовательность эле­ментов одного типа, обращение к которым осуществляется при помощи его имени и индекса (т. е. порядкового номера элемента). Как правило, работа с элементами массива выполняется в циклах, где в качестве индекса выступает счетчик цикла.

У каждого массива определены нижняя и верхняя границы, в пределах которых может изменяться значение индекса. По умол­чанию нижней границей любого массива является 0. Объем памя­ти, который требуется для массива, равен произведению байтов, выделяемых для одной переменной соответствующего типа, на количество его элементов.

Существует две разновидности массивов: статические и ди­намические.

Статические массивы. При объявлении такого массива зна­чения его верхней и нижней границ не могут быть изменены в программе.

Данный вид массивов описывается в программе так же, как и переменные - при помощи одного из служебных слов: Dim, Pri­vate, 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.018 с)...