- •Введение
- •Структура программы на vbScript
- •Переменные
- •Подтипы данных и функции преобразования типов
- •Константы
- •Встроенная функция вывода данных MsgBox
- •Встроенная функция ввода данных InputBox
- •Комментарии
- •Непрерывные строки
- •Операторы и операции
- •Пример 4
- •Пример 5
- •Пример 6
- •Пример 7
- •Пример 8
- •Пример 9
- •1.4 Задачи для самостоятельного решения
- •Логические операции
- •Оператор условного перехода: If … Then
- •2.3 Демонстрационные примеры Пример 1
- •Пример 2
- •Пример 3
- •Пример 4
- •Пример 5
- •Пример 6
- •Пример 7
- •2.4 Задачи для самостоятельного решения
- •Лабораторная работа 3. Операторы цикла в программах на vbscript
- •3.1 Цель работы
- •3.2 Теоретические сведения
- •For…Next (цикл со счетчиком)
- •Как выбрать, какой из циклов использовать в программе?
- •Пример 10
- •Пример 11
- •Пример 12
- •Пример 13
- •Пример 14
- •Пример 15
- •Пример 16
- •3.4 Задачи для самостоятельного решения
- •Передача параметров с помощью ключевых слов ByVal и ByRef
- •Функции
- •Пример 4
- •Пример 5
- •4.4 Задачи для самостоятельного решения
- •Лабораторная работа 5. Программирование алгоритмов при помощи рекурсивных процедур и функций
- •5.1 Цель работы
- •5.2 Теоретические сведения
- •5.3 Демонстрационные примеры Пример 1
- •Пример 2
- •Пример 3
- •Пример 4
- •5.4 Задачи для самостоятельного решения
- •Лабораторная работа 6. Массивы
- •6.1 Цель работы
- •6.2 Теоретические сведения
- •Перебор элементов массива
- •6.3 Демонстрационные примеры Пример 1
- •Пример 2
- •Пример 3
- •Пример 4
- •Пример 5
- •Пример 6
- •Пример 7
- •Пример 8
- •6.4 Задачи для самостоятельного решения "Заполнение" массивов
- •Массивы. Исследование и поиск
- •Модификация массивов
- •Лабораторная работа 7. Алгоритмы поиска в регулярном типе данных. Простейшие классические алгоритмы. Сортировка в массиве
- •7.1 Цель работы
- •7.2 Теоретические сведения
- •Сортировка обменом
- •Сортировка выбором
- •Сортировка включениями
- •Сортировка бинарными включениями
- •Шейкер-сортировка
- •7.3 Демонстрационные примеры Пример 1
- •Пример 2
- •Пример 3
- •Пример 4
- •Пример 5
- •Пример 6
- •Пример 7
- •Пример 8
- •Пример 9
- •Пример 10
- •7.4 Задачи для самостоятельного решения
- •Лабораторная работа 8. Строковый тип данных в программах на vbscript
- •8.1 Цель работы
- •8.2 Теоретические сведения
- •Другие функции необходимые для работы со строками
- •Основные функции для работы с датой и временем:
- •8.3 Демонстрационные примеры Пример 1
- •Пример 2
- •Пример 3
- •Пример 4
- •Пример 5
- •Пример 6
- •Пример 7
- •Пример 8
- •Пример 9
- •8.4 Задачи для самостоятельного решения Модификаторы
- •“Вычеркиватели” (частный случай модификаторов)
- •Наблюдатели (предикаты)
- •Подсчет
- •Поиск в словах
- •Литература
- •Данчул а.Н. Информатика: Учебник. – м.: рагс , 2004 г. - 528 с.
- •Содержание
Перебор элементов массива
Для перебора всех элементов массива (коллекции), например при выводе на экран, очень полезен специальный тип цикл:
For each VarName in ArrName
…
next
где:
ArrName – массив для перебора
VarName – некоторая переменная, куда будут попадать по очереди элементы массива ArrName
Например: (печать всех элементов массива на экран)
For each incl in Arr1
Msgbox incl
next
Одномерные массивы хорошо подходят для представления простых списков данных. Однако часто бывает необходимо представить таблицы данных в программах с организацией данных в формате строк и столбцов, подобно ячейкам в таблицах. Для этого существуют двумерные массивы или матрицы. Двухмерный массив можно представить как таблицу:
Таблица 11– Двухмерный массив
|
0-й столбец |
1-й столбец |
2-й столбец |
3-й столбец |
4-й столбец |
0-ая строка |
11.2 |
1 |
6 |
9 |
5.05 |
1-ая строка |
43 |
13 |
11 |
7 |
90 |
2-ая строка |
8 |
55 |
12.09 |
11 |
9.14 |
3-ая строка |
11.01 |
4 |
22.9 |
0 |
23 |
Размерность матрицы – <это количество строк> на <количество столбцов> матрицы. В данном примере размерность матрицы 4 на 5. Если размерность матрицы N на N, то такая матрица называется квадратной. Главная диагональ квадратной матрицы – последовательность элементов, находящихся на воображаемой линии, соединяющей левый верхний и правый нижний углы квадратной матрицы. Побочная диагональ квадратной матрицы – последовательность элементов, находящихся на воображаемой линии, соединяющей правый верхний и левый нижний углы квадратной матрицы.
Объявление двумерного массива имеет вид:
Dim NameArray1 (N, M)
где: 1) Dim - служебное слово;
2) NameArray1 - имя массива;
3) N, M - индексы последнего элемента в данном массиве
Для доступа к данным, хранящимся в определённом элементе двумерного массива, следует указать имя массива с последующими числами, называемыми индексами элемента. Местоположение каждого элемента в матрице характеризуется двумя индексами. Первый индекс обозначает номер строки, в которой находится элемент, второй – номер столбца. Нумерация начинается с нуля. Индекс всегда заключается в круглые скобки. Например, если матрица имеет имя Mat1, то следующий оператор присваивает переменной x значение i-го элемента матрицы Mat1:
x= Mat1(i,j), где i, j – индексы нужного элемента двумерного массива Mat1
Пусть данные, хранящиеся в Таблице 1, символизируют матрицу Mat1. Тогда элемент матрицы Mat1(2,3) равен числу 11.
Пример:
Задача:
Расположить в памяти компьютера двухмерный массив:
-
12.1
11
5.1
4
7
34
11
12.1
47
11
18
13
34
8
7
3
51
12
1
6
Программа:
Dim A (3, 4)
A(0,0)= 1 : A(0,1)= 1 : A(0,2)= 1 : A(0,3)= 1 : A(0,4)= 1
A(1,0)= 1 : A(1,1)= 1 : A(1,2)= 1 : A(1,3)= 1 : A(1,4)= 1
A(2,0)= 1 : A(2,1)= 1 : A(2,2)= 1 : A(2,3)= 1 : A(2,4)= 1
A(3,0)= 1 : A(3,1)= 1 : A(3,2)= 1 : A(3,3)= 1 : A(3,4)= 1
В VBScript можно работать не только с одномерными и двумерными, но и n-мерными массивами (n<60). Какова величина n, столько индексов и используется для определения местоположения элемента в массиве. Работа с массивами, имеющими 4 или более измерений, быстро становится запутанной. Но чаще всего в программировании используют одно-, двух- и трёхмерные массивы.
До настоящего времени мы рассматривали массивы, элементы которых имели числовые или строковые значения. Но на самом деле, элементами массивов могут быть и данные любых других типов, в том числе и массивов.
Рассмотрим массив Mas2:
-
1
2
3
4
5
6
7
8
9
10
11
12
Данный массив, безусловно, является двумерным или (другое название) матрицей. Однако мы его также можем себе представить в качестве массива массивов, а именно: одномерного массива, каждым элементом которого является одномерный массив.
Объявление массива массивов Mas2 производится следующим образом:
dim Mas2 (2) ' объявление одномерного массива
' 0-му элементу одномерного массива присваивается одномерный массив, состоящий из
' элементов: 1, 2, 3, 4
Mas2 (0)=Array(1, 2, 3, 4)
' 1-му элементу одномерного массива присваивается одномерный массив, состоящий из
' элементов: 5, 6, 7, 8
Mas2 (1)=Array(5, 6, 7, 8)
' 2-му элементу одномерного массива присваивается одномерный массив, состоящий из
' элементов: 9, 10, 11, 12
Mas2 (2)=Array(9, 10, 11, 12)
Пусть дан трёхмерный массив Mas3 (2, 2, 3), заполненный единицами. Данный массив мы также можем представить как массив массивов:
dim Mas3 (2, 2, 3)
Mas2 (0)=Array (Array(1, 1, 1, 1), Array(1, 1, 1, 1), Array(1, 1, 1, 1))
Mas2 (1)=Array (Array(1, 1, 1, 1), Array(1, 1, 1, 1), Array(1, 1, 1, 1))
Mas2 (2)=Array (Array(1, 1, 1, 1), Array(1, 1, 1, 1), Array(1, 1, 1, 1))
Точно так же любой многомерный массив мы можем представить как массив массивов.
Для доступа к данным, хранящимся в определённом элементе массива массивов, следует указать имя массива с последующими числами, называемыми индексами элемента, причём каждый индекс должен быть в круглых скобках:
x=Mas4 (2)(3)
До настоящего времени, все многомерные массивы, рассмотренные нами, имели одинаковое число элементов в каждой строке и одинаковое количество элементов в каждом столбце. То есть (если говорить о двумерных или трехмерных массивах) все матрицы имели прямоугольный вид, а трёхмерные массивы напоминали параллелепипед. Однако следует упомянуть о том, что существуют и “неровные” (нерегулярные) массивы. Нерегулярная матрица имеет, например, следующий вид:
1
2 3
4 5 6
7 8 9 10
Использование нерегулярных многомерных массивов не рекомендуется, однако иногда они бывают весьма полезны. Например, если нужно обработать очень большой двухмерный массив, который редко заполнен (то есть в котором многие элементы содержат нулевые значения), то нерегулярный массив мог бы быть подходящим решением проблемы.
Объявлять нерегулярную матрицу удобно с использованием массива массивов. Объявим вышеописанную нерегулярную матрицу:
Dim NeRegMat (3)
NeRegMat (0)=Array (1)
NeRegMat (1)=Array (2, 3)
NeRegMat (2)=Array (4, 5, 6)
NeRegMat (3)=Array (7, 8, 9, 10)
Не всегда разработчику программ заранее известен размер массива. В одних случаях это зависит от информации, вводимой пользователем в диалоге, в других - от количества записей в одной из многих разновидностей файлов, в третьих - от результатов некоторых вычислений и т.д. Так или иначе, это довольно частое явление. В VBScript имеется возможность работать с массивами, размеры которых не фиксированы объявлением. Такие массивы называют динамическими или массивами переменной размерности. Динамические массивы получили свое название, потому что можно изменять число элементов в массиве при выполнении программы. Динамический массив (в сочетании с «правильным» программированием) может увеличиваться или сжиматься (уменьшаться в размере), чтобы вмещать точно необходимое число элементов без напрасного расходования памяти. Для изменения размера динамического массива используйте оператор ReDim , описываемый далее.
Объявление динамического массива имеет следующий вид:
Dim DynArray1
где 1) Dim – служебное слово
2) DynArray – имя переменной массива
То есть, массивом может стать любая объявленная переменная
Далее в программе, где это необходимо, с помощью оператора ReDim указывают размерность массива. Например:
ReDim DynArray1 (5) ' для вектора
или
ReDim DynArray1 (3, 4) ' для матрицы
или
ReDim DynArray1 (2, 4, 7) ' трёхмерного массива
При каждом выполнении оператора ReDim значения всех элементов массива, сохранённые ранее, теряются. VBScript переустанавливает их в Empty (пустое значение) (для Variant-массивов), в нулевые значения (для числовых массивов), в строки нулевой длины (для строковых массивов).
Конечно, это, скорее всего, неудобно. Если вам нужно добавить к массиву новый элемент в конец массива, то есть увеличить размер массива, то нет смысла терять при этом, может быть, «с трудом полученные» ранее элементы. “К счастью”, с помощью ключевого слова Preserve в операторе ReDim можно указать, чтобы система сохранила значения массива, размеры которого изменяются.
В следующем примере размер вектора увеличивается на единицу от текущего размера с сохранением значений, ранее запомненных в массиве. Текущий размер массива определяется с помощью функции UBound (подробнее о ней будет рассказано ниже):
ReDim Preserve DynArray2 (UBound(DynArray)+1)
VBScript имеет функцию, которая освобождают пользователя от необходимости вручную отслеживать верхний предел массива – функция UBound. Эта функция возвращают верхнее граничное значение индекса массива.
Пример использования:
Dim A (3, 4) ' объявление матрицы А
MsgBox UBound (A, 1) ' вывод на экран максимального индекса в строке
MsgBox UBound (A, 2) ' вывод на экран максимального индекса в столбце
Ценное замечание
Для того чтобы определить является ли переменная массивом можно использовать функцию IsArray(ArrName), возвращающую «Истина», тогда и только тогда когда ArrName – массив.