Создание динамического массива: примеры, уроки программирования на С++

Содержание

java — Создание динамического массива в Java без использования коллекции

Они в основном хотели кое-что узнать. Например, как бы вы смоделировали «Держатель» для такого массива, как бы вы сделали общедоступным get(int index) или set(T value, int index) или size.

«Использовать дженерики» было очень хорошим советом, так как вы должны были начать хотя бы с:

Holder<T> {
   T[] array = (T[])new Object[10]; // 10 just as an example  
}

Если вы записали это, они могли бы также спросить, почему бы не T[] array = new T[10], и вы должны были сказать, что не можете создать универсальный массив в Java (вы могли бы даже упомянуть @SafeVarArgs). Далее вы должны были сказать, что массивы ковариантны и что приведение разрешено для массивов, но не для коллекций; также это сгенерирует предупреждение компилятора, которое вам нужно подавить.

Позже вы могли бы добавить метод, например add(T value) и как это реализовать. Здесь они ожидали, что вы знаете, что

Arrays.copyOfRange или System.arrayCopy и как это работает ,

Они могли бы даже спросить, почему бы не добавить все подтипы T и правильный синтаксис для этого ( look for generics bounds)

Вам также может понадобиться подумать о том, как delete элемента будет работать с определенным индексом? Не могли бы вы null? Вы бы удалили это? Если так, как бы вы сделали это из массива? Вы бы сократили размер массива, когда что-то будет удалено? (подсказка: коллекции java этого не делают, если вы не укажете им явно: ArrayList#trimToSize())

Когда ваш внутренний массив заполнен и вы хотите добавить еще один элемент, на сколько вы его расширите? 50%, 75%? Или достаточно места для одного элемента? Если бы вы знали, как работают внутренние коллекции jdk, ответ был бы очень простым.

Я полагаю, что это не плохой вопрос для интервью вообще ИМО.

Статические и динамические массивы в VBA

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

Массив это набор элементов одинакового типа, которые имеют общее имя. А обращение к этим элементам происходит по их индексу. Проще говоря, это множество переменных собранных в одну группу по определенному типу. Для более ясного понимания возьмем, например, жемчужные бусы, одни черного цвета, другие белого. Так вот, бусы черного и белого цвета это массивы жемчужин, сгруппированные по цвету, черный и белый, а жемчужины являются элементами этих массивов.
Массивы бывают одномерными (линейными), те же вышеупомянутые бусы и многомерными — двумерные(матрицы, 2D), трехмерные и т.д. Статические — кол-во элементов массива объявляется на этапе разработки и не изменяется в процессе выполнения программы, и динамические — число элементов и размерность изменяется в процессе работы программы.

Объявление статических массивов в VBA

Массив в VB объявляется как обычная переменная, после ключевого слова Dim или Public, с той лишь разницей, что после имени переменной (перед ключевым словом «As«) должны быть скобки.
Dim Mas () as integer

Статические массивы объявляются с указанием верхней и нижней границы:
Dim Mas (2 to 50) as integer

Объявить массив также можно указав только кол-во элементов:
Dim Mas (50) as integer

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

Для объявления многомерных массивов используется запись следующего вида:
Dim Matrix (1 to 10, 1 to 10) as integer
Dim V3D (10, 10,10) as integer ‘трехмерный массив
Dim V4D (10, 10, 25, 5) as integer ‘четырехмерный массив
и т.д.

Объявление динамических массивов в VBA

Динамический массив — не имеет предопределенного  кол-ва элементов и определяется без указания в скобках границ:
Dim MyDynMas () as integer

Но динамический массив можно будет использовать только после программного определения границ, после ключевого слова ReDim:
Dim MyDynMas () as integer
‘некоторый код или расчет границ
i=4
Redim MyDynMas (i)

x = i +13
Redim MyDynMas (x)

после переопределения кол-ва элементов массива, все элементы обнуляются. Для того чтобы сохранить значения элементов массива, после ReDim необходимо добавить ключевое слово Preserve:

Redim Preserve MyDynMas (x)

Так же возможно переопределить размерность массивов, например с одномерного на двух-трех-мерный:
Dim MyDynMas () as integer
‘некоторый код или расчет границ
i=4
Redim MyDynMas (i)

x = i +13
Redim MyDynMas (i, x)

но учтите, что при переопределении размерности массива, использование ключевого слова Preserve для сохранения значений элементов — невозможно!

Рассмотрим примеры по работе со статическими и динамическими массивами.

Пример 1:
Дан одномерный массив с тремя элементами и матрица 3х4 (3 строки, 4 столбца). Необходимо умножить каждый элемент одномерного массива со всеми элементами строки матрицы, т.е. 1-й элемент умножаем со всеми элементами первой строки матрицы, 2-й со второй строкой и т.д. Результат вывести в виде матрицы в сообщении.

Option Explicit
Option Base 1

Sub StatMas()
Dim Mas(3) As Integer
Dim Matr(3, 4) As Integer
Dim Msg As String
Dim i, j As Integer

‘заполняем масивы
Mas(1) = 2: Mas(2) = 4: Mas(3) = 6

Matr(1, 1) = 4: Matr(1, 2) = 5: Matr(1, 3) = 1: Matr(1, 4) = 7
Matr(2, 1) = 12: Matr(2, 2) = 10: Matr(2, 3) = 2: Matr(2, 4) = 9
Matr(3, 1) = 24: Matr(3, 2) = 11: Matr(3, 3) = 6: Matr(3, 4) = 3

Msg = «Результат:» & Chr(13)
For i = 1 To 3
  For j = 1 To 4
     Matr(i, j) = Matr(i, j) * Mas(i)
     ‘добавляем результат в строку сообщения, резделитель TAB (chr(9))
     Msg = Msg & CStr(Matr(i, j)) & Chr(9)
  Next j
  ‘добавляем перенос на новую строку chr(13)
  Msg = Msg & Chr(13)
Next i
MsgBox Msg
End Sub

Пример 2:
Двухмерный массив не известной длины заполняется следующим образом Mas(i,j) = i * j. Размеры массива вводятся пользователем с помощью формы InputBox. Результат вывести в сообщении.

Sub DynMasTest()
Dim Msg As String
Dim i, j, col, row As Integer
Dim DynMas() As Long

Msg = «Результат:» & Chr(13)

col = InputBox(«Введите кол-во столбцов массива», _
                «Пример создания динамического массива», 2)
row = InputBox(«Введите кол-во строк массива», _
                «Пример создания динамического массива», 2)
                
ReDim Preserve DynMas(col, row)

For i = 1 To col
  For j = 1 To row
    DynMas(i, j) = i * j
    Msg = Msg & CStr(DynMas(i, j)) & Chr(9)
  Next j
  Msg = Msg & Chr(13)
Next i
MsgBox Msg
End Sub

И напоследок, для того чтобы узнать (получить) длину массива воспользуйтесь функцией  UBound(). Запись типа UBound(Mas) вернет кол-во элементов одномерного массива. Если же необходимо узнать длину многомерного массива, то функция примет вид UBound(Matr, 2) – вернет кол-во элементов второго измерения, UBound(Matr, 3) – третьего и т.д. Запись же UBound(Matr, 1)  равносильна UBound(Mas).

Пример:

Sub GetLengthMas()
Dim Matr(3, 4, 5) As Integer

MsgBox «Размер массива: » & UBound(Matr, 1) & «x» & UBound(Matr, 2) & «x» & UBound(Matr, 3) _
       & Chr(13) & «Всего элементов: » & UBound(Matr, 1) * UBound(Matr, 2) * UBound(Matr, 3)
End Sub

 

Прикрепленный файл: work_mass_vba.zip

 

 

Динамический массив — презентация онлайн

1. Динамический массив

2. При объявлении, мы задавали массиву определенный постоянный размер. Возможно, кто-то из читателей пробовал делать так: int n =

10;
int arr[n];
«Динамический массив», Воронкин Е.Ю.
2

3. Но, как уже было сказано — при объявлении статического массива, его размером должна являться числовая константа, а не

переменная. В
большинстве случаев, целесообразно выделять
определенное количество памяти для массива,
значение которого изначально неизвестно.
«Динамический массив», Воронкин Е.Ю.
3

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

учились
выделять память для переменных, используя
указатели. Выделение памяти для динамического
массива имеет аналогичный принцип.
«Динамический массив», Воронкин Е.Ю.
4

5. Создание динамического массива #include <iostream> using namespace std; int main() { int num; // размер массива cout << «Enter

Создание динамического массива
#include
using namespace std;
int main()
{
int num; // размер массива
cout
cin >> num; // получение от пользователя размера массива
int *p_darr = new int [num];
// Выделение памяти для массива
«Динамический массив», Воронкин Е.Ю.
5

6. for (int i = 0; i < num; i++) { // Заполнение массива и вывод значений его элементов p_darr[i] = i; cout << «Value of » << i <<

for (int i = 0; i
// Заполнение массива и вывод значений его
элементов
p_darr[i] = i;
cout

}
delete [] p_darr; // очистка памяти
return 0;
}
«Динамический массив», Воронкин Е.Ю.
6

7. Синтаксис выделения памяти для массива имеет вид указатель = new тип[размер]. В качестве размера массива может выступать любое

целое
положительное значение.
«Динамический массив», Воронкин Е.Ю.
7

Инициализация динамического массива c

Как проиницилизировать динамический массив целых чисел ( int ) при его объявлении?

1 ответ 1

Создайте vector . У него есть конструктор:

Вот в него передайте число элементов и начальное значение.

Или можете передать начальные значения в этот конструктор, если они у вас уже есть:

Использование вектора решит все ваши проблемы с изменением размера динамического массива в последующем.

Если вам нужен голый массив, то можно забить его нулями, записав в конце скобочки:

А конкретные значения поддерживаются современными компиляторами:

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

Быстрый переход по статье.

Что такое динамические переменные

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

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

На каждый тип данных выделяется разное количество ячеек.

Как создать динамические переменные в C++

Для создания динамических переменных нам понадобится применять конструкцию ниже:

Давайте подробно ее разберем:

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

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

Пример использования динамических переменных

Внизу мы решили использовать динамические переменные:

  • В строке 7: мы объявили переменную, оперируя конструктором new .
  • Дальше в строке 11: значение нашей переменной становится равно 10.
  • И в самом конце, в строке 15: выводим значение нашей переменной на экран.

Важно помнить! Динамические переменные — это указатели, и поэтому перед ними обязательно должен стоять оператор * .

Удаление динамических переменных

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

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

Чтобы его использовать, нужно применить конструкцию ниже:

  • В самом начале мы используем оператор delete .
  • Дальше идет имя переменной.

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

Статическое и динамическое объявление переменных

Статическое объявление переменных имеет такой вид: int number;

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

Что такое динамические массивы

Мы уже знакомы с миром массивов в C++. Мы не раз создавали их на определенное количество ячеек и при этом использовали статическое создание массивов.

Но еще ни разу не затрагивали их использование с указателями!

Мы создавали массивы на сто тысяч элементов, а то и больше. И не один раз бывало, что большое количество ячеек оставались неиспользованными. Это является неправильным применением оперативной памяти в ПК.

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

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

Например, пользователь захотел вписать 1000 чисел в массив, а мы из-за незнания этого факта сделали массив всего лишь на 500 ячеек.

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

Как работают динамические массивы

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

Как создать динамический массив в C++

Чтобы создать динамический массив мы будем использовать конструкцию ниже:

Очень часто возникают задачи обработки массивов данных, размерность которых заранее неизвестна. В этом случае возможно использование одного из двух подходов:

  • выделение памяти под статический массив, содержащий максимально возможное число элементов, однако в этом случае память расходуется не рационально;
  • динамическое выделение памяти для хранение массива данных.

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

Начальный адрес статического массива определяется компилятором в момент его объявления и не может быть изменен.

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

Стандартные функции динамического выделения памяти

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

Функции динамического распределения памяти:

Для использования функций динамического распределения памяти необходимо подключение библиотеки :

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

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

Память, динамически выделенная с использованием функций calloc(), malloc() , может быть освобождена с использованием функции

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

Динамическое выделение памяти для одномерных массивов

Форма обращения к элементам массива с помощью указателей имеет следующий вид:

Пример на Си : Организация динамического одномерного массива и ввод его элементов.

Результат выполнения программы:

Динамическое выделение памяти для двумерных массивов

Пусть требуется разместить в динамической памяти матрицу, содержащую n строк и m столбцов. Двумерная матрица будет располагаться в оперативной памяти в форме ленты, состоящей из элементов строк. При этом индекс любого элемента двумерной матрицы можно получить по формуле

index = i*m+j;

где i – номер текущей строки; j – номер текущего столбца.

Рассмотрим матрицу 3×4 (см. рис.)

Индекс выделенного элемента определится как

index = 1*4+2=6

Объем памяти, требуемый для размещения двумерного массива, определится как

n·m·(размер элемента)

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

Правильное обращение к элементу с использованием указателя будет выглядеть как

  • p – указатель на массив,
  • m – количество столбцов,
  • i – индекс строки,
  • j – индекс столбца.

Пример на Си Ввод и вывод значений динамического двумерного массива

Результат выполнения

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

  • выделить блок оперативной памяти под массив указателей;
  • выделить блоки оперативной памяти под одномерные массивы, представляющие собой строки искомой матрицы;
  • записать адреса строк в массив указателей.

Графически такой способ выделения памяти можно представить следующим образом.

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

Результат выполнения программы аналогичен предыдущему случаю.

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

Для размещения в оперативной памяти матрицы со строками разной длины необходимо ввести дополнительный массив m , в котором будут храниться размеры строк.

Пример на Си : Свободный массив

Результат выполнения

Перераспределение памяти

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

  • Выделить блок памяти размерности n+1 (на 1 больше текущего размера массива)
  • Скопировать все значения, хранящиеся в массиве во вновь выделенную область памяти
  • Освободить память, выделенную ранее для хранения массива
  • Переместить указатель начала массива на начало вновь выделенной области памяти
  • Дополнить массив последним введенным значением

Все перечисленные выше действия (кроме последнего) выполняет функция

  • ptr – указатель на блок ранее выделенной памяти функциями malloc() , calloc() или realloc() для перемещения в новое место. Если этот параметр равен NULL , то выделяется новый блок, и функция возвращает на него указатель.
  • size – новый размер, в байтах, выделяемого блока памяти. Если size = 0 , ранее выделенная память освобождается и функция возвращает нулевой указатель, ptr устанавливается в NULL .

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

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

Результат выполнения

Динамические структуры данных [АйТи бубен]

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

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

Задачи, обрабатывающие данные, которые по своей природе являются динамическими, удобно решать с помощью динамических структур. Именно с этим интересным средством мы будем учиться работать.

Учитывая всё вышесказанное, можно предположить, что динамические структуры — это некие конструкции, способные при необходимости выделять память под новые элементы или удалять выделенную память для ненужных элементов во время работы программы. Для решения проблемы адресации динамических структур данных используется метод, называемый динамическим распределением памяти, то есть память под отдельные элементы выделяется в момент, когда они «начинают существовать» в процессе выполнения программы, а не во время компиляции. Компилятор в этом случае только выделяет фиксированный объем памяти для хранения адреса динамически размещаемого элемента, а не самого элемента.

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

Курсы для изучения C++

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

C++ Developer. Professional Разработчик С++ (Углубленный уровень) Пройти тестирование на знание языка С++.

C ++ Notes: динамическое размещение массивов

C ++ Notes: динамическое размещение массивов

Проблемы с массивами фиксированного размера

Объявление массива фиксированного размера, например

int a [100000]; 

имеет две типичные проблемы:

  • Превышение максимального . Выбрать реальный максимум часто невозможно, потому что программист нет контроля над размером наборов данных, которые интересуют пользователя. Ошибочные предположения о том, что максимум никогда не будет превышен, являются источник многих ошибок программирования.Объявление очень больших массивов может быть чрезвычайно расточительно памяти, и если таких массивов много, может запретить запуск программы в некоторых системах.
  • Без расширения . Использование небольшого размера может быть более эффективным для типичного набора данных, но предотвращает программа не работает с большими наборами данных. Если пределы массива не проверено, большие наборы данных будут проходить через конец массива с катастрофические последствия. Массивы фиксированного размера не могут расширяться по мере необходимости.

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

Это именно то, что вектор есть, но давайте посмотрим, как это делается с массивом.

Объявить массив как указатель, выделить

новый

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

int * a = NULL; // указатель на int, по сути ни на что.
 

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

Выделить массив с кодом> новый

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

int * a = NULL; // Указатель на int, ничего не инициализировать.
int n; // Размер, необходимый для массива
cin >> n; // Считываем размер
a =  новый  int [n]; // Выделяем n int и сохраняем ptr в.
for (int i = 0; i  a .a = NULL; // Очистить, чтобы предотвратить использование недопустимой ссылки на память.
 

Освобождение памяти при удалении

Когда вы закончите с динамически выделенной памятью, освободите ее с оператором delete . После освобождения памяти ее можно повторно используется более поздними новыми запросами . Память, которую не освободила ваша программа будет освобожден, когда программа завершится. Никогда не освобождайте память, которая не выделялся динамически — результаты непредсказуемы.

удалить [] a; // Свободная память, выделенная для массива  a .a = NULL; // Убедитесь, что освобожденная память не используется.
 

Используйте

[] при удалении массивов

Необходимо указать « [] » при удалении массива, но не для отдельного значения. Невозможно удалить только часть массива.

Вам нужно сбросить указатель после удаления?

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

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

Примеры

Динамический массив VBA

На главную ➜ Учебное пособие по VBA ➜ Массивы ➜ Динамический массив VBA

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

Создайте динамический массив в VBA

  1. Сначала объявите массив с его именем.
  2. После этого счетчик элементов оставил круглые скобки пустыми.
  3. Теперь используйте оператор ReDim.
  4. В конце укажите количество элементов, которые вы хотите добавить в массив.
  Dim myArray () как строка
ReDim myArray (5)  

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

Динамический многомерный массив

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

  Dim myArray () как строка
ReDim myArray (5, 8)  

Добавить новый элемент в динамический массив в VBA

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

  'объявление массива без элемента.
'---------------------
Dim iNames () как строка
'---------------------

'объявление переменных для хранения счетчика _
'и элементы из диапазона.
'----------------------
Dim iCount как целое число
Dim iElement как целое число
'----------------------

'получить номер последней строки, чтобы определить _
'количество элементов в массиве.
'------------------------------------
iCount = Range ("A1"). End (xlDown) .Row
'------------------------------------

'переопределение элементов массива.'-------------------
ReDim iNames (iCount)
'-------------------

'использование цикла for для добавления элементов в массив
'из диапазона, начинающегося с ячейки A1
'------------------------------------------------- -
Для iElement = 1 в iCount
    iNames (iElement - 1) = Cells (iElement, 1). Значение
Следующий iElement
'------------------------------------------------- -

'распечатать все элементы из
'к ближайшему окну
'--------------------
Отладка.Печать iNames (0)
Отладка.Печать iNames (1)
Отладка.Печать iNames (2)
'--------------------  

Давайте разберемся с этим кодом шаг за шагом.

  1. На первом шаге вы объявили массив с именем «myArray».
  2. После этого у вас есть две переменные для сохранения значений счетчиков для цикла, которые необходимо использовать далее в коде, чтобы получить значение из диапазона и добавить эти значения как элементы в массив.
  3. Затем у вас есть строка кода для получения последней строки из диапазона, которая дополнительно помогает вам узнать элементы, которые вам нужно добавить в массив.
  4. На четвертом шаге вы использовали оператор ReDim для переопределения элементов массивов, используя номер последней строки, полученный на предыдущем шаге.
  5. Затем у вас есть FOR LOOP (For Next), который проходит по диапазону, начиная с ячейки A1, берет значения оттуда и добавляет их как элементы в массив один за другим.
  6. В конце концов, у вас есть оператор Debug.Print для печати всех элементов в непосредственном окне.

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

Больше

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

VBA Добавить новое значение в массив | VBA Clear Array | Цикл VBA через массив | Многомерный массив VBA | Диапазон VBA в массиве | VBA ищет значение в массиве | Массив сортировки VBA | Длина массива VBA (размер) | Массив VBA со строками | Функция ISARRAY | Функция ARRAY | Массивы VBA

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

Динамический массив в Excel VBA (в простых шагах)

Если размер вашего массива увеличивается и вы не хотите исправлять размер массива, вы можете использовать ключевое слово ReDim . Excel VBA затем автоматически изменяет размер массива.

Добавьте числа в столбец A.

Поместите командную кнопку на лист и добавьте следующие строки кода:

1. Сначала мы объявляем массив с именем numbers. Также объявите две переменные типа Integer.Один именованный размер и один с именем i.

Тусклые числа () как целое, размер как целое, i как целое

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

2. Затем мы определяем размер массива и сохраняем его в переменной size. Для этого вы можете использовать функцию рабочего листа CountA. Добавьте следующую строку кода:

size = WorksheetFunction.CountA (Рабочие листы (1). Столбцы (1))

3. Теперь мы знаем размер массива и можем изменить его размер. Добавьте следующую строку кода:

Номера ReDim (размер)

4. Затем мы инициализируем каждый элемент массива. Используем петлю.

Для i = 1 К размеру
числа (i) = Ячейки (i, 1). Значение
Далее i

5. Мы отображаем последний элемент массива с помощью MsgBox.

Номера MsgBox (размер)

6. Закройте редактор Visual Basic и нажмите кнопку команды на листе.

Результат:

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

8. Еще раз нажмите командную кнопку.

Заключение: Excel VBA автоматически изменил размер этого динамического массива.

9. Когда вы используете ключевое слово ReDim, вы стираете все существующие данные, хранящиеся в данный момент в массиве. Например, добавьте следующие строки кода к ранее созданному коду:

Номера ReDim (3)
Номера MsgBox (1)

Результат:

Массив пуст.

10. Если вы хотите сохранить данные в существующем массиве при его изменении размеров, используйте ключевое слово Preserve.

Номера ReDim Preserve (3)
Номера MsgBox (1)

Результат:

Формулы динамических массивов в Excel

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

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

Наличие

Динамические массивы и новые функции, указанные ниже, доступны только в Excel 365 и Excel 2021. Excel 2016 и Excel 2019 не поддерживают формулы динамического массива. Для удобства я буду использовать «Динамический Excel» (Excel 365) и «Традиционный Excel» (2019 или более ранние версии), чтобы различать версии ниже.

Новые функции

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

Функция Назначение
ФИЛЬТР Фильтровать данные и возвращать совпадающие записи
RANDARRAY Сгенерировать массив случайных чисел
ПОСЛЕДОВАТЕЛЬНОСТЬ Сгенерировать массив последовательных чисел
СОРТИРОВКА Сортировать диапазон по столбцу
СОРТБИ Сортировать диапазон по другому диапазону или массиву
УНИКАЛЬНЫЙ Извлечь уникальные значения из списка или диапазона
XLOOKUP Современная замена для ВПР
XMATCH Современная замена функции ПОИСКПОЗ

Видео: Новые функции динамических массивов в Excel (около 3 минут).

Примечания:

  1. XLOOKUP и XMATCH не входили в исходную группу новых функций динамического массива, но они отлично работают с новым механизмом динамического массива. XLOOKUP заменяет VLOOKUP и предлагает современный гибкий подход, использующий массивы. XMATCH — это обновление функции ПОИСКПОЗ, предоставляющее новые возможности для формул ИНДЕКС и ПОИСКПОЗ.
  2. Функция LET теперь также является частью новых функций динамического массива.

Пример

Прежде чем мы углубимся в детали, давайте рассмотрим простой пример.Ниже мы используем новую функцию UNIQUE для извлечения уникальных значений из диапазона B5: B15 с единственной формулой , введенной в E5:

 
 = UNIQUE (B5: B15) // возвращаем уникальные значения в B5: B15 

Результатом является список из пяти уникальных названий городов, которые появляются в E5: E9.

Как и все формулы, UNIQUE будет обновляться автоматически при изменении данных. Ниже Ванкувер заменил Портленд в строке 11. Результат UNIQUE теперь включает Ванкувер:

Разлив — одна формула, много значений

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

Прямоугольник, в котором заключены значения, называется «диапазоном разлива». Вы заметите, что диапазон разлива имеет специальную подсветку. В УНИКАЛЬНОМ примере выше диапазон разлива E5: E10.

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

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

Примечание: если разлив заблокирован другими данными, вы увидите ошибку #SPILL.Как только вы освободите место для разлива, формула автоматически разольется.

Видео: Разлив и дальность разлива

Обозначение дальности разлива

Чтобы указать диапазон разлива, используйте символ решетки (#) после первой ячейки в диапазоне. Например, чтобы сослаться на результаты вышеупомянутой функции UNIQUE, используйте:

 
 = E5 # // ссылка на УНИКАЛЬНЫЕ результаты 

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

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

 
 = COUNTA (E5 #) // подсчитать уникальные города 

При изменении диапазона разлива формула будет отражать последние данные.

Массовое упрощение

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

Сила одного

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

Например, ниже мы используем функцию ФИЛЬТР для извлечения записей в группе «A». В ячейке F5 вводится единственная формула:

 
 = FILTER (B5: D11, B5: B11 = "a") // ссылки являются относительными 

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

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

Функции объединения

Все становится по-настоящему интересным, когда вы объединяете более одной функции динамического массива. Возможно, вы хотите отсортировать результаты, возвращаемые UNIQUE? Легкий. Просто оберните функцию SORT вокруг функции UNIQUE следующим образом:

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

Собственное поведение

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

Например, в традиционном Excel, если мы дадим функции LEN диапазон текстовых значений , мы увидим один результат . В Dynamic Excel, если мы дадим функции LEN диапазон значений, мы увидим , несколько результатов . На этом экране ниже показано старое поведение слева и новое поведение справа:

Это огромное изменение, которое может повлиять на все виды формул.Например, функция ВПР предназначена для получения одного значения из таблицы с использованием индекса столбца. Однако в Dynamic Excel, если мы зададим ВПР более одного индекса столбца, используя такую ​​константу массива:

 

ВПР вернет несколько столбцов:

Другими словами, хотя функция ВПР никогда не была предназначена для возврата нескольких значений, теперь она может это делать благодаря новому механизму формул в Dynamic Excel.

Все формулы

Наконец, обратите внимание, что динамические массивы работают со всеми формулами , а не только с функциями.В приведенном ниже примере ячейка C5 содержит единственную формулу:

.
 

Результат разбивается на диапазон 10 на 10, который включает 100 ячеек:

Если числа в диапазонах B5: B14 и C4: L4, где сами являются динамическими массивами (т. Е. Созданы с помощью функции SEQUENCE), оператор ссылки на разлив можно использовать следующим образом:

 
 = B5 # * C4 # // возвращает тот же массив 10 x 10 

Массивы становятся популярными

С появлением динамических массивов слово «массив» будет появляться гораздо чаще.Фактически, вы можете увидеть, что «массив» и «диапазон» почти взаимозаменяемы. Вы увидите массивы в Excel, заключенные в фигурные скобки, например:

 
 {1,2,3} // горизонтальный массив
{1; 2; 3} // вертикальный массив 

Массив — это программный термин, который относится к списку элементов, которые появляются в определенном порядке. Причина, по которой массивы так часто встречаются в формулах Excel, заключается в том, что массивы могут идеально выражать значения в диапазоне ячеек.

Видео: Что такое массив?

Операции с массивами становятся важными

Поскольку формулы динамического Excel могут легко работать с несколькими значениями, операции с массивами станут более важными.Термин «операция с массивом» относится к выражению, которое запускает логическую проверку или математическую операцию с массивом. Например, приведенное ниже выражение проверяет, равны ли значения в B5: B9 «ca»

.
 
 = B5: B9 = "ca" // state = "ca" 

, поскольку в B5: B9 5 ячеек, результатом будет 5 значений ИСТИНА / ЛОЖЬ в массиве:

 
 {ЛОЖЬ; ИСТИНА; ЛОЖЬ; ИСТИНА; ИСТИНА} 

Операция с массивом ниже проверяет суммы больше 100:

 
 = C5: C9> 100 // суммы> 100 

Последняя операция с массивом объединяет тест A и тест B в одном выражении:

 
 = (B5: B9 = "ca") * (C5: C9> 100) // состояние = "ca" и сумма> 100 

Примечание. Excel автоматически переводит значения ИСТИНА и ЛОЖЬ в 1 и 0 во время математической операции.

Чтобы вернуть это к формулам динамического массива в Excel, приведенный ниже пример демонстрирует, как мы можем использовать точно такую ​​же операцию с массивом внутри функции ФИЛЬТР, что и аргумент include :

ФИЛЬТР возвращает две записи, где состояние = «ca» и сумма> 100.

Для демонстрации см .: Как фильтровать по двум критериям (видео).

Новые и старые формулы массива

В динамическом Excel нет необходимости вводить формулы массива с помощью Ctrl + Shift + Enter.При создании формулы Excel проверяет, может ли формула возвращать несколько значений. В этом случае она будет автоматически сохранена как формула динамического массива, но фигурных скобок вы не увидите. В приведенном ниже примере показана типичная формула массива, введенная в Dynamic Excel:

Если вы откроете ту же формулу в традиционном Excel, вы увидите фигурные скобки:

Если пойти в другом направлении, при открытии «традиционной» формулы массива в динамическом Excel вы увидите фигурные скобки в строке формул.Например, на экране ниже показана простая формула массива в традиционном Excel:

Однако при повторном вводе формулы без изменений фигурные скобки удаляются, и формула возвращает тот же результат:

Суть в том, что формулы массива, введенные с помощью Control + Shift + Enter (CSE), по-прежнему работают для обеспечения совместимости, но вам не нужно вводить формулы массива с помощью CSE в Dynamic Excel.

Символ @

С появлением динамических массивов вы увидите, что в формулах будет чаще появляться символ @.Символ @ включает поведение, известное как «неявное пересечение». Неявное пересечение — это логический процесс, в котором многие значения сводятся к одному значению.

В традиционном Excel неявное пересечение — это скрытое поведение, используемое (при необходимости) для сведения нескольких значений к одному результату в одной ячейке. В Dynamic Excel это обычно не требуется, так как на лист могут попадать несколько результатов. Когда это необходимо, неявное пересечение вызывается вручную с помощью символа @.

При открытии электронных таблиц, созданных в более старой версии Excel, вы можете увидеть, что символ @ автоматически добавляется к существующим формулам, которые имеют потенциал для возврата многих значений.В традиционном Excel формула, возвращающая несколько значений, не попадет на рабочий лист. Символ @ вызывает такое же поведение в Dynamic Excel, чтобы формула вела себя так же и возвращала тот же результат, что и в исходной версии Excel.

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

Сводка

  • Динамические массивы значительно упростят написание определенных формул.
  • Теперь вы можете легко фильтровать совпадающие данные, сортировать и извлекать уникальные значения с помощью формул.
  • Формулы
  • динамического массива могут быть объединены в цепочку (вложены) для выполнения таких действий, как фильтрация и сортировка.
  • Формулы, возвращающие более одного значения, будут автоматически отображаться.
  • Нет необходимости использовать Ctrl + Shift + Enter для ввода формулы массива.
  • Формулы динамического массива доступны только в Excel 365.

Динамический массив Python: реализация с примерами

Привет, кодеры !! В этой статье мы обсудим реализацию динамического массива Python. Мы также рассмотрим различные примеры, чтобы прояснить нашу концепцию. Массив в Python — это контейнер, содержащий фиксированное количество элементов с одним и тем же типом данных. Итак, давайте теперь подробно рассмотрим нашу тему.

Что такое динамический массив в Python?

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

В Python объекты списка изменяемы. Это означает, что мы можем легко добавить или удалить элемент из списка во время выполнения без указания какого-либо размера.Итак, список действует как динамический массив в Python.

Пример 1: Создание пустого динамического массива Python:

ВЫХОД:
  <класс 'список'>  

Пример 2: Добавление элементов в пустой список:

 list1 = []
list1.append (1)
list1.append (5)
печать (список1)
 
ВЫХОД:
  [1, 5]  

Здесь мы использовали метод append () для динамического добавления элементов в список. Этот метод добавляет элемент в конец списка.

Пример 3: Удаление элемента из списка:

ВЫХОД:
  [1]  

Мы использовали метод pop () для удаления последнего элемента списка. Этот метод удаляет элемент указанной позиции. Если позиция не указана, удаляется последний элемент.

Логика для реализации динамического массива Python:

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

  • Выделите новый массив, скажем, arr2 с большей емкостью.
  • Установите arr2 [i] = arr1 [i], для i = 0,1….n-1, где n — текущий номер элемента.
  • Установите arr1 = arr2, так как теперь arr2 — наш новый список.
  • Теперь просто добавьте новый элемент в arr1.

Давайте посмотрим на его реализацию на Python:

 import ctypes

класс DynamicArray (объект):

def __init __ (сам):
self.n = 0
self.capacity = 1
self.A = self.make_array (self.capacity)

def __len __ (сам):

вернуть self.n

def __getitem __ (self, k):

если не 0 <= k  self.n:
print ("введите соответствующий индекс ..")
возвращение

если self.n == self.capacity:
self._resize (2 * собственная емкость)


для i в диапазоне (self.n-1, index-1, -1):
self.A [i + 1] = self.A [i]


self.A [index] = элемент
self.n + = 1



def удалить (самостоятельно):

если self.n == 0:
print («Массив пуст, удаление невозможно»)
возвращение

себя.A [self.n-1] = 0
self.n- = 1


def removeAt (self, index):


если self.n == 0:
print («Массив пуст, удаление невозможно»)
возвращение

если index <0 или index> = self.n:
return IndexError («Индекс выходит за рамки .... удаление невозможно»)

если index == self.n-1:
self.A [index] = 0
self.n- = 1
возвращение

для i в диапазоне (index, self.n-1):
self.A [i] = self.A [i + 1]


self.A [self.n-1] = 0
self.n- = 1


def _resize (self, new_cap):

B = self.make_array (новый_кап)

для k в диапазоне (self.п):
B [k] = self.A [k]

self.A = B
self.capacity = new_cap

def make_array (self, new_cap):

return (new_cap * ctypes.py_object) ()

 

Пояснение:

Сначала мы создали класс динамического массива, который будет вести себя как список Python. Давайте подробно разберемся с различными функциями:

def __init __ (self):
  • self.n -> подсчитать фактическое количество элементов
  • self.capacity -> емкость по умолчанию установлена ​​как 1
  • self.A -> массив с заданной емкостью
def __len __ (self):
  • Возвращает количество элементов, хранящихся в массиве
def __getitem __ (self, k):
  • Вернуть элемент в позиции k
  • Сначала он проверяет, находится ли позиция k в границах массива
  • Если она находится в пределах массива, возвращается элемент в этой позиции
def добавить (self, ele):
  • Добавить элемент в конец массива
  • Если в массиве недостаточно доступной емкости, размер массива удваивается.
  • self.n устанавливается на индекс элемента и увеличивается на единицу
def insertAt (self, item, index):
  • Вставить данный элемент в указанный индекс
def delete (self):
  • Удалить элемент массива с конца массива
def removeAt (self, index):
  • Удалить элемент по указанному индексу
def _resize (self, new_cap):
  • Изменить размер массива до большего размера
  • Объявить новый массив большего размера
  • Ссылка на все существующие значения
  • Вызвать новый больший массив
  • Сбросить емкость
def make_array (self, new_cap ):
  • Вернуть новый массив с емкостью new_cap

Обязательно прочитать

Вывод:

На этом мы подошли к концу данной статьи.Динамический массив Python относительно прост при использовании Python, поскольку список сам действует как динамический массив. Однако можно реализовать собственный код на Python с помощью модуля ctype.

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

Счастливого питонинга!

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

В сентябре 2018 года мы представили формулы динамического массива.Формулы динамического массива могут автоматически заполнять или «перетекать» в соседние пустые ячейки и устранять необходимость в устаревших формулах массива Ctrl + Shift + Enter (CSE). При открытии книги, содержащей формулы динамического массива в старой версии Excel, необходимо учитывать некоторые соображения совместимости.

Особенности

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

  • Ниже приведены примеры функции MUNIT, введенной как формула динамического массива и как устаревшая формула CSE. Обратите внимание, что унаследованные формулы массива CSE очень похожи на формулы динамического массива. Основное отличие состоит в том, что они не могут изменять размер и не имеют границы разлива.Для сравнения этих двух см .: Формулы динамических массивов и унаследованные формулы массивов CSE.

Динамический массив

Устаревшая CSE

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

Нужна дополнительная помощь?

Вы всегда можете спросить эксперта в сообществе специалистов по Excel или получить поддержку в сообществе Answers.

См. Также

ФИЛЬТР функция

СЛУЧАЙНАЯ функция

ПОСЛЕДОВАТЕЛЬНОСТЬ функция

Функция СОРТИРОВКА

Функция СОРТБИ

УНИКАЛЬНАЯ функция

#ПРОЛИВАТЬ! ошибки в Excel

Поведение разлитого массива

Оператор неявного пересечения: @

% PDF-1.4 % 592 0 объект > эндобдж xref 592 57 0000000016 00000 н. 0000001491 00000 н. 0000001686 00000 н. 0000001758 00000 н. 0000002027 00000 н. 0000004491 00000 н. 0000004969 00000 н. 0000005008 00000 н. 0000005637 00000 п. 0000006493 00000 н. 0000007298 00000 н. 0000007704 00000 н. 0000007965 00000 п. 0000008079 00000 п. 0000009459 00000 н. 0000009854 00000 н. 0000010140 00000 п. 0000010503 00000 п. 0000012198 00000 п. 0000012498 00000 п. 0000012938 00000 п. 0000013221 00000 п. 0000013262 00000 п. 0000014054 00000 п. 0000014201 00000 п. 0000014224 00000 п. 0000014524 00000 п. 0000015323 00000 п. 0000016589 00000 п. 0000016611 00000 п. 0000016667 00000 п. 0000017645 00000 п. 0000017667 00000 п. 0000017775 00000 п. 0000018703 00000 п. 0000018726 00000 п. 0000019991 00000 п. 0000020014 00000 н. 0000021264 00000 н. 0000021286 00000 п. 0000022344 00000 п. 0000022367 00000 п. 0000023634 00000 п. 0000023657 00000 п. 0000026878 00000 п. 0000027740 00000 п.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *