Массивы



        Массивы предназначены для объединения множества однотипных переменных. Доступ к переменных  массива осуществляется через индекс (номер в массиве). Массив объявляется с помощью оператора Dim.     

Dim  Array.l( 10 )

Вот так объявляется массив, состоящий из 11 переменных типа Long и имеющий имя Array. У вас может появится вопрос, почему 11 переменных, а не десять как задано в скобках? Дело в том, что нумерация начинается с нуля и поэтому получается что на самом деле в массиве на одну переменную больше чем задано.
Для доступа к переменной массива, нужно в скобках указать её индекс (номер) и прочитать либо записать информацию.

Dim Array.l(10) ; Создание массива
Array(2)=100 ; Запись в массив
x=Array(2) ; Чтение из массива
Debug x ; Отображаем число из переменной "x" в отладочном окне


В этом примере создаётся массив с именем Array, а затем в переменную с номером 2, записывается число 100. После чего производится чтение из этой же переменной. Результат помещается в переменную с именем Х.
В полной мере ощутить приемущество массива перед отдельными переменными можно в циклах, когда нужно при каждом выполнении кода получать доступ к требуемой переменной.

Dim Array.l(100)
For i=1 To 100
  Array(i)=i
Next i

В этом примере создаётся массив с 101 переменной типа Long, а затем в цикле в этот массив записываются данные, в нашем случае число из переменной i
Выше переведены примеры одномерных массивов, но при необходимости можно использовать многомерный массив. Для этого, при объявлении нужно задать размерность много мерного массива.
Например в этом примере создаётся 3-ёх мерный массив

Dim Array.l(10, 4, 8) ; Создание 3-ёх мерного массива
Array(2, 1, 1)=100 ; Запись в массив
x=Array(2, 1, 1) ; Чтение из массива
Debug x ; Отображаем число из переменной "x" в отладочном окне



При необходимости, можно изменить размерность массива (количество переменных в массиве) после того как массив был создан. Это выполняется с помощью оператора ReDim.

Dim Array.l(10) ; Создание массива
; Здесь находится код программы
; Вдруг выяснилось что 11 переменных это мало, надо как минимум 21
ReDim Array(20) ; Было 11 переменных в массиве, а стало 21.



Структуры


        В отличие от массива, переменные в структуре могут иметь разный тип.
Вот пример создания структуры

Structure Proba
  x.l
  y.l
  Text.s
EndStructure



Операторы Structure и EndStructure определяют начало и конец структуры. Между ними расположены переменные структуры Первые две переменные имеют тип 
Long, а последняя, тип String. Структуре присвоено имя Proba которое будет использоваться при её объявлении. 
Следующий пример содержит работу со структурой

Structure Proba
  x.l
  y.l
  Text.s
EndStructure

test.Proba ; Объявление структуры

; Запись в структуру
test\x=10
test\y=20
test\Text="Строка текста"

; Чтение из структуры и отображение данных в отладочном окне
Debug test\x
Debug test\y
Debug test\Text


В структурах допускаются вызовы других структур и статические (размер которых после объявления нельзя изменить) массивы переменных. Учтите, в структуре индексация массива начинается с нуля и чило элементов равно заданному. Другими словами если задан массив,  равный 100, то к нему можно обращаться по индексам 0...99

Structure Proba
  x.l[100]  ; Массив переменных
  z.POINT ; Объявление системной структуры с именем POINT
EndStructure

text.Proba ; Объявление структуры

; Запись в структуру
For i= 0 To 99
  text\x[i]=i
Next i

text\z\x=1
text\z\y=2

; Чтение из структуры и отображение данных в отладочном окне
Debug "Чтение из массива"
For i= 0 To 99
 Debug text\x[i]
Next i

Debug ""
Debug "Чтение из вложенной структуры POINT"

Debug text\z\x
Debug text\z\y



Кроме того, есть возможность добавить структуру в обычному массиву. Для этого в место типа переменных массива указываем имя структуры.

Structure Proba
  x.l
  y.l
  Text.s
EndStructure

; Создание массива с прикреплённой к нему структурой
Dim Array.Proba(2)

; Запись в структуру массива
Array(1)\x=1
Array(1)\y=2
Array(1)\Text="Текст"

; Чтение из структуры массива и отображение данных в отладочном окне
Debug Array(1)\x
Debug Array(1)\y
Debug Array(1)\Text



Динамически связанные списки


       В  динамически связанных списках в отличие от массивов, за переменными чётко не закреплены определённые индексы (номера, позиции). Кроме того, есть механизм, позволяющий раздвигать переменные и вклинивать тода одну или несколько переменных или наоборот, уничтожать несколько переменных, сдвинув остальные переменные. Всё это позволяет динамически изменять данные в списке.
Список создаётся с помощью оператора NewList.

NewList MyList.l()

Созданный список пока пустой, т. е. не содержащий элементов. Элементы добавляются с помощью функции AddElement. Созданный элемент становится текущим и именно с ним будет происходить работа. Если нужно обратится к определенному элементу, то его сначала нужно сделать текущим с помощью функции SelectElement. Получить номер текущего элемента можно с помощью функции  ListIndex.
Для того чтобы просмотреть содержимое всего списка, можно использовать специальный цикл, расчитанный только для работы со связанными списками. Этот цикл организуется с помощью операторов ForEach и Next.

NewList MyList.l() ; Создание списка

AddElement(MyList()) ; Добавляем элемент
MyList()=1
AddElement(MyList()) ; Добавляем элемент
MyList()=2
AddElement(MyList()) ; Добавляем элемент
MyList()=3
AddElement(MyList()) ; Добавляем элемент
MyList()=4

; В цикле просматриваем содержимое списка
ForEach MyList()
  Debug MyList()
Next


В этом примере, в список добавляется четыре элемента. Как только элемент добавлен, он становится текущим, с которым на данный момент можно работать.  В цикле ForEach и Next происходит последовательная астивация всех элементов, т. е. элементы последовательно начиная с нулевого, становятся активными.

В место тпа переменных списка, можно указать имя существующей структуры и тогда каждый элемент списка будет содержать до такой структуре.

Structure Proba
  x.l
  y.l
  Text.s
EndStructure

NewList MyList.Proba() ; Создание списка

AddElement(MyList()) ; Добавляем элемент
; Запись в структуру нулевого элемента списка
MyList()\x=1
MyList()\y=2
MyList()\Text="Текст"

; Чтение из структуры нулевого элемента списка и отображение данных в отладочном окне
Debug MyList()\x
Debug MyList()\y
Debug MyList()\Text




Учебник                Главная
Сайт создан в системе uCoz