Документация по Clarion


DIM (размерность массива)


DIM(измерение,....,измерение)

измерение Числовая константа,
которая задает количество
элементов в данном измерении массива.

Атрибут DIM объявляет
перемнную-массив. Такая
переменная повторяется
столько раз, сколько указано в


параметрах ИЗМЕРЕНИЕ.
Многомерные массивы можно
рассматривать как вложенные
одномерные. Каждое измерение
массива имеет соответствующий
индекс. Таким образом,
обращаясь к переменной -
элементу трехмерного массива,
надо указать три индекса. Хотя
на число измерений не
накладывается ограничений, но
размер массива не должен
превышать 65,520б.С атрибутом DIM
можно использовать следующие
типы данных:

SHORT REAL STRING CSTRING PSTRING
ULONG USHORT SREAL DATE TIME

Индексы однозначно
определяют конкретный элемент
массива. Список индексов
содержит индексы для каждого
ИЗМЕРЕНИЯ массива. В списке,
индексы отделяются друг от
друга запятыми, а весь список
заключается в квадратные
скобки ([ ]). Индекс может быть
числовой константой,
выражением или функцией. Если
надо обратиться ко всему
массиву целиком, то надо
использовать метку этого
массива без списка индексов.
Структура GROUP - особый случай.
Каждый уровень вложенности
добавляет индексы и GROUP и ее
переменным. Данные, описанные в
GROUP можно использовать точно
так же, как и собственно GROUP.
Пример:
Screen GROUP !Текст на экране
Row GROUP,DIM(25) !25 строк
Pos GROUP,DIM(80) !Две тысячи знакомест
Attr BYTE !Байт атрибута
Char BYTE !Собственно символ
. . . !Завершаем все три группы
В предыдущей группе:
Screen это 4,000байтная GROUP
Row[1] это 160байтная GROUP
Pos[1,1] это 2хбайтная GROUP
Attr[1,1] это BYTE
Char[1,1] это BYTE
Month STRING(10),DIM(12) !Размерность для месяца - 12
CODE
CLEAR(Month) !Весь массив заполнить пробелами
Month[1] = 'January' !Заполнить массив названиями
Month[2] = 'February'
MonthE3] = 'March'
См. также: MAXIMUM
Массивы как
параметры процедур и функций
Массив можно передать в PROCEDURE
или FUNCTION.
Прототип, описанный в
MAP-структуре должен описывать
тип данных "массив" как
параметр-переменную
("передается по адресу") с
пустым списком индексов.
Вызывающий оператор может
передать массив в ROCEDURE или
FUNCTION.
Пример:
PROGRAM
MAP
MainProc
AddCount(*LONG[,],*LONG[,]) !Передаем 2 двумерных
. !масива типа LONG
CODE
MainProc
MainProc PROCEDURE
TotalCount LONG,DIM(10,10)
CurrentCnt LONG,DIM(10,10)
CODE
AddCount(TotalCount,CurrentCnt) !Вызывая процедуру, переда-
!ем ей массивы
AddCount PROCEDURE(Tot,Cur) ! Процедуре нужны два массива
CODE
LOOP I# = 1 TO MAXIMUM(Tot,1) !Цикл по первому индексу
LOOP J# = 1 TO MAXIMUM(Tot,2) !Цикл по второму индексу
Tot[I#,J#l += Cur[I#,J#] ! увеличить TotalCount на
. . ! CurrentCnt
CLEAR(Cur) !Очистить массив CurrentCnt
RETURN
См. также: , , MAXIMUM

Содержание раздела