# 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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00100/00100/00012.-redaktirovanie-main.scm.-peremennye-chast-3.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
