1с 8 массив

Содержание
  1. Работа с массивом в 1С 8.3 на примерах
  2. Создание массива
  3. Добавление элементов в массив
  4. Получение значения элемента по индексу
  5. Поиск в массиве 1С
  6. Присвоение значений элементам массива
  7. Как узнать количество элементов массива (размер массива)
  8. Перебор массива 1С
  9. Перебор всех элементов двумерного массива
  10. Удаление элементов из массива
  11. Как разложить строку в массив
  12. Пример преобразования массива в список значений
  13. Пример преобразования массива в таблицу значений
  14. Сортировка массива 1С разными способами
  15. Как свернуть массив в 1С
  16. Работа с массивами в 1С 8
  17. 1. Как создать массив нужного размера
  18. 2. Как создать пустой массив и добавить в него элементы
  19. 3. Как создать многомерный массив
  20. 4. Как создать фиксированный массив
  21. Функции работы с массивами
  22. Функция ВГраница()
  23. Функция Вставить()
  24. Функция Добавить()
  25. Функция Количество()
  26. Функция Найти()
  27. Функция Очистить()
  28. Функция Получить()
  29. Функция Удалить()
  30. Функция Установить()
  31. Как обойти массив
  32. Как обойти многомерный массив
  33. Сортировка массива
  34. Сравнение двух массивов
  35. Массив в 1С: общие сведения и некоторые примеры использования
  36. Методы массива
  37. Одномерные и многомерные массивы
  38. Использование массива
  39. Варианты сортировки массива в 1С 8.x
  40. Классическая сортировка массива в 1с через список значений
  41.  Алгоритм “Быстрая сортировка”
  42. Алгоритм “Сортировка выбором”
  43. Алгоритм “Сортировка пузырьком”
  44. Алгоритм “Шейкерная сортировка”
  45. Алгоритм “Гномья сортировка”
  46. Алгоритм “Сортировка вставками”
  47. Алгортим “Сортировка слиянием”
  48.  
  49. Автоматизация бизнеса на платформе 1С:Предприятие 8
  50. 1.    Описание из синтакс-помощника
  51. 2.    Как сформировать новый Массив
  52. 3.    Способы заполнения Массива
  53. 4.    Обход Элементов Коллекции
  54. Изучаем массивы в 1С 8.3 (8.2)
  55. Перебор элементов массива
  56. Количество элементов массива
  57. Добавление элементов массива
  58. Многомерный массив
  59. Статьи о других универсальных коллекциях значений в 1С

Работа с массивом в 1С 8.3 на примерах

1с 8 массив

Объекты типа массив в 1С 8.3 представляют собой совокупность упорядоченных значений любого типа, в том числе и типа «массив», что в свою очередь позволяет организовывать многомерные массивы. Идентификация значений осуществляется по индексам, нумерация которых начинается с «0».

Создание массива

Синтаксис:

Новый Массив(,…,) 

Примеры:

//Одномерный массив ПустойМассив = Новый Массив();//Пустой массив Массив2 = Новый Массив(2);//массив из двух элементов //Двумерный массив в 1С 8.3 ДвумерныйМассив = Новый Массив(2,3);//Каждый из двух элементов                       // двумерного массива является массивом // из трёх элементов //Фиксированный (неизменный) массив ФиксМассив = Новый ФиксированныйМассив(Массив2);                              

Добавление элементов в массив

Примеры:

Массив = Новый Массив();//Создадим массив для примера //Метод Добавить().Добавляет элемент в конец массива Массив.Добавить(“знач1”);//Добавили элемент с типом строка Массив.Добавить();//Добавили пустой элемент в массив

Результат:

//Метод Вставить().Вставляет значение в массив по индексу. Массив.Вставить(0);//Вставили пустой элемент в начало массива. Тем самым //произошла переиндексация всего массива. Элемент с индексом //[0] стал [1], [1] стал [2]

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания – попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Результат:

Массив.Вставить(5,”знач6″);//Вставили элемент со значением “знач6” по индексу [5]. //По недостающим индексам [3] и [4], произошло добавление //пустых элементов

Результат:

Получение значения элемента по индексу

Массив.Получить(5);//В скобках указываем индекс (число) желаемого элемента ДвумерныйМассив.Получить(0).Получить(0);

Поиск в массиве 1С

Массив.Найти(“знач6”);//В скобках указываем значение искомого элемента

Присвоение значений элементам массива

Примеры:

Массив.Установить(0,10);//Присвоили ранее созданному элементу с // индексом [0] значение “10”, тип число Массив[2] = “знач3”;//Присвоили ранее созданному элементу с индексом [2] //значение “знач3”, тип строка ДвумерныйМассив[0][0] = “ЗНАЧ”;//Присвоили ранее созданному элементу //с индексом [0][0] значение “ЗНАЧ”, тип строка

Как узнать количество элементов массива (размер массива)

Массив.ВГраница();//Получаем наибольший индекс элемента массива (число) Массив.Количество();//Получаем количество элементов в массиве (число)

Перебор массива 1С

Примеры:

//По индексу Для Индекс = 0 по Массив.ВГраница() Цикл Сообщить(Индекс); КонецЦикла; //По элементам Для Каждого Элемент Из Массив Цикл Сообщить(Элемент); КонецЦикла;

Перебор всех элементов двумерного массива

Примеры:

//По индексу Для ИндексСтр = 0 По ДвумерныйМассив.ВГраница() Цикл Для ИндексСтолбец = 0 По ДвумерныйМассив[ИндексСтр].ВГраница() Цикл Сообщить(ДвумерныйМассив[ИндексСтр][ИндексСтолбец]); КонецЦикла; КонецЦикла; //По элементам Для Каждого Строка Из ДвумерныйМассив Цикл Для Каждого Элемент Из Строка Цикл Сообщить(Элемент); КонецЦикла; КонецЦикла; 

Удаление элементов из массива

Примеры:

//Удаление элемента из массива по индексу Массив.Удалить(3);//В скобках указываем индекс (число) удаляемого элемента //Удаление всех элементов из массива Массив.Очистить();

Как разложить строку в массив

&НаКлиенте Процедура СтрокуВ_Массив(Команда) МассивСтрок = Новый Массив; Строка = “Строку в массив”; МассивСтрок = СтрРазделить(Строка, ” “); КонецПроцедуры

Результат:

Пример преобразования массива в список значений

&НаКлиенте Процедура МассивВ_СписокЗначений(Команда) Массив = Новый Массив(); Массив.Добавить(“знач1”); Массив.Добавить(“знач2”); Массив.Добавить(“знач3”); СЗ = Новый СписокЗначений;//Создаём список значений СЗ.ЗагрузитьЗначения(Массив);//Загрузка значений элементов массива в СЗ КонецПроцедуры

Результат:

Пример преобразования массива в таблицу значений

&НаКлиенте Процедура МассивВ_ТЗ(Команда) Массив = Новый Массив(); Массив.Добавить(1); Массив.Добавить(2); Массив.

Добавить(3); МассивВ_ТЗ_Сервер (Массив); КонецПроцедуры &НаСервере Процедура МассивВ_ТЗ_Сервер (Массив) ТЗ = Новый ТаблицаЗначений;//Создаём таблицу значений ТЗ.Колонки.Добавить(“НаборЧисел”); //Добавляем строки в ТЗ Для Индекс = 0 по Массив.ВГраница() Цикл НовСтрока = ТЗ.

Добавить(); КонецЦикла; ТЗ.ЗагрузитьКолонку(Массив,”НаборЧисел”);//преобразуем в таблицу значений ТЗизМассива = ТЗ;//результат КонецПроцедуры

Результат:

Сортировка массива 1С разными способами

Примеры:

//Через список значений &НаКлиенте Процедура СортироватьМассивЧерезСЗ(Команда) Массив = Новый Массив(); Массив.Добавить(“знач1”); Массив.Добавить(“знач2”); Массив.Добавить(“знач3”); СЗ = Новый СписокЗначений;//Создаём список значений СЗ.ЗагрузитьЗначения(Массив);//Загрузка значений элементов массива в СЗ СЗ.СортироватьПоЗначению(НаправлениеСортировки.Убыв);//Сортируем по убыванию СЗ.СортироватьПоЗначению(НаправлениеСортировки.Возр);//Сортируем по возрастанию Массив = СЗ.ВыгрузитьЗначения();//В массив КонецПроцедуры //Через таблицу значений &НаКлиенте Процедура СортироватьМассивЧерезТЗ(Команда) Массив = Новый Массив(); Массив.Добавить(1); Массив.Добавить(2); Массив.Добавить(3); ОтсортированныйМассив = СортироватьМассивЧерезТЗ_Сервер(Массив); КонецПроцедуры &НаСервере Функция СортироватьМассивЧерезТЗ_Сервер(Массив) ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить(“НаборЧисел”); //Добавляем строки в ТЗ Для Индекс = 0 по Массив.ВГраница() Цикл НовСтрока = ТЗ.Добавить(); КонецЦикла; ТЗ.ЗагрузитьКолонку(Массив,”НаборЧисел”);//Преобразуем в таблицу значений ТЗ.Сортировать(“НаборЧисел Убыв”);//Сортируем по убыванию ТЗ.Сортировать(“НаборЧисел Возр”);//Сортируем по возрастанию Массив = ТЗ.ВыгрузитьКолонку(“НаборЧисел”);//В массив Возврат Массив; КонецФункции

Как свернуть массив в 1С

Пример:

&НаКлиенте Процедура Массив(Команда) Массив = Новый Массив(); Массив.Добавить(“Яблоко”); Массив.Добавить(“Яблоко”); Массив.Добавить(“Банан”); Соответствие = Новый Соответствие; Для каждого Элемент Из Массив Цикл Соответствие.Вставить(Элемент); КонецЦикла; Массив.Очистить(); Для каждого КлючИЗначение Из Соответствие Цикл Массив.Добавить(КлючИЗначение.Ключ); КонецЦикла; КонецПроцедуры

Результат:

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Источник: https://programmist1s.ru/massivy-v-1s/

Работа с массивами в 1С 8

1с 8 массив

Массив в 1С — это набор некоторых значений. Значения в одном массиве могут быть различных типов.

Массив может быть получен в результате выполнения различных функций, например, ВыгрузитьКолонку() таблицы значений; в виде массива можно получить выделенные строки динамического списка и т.д. Можно создать массив и «вручную».

1. Как создать массив нужного размера

пМассив = новый Массив(4); //создали массив из 4 элементов

//Внесем значения элементов массива

пМассив[0] = “Мы”;

пМассив[1] = “создали”;
пМассив[2] = “новый”;
пМассив[3] = “массив”;

2. Как создать пустой массив и добавить в него элементы

пМассив = новый Массив; //создали пустой массив

//Внесем значения элементов массива

пМассив.Добавить(“Мы”);

пМассив.Добавить(“создали”);
пМассив.Добавить(“новый”);
пМассив.Добавить(“массив”);

3. Как создать многомерный массив

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

пМассив = новый Массив (4, 2); //создали  массив 4х2

//Внесем значения элементов массива, пронумеровав каждое слово

пМассив[0][0] = “1. “;

пМассив[0][1] = “Мы”;
пМассив[1][0] = “2. “;
пМассив[1][1] = “создали”;
пМассив[2][0] = “3. “;
пМассив[2][1] = “многомерный”;
пМассив[3][0] = “4. “;
пМассив[3][1] = “массив”;

4. Как создать фиксированный массив

Фиксированный массив отличается от обычного тем, что его нельзя изменять. Нельзя добавлять, удалять или менять значения элементов такого массива.

Фиксированный массив может быть получен из обычного:

пМассив = новый Массив;

пМассив.Добавить(“Мы”);

пМассив.Добавить(“создали”);
пМассив.Добавить(“новый”);
пМассив.Добавить(“массив”);

фМассив = новый ФиксированныйМассив(пМассив); // создали фиксированный массив

Функции работы с массивами

Работу функций будем рассматривать на примере одномерного массива пМассив, созданного выше и состоящего из 4 элементов:

  1. «Мы»
  2. «создали»
  3. «новый»
  4. «массив».

Функция ВГраница()

Получает наибольший индекс элемента массива. Он всегда на единицу меньше количества элементов массива.

Индекс = пМассив.ВГраница() // 3;

Функция Вставить()

Вставляет какое-то значение в элемент массива с указанным индексом. Последующие элементы массива сдвигаются

пМассив.Вставить(3, “новое значение”) //Теперь массив состоит из 5 элементов

Функция Добавить()

Создает новый элемент в конце массива и вставляет туда заданное значение

пМассив.Добавить(“.”) // добавили точку пятым элементов массива;

Функция Количество()

Возвращает количество элементов массива.

пМассив.Количество(); // 4

Функция Найти()

Ищет в массиве заданный элемент. Если находит, возвращает его индекс. Если не находит, возвращает Неопределено.

Индекс = пМассив.Найти(“массив”); // 3
Индекс = пМассив.Найти(“строка, которой не было”); // Неопределено

Функция Очистить()

Удаляет все значения из массива.

Функция Получить()

Получает значение массива по индексу. Эту же задачу можно решить через [].

Значение=пМассив.Получить(3) // “массив”
Значение=пМассив[3]; // “массив”

Функция Удалить()

Удаляет элемент массива по индексу

Функция Установить()

Устанавливает значение элемента массива по индексу. Работает аналогично [].

пМассив.Установить(3, “массив!”);
пМассив[3]=”массив!”;

Как обойти массив

Можно обойти все элементы массива без указания индекса:

Для каждого ЭлементМассива из пМассив Цикл
Сообщить(ЭлементМассива);
КонецЦикла;

Можно при обходе использовать индекс:

Для Индекс=0 по пМассив.ВГраница() Цикл
Сообщить(пМассив[Индекс]);
КонецЦикла;

Как обойти многомерный массив

Многомерный массив обходится с помощью тех же циклов (см. выше), но один цикл должен быть вложен в другой.

мМассив=новый массив(3,4);

Для каждого Элемент1 из мМассив Цикл

Для каждого Элемент2 из Элемент1 Цикл
Сообщить(Элемент1);
КонецЦикла;
КонецЦикла;

Или с применением индексов.

мМассив=новый массив(3,4);

Для Индекс1=0 по мМассив.ВГраница() Цикл

Для Индекс2 по мМассив[Индекс1].ВГраница() Цикл
Сообщить(мМассив[Индекс1][Индекс2]);
КонецЦикла;
КонецЦикла;

Сортировка массива

Для сортировки массива нам потребуется вспомогательный объект с типом СписокЗначений.

СписокЗнач = новый СписокЗначений; // создаем список значений
СписокЗнач.ЗагрузитьЗначения(пМассив); // загружаем в список значения из массива
СписокЗнач.СортироватьПоЗначению(НаправлениеСортировки.

Возр); //сортируем по возрастанию
СписокЗнач.СортироватьПоЗначению(НаправлениеСортировки.Убыв); //или по убыванию
пМассив=СписокЗнач.

Выгрузить(); // выгружаем отсортированные значения обратно в массив

Сравнение двух массивов

Перед тем, как перейти к описанию функции сравнения, договоримся, что массивы считаются идентичными, если имеют одинаковое количество элементов и соответствующие элементы массивов равны. Тогда для сравнения можно использовать следующую функцию (кстати, такая функция уже присутствует в некоторых типовых конфигурациях):

Функция СравнитьМассивы(Массив1, Массив2)

Если Массив1.Количество()Массив2.Количество() Тогда

Возврат ЛОЖЬ; // Массивы не равны, сравнивать элементы нет смысла.
КонецЕсли;

Для Индекс=0 по Массив1.ВГраница() Цикл

Если Массив1[Индекс]Массив2[Индекс] Тогда
Возврат Ложь; //эти элементы не равны, значит и массивы не равны
КонецЕсли;
КонецЦикла;

Возврат Истина; // Если дошли до сюда, то массивы равны

КонецФункции

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

Источник: http://chel1C.ru/%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%D0%BC%D0%B8-%D0%B2-1%D1%81-8/

Массив в 1С: общие сведения и некоторые примеры использования

1с 8 массив

Понятие «массив» уже давно используется в программировании и, чаще всего, под ним понимают некоторую структуру в памяти, состоящую из последовательности элементов. Массив в 1С – самая простая из универсальных коллекций значений. Помимо массива к универсальным коллекциям относятся:

  1. Список значений (в отличие от массива у значений из списка есть представление, реализована возможность сортировки и интерфейсного представления коллекции);
  2. Таблица значений – коллекция, имеющая колонки для расширенного описания значения, подобную структуру можно получить, выполнив запрос;
  3. Дерево – очень похоже на таблицу, дополненную структурой подчиненности;
  4. Структура – динамический набор имен и значений переменных;
  5. Соответствие – подобно структуре, только переменные сопоставляются не строковым представлениям, а друг другу.

Методы массива

Программное создание экземпляра массива происходит с помощью с помощью оператора Новый() (Рис.1).

Рис.1

Как видно из приведенного примера массивы можно создавать как с фиксированным количеством элементов, так и без этого ограничения.

Прежде, чем приступать к обсуждению методов  работы с массивом, давайте определимся с двумя понятиями:

  • Индекс элемента – можно представить как порядковый номер отдельно взятого значения;
  • Количество элементов – число элементов в коллекции, его определение доступно с помощью метода Количество().

Важно знать: в 1С подсчет количества значений любой коллекции начинается с 1, а раздача индексов с 0, т.е первый элемент в массиве имеет индекс 0. Таким образом, обход коллекции с помощью цикла с итератором должен начинаться с 0 и заканчиваться количеством элементов минус 1, в противном случае система с помощью окна (Рис.2) уведомит о наступлении исключительной ситуации.

Рис.2

Любой объект конфигурации имеет свои методы для работы, массив не исключение, перечислим их с некоторой расшифровкой:

  • ВГраница() – с помощью метода можно получить максимальный индекс элемента, для пустого массива будет возвращено значение (-1);
  • Вставить() – этот метод имеет два параметра: индекс и значение, индекс указывает куда в массив вставить новый элемент, добавляемое значение может быть пустым;
  • Добавить() – этот метод вставки значения можно использовать, когда место размещения элемента непринципиально, с его помощью новые данные будут записаны в конец имеющегося массива;
  • Найти() – в случае успешного выполнения возвращает индекс указанного в скобках значения, в противном случае возвращает «Неопределено»;
  • Очистить() –очищает коллекцию;
  • Получить() – читает данные, расположенные в массиве по указанному индексу, можно заменить квадратными скобками [];
  • Удалить() – удаляет элемент с указанным индексом;
  • Установить() – заменяет данные в указанной ячейке массива.

Одномерные и многомерные массивы

В простейшем случае одномерный массив может содержать значения различных типов (Рис.3)

Рис.3.

Результат выполнения вышеприведенного кода представлен на Рис.4

Рис.4

Таким образом, мы получили одномерный массив, состоящий из строкового значения, ссылки на элемент справочника и даты. При этом при добавлении элементов мы использовали два различных метода Добавить() и Вставить(), если бы при добавлении даты мы использовали метод Добавить() наш результат имел бы несколько другой вид.

В старших классах средней школы дается представление о понятии двумерной матрицы. Это такой набор данных, каждый элемент которого имеет два индекса (в простейшем случае порядковый номер по вертикали и по горизонтали) именно она лучше всего иллюстрирует понятие двумерного массива.

Создавая подобную матрицу можно указать количество строк и столбцов, которые будут использованы.

Допустим, перед нами стоит задача создать массив из фамилии, имени и отчества двух сотрудников. С помощью кода (Рис.5) создаем соответствующий массив с фиксированным количеством столбцов и строк.

Рис.5

Для его обхода нам понадобится два цикла, в первом цикле мы обходим массив по строкам, во втором разбираем строку на элементы. Это можно сделать либо с помощью цикла «Для каждого …. Из» (Рис.6)

Рис.6

Либо с помощью цикла с итератором «Для … по» (Рис.7)

Рис.7

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

Использование массива

Массивы в 1С чаще всего используются для:

  1. Создания различных отборов используемых при работе с запросами и другими коллекциями значений;
  2. Передачи списков в качестве параметров между процедурами и функциями;
  3. Обмена данными с внешними компонентами, подключенными с использованием COM технологии.

Безусловно, это далеко неполный список того, в каких целях можно задействовать объект «Массив».

Источник: http://blog.it-terminal.ru/programmirovanie-1s/massiv-1s.html

Варианты сортировки массива в 1С 8.x

1с 8 массив

Самый оптимальны и быстрый способ сортировки, это выгрузить массив в “список значений” и отсортировать его методом этого объекта, в 99.9% случаев программисты используют именно этот метод.

Ниже рассмотрены другие способы сортировки, которые могут быть применены в некоторых специфичных задачах, например, недавно у меня была необходимость отсортировать массив состоящий из строк таблицы значений (сортировать надо было по одному из полей таблицы значений), быстрая сортировка была успешно применена.

Классическая сортировка массива в 1с через список значений

Передаем массив в список значений. Сортируем стандартным методом “Сортировать”. 

//Сортировка списком значений Функция СортировкаСпискомЗначений(Знач Массив) мСписокЗнч = Новый СписокЗначений; мСписокЗнч.ЗагрузитьЗначения(Массив); мСписокЗнч.СортироватьПоЗначению(НаправлениеСортировки.Возр); Возврат мСписокЗнч.ВыгрузитьЗначения(); КонецФункции

 Алгоритм “Быстрая сортировка”

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

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

В конце мы получаем множество отсортированных частей, которые необходимо просто склеить в 1 целое.  

//Алгоритм “Быстрая сортировка” Процедура БыстраяСортировка(мДанные,НижняяГраница,ВерхняяГраница) i = НижняяГраница; j = ВерхняяГраница; m = мДанные[Цел((i+j)/2)]; Пока Истина Цикл Пока мДанные[i] < m Цикл i = i + 1; КонецЦикла; Пока мДанные[j] > m Цикл j = j – 1; КонецЦикла; Если ij Тогда Прервать; КонецЕсли; КонецЦикла; Если НижняяГраница < j Тогда БыстраяСортировка(мДанные,НижняяГраница,j); КонецЕсли; Если i < ВерхняяГраница Тогда БыстраяСортировка(мДанные,i,ВерхняяГраница); КонецЕсли; КонецПроцедуры Процедура СортироватьМассив(Массив) НижняяГраница = 0; ВерхняяГраница = Массив.ВГраница(); БыстраяСортировка(Массив,НижняяГраница,ВерхняяГраница); КонецПроцедуры

Алгоритм “Сортировка выбором”

Является одним из самых простых алгоритмов сортировки массива. Смысл в том, чтобы идти по массиву и каждый раз искать минимальный элемент массива, обменивая его с начальным элементом неотсортированной части массива.

На небольших массивах может оказаться даже эффективнее, чем более сложные алгоритмы сортировки, но в любом случае проигрывает на больших массивах.

Число обменов элементов по сравнению с “пузырьковым” алгоритмом N/2, где N – число элементов массива.

Алгоритм:1. Находим минимальный элемент в массиве.2. Меняем местами минимальный и первый элемент местами.3. Опять ищем минимальный элемент в неотсортированной части массива4.

Меняем местами уже второй элемент массива и минимальный найденный, потому как первый элемент массива является отсортированной частью.

5.

Ищем минимальные значения и меняем местами элементы,пока массив не будет отсортирован до конца.

//Сортировка выбором Функция СортировкаВыбором(Знач Массив) Мин = 0; Для i = 0 По Массив.ВГраница() Цикл Мин = i; Для j = i + 1 ПО Массив.ВГраница() Цикл //Ищем минимальный элемент в массиве Если Массив[j] < Массив[Мин] Тогда Мин = j; КонецЕсли; КонецЦикла; Если Массив [Мин] = Массив [i] Тогда //Если мин. элемент массива = первому элементу неотс. части массива, то пропускаем. Продолжить; КонецЕсли; Смена = Массив[i]; //Производим замену элементов массива. Массив[i] = Массив[Мин]; Массив[Мин] = Смена; КонецЦикла; Возврат Массив; КонецФункции

Алгоритм “Сортировка пузырьком”

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

Примечательно то, что один из самых быстрых алгоритмов “Быстрый алгоритм” был разработан путем модернизации одного из самых худших алгоритмов “Сортировки пузырьком”.”Быстрая” и “Шейкерная” сортировки будут рассмотрены далее.

Смысл алгоритма заключается в том, что самые “легкие” элементы массива как бы “всплывают” , а самые “тяжелые” “тонут”. Отсюда и название “Сортировка пузырьком”

Функция СортировкаПузырьком(МассивЭлементов) // Количество просмотров массива – по количеству числа его элементов Для просмотр = 0 По МассивЭлементов.Количество()-1 Цикл // Собственно, просмотр массива Для индекс = 0 По МассивЭлементов.Количество()-1 Цикл // Если достигли конца массива то прервём цикл, // чтобы не выполнять условие ниже Если индекс = МассивЭлементов.Количество()-1 Тогда Прервать; КонецЕсли; // Сравнение элементов и их перестановка (если требуется) Если МассивЭлементов[индекс] > МассивЭлементов[индекс+1] Тогда СтаршийЭлемент = МассивЭлементов[индекс]; МладшийЭлемент = МассивЭлементов[индекс+1]; МассивЭлементов[индекс] = МладшийЭлемент; МассивЭлементов[индекс+1] = СтаршийЭлемент; КонецЕсли; КонецЦикла; КонецЦикла; Возврат МассивЭлементов; КонецФункции

Алгоритм “Шейкерная сортировка”

(Сортировка перемешиванием, Двунаправленная пузырьковая сортировка)

Алгоритм представляет собой одну из версий предыдущей сортировки – “сортировки пузырьком”. Главное отличие в том, что в классической сортировке пузырьком происходит однонаправленное движение элементов снизу – вверх, то в шейкерной сортировке сначало происходит движение снизу-вверху, а затем сверху-вниз.

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

В приведенном ниже примере, есть усовершенствование в шейкерной сортировке. В отличие от классической, используется в 2 раза меньше итераций.

//Сортировка перемешивание (Шейкер-Сортировка) Функция СортировкаПеремешиванием(Знач Массив) Для i = 0 ПО Массив.ВГраница()/2 Цикл нИтер = 0; конИтер = Массив.ВГраница(); Пока нИтер Массив[нИтер+1] Тогда Замена = Массив[нИтер]; Массив[нИтер] = Массив[нИтер + 1]; Массив[нИтер + 1] = Замена; КонецЕсли; нИтер = нИтер + 1;//Двигаем позицию на шаг вперед //Проходим с конца Если Массив[конИтер – 1] > Массив[конИтер] Тогда Замена = Массив[конИтер – 1]; Массив[конИтер-1] = Массив[конИтер]; Массив[конИтер] = Замена; КонецЕсли; конИтер = конИтер – 1;//Двигаем позицию на шаг назад КонецЦикла; КонецЦикла; Возврат Массив; КонецФункции

Алгоритм “Гномья сортировка”

Алгоритм так странно назван благодаря голландскому ученому Дику Груну.

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

По существу он смотрит на следующий и предыдущий садовые горшки: если они в правильном порядке, он шагает на один горшок вперёд, иначе он меняет их местами и шагает на один горшок назад. Граничные условия: если нет предыдущего горшка, он шагает вперёд; если нет следующего горшка, он закончил.

Вот собственно и все описание алгоритма “Гномья сортировка”. Что интересно, алгоритм не содержит вложенных циклов, а сортирует весь массив за один проход.

//Гномья сортировка Функция ГномьяСортировка(Знач Массив) i = 1; j = 2; Пока i < Массив.Количество() Цикл // Сравнение < - Сортировка по возрастанию, > – по убыванию Если Массив[i-1] i = j; j = j + 1; Иначе Замена = Массив[i]; Массив[i] = Массив[i – 1]; Массив[i – 1] = Замена; i = i – 1; Если i = 0 Тогда i = j; j = j + 1; КонецЕсли; КонецЕсли; КонецЦикла; Возврат Массив; КонецФункции

Алгоритм “Сортировка вставками”

Представляет собой простой алгоритм сортировки. Смысл заключается в том, что на каждом шаге мы берем элемент, ищем для него позицию и вставляем в нужное место.Элементарный пример: При игре в дурака, вы тянете из колоды карту и вставляете ее в соответствующее место по возрастанию в имеющихся у вас картах. Илив магазине вам дали сдачу 550 рублей- одна купюра 500, другая 50.

Заглядываете в кошелек, а там купюры достоинством 10,100,1000. Вы вставляете купюру достоинсвом 50р. между купюрами достоинством 10р и 100р, а купюру в 500 рублей между купюрами 100р и 1000р. Получается 10,50,100,500,1000 – Вот вами алгоритм “Сортировка вставками”.

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

//Сортировка вставками Функция СортировкаВставками(Знач Массив) Для i = 0 По Массив.ВГраница()-1 Цикл Ключ = i + 1; Замена = Массив[Ключ]; j = i + 1; Пока j > 0 И Замена < Массив[j - 1] Цикл Массив[j] = Массив[j - 1]; Замена = j - 1; Ключ = j - 1; j = j - 1; КонецЦикла; Массив[Ключ] = Замена; КонецЦикла; Возврат Массив; КонецФункции

Алгортим “Сортировка слиянием”

Интересный в плане реализации и идеи алгоритм. Смысл его в том, чтобы разбивать массив на подмассивы, пока длина каждого подмассива не будет равна 1. Тогда мы утверждаем, что такой подмассив отсортирован. Затем сливаем получившиеся подмассивы воедино, одновременно сравнивая и сортируя поэлементно значения подмассивов. 

//Сортировка слиянием Функция СортировкаСлиянием(Знач Массив) Если Массив.Количество() = 1 Тогда Возврат Массив; КонецЕсли; ТочкаРазрыв = Массив.Количество() / 2; лМассив = Новый Массив; прМассив = Новый Массив; Для Сч = 0 ПО Массив.ВГраница() Цикл Если Сч < ТочкаРазрыв Тогда лМассив.Добавить(Массив[Сч]); Иначе прМассив.Добавить(Массив[Сч]); КонецЕсли; КонецЦикла; Возврат Слияние(СортировкаСлиянием(лМассив),СортировкаСлиянием(прМассив)); КонецФункции Функция Слияние(массив1,массив2) a = 0; b = 0; слМассив = Новый Массив; Для Сч = 0 ПО (Массив1.Количество() + Массив2.Количество())-1 Цикл слМассив.Добавить(); КонецЦикла; Для i = 0 ПО (массив1.Количество() + массив2.Количество())-1 Цикл Если b < массив2.Количество() И a < массив1.Количество() Тогда Если (массив1[a] > массив2[b]) И (b < массив2.Количество()) Тогда слМассив[i] = массив2[b]; b = b + 1; Иначе слМассив[i] = массив1[a]; a = a + 1; КонецЕсли; Иначе Если b < массив2.количество() Тогда слМассив[i] = массив2[b]; b = b + 1; Иначе слМассив[i] = массив1[a]; a = a + 1; КонецЕсли; КонецЕсли; КонецЦикла; Возврат слМассив; КонецФункции

 

Алгортим “Сортировка Шелла”

 Алгоритм назван так в честь американского ученого Дональда Шелла. По своей сути этот алгоритм является усовершенствованным алгоритмом “Сортировка вставками”. Смысл алгоритма заключается в том, чтобы сравнивать не только элементы, стоящие рядом друг с другом, но и на некотором удалении.

Сначало выбирается Шаг – некий промежуток, через который будут сравниваться элементы массива на каждой итерации. Обычно его определяют так:
Для первой итерации Шаг = Цел(Массив.Количество()/2), для последующих Шаг = Цел(Шаг/2). Т.е.

постепенно шаг сокращается и когда Шаг будет равен 1 произойдет последние сравнение и массив будет отсортирован.

Пример:Дан массив (10,5,3,1,14,2,7,12).1. Шаг = 4.

Сортируем простыми вставками каждые 4 группы по 2 элемента (10,14)(5,2)(3,7)(1,12)

10,2,3,1,14,5,7,12

2. Шаг = 2 
Сортируем простыми вставками каждые 2 группы по 4 элемента (10,3,14,7)(2,1,5,12) 

3,1,7,2,10,5,14,12

3. Шаг = 1
Сортируем простыми вставками каждую 1 группу по 8 элементов.

 1,2,3,5,7,10,12,14 

//Сортировка Шелла Функция СортировкаШелла(Знач Массив) Шаг = Цел(Массив.Количество()/2); Пока Шаг > 0 Цикл i = 0; Пока i < (Массив.Количество() - Шаг) Цикл j = i; Пока j >= 0 И Массив[j] > Массив[j + Шаг] Цикл Замена = Массив[j]; Массив[j] = Массив[j + Шаг]; Массив[j + Шаг] = Замена; j = j – 1; Если ПрименитьОтображениеСортировки Тогда ОтобразитьДиаграммуСортировки(Массив); КонецЕсли; КонецЦикла; i = i + 1; КонецЦикла; Шаг = Цел(Шаг/2); ОбработкаПрерыванияПользователя(); КонецЦикла; Возврат Массив; КонецФункции

Источник: https://codexp.ru/zametki-po-1s/86-varianty-sortirovki-massiva-v-1s-8-x

Автоматизация бизнеса на платформе 1С:Предприятие 8

1с 8 массив

1.     Описание из синтакс-помощника

2.     Как сформировать новый Массив

3.     Способы заполнения Массива

4.     Обход Элементов Коллекции

Массив (тип значения 1С Массив) – это простейшая универсальная коллекция значений в информационной системе 1С, где элементы упорядочены по индексу (нумерация начинается с 0). Тип значения элементов может быть любой, включая тип значения Массив. Доступ к элементам массива осуществляется через индекс, по номеру которого можно получить доступ к значению элемента на платформе 1С 8.3. 

1.    Описание из синтакс-помощника

Доступность синтакс-помощника: Тонкий клиент 1С, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).

 Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}.

Имя типа XDTO: Array. 

2.    Как сформировать новый Массив

Чтобы сформировать новый Массив, нужно присвоить переменной типа значения «Массив». Каждый Элемент в таком Массиве 1С, получает тип значения «Неопределено». В параметрах создания можно указать, какой Массив хотите создать.

Для пустого Массива:

         МойНовыйМассив = Новый Массив();

Для создания одномерного Массива (одна колонка):

         МойНовыйМассив = Новый Массив(ЧислоЭлементов);

Для создания N-мерногоМассива, где каждый Элемент так же Массив:

         МойНовыйМассив = Новый Массив(ЭлементовПервогоУровня, ЭлементовВторогоУровня, …, ЭлементовN-Уровня);

В этом случае каждый Элемент первого уровня будет иметь тип значения Массив, внутри которого каждый Элемент второго уровня будет так же типом значения Массив и так далее, где на N-уровне Элементы будут с типом значения «Неопределено». Следовательно, количество Элементов в таком Массиве будет равно: ЭлементовПервогоУровня * ЭлементовВторогоУровня* … * ЭлементовN-Уровня

3.    Способы заполнения Массива

Существует несколько способов заполнения Массива.

1.     Метод «Добавить».

Добавляет Элемент в конец Массива:

МойНовыйМассив.Добавить(«Строка»)                         Поле типа Строка

МойНовыйМассив.Добавить(42)                                      Поле типа Число

МойНовыйМассив.Добавить(‘20190315123501’)          Поле типа Дата состав Дата и время

МойНовыйМассив.Добавить(‘20190315’)                        Поле типа Дата состав Дата

Также любому Элементу может быть присвоен тип значения «Массив». Например:

МойНовыйМассив.Добавить(Новый Массив)                     Поле типа Массив

2.     Метод «Вставить».

Следует отличать его от Метода «Добавить». Последний добавляет Элемент в конец Массива, а первый присваиваетновое значение Элементу:

МойНовыйМассив.Вставить(НомерИндекса,НовоеЗначениеЭлемента)

3.     Метод «Количество».

Посредством метода доступно получение количество Элементов в Массиве. Следует обратить внимание, что Количество будет всегда на единицу больше последнего значения Индекса:

МойНовыйМассив.Количество()

4.     Метод «Найти». Позволяет найти уникальный Элемент в Массиве, если такой элемент не будет найден, то возвращает значение «Неопределено»:

МойНовыйМассив.Найти(«Слово»)

МойНовыйМассив.Найти(42)

МойНовыйМассив.Найти(’20190315’)

5.     Метод «Очистить».

Позволяет удалить все Элементы Массива делая его пустым:

МойНовыйМассив.Очистить()

6.     Метод «Получить».

Позволяет получить значение Элемента по его Индексу:

МойНовыйМассив.Получить(ИндексЭлемента)

7.     Метод «Удалить».

Позволяет удалить Элемент из Массива по Индексу:

МойНовыйМассив.Удалить(ИндексУдаляемогоЭлемента)

8.     Метод «Установить».

Позволяет установить новое значение Элемента по Индексу, когда использование оператора [] (например,МойНовыйМассив[ИндексЭлемента]) невозможно.

МойНовыйМассив.Установить(ИндексЗаменяемогоЭлемента,НовоеЗначениеЭлемента)

9.     Метод «ВГраница».

Позволяет получить наибольший Индекс в Массиве. Если Массив пустой, то возвращает-1:

МойНовыйМассив.ВГраница   

4.    Обход Элементов Коллекции

Для данной Коллекции значений доступен обход Элементов Коллекции посредством оператора «Для каждого». При обходе в Циклах выбираются значения Элементов Массива в порядке возрастания Индекса:

Для каждого ЭлементИз МассивЦикл

КонецЦикла;

Например, при необходимости заменить Элементы на другие значения:

НовоеЧисловоеЗначение = 5;

Для каждого ЭлементИз МойНовыйМассивЦикл

           Элемент = НовоеЧисловоеЗначение;

                   НовоеЧисловоеЗначение = (НовоеЧисловоеЗначение + 7) / 2;

КонецЦикла;

При этом возможен также обход Массива по иному порядку, используя оператор «Для». Следует учитывать, что в таком случае необходимо указывать границу Массива. Иначе по окончанию обхода цикла будет вызвана ошибка «Индекс находится за границами Массива»:

Для Итератор = 0ПоМойНовыйМассив.ВГраница()Цикл

КонецЦикла;

Например, при необходимости выбрать из Массива все значения типа Число и перенести их в новый Массив:

МассивДляЧисел = Новый Массив();

Для Итератор = 0ПоМойНовыйМассив.ВГраница()Цикл

           ЗначениеЭлемента = МойНовыйМассив[Итератор];

           ЕслиЗначениеЭлемента= Тип («Число») Тогда

                     МассивДляЧисел.Добавить(ЗначениеЭлемента);

                     МойНовыйМассив.Удалить(Итератор);

           КонецЕсли;

КонецЦикла;

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

Для Итератор1 = 0ПоМассив.ВГраница()Цикл

            Сообщить (Массив[Итератор1]);

            Для Итератор2 = 0ПоМассив[Итератор1].ВГраница()Цикл

                        Сообщить (Массив[Итератор1][Итератор2]);

                        Для Итератор3 = 0ПоМассив[Итератор1][Итератор2].ВГраница()Цикл

                                    Сообщить (Массив[Итератор1] [Итератор2][Итератор3]);

                        КонецЦикла;

            КонецЦикла;

КонецЦикла;

Специалист компании ООО «Кодерлайн» 

Иван Каплин.

Источник: https://www.koderline.ru/expert/programming/article-massivy-na-platforme-1s-8-3/

Изучаем массивы в 1С 8.3 (8.2)

1с 8 массив

Массив в платформе 1С 8.3 это самая простая универсальная коллекция значений.

Что такое Массив?

Массив в языке программирования 1С — это коллекция элементов, следующих друг за другом, которые могут быть доступны с помощью индекса массива. Элементы могут быть любого типа, в том числе и типа Массив. У каждого элемента в массиве есть уникальный номер, который называют Индексом. Посредством индекса можно получить доступ к данному элементу.

Все элементы в массиве упорядочены, т.е. первый элемент имеет индекс, равный нулю, второй — одному, и так далее.

Создать массив можно при помощи конструктора Новый

Новый Массив (…)

Где:

«КоличествоЭлементов» — необязательный параметр. Он может быть один — тогда мы будем иметь одномерный массив, а также их может быть несколько — тогда мы имеем многомерный массив.

Например,

Массив1 = Новый Массив(10);

— Одномерный массив из 10 элементов.

А:

Массив1 = Новый Массив(3,2);

Двумерный массив из 6 элементов (три строки, два столбца).

Или

Массив1 = Новый Массив();

Массив, не имеющий ни одного элемента, — пустой массив.

В отличие от таблиц значений 1С, работать с массивами можно как в режим тонкого клиента, так и в режим толстого клиента.

Имейте в виду, что когда Вы создадите не пустой массив (одномерный или многомерный), его элементы уже будут существовать, но с не заполненными значениями. Если Вы посмотрите на данный массив в отладчике, то увидите напротив каждого элемента тип Неопределено.

Обращаться к элементу массива можно посредством индекса. Делается это с помощью оператора «квадратные скобки».

Массив1[0] = «Первый»;
Массив1[1] = 2;

Как видите, элементы массива могут иметь разные типы ( в том числе ссылочные).

При помощи индекса и квадратных скобок можно как задать какой-то элемент массива, так и прочитать этот элемент.

Сообщить(«Массив1[0]= » + Массив1[0] +
«, Массив[1] = » + Массив1[1]);

Индекс внутри скобок не должен превышать общего количества элементов минус один (т.к. индекс начинается с нуля).  Если мы напишем такой код:

Массив1 = Новый Массив(5);
Массив1[5] = 10;

То при его выполнении, возникнет ошибка «Индекс находится за границами массива»

Хоть мы и указали у конструктора массивов в скобках значение 5, но обращаться может только до 4 индекса, поскольку нумерация индексов начинается с нуля.

Перебор элементов массива

Перебрать все элементы массива можно двумя способами.  Первый способ – с помощью так называемого «китайского кода», когда присваиваем каждому элементу массива нужное значение. Иногда это бывает необходимо.

Сообщить(Массив[0]);
Сообщить(Массив[2]);
Сообщить(Массив[1]);

Но чаще необходимо прочитать каждый элемент массива в цикле. Для этого в теле цикла нужно обойти индексы от первого до последнего. Сделать это можно при помощи цикла Для…Цикл.

Массив1 = Новый Массив(3);
Массив1[0] = 10;
Массив1[1] = 3;
Массив1[2] = 7;
Для н = 0 по 2 Цикл
    Сообщить(Массив1[н]);КонецЦикла;

Или с помощью цикла Для каждого … Цикл

Для Каждого ЭлМассив из Массив1 Цикл
    Сообщить(ЭлМассив);
КонецЦикла;

Где в переменной ЭлМассив для каждой итерации содержится соответствующее значение элемента массива.

Количество элементов массива

Узнать количество элементов массива можно двумя способами.  С помощью метода Количество() и метода ВГраница(). Метод Количество() возвращает количество элементов массива (т.е.

то число, что задается в скобках конструктора массива), а метод ВГраница() самый максимальный индекс элемента массива или граница массива.

  В этом случае перебор элементов массива в цикле возможен двумя способами.

Для н = 0 по Массив1.Количество() — 1 Цикл
    Сообщить(Массив1[н]);
КонецЦикла;

И

Для н = 0 по Массив1.ВГраница() Цикл
    Сообщить(Массив1[н]);
КонецЦикла;

Второй способ считается более правильным.

Добавление элементов массива

Добавить элемент массива можно с помощью методов Добавить() и Вставить(). Первый метод добавляет элемент в конец массива, а второй вставляет элемент в нужный индекс массива.

Массив1 = Новый Массив();
Массив1.Добавить(10);
Массив1.Вставить(0,20);
Массив1.Добавить(5);

В этом коде мы создали пустой массив, потом добавили элемент (он же первый), потом вставили на нулевой индекс элемент, а потом добавили. Должен получиться следующий результат.

Многомерный массив

Многомерным массивом в языке программирования 1С называется массив, элементами которого являются массивы. Если одномерный массив создавался посредством конструктора с одним параметром, то в многомерном массиве может быть два и больше параметров.

МассивМн1 = Массив(3,2,5);

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

Например, создадим двумерный массив:

МассивМн1 = Новый Массив(3,2);
Для  н = 0 По МассивМн1.ВГраница() цикл
    МассивВнутренний = МассивМн1[н];
    Для к = 0 по МассивВнутренний.ВГраница() цикл
        МассивВнутренний[к] = Строка(н+1)+ «.» + Строка(к+1);    КонецЦикла;

КонецЦикла;

А вывод в окно сообщений следующим образом

Для Каждого ЭлМассиваВнеш из МассивМн1 цикл
    СтрокаВывода = «»;
    Для Каждого ЭлемМассиваВнутр из ЭлМассиваВнеш цикл
          СтрокаВывода = СтрокаВывода + » » + ЭлемМассиваВнутр;    КонецЦикла;Сообщить(СокрЛ(СтрокаВывода));КонецЦикла;

Статьи о других универсальных коллекциях значений в 1С

Соответствия в 1С

Список значений в 1С

Таблица значений 1С

Структура в 1С

Более подробно о работе с массивами и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

: https://.com/1c_prosto
Фейсбуке: https://www..com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://.com/signum2009

Источник: https://www.1s-up.ru/izuchaem-massivy-v-1c-8-3-8-2/

Самая полезная информация
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: