> For the complete documentation index, see [llms.txt](https://lessons.sannybuilder.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lessons.sannybuilder.com/00100/00100/00012.-redaktirovanie-main.scm.-peremennye-chast-3.md).

# 00012. Редактирование main.scm. Переменные (Часть 3)

Редактирование main.scm. Переменные (Часть 3)|Мы продолжаем дальше изучать переменные. Этот урок посвящён массивам. Что это такое и с чем его едят мы рассмотрим здесь.|wmysterio|wmysterio||||Давайте представим опять школу, в школе есть "11-А" класс. Опять в классе есть ученики. Довольно часто случается так, что в классе есть люди, в которых имена одинаковы. Что бы не путать мы часто называем их по фамилиям, что бы человек знал, что обращаются именно к нему. Также и переменные могут иметь свои "фамилии", то есть то, что отличает его от других. В программировании часто это называют массивом. Массив — набор однотипных данных. Массивы имеют не сложный синтаксис, так что напишем пример одного из них:

Допустим в нашем классе будут учится 4 девушки с именем Рита. Что бы различать их, мы проиндексируем их, то есть зададим какое то число, что будет их фамилией. В скриптинге обозначают их квадратными скобками:\*\*\[ \*\* и **]**, в середине которых находится число:

$RITA\[0]\
$RITA\[1]\
$RITA\[2]\
$RITA\[3]

В реальной жизни можно написать аналогичный пример:

$RITA\[Иваненко] (имеет индекс 0)\
$RITA\[Сагаева] (имеет индекс 1)\
$RITA\[Рейна] (имеет индекс 2)\
$RITA\[Пушкинка] (имеет индекс 3)

Как видим в скобках написаны фамилии. Думаю посмотрев оба примера вы уже поняли как их писать и имеете базовое представление о массивах. Каждый массив имеет ограничение, но ограничения ставим мы сами, то есть нам решать сколько человек с одинаковым именем будет в классе. Что бы сделать ограничение, нужно написать слово **var** и закрыть его командой **end**. В середине этого блока объявляются массивы. Делается это следующей формулой:

```
VAR
$RITA: array 10 of integer
END
```

Рассмотрим детальнее:

VAR - открывается контейнер\
$RITA - имя переменной, которая будет считаться массивом\
10 - максимальное количество элементов массива (максимальное количество фамилий, одинаковых фамилий не может быть )\
integer - тип данных, который будут хранится\
END - закрывается контейнер<br>

Написав всё это мы можем использовать переменные в своих целях.

Как и глобальные, так и локальные переменные могут быть массивами. Рассмотрим пример с локальными переменными. Объявлять массив так же само, а вот синтаксис совсем другой:

```
// объявление
VAR
0@: array 4 of integer
END

// использование
0@(5@, 4i)
```

Рассмотрим подробнее написанное:

0@ - имя перемененной, которая будет считаться массивом\
4 - максимальное количество элементов массива\
i - тип данных, который будет хранить массив\
5@ - дополнительная переменная, которая будет служить индексом<br>

Всё было бы хорошо, если не дополнительная переменная. Если в место неё написать числовой индекс, то возникнет ошибка: "имя индексной перемененной не найдено":

![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/49600884.png)

Поэтому нужно создать дополнительную переменную, которая будет служить нашим индексом. Сделаем это:

```
5@ = 0
0@(5@, 4i)
```

По структуре будет работать также, как и переменная "$RITA\[0]".

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

<table><thead><tr><th>Для локальных переменных</th><th>Для глобальных переменных</th></tr></thead><tbody><tr><td><p>```</p><p>var 0@: array 4 of integer end</p><p>5@ = 0 0@(5@, 4i) = 50 5@ += 1 0@(5@, 4i) = 100 5@ += 1 0@(5@, 4i) = 1000 5@ += 1 0@(5@, 4i) = -15</p><pre><code>&#x3C;/td>&#x3C;td>
</code></pre><p>var $RITA:array 4 of integer end</p><p>1@ = 0 $RITA[1@] = 50 1@ += 1 $RITA[1@] = 100 1@ += 1 $RITA[1@] = 1000 1@ += 1 $RITA[1@] = -15</p><pre><code>&#x3C;/td>&#x3C;td>
</code></pre><p>var $RITA:array 4 of integer end</p><p>$RITA[0] = 50 $RITA[1] = 100 $RITA[2] = 1000 $RITA[3] = -15</p><pre><code>&#x3C;/td>&#x3C;/tr>
&#x3C;/tbody>&#x3C;/table>

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

\<div class="alert alert-danger alert-dismissible" role="alert">
\<button type="button" class="close" data-dismiss="alert" aria-label="Close">\<span aria-hidden="true">\&times;\</span>\</button>
**ВАЖНО:** Локальные переменные имеют неприятное свойство - они "забирают" количество переменных под массив, из за этого правильным способом будет оградить себя от от использования некоторых переменных. В нашем случаи это переменные 0@ 1@ 2@ 3@ и 4\@. Количество элементов массива равняется количеству пропускаемых переменных и начинается от переменной, объявленной как массив. В таком случаи мы избегаем возможность переписать элемент массива.
\</div>

Рассмотрим основные типы данных, которые может хранить массив:

\<table class="table table-bordered">\<tbody>
\<tr>\<th>Массив\</th>\<th>Тип данных\</th>\<th>Префикс\</th>\<th>Описание\</th>\</tr>
\<tr>\<td rowspan="4">0@: array 4 of\</td>\<td>integer\</td>\<td>i\</td>\<td>Целые значения, размер элемента: 4 байта\</td>\</tr>
\<tr>\<td>float\</td>\<td>f\</td>\<td>Дробные значения, размер элемента: 4 байта\</td>\</tr>
\<tr>\<td>short string\</td>\<td>s\</td>\<td>Строки с длиной до 7 символов включительно, размер элемента: 8 байт\</td>\</tr>
\<tr>\<td>long string\</td>\<td>v\</td>\<td>Строки с длиной до 15 символов включительно, размер элемента: 16 байт\</td>\</tr>
\</tbody>\</table>

Давайте сделаем локальную переменную-массив дробных чисел:

</code></pre><p>var 0@: array 4 of float end</p><p>5@ = 0 0@(5@, 4f) = -0.5</p><pre><code>

\<div class="alert alert-danger alert-dismissible" role="alert">
\<button type="button" class="close" data-dismiss="alert" aria-label="Close">\<span aria-hidden="true">\&times;\</span>\</button>
**ВАЖНО:** Индекс всегда целое число, по этому дополнительную переменную следует объявлять тоже как целое. Идентификатор **всегда** начинается с 0 и увеличивается на единицу. Индекс не может быть больше максимального количества элементов, описанных в блоке "var".
\</div>

Вот так, по аналогии, вы можете создавать массивы любых доступных типов данных. Главное, что бы идентификатор типа совпадал с типом данных, описанного в блоке "var". Например: "float" и "f". ( смотрите таблицу выше, что бы не путали ).

Есть ещё типы данных и некоторые трюки, но о них я расскажу в следующих уроках.

\<div class="alert alert-warning alert-dismissible" role="alert">
\<button type="button" class="close" data-dismiss="alert" aria-label="Close">\<span aria-hidden="true">\&times;\</span>\</button>
**Примечание:** На самом деле глобальные массивы имеют тотже синтаксис, что и локальные ( $RITA($INDEX,4i) ), но Sanny Builder позволяет нам использовать упрощённый синтаксис.
\</div>|1392|1|0|49600884`png`446`133`400\`119\`\`||redaktirovanie\_main\_scm\_peremennye\_chast\_3|1498484960 </code></pre></td><td></td></tr></tbody></table>
