Инструменты пользователя

Инструменты сайта


howto:arrays

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
howto:arrays [2014/12/04 17:55]
asv [Двумерные массивы с текстовыми индексами] Добавил ссылки
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:conditional|'IF [#​условие]:​ [операторы] ELSE [операторы]']]+      * [[help:cycle|'LOOP ... WHILE ... STEP ...']]
       * [[help:​main|'​*NL [$текст]'​]]       * [[help:​main|'​*NL [$текст]'​]]
-      ​* [[help:​jump|'​JUMP [$метка]'​]] +      * [[help:​arrays|'​ARRPOS(...)']]
-      ​* [[help:​arrays|'​ARRPOS([#​начало],​[$имя_массива],​[значение])']]+
  
  
Строка 247: Строка 253:
  
 </​sxh>​ </​sxh>​
 +
 +В данном примере использованы функции:​
 +
 +      * [[help:​dynamical|'​DYNAMIC [$код],​[параметр 1],​[параметр 2], …']]
 +
  
 ---- ----
 [[howto:​start|Назад:​ Как сделать]] [[howto:​start|Назад:​ Как сделать]]
howto/arrays.1417715723.txt.gz · Последние изменения: 2014/12/04 20:55 (внешнее изменение)