Здесь показаны различия между двумя версиями данной страницы.
| Следущая версия | Предыдущая версия | ||
|
howto:arrays [2014/12/03 19:58] newsash перенесено из help:arrays |
howto:arrays [2024/12/13 10:36] (текущий) aleks_versus |
||
|---|---|---|---|
| Строка 3: | Строка 3: | ||
| ====Двумерные массивы с числовыми индексами==== | ====Двумерные массивы с числовыми индексами==== | ||
| - | Пример симуляции двумерного массива | + | Реализация двумерного массива через одномерный требует от нас самого малого: понять, как соотносятся координаты ячеек с шириной двумерного массива. Для этого давайте взглянем на формулу: |
| + | |||
| + | <sxh qsp> | ||
| + | N = x + y * WIDTH | ||
| + | </sxh> | ||
| + | |||
| + | Здесь ''N'' - это номер ячейки одномерного массива, ''WIDTH'' - ширина двумерного массива, а ''x'' и ''y'' — координаты ячейки в двумерном массиве. | ||
| + | |||
| + | Допустим наш двумерный массив должен иметь ширину 6 и высоту 8 ячеек. Нумерация ячеек как по оси ''x'' так и по оси ''y'' начинается с нуля. Таким образом номер ячейки с координатами ''0,0'' в одномерном массиве будет: | ||
| + | |||
| + | <sxh qsp> | ||
| + | N = 0 + 0 * 6 = 0 | ||
| + | </sxh> | ||
| + | |||
| + | Обратите внимание, высота массива в формуле не учитывается, а значит по высоте массив можно растягивать произвольно, используя всё ту же формулу с шириной 6 ячеек. Однако если мы изменим ширину двумерного массива, индексы одномерного массива в пересчёте на координаты ячеек двумерного изменятся. | ||
| + | |||
| + | Для понимания, как работает эта формула ознакомьтесь с примером симуляции двумерного массива через одномерный: | ||
| <sxh qsp> | <sxh qsp> | ||
| ! Индексы i1 0..8 | ! Индексы i1 0..8 | ||
| - | i1_max=9 | + | local i1_max=9 |
| ! Индексы i2 0..5 | ! Индексы i2 0..5 | ||
| - | i2_max=6 | + | local i2_max=6 |
| - | ! Заполнение данных массива | + | ! Заполнение данных массива |
| - | i1=0 | + | loop local i1 = 0 while i1 < i1_max step i1 += 1: |
| - | :ПрыгЗадатьМассив1 | + | loop local i2 = 0 while i2 < i2_max step i2 += 1: |
| - | i2=0 | + | $двумерный_массив[i1*i2_max+i2]='[<<i1>>,<<i2>>]' |
| - | :ПрыгЗадатьМассив2 | + | end |
| - | $ДвумерныйМассив[i1*i2_max+i2]='[<<i1>>,<<i2>>]' | + | end |
| - | i2+=1 | + | |
| - | if i2<i2_max : Jump 'ПрыгЗадатьМассив2' | + | |
| - | i1+=1 | + | |
| - | if i1<i1_max : Jump 'ПрыгЗадатьМассив1' | + | |
| + | ! Вывод данных массива | ||
| + | loop local i1 = 0 while i1 < i1_max step i1 += 1: | ||
| + | loop local i2 = 0 while i2 < i2_max step i2 += 1: | ||
| + | *p $двумерный_массив[i1*i2_max+i2]+' ' | ||
| + | end | ||
| + | *nl | ||
| + | end | ||
| - | ! Вывод данных массива | + | *nl |
| - | i1=0 | + | |
| - | :ПрыгВыводМассива1 | + | |
| - | *Nl | + | |
| - | i2=0 | + | |
| - | :ПрыгВыводМассива2 | + | |
| - | *P $ДвумерныйМассив[i1*i2_max+i2]+' ' | + | |
| - | i2+=1 | + | |
| - | if i2<i2_max : Jump 'ПрыгВыводМассива2' | + | |
| - | i1+=1 | + | |
| - | if i1<i1_max : Jump 'ПрыгВыводМассива1' | + | |
| - | *Nl | + | |
| !{Результат | !{Результат | ||
| Строка 51: | Строка 59: | ||
| !Получение индексов массива через функцию ARRPOS | !Получение индексов массива через функцию ARRPOS | ||
| - | $Поиск='[2,5]' | + | local $Поиск = '[2,5]' |
| - | i1=ARRPOS('$ДвумерныйМассив',$Поиск)/i2_max | + | local i1 = ARRPOS('$двумерный_массив',$Поиск)/i2_max |
| - | i2=ARRPOS('$ДвумерныйМассив',$Поиск) mod i2_max | + | local i2 = ARRPOS('$двумерный_массив',$Поиск) mod i2_max |
| - | if ARRPOS('$ДвумерныйМассив',$Поиск)<>-1 : | + | if ARRPOS('$двумерный_массив',$Поиск)<>-1 : |
| - | *Nl $Поиск+'=[<<i1>>,<<i2>>]' | + | *Nl $Поиск + '=[<<i1>>,<<i2>>]' |
| else | else | ||
| *Nl 'Элемент не найден' | *Nl 'Элемент не найден' | ||
| Строка 64: | Строка 72: | ||
| [2,5]=[2,5] | [2,5]=[2,5] | ||
| } | } | ||
| - | |||
| </sxh> | </sxh> | ||
| + | В данном примере использованы функции: | ||
| + | * [[help:cycle|'LOOP ... WHILE ... STEP ...']] | ||
| + | * [[help:main|'*NL [$текст]']] | ||
| + | * [[help:arrays|'ARRPOS(...)']] | ||
| Строка 189: | Строка 199: | ||
| </sxh> | </sxh> | ||
| + | В данном примере использованы функции: | ||
| + | * [[help:arrays|'ARRSIZE([$имя])']] | ||
| + | * [[help:arrays|'ARRPOS([#начало],[$имя_массива],[значение])']] | ||
| + | * [[help:arrays|'KILLVAR [$название массива],[#индекс элемента]']] | ||
| + | * [[help:strings|'VAL([$стр])']] | ||
| + | * [[help:strings|'MID([$стр],[#начало],[#длина])']] | ||
| + | * [[help:strings|'LEN([$стр])']] | ||
| ====Массив переменных==== | ====Массив переменных==== | ||
| Строка 237: | Строка 253: | ||
| </sxh> | </sxh> | ||
| + | |||
| + | В данном примере использованы функции: | ||
| + | |||
| + | * [[help:dynamical|'DYNAMIC [$код],[параметр 1],[параметр 2], …']] | ||
| + | |||
| ---- | ---- | ||
| [[howto:start|Назад: Как сделать]] | [[howto:start|Назад: Как сделать]] | ||