Рейтинг - 0.0 (0)

Мы продолжаем дальше изучать переменные. Этот урок посвящён массивам. Что это такое и с чем его едят мы рассмотрим здесь.

Давайте представим опять школу, в школе есть "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 - закрывается контейнер

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

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

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

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

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

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

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

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

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

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

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

Для локальных переменныхДля глобальных переменных
var
0@: array 4 of integer
end

5@ = 0
0@(5@, 4i) = 50
5@ += 1
0@(5@, 4i) = 100
5@ += 1
0@(5@, 4i) = 1000
5@ += 1
0@(5@, 4i) = -15
var
$RITA:array 4 of integer
end

1@ = 0
$RITA[1@] = 50
1@ += 1
$RITA[1@] = 100
1@ += 1
$RITA[1@] = 1000
1@ += 1
$RITA[1@] = -15
var
$RITA:array 4 of integer
end

$RITA[0] = 50
$RITA[1] = 100
$RITA[2] = 1000
$RITA[3] = -15

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

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

МассивТип данныхПрефиксОписание
0@: array 4 ofintegeriЦелые значения, размер элемента: 4 байта
floatfДробные значения, размер элемента: 4 байта
short stringsСтроки с длиной до 7 символов включительно, размер элемента: 8 байт
long stringvСтроки с длиной до 15 символов включительно, размер элемента: 16 байт

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

var
0@: array 4 of float
end

5@ = 0
0@(5@, 4f) = -0.5

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

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


Yurko_UA   (13.08.12 08:54)
І що ж можна з ними зробити?

NARC   (13.08.12 14:18)
"это сплошная экономия переменных"

Дальше в уроках вроде есть пример их использования.

wmysterio   (22.04.14 17:51)
Исправлено.

Dyabda   (06.08.17 05:38)
Вопрос:
Массивы будут суммироваться? Например как показано в таблице:
5@ = 0
0@(5@, 4i) = 50
5@ += 1
0@(5@, 4i) = 100
5@ += 1
0@(5@, 4i) = 1000
5@ += 1
0@(5@, 4i) = -15
Это значит что локальный массив 0@ будет равен 1145?

0
wmysterio   (06.08.17 13:51)
Нет, не будут. В каждой ячейке будет своё значение. Конкретно здесь в 0@ будет записано число 50, в 1@ будет записано число 100, в 2@ будет записано число 1000 и в 3@ будет записано число -15.

Dyabda   (06.08.17 14:57)
Не совсем понял, т.е.
5@ = 0 это 0
5@ += 1 это 1
5@ += 1 это уже 2
А если 5@ += 2 Это уже будет 4?
И в итоге пример будет уже таким?

5@ = 0
0@(5@, 4i) = 50
5@ += 1
0@(5@, 4i) = 100
5@ += 2
0@(5@, 4i) = 1000

Я просто не совсем понимаю про эти индексы. В глобальных переменных всё попроще и понятнее
RITA[0]
RITA[1] и т.д. всё пронумеровано, а в локальных переменных это реализовано как-то по другому.

0
wmysterio   (06.08.17 17:53)
Глобальные массивы реализованы также, как и локальные. Только Sanny Builder упрощает работу с глобальными, используя скобки для индекса. В локальных массивах индексы нужно указывать через переменную, хотя есть трюк, который избавляет нас от использования индекса при инициализации элементов массива.

Dyabda   (07.08.17 03:23)
Объясните пожалуйста ещё:

5@ = 0 Это первый локальный массив
0@(5@, 4i) = 50
5@ += 1 Это второй
0@(5@, 4i) = 100
5@ += 2 Это третий и четвёртый? Раз +2.
0@(5@, 4i) = 1000

0
wmysterio   (07.08.17 09:53)
Читайте внимательней:
Цитата
0@ - имя перемененной, которая будет считаться массивом
4 - максимальное количество элементов массива
i - тип данных, который будет хранить массив
5@ - дополнительная переменная, которая будет служить индексом
5@ - это индекс, а не массив.

Dyabda   (07.08.17 12:48)
Прошу прощения за невнимательность, значит:
5@ = 0 Это первая переменная, то же самое что и $RITA[0]
0@(5@, 4i) = 50
5@ += 1 Это вторая то же самое что и $RITA[1]
0@(5@, 4i) = 100
5@ += 2 Это третья и четвёртая? Раз +2. Или можно делать только +1?
0@(5@, 4i) = 1000

0
wmysterio   (07.08.17 14:20)
5@ += 2 -> Только четвёртая, Вы же пропускаете 2 индекса а не 1.

Частично одно и тоже. Лучще прочитайте эту статью и не партесь с индексами при инициализации массива.

Dyabda   (08.08.17 13:10)
Вновь появился вопрос по этим переменным:
005C: 0@ += $RITA[1] // (int)
Вопрос:
Как данные переменные складываются, как сложить локальную переменную с индексом 3 с глобальной переменной с индексом 2?
И как сложить 2 локальные переменные с одинаковыми именами, но с разными индексами?

0
wmysterio   (08.08.17 16:28)
1) опкодом 005C:
Код
2@ = 3 // index
005C: 0@(2@,4i) += $RITA[2] // (int)

2) использовать 2 переменные для индекса:
Код
10@ = 1 // index #1
11@ = 3 // index #2
005A: 0@(10@,5i) += 0@(11@,5i)  // (int)
Вход на сайт

Поиск
Категории раздела
Мини-чат
Пожалуйста, все вопросы по скриптингу задавать на форуме!
Наш опрос
Какие моды Вы хотите видеть на сайте?
Всего ответов: 5
Активность на сайте
Пожертвования
Кошельки WebMoney:
U859420971000
R407741810602
Z331072372430
E314272616890
Друзья сайта
Полезные ресурсы
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Сегодня нас посетили:
wmysterio
Реклама