[Alimir_BootModal_Login]

Внутренний язык программирования 1С 8.3 для начинающих программистов: массивы в 1С

Автор уроков и преподаватель школы: Владимир Милькин

Сегодня мы познакомимся с новым типом данных языка 1С, который называется Массив.

Массивы в языке 1С

Что такое массивы и зачем они вообще нужны программисту?

Давайте представим, что у нас есть 4 разных числа. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. К примеру: 25, 84, 31 и 96. Если бы мы захотели использовать их в своей программе, то нужно было бы дать имя каждому из чисел. А что если хранить их все вместе, под одним общим именем, к примеру, СлучайныеЧисла. И обращаться к ним как СлучайныеЧисла0СлучайныеЧисла1, СлучайныеЧисла2 и так далее.

Значений много, а имя одно. И чтобы получить конкретное значение мы бы указывали имя и порядковый номер (начиная с нуля). Это и был бы массив.

Ещё полезно представлять себе массив как шкаф, у которого множество нумерованных ящиков (начиная с нуля). Шкаф - это массив, а ящики - это номера. Содержимое ящиков - элементы массива. Доступ к содержимому конкретного ящика осуществляется по имени шкафа и номеру ящика.

В языке 1С это будет выглядеть так:

СлучайныеЧисла = Новый Массив(4); // завели массив для хранения 4 чисел
СлучайныеЧисла[0] = 25; // поместили в ящик №0 первое число 
СлучайныеЧисла[1] = 84; // поместили в ящик №1 второе число 
СлучайныеЧисла[2] = 31; // и так далее
СлучайныеЧисла[3] = 96;

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

В массивах можно хранить значения разных типов, а не только числа:

РазличныеЗначения = Новый Массив(3); // массив для хранения 3 значений
РазличныеЗначения[0] = 100; // поместили в ящик №0 число 
РазличныеЗначения[1] = "Солнечный день."; // поместили в ящик №1 строку
РазличныеЗначения[2] = '19991231'; // поместили в ящик №2 дату

В ящики массива  значения можно не только класть, но и доставать:

Сообщить(РазличныеЗначения[0]); // выведем содержимое ящика №0
Сообщить(РазличныеЗначения[1]); // выведем содержимое ящика №1
Сообщить(РазличныеЗначения[2]); // выведем содержимое ящика №2

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

Для Шаг = 0 По 2 Цикл // делаем цикл от 0 до 2
    Сообщить(РазличныеЗначения[Шаг]); //обращаемся к ящику массива по номеру
КонецЦикла;

Задание №30. Необходимо ввести от пользователя 5 чисел, найти их сумму и вывести результат.

Давайте решим эту задачу двумя способами.

Сначала без использования массива:

Число1 = 0;
Число2 = 0;
Число3 = 0;
Число4 = 0;
Число5 = 0;
ВвестиЧисло(Число1);
ВвестиЧисло(Число2);
ВвестиЧисло(Число3);
ВвестиЧисло(Число4);
ВвестиЧисло(Число5);
СуммаЧисел = Число1 + Число2 + Число3 + Число4 + Число5;
ОткрытьЗначение("Сумма чисел равна " + СуммаЧисел);

А теперь с использованием массива:

Числа = Новый Массив(5); // объявили массив с 5 ящиками
Для Шаг = 0 По 4 Цикл
    ВвестиЧисло(Числа[Шаг]); // в каждый ящик вводим число
КонецЦикла;
СуммаЧисел = 0; // в этом имени будем накапливать сумму чисел
Для Шаг = 0 По 4 Цикл // пробегаемся циклом от 0 до 4
    СуммаЧисел = СуммаЧисел + Числа[Шаг]; // суммируем числа из массива
КонецЦикла;
ОткрытьЗначение("Сумма чисел равна " + СуммаЧисел);

Вроде бы сэкономили всего три строки. А если бы нужно было ввести не 5, а 100 чисел?

Задание №31. Переделайте приведенный выше пример, чтобы вводилось 10 чисел и находилось произведение.

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся

При помощи массивов можно решать достаточно сложные задачи. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Задание №32. Необходимо ввести от пользователя 5 чисел, найти наименьшее из них и вывести его.

Решение будет таким:

МассивЧисел = Новый Массив(5); // объявим массив на 5 ящиков
 
Для Шаг = 0 По 4 Цикл // пробежимся от 0 до 4
    ВвестиЧисло(МассивЧисел[Шаг]); // в каждый ящик положим число
КонецЦикла;
 
// изначально будем считать, что первый элемент самый маленький
НаименьшееЧисло = МассивЧисел[0]; 
 
// пробегаемся по всем значениям массива
// кроме нулевого, ведь нулевой элемент
// изначально принят нами за наименьший
Для Шаг = 1 По 4 Цикл
    // если в массиве есть число меньшее, чем НаименьшееЧисло
    Если МассивЧисел[Шаг] < НаименьшееЧисло Тогда 
        // тогда его и делаем новым наименьшим числом
        НаименьшееЧисло = МассивЧисел[Шаг];
    КонецЕсли;
КонецЦикла;
 
ОткрытьЗначение("Наименьшее из введенных чисел равно " + НаименьшееЧисло);

Разберитесь с этим примером и выполните его на компьютере для различных значений.

Идём далее. Обратите внимание на то, что во всех примерах выше мы создаём массив сразу с нужным количеством ящиков. Например:

МассивНа5Ящиков = Новый Массив(5);

Это означает, что у этого массива есть ящики под номерами 0, 1, 2, 3, 4.

А, что если мы бы захотели объявить пустой массив? Это делается вот так:

ДругойМассив = Новый Массив; // мы не указали никакого числа в скобках

Если мы сразу после объявления пустого массива попытаемся обратиться к одному из его ящиков, то получим ошибку:

Сообщить(ДругойМассив[0]); // ОШИБКА!!! Массив пока не содержит ящиков!

В пустой массив ящики нужно сначала добавить, причём сразу указывая их значения:

ДругойМассив.Добавить(123); // первый ящик
ДругойМассив.Добавить(456); // второй ящик
ДругойМассив.Добавить(789); // третий ящик

И вот теперь мы можем обращаться к этим ящикам по их номерам (помните, что в 1С массивы нумеруются с нуля):

Сообщить(ДругойМассив[0]); // выведет 123
Сообщить(ДругойМассив[1]); // выведет 456
Сообщить(ДругойМассив[2]); // выведет 789

Кстати, чтобы в любой момент узнать количество ящиков в массиве, воспользуемся командой Количество. Её нужно вызывать через точку после имени массива:

Сообщить(ДругойМассив.Количество()); // выведет 3

Пройдите тест

Начать тест

Задание №33. Необходимо ввести от пользователя 7 чисел, найти наибольшее из них и вывести его. Задание решается по аналогии с предыдущим. Это первая по-настоящему серьезная задача, которую вам предстоит решить. Не жалейте времени и усилий, чтобы справиться самостоятельно.

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся