Массивы. Создание массивов, заполнение данными, обращения к элементам и другие операции с массивами — различия между версиями
Тест (обсуждение | вклад) (Новая страница: «Массивы данных используются в программировании повсеместно. В языке программирования П…») |
Тест (обсуждение | вклад) м (→Квадратные скобки) |
||
(не показано 11 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
Массивы данных используются в программировании повсеместно. В языке программирования Перфолента существуют богатые возможности для операций с массивами. В этой статье рассматриваются основные приемы работы с массивами и синтаксис операций с ними. | Массивы данных используются в программировании повсеместно. В языке программирования Перфолента существуют богатые возможности для операций с массивами. В этой статье рассматриваются основные приемы работы с массивами и синтаксис операций с ними. | ||
+ | [[Файл:Отображение массива в памяти компьютера.png|обрамить|слева|Отображение массива в памяти компьютера]] | ||
+ | |||
+ | == Теоретическая часть == | ||
− | |||
В языке программирования Перфолента.Net, как и во многих других языках, существуют встроенные в язык массивы. | В языке программирования Перфолента.Net, как и во многих других языках, существуют встроенные в язык массивы. | ||
В языке 1С версии 8, в отличие от 1С версии 7.7 массивы как часть языка отсутствуют (не считая коллекции с таким же названием). Поэтому многим программистам 1С будет не лишним ознакомиться с синтаксисом и приемами работы с массивами. | В языке 1С версии 8, в отличие от 1С версии 7.7 массивы как часть языка отсутствуют (не считая коллекции с таким же названием). Поэтому многим программистам 1С будет не лишним ознакомиться с синтаксисом и приемами работы с массивами. | ||
− | |||
− | |||
Массив — это набор данных одного типа. Например, массив целых чисел, массив строк, массив дат и т.д. | Массив — это набор данных одного типа. Например, массив целых чисел, массив строк, массив дат и т.д. | ||
Строка 13: | Строка 13: | ||
К элементам данных входящих в массив можно обращаться по индексу (индекс указывает позицию элемента начиная с нуля). | К элементам данных входящих в массив можно обращаться по индексу (индекс указывает позицию элемента начиная с нуля). | ||
− | + | '''Важно''': Существуют понятия нумерация и индексация. | |
+ | * '''Нумерация''' начинается с единицы, а '''индексация''' начинается с нуля. | ||
+ | * Индекс элемента на единицу меньше, чем его номер. | ||
+ | |||
+ | == Объявление и использование Массива == | ||
− | Для объявления массива в языке программирования Перфолента существует оператор Массив | + | Для объявления массива в языке программирования Перфолента существует оператор '''Массив'''. Выглядит это так: |
− | Массив А[99] тип Целое | + | Массив А[99] тип Целое |
− | В этом примере мы создали | + | В этом примере мы создали 100 (а не 99) элементов типа Целое, т.к. существует элемент с индексом 0, к которому мы можем обратиться так А[0]. Это значит, что при создании массива мы указываем верхний индекс (максимальное количество элементов в массиве минус один элемент), а не количество элементов, как в некоторых других языках программирования. Если вы случайно укажете количество элементов, то ничего страшного не произойдет, у вас просто будет одно лишнее место в массиве. |
− | + | '''Замечание''': К моменту объявления имя массива не должно быть занято другими переменными или Полями | |
В одном операторе мы можем создать несколько массивов одного типа: | В одном операторе мы можем создать несколько массивов одного типа: | ||
− | Массив Фамилии[99], Имена[99], Отчества[99] тип Строка | + | Массив Фамилии[99], Имена[99], Отчества[99] тип Строка |
− | Мы так же можем задать элементам массива начальное значение, указав его после знака равно: | + | Мы так же можем сразу, при объявление массива, задать элементам массива начальное значение, указав его после знака равно: |
− | Массив А[5] тип Целое = 1 | + | Массив А[5] тип Целое = 1 |
В результате в массиве будет 6 единиц. Проверим это: | В результате в массиве будет 6 единиц. Проверим это: | ||
− | ВыводСтроки А.Представление | + | ВыводСтроки А.Представление |
+ | |||
+ | Получилось: 1 1 1 1 1 1 | ||
+ | |||
+ | Как и в случае с переменными, тип массива можно не указывать, если указано значение инициализации (в данном случае единица). Так как все элементы массива имеют одинаковый тип, то тип значения инициализации автоматически становится типом массива: | ||
+ | |||
+ | Массив А[5] = 1 //массив получит тип Целое | ||
+ | Массив ФИО[99] = "" //массив получит тип Строка | ||
− | + | == Структурные и ссылочные типы данных в Массивах == | |
− | + | '''Важно''': т.к. существуют значения [[структурного|структурный тип данных]] и [[ссылочного типов|ссылочный тип данных]], то надо помнить об этом при инициализации массивов. Понятно, что все элементы массива структурного типа будут содержать собственные копии значения. А вот элементы массива ссылочного типа могут содержать ссылки на один и тот же объект или на разные, в зависимости от инициализирующего выражения. Надо просто помнить, что инициализирующее выражение вычисляется столько раз, сколько элементов в создаваемом массиве. | |
− | + | Подробнее о структурных и ссылочных типах можно прочитать здесь: [[Переменные. Объявление переменных, инициализация и их использование]]. | |
− | |||
− | + | Т = Новый ТекстовыйДокумент //создали один экземпляр текстового документа | |
+ | Массив АА[9] = Т //все элементы массива получат ссылку на '''один и тот же единственный''' экземпляр объекта ТекстовыйДокумент | ||
+ | Массив ББ[9] = Новый ТекстовыйДокумент //каждый элемент массива получит ссылку на '''собственный''' экземпляр объекта ТекстовыйДокумент, которых будет создано 10 штук | ||
− | + | == Массивы : Вычисление индекса, запись и извлечение элементов из массива == | |
− | |||
− | |||
При создании массива можно задавать верхний индекс массива с помощью переменной или любого выражения, возвращающего целое число: | При создании массива можно задавать верхний индекс массива с помощью переменной или любого выражения, возвращающего целое число: | ||
− | ВерхнийИндекс = 9 | + | ВерхнийИндекс = 9 |
− | Массив Б[ВерхнийИндекс] = 0 | + | '''Массив''' Б[ВерхнийИндекс] = 0 |
− | КоличествоЭлементов = 10 | + | КоличествоЭлементов = 10 |
− | Массив В[КоличествоЭлементов - 1] = 0 | + | '''Массив''' В[КоличествоЭлементов - 1] = 0 |
Обращаться к элементам массива так же можно при помощи переменной или выражения в качестве индекса. Элементы можно читать и записывать. Например, обойдем массив в цикле, выведем на экран значение каждого элемента и заменим его другим значением. | Обращаться к элементам массива так же можно при помощи переменной или выражения в качестве индекса. Элементы можно читать и записывать. Например, обойдем массив в цикле, выведем на экран значение каждого элемента и заменим его другим значением. | ||
− | Массив МА[3] = "Вася" //все элементы получат значение Вася | + | '''Массив''' МА[3] = "Вася" //все элементы получат значение Вася |
− | Для Инд = 0 По 3 | + | '''Для''' Инд = 0 '''По''' 3 |
ВыводСтроки МА[Инд] //выведет слово Вася 4 раза | ВыводСтроки МА[Инд] //выведет слово Вася 4 раза | ||
МА[Инд] = МА[Инд] + (Инд + 1) //вопрос зануды: "А что будет, если убрать круглые скобки?) | МА[Инд] = МА[Инд] + (Инд + 1) //вопрос зануды: "А что будет, если убрать круглые скобки?) | ||
− | ВыводСтроки МА[Инд] //выведет Вася1, Вася2, Вася3, Вася4 | + | ВыводСтроки МА[Инд] //выведет Вася1, Вася2, Вася3, Вася4 //спойлер для зануды++ компилятор собирает значения последовательно, преобразовывая их в тип '''самого левого значения'''. Поэтому + тут не сложение, а конкатенация (склеивание текстовых строк т.е. "Вася" + "0" + "1"), т.к. мы имеем дело с 1С, а не с VB, где это разные операторы. Поэтому без скобок получим не ошибку компиляции, а Вася01, Вася11, Вася21, Вася31 -- |
− | КонецЦикла | + | '''КонецЦикла''' |
Итак, мы уже можем создать массив из любого количества элементов любого типа, а также записывать в массив значения и читать их из массива. Для многих задач этого более чем достаточно. Но мы пойдем дальше, т.к. тема массивов в языке Перфолента далеко не исчерпана. | Итак, мы уже можем создать массив из любого количества элементов любого типа, а также записывать в массив значения и читать их из массива. Для многих задач этого более чем достаточно. Но мы пойдем дальше, т.к. тема массивов в языке Перфолента далеко не исчерпана. | ||
− | Иногда нам необходимо создать массив на лету, например, для передачи его в качестве параметра в процедуру или функцию, или для присвоения переменной. Для этого можно использовать оператор Новый, так же, как и при создании объектов другого типа: | + | == Массивы. Оператор "Новый" == |
+ | |||
+ | Иногда нам необходимо создать массив на лету, например, для передачи его в качестве параметра в процедуру или функцию, или для присвоения переменной. Для этого можно использовать оператор '''Новый''', так же, как и при создании объектов другого типа: | ||
+ | |||
+ | мас = '''Новый''' Целое[99] | ||
+ | |||
+ | Вместо типа '''Целое''' в этом примере мог бы быть любой другой тип, даже тип '''ТекстовыйДокумент'''. | ||
+ | |||
+ | МояПроцедура('''Новый''' ТекстовыйДокумент[99]) //передаём в процедуру новый массив со 100 (=99+1) элементами типа ТекстовыйДокумент в процедуру | ||
− | |||
− | |||
− | + | == Квадратные скобки == | |
Теперь надо сказать несколько слов о том, как простое добавление квадратных скобок превращает любой тип в тип задающий массив элементов этого типа. Например, создадим переменные подходящие для хранения массивов целых чисел и строк: | Теперь надо сказать несколько слов о том, как простое добавление квадратных скобок превращает любой тип в тип задающий массив элементов этого типа. Например, создадим переменные подходящие для хранения массивов целых чисел и строк: | ||
− | Перем мЦ тип Целое[] = Неопределено //переменной мЦ нельзя присвоить целое число, но можно присвоить массив целых чисел, т.к. тип Целое[ ] это тип массива целых чисел | + | '''Перем''' мЦ тип Целое[] = Неопределено //переменной мЦ нельзя присвоить целое число, но можно присвоить массив целых чисел, т.к. тип Целое[ ] это тип массива целых чисел |
− | Перем мС тип Строка[] = Неопределено //переменной мС нельзя присвоить строку, но можно присвоить массив строк, т.к. тип Строка[ ] это тип массива строк | + | '''Перем''' мС тип Строка[] = Неопределено //переменной мС нельзя присвоить строку, но можно присвоить массив строк, т.к. тип Строка[ ] это тип массива строк |
Точно так же задаются типы параметрам процедуры, если в параметр надо передать массив элементов определенного типа: | Точно так же задаются типы параметрам процедуры, если в параметр надо передать массив элементов определенного типа: | ||
− | Процедура МояПроцедура( МассивДокументов тип ТекстовыйДокумент[] ) //квадратные скобки тут обязательны, т.к. мы хотим передать массив документов, а не один документ | + | '''Процедура''' МояПроцедура( МассивДокументов '''тип''' ТекстовыйДокумент[] ) //квадратные скобки тут обязательны, т.к. мы хотим передать массив документов, а не один документ |
//.... | //.... | ||
− | КонецПроцедуры | + | '''КонецПроцедуры''' |
− | Умнику на заметку: Существуют многомерные массивы, для обращения к элементам которых необходимо указывать несколько индексов, один индекс для каждого измерения. Например, МАС[3, 5] имеет 4 * 6 = 24 элемента. Для создания типа многомерного массива в квадратных скобках необходимо указывать соответствующее количество запятых, например, тип двухмерного массива целых чисел объявляется так: Целое[ , ]. Многомерные массивы будут рассмотрены в другой статье. | + | '''Умнику на заметку''': Существуют многомерные массивы, для обращения к элементам которых необходимо указывать несколько индексов, один индекс для каждого измерения. Например, МАС[3, 5] имеет 4 * 6 = 24 элемента. Для создания типа многомерного массива в квадратных скобках необходимо указывать соответствующее количество запятых, например, тип двухмерного массива целых чисел объявляется так: Целое[ , ]. [[Многомерные массивы]] будут рассмотрены в другой статье. |
Заполнить массив данными можно как в цикле (пример выше), так и с помощью инициализатора. Причем инициализатор может заполнить существующий массив или создать новый: | Заполнить массив данными можно как в цикле (пример выше), так и с помощью инициализатора. Причем инициализатор может заполнить существующий массив или создать новый: | ||
− | Массив масЧисла[9] тип Целое | + | '''Массив''' масЧисла[9] тип Целое |
масЧисла{0,1,2,3,4,5,6,7,8,9} //заполняем существующий массив | масЧисла{0,1,2,3,4,5,6,7,8,9} //заполняем существующий массив | ||
масДниНедели = {"Пн","Вт","Ср","Чт","Пт","Сб","Вс"} //создали новый Массив строк | масДниНедели = {"Пн","Вт","Ср","Чт","Пт","Сб","Вс"} //создали новый Массив строк | ||
Строка 122: | Строка 138: | ||
На этом пока все. Успехов в работе с массивами. | На этом пока все. Успехов в работе с массивами. | ||
+ | |||
+ | == См. также == | ||
+ | * [[Многомерные массивы]] | ||
+ | |||
+ | {{Описание языка Перфолента.NET-Содержание}} | ||
== Ссылки == | == Ссылки == | ||
− | * [http://promcod.com.ua/Article.asp?code=20191216032531003363 | + | * [http://promcod.com.ua/Article.asp?code=20191216032531003363 ПРОМКОД - Массивы. Создание массивов, заполнение данными, обращения к элементам и другие операции с массивами] |
[[Категория:Описание языка Перфолента.NET]] | [[Категория:Описание языка Перфолента.NET]] |
Текущая версия на 16:22, 2 декабря 2021
Массивы данных используются в программировании повсеместно. В языке программирования Перфолента существуют богатые возможности для операций с массивами. В этой статье рассматриваются основные приемы работы с массивами и синтаксис операций с ними.
Содержание
- 1 Теоретическая часть
- 2 Объявление и использование Массива
- 3 Структурные и ссылочные типы данных в Массивах
- 4 Массивы : Вычисление индекса, запись и извлечение элементов из массива
- 5 Массивы. Оператор "Новый"
- 6 Квадратные скобки
- 7 См. также
- 8 Синтаксис языка Перфолента
- 9 Практика программирования на языке Перфолента
- 10 Ссылки
Теоретическая часть
В языке программирования Перфолента.Net, как и во многих других языках, существуют встроенные в язык массивы.
В языке 1С версии 8, в отличие от 1С версии 7.7 массивы как часть языка отсутствуют (не считая коллекции с таким же названием). Поэтому многим программистам 1С будет не лишним ознакомиться с синтаксисом и приемами работы с массивами.
Массив — это набор данных одного типа. Например, массив целых чисел, массив строк, массив дат и т.д.
К элементам данных входящих в массив можно обращаться по индексу (индекс указывает позицию элемента начиная с нуля).
Важно: Существуют понятия нумерация и индексация.
- Нумерация начинается с единицы, а индексация начинается с нуля.
- Индекс элемента на единицу меньше, чем его номер.
Объявление и использование Массива
Для объявления массива в языке программирования Перфолента существует оператор Массив. Выглядит это так:
Массив А[99] тип Целое
В этом примере мы создали 100 (а не 99) элементов типа Целое, т.к. существует элемент с индексом 0, к которому мы можем обратиться так А[0]. Это значит, что при создании массива мы указываем верхний индекс (максимальное количество элементов в массиве минус один элемент), а не количество элементов, как в некоторых других языках программирования. Если вы случайно укажете количество элементов, то ничего страшного не произойдет, у вас просто будет одно лишнее место в массиве.
Замечание: К моменту объявления имя массива не должно быть занято другими переменными или Полями
В одном операторе мы можем создать несколько массивов одного типа:
Массив Фамилии[99], Имена[99], Отчества[99] тип Строка
Мы так же можем сразу, при объявление массива, задать элементам массива начальное значение, указав его после знака равно:
Массив А[5] тип Целое = 1
В результате в массиве будет 6 единиц. Проверим это:
ВыводСтроки А.Представление
Получилось: 1 1 1 1 1 1
Как и в случае с переменными, тип массива можно не указывать, если указано значение инициализации (в данном случае единица). Так как все элементы массива имеют одинаковый тип, то тип значения инициализации автоматически становится типом массива:
Массив А[5] = 1 //массив получит тип Целое Массив ФИО[99] = "" //массив получит тип Строка
Структурные и ссылочные типы данных в Массивах
Важно: т.к. существуют значения структурный тип данных и ссылочный тип данных, то надо помнить об этом при инициализации массивов. Понятно, что все элементы массива структурного типа будут содержать собственные копии значения. А вот элементы массива ссылочного типа могут содержать ссылки на один и тот же объект или на разные, в зависимости от инициализирующего выражения. Надо просто помнить, что инициализирующее выражение вычисляется столько раз, сколько элементов в создаваемом массиве.
Подробнее о структурных и ссылочных типах можно прочитать здесь: Переменные. Объявление переменных, инициализация и их использование.
Т = Новый ТекстовыйДокумент //создали один экземпляр текстового документа Массив АА[9] = Т //все элементы массива получат ссылку на один и тот же единственный экземпляр объекта ТекстовыйДокумент Массив ББ[9] = Новый ТекстовыйДокумент //каждый элемент массива получит ссылку на собственный экземпляр объекта ТекстовыйДокумент, которых будет создано 10 штук
Массивы : Вычисление индекса, запись и извлечение элементов из массива
При создании массива можно задавать верхний индекс массива с помощью переменной или любого выражения, возвращающего целое число:
ВерхнийИндекс = 9 Массив Б[ВерхнийИндекс] = 0 КоличествоЭлементов = 10 Массив В[КоличествоЭлементов - 1] = 0
Обращаться к элементам массива так же можно при помощи переменной или выражения в качестве индекса. Элементы можно читать и записывать. Например, обойдем массив в цикле, выведем на экран значение каждого элемента и заменим его другим значением.
Массив МА[3] = "Вася" //все элементы получат значение Вася
Для Инд = 0 По 3 ВыводСтроки МА[Инд] //выведет слово Вася 4 раза МА[Инд] = МА[Инд] + (Инд + 1) //вопрос зануды: "А что будет, если убрать круглые скобки?) ВыводСтроки МА[Инд] //выведет Вася1, Вася2, Вася3, Вася4 //спойлер для зануды++ компилятор собирает значения последовательно, преобразовывая их в тип самого левого значения. Поэтому + тут не сложение, а конкатенация (склеивание текстовых строк т.е. "Вася" + "0" + "1"), т.к. мы имеем дело с 1С, а не с VB, где это разные операторы. Поэтому без скобок получим не ошибку компиляции, а Вася01, Вася11, Вася21, Вася31 -- КонецЦикла
Итак, мы уже можем создать массив из любого количества элементов любого типа, а также записывать в массив значения и читать их из массива. Для многих задач этого более чем достаточно. Но мы пойдем дальше, т.к. тема массивов в языке Перфолента далеко не исчерпана.
Массивы. Оператор "Новый"
Иногда нам необходимо создать массив на лету, например, для передачи его в качестве параметра в процедуру или функцию, или для присвоения переменной. Для этого можно использовать оператор Новый, так же, как и при создании объектов другого типа:
мас = Новый Целое[99]
Вместо типа Целое в этом примере мог бы быть любой другой тип, даже тип ТекстовыйДокумент.
МояПроцедура(Новый ТекстовыйДокумент[99]) //передаём в процедуру новый массив со 100 (=99+1) элементами типа ТекстовыйДокумент в процедуру
Квадратные скобки
Теперь надо сказать несколько слов о том, как простое добавление квадратных скобок превращает любой тип в тип задающий массив элементов этого типа. Например, создадим переменные подходящие для хранения массивов целых чисел и строк:
Перем мЦ тип Целое[] = Неопределено //переменной мЦ нельзя присвоить целое число, но можно присвоить массив целых чисел, т.к. тип Целое[ ] это тип массива целых чисел
Перем мС тип Строка[] = Неопределено //переменной мС нельзя присвоить строку, но можно присвоить массив строк, т.к. тип Строка[ ] это тип массива строк
Точно так же задаются типы параметрам процедуры, если в параметр надо передать массив элементов определенного типа:
Процедура МояПроцедура( МассивДокументов тип ТекстовыйДокумент[] ) //квадратные скобки тут обязательны, т.к. мы хотим передать массив документов, а не один документ //.... КонецПроцедуры
Умнику на заметку: Существуют многомерные массивы, для обращения к элементам которых необходимо указывать несколько индексов, один индекс для каждого измерения. Например, МАС[3, 5] имеет 4 * 6 = 24 элемента. Для создания типа многомерного массива в квадратных скобках необходимо указывать соответствующее количество запятых, например, тип двухмерного массива целых чисел объявляется так: Целое[ , ]. Многомерные массивы будут рассмотрены в другой статье.
Заполнить массив данными можно как в цикле (пример выше), так и с помощью инициализатора. Причем инициализатор может заполнить существующий массив или создать новый:
Массив масЧисла[9] тип Целое масЧисла{0,1,2,3,4,5,6,7,8,9} //заполняем существующий массив масДниНедели = {"Пн","Вт","Ср","Чт","Пт","Сб","Вс"} //создали новый Массив строк
И, на конец, массивы можно изменять, удалять, очищать используя специальные операторы:
//пересоздание массива с новым размером //содержимое массива пропадает мСтр[0]="Определено!" МассивНовый мСтр[2] //изменение размера массива //содержимое сохраняется до верхней границы нового размера мСтр[0]="Элементы сохранились при изменении размера массива..." МассивИзменить мСтр[1] //Очистка массива //Элементам устанавливаются значения по умолчанию для заданного типа элементов МассивОчистить мСтр, масИниЦел2М //Удаление массива //Переменной массива присваивается значение Неопределено МассивУдалить мСтр, масИниЦел2М
Массивы являются перечисляемыми объектами, поэтому можно перебирать все элементы с помощью цикла Для Каждого:
Для Каждого Эл Из масДниНедели ВыводСтроки Эл //в переменную Эл по очереди попадают все элементы массива КонецЦикла
На этом пока все. Успехов в работе с массивами.
См. также
Синтаксис языка Перфолента
2.1 Переменные. Объявление переменных, инициализация и их использование
2.2 Типы данных в языке Перфолента
2.3 Массивы. Создание массивов, заполнение данными, обращения к элементам и другие операции с массивами
2.4 Структура программы на языке Перфолента.Net
2.7 Оператор условного выбора блока кода Выбор Для
2.8 Функции и процедуры в языке Перфолента
2.9 Оператор Попытка. Структурная обработка ошибок
2.10 Работа с файлами
2.11 Директивы препроцессора. Выполнение действий перед компиляцией
Практика программирования на языке Перфолента
3.1. Многозадачность и многопоточность в языке Перфолента.Net