Пример 4.7.2-1. Написать процедуры ввода/вывода, которые могут использоваться в алгоритмах формирования и отображения одномерных массивов

Процедуры ввода и вывода для одномерных массивов представлены на
рис. 4.7.2-1–4.7.2-3.

 

'Процедура ввода элементов массива типа Single с клавиатуры Sub vvodSngMac15(ByRef a() As Single, ByVal L As ListBox) Dim i As Integer For i = 0 To UBound(a) a(i) = CSng(Val(InputBox("Введите" & i & "-й элемент")) Next i End Sub

 

Рис. 4.7.2-1. Процедура ввода элементов массива Single с клавиатуры

Примера 4.7.2-1

 

 

'Процедура формирования массива случайным образом на интервале [2;4] Sub vvodSngRnd16(ByRef a() As Single) Dim i As Integer For i = 0 To UBound(a) a(i) = 2 + 2 * Rnd() Next i End Sub

Рис. 4.7.2-2. Процедура формирования массива случайным образом

Примера 4.7.2-1

'Процедура форматного вывода массива типа Single в ListBox Sub vivodSngMac17(ByRef a() As Single, ByVal L As ListBox) Dim i As Integer Dim m As String = "" For i = 0 To UBound(a) m = m + Format(a(i), "0.000") + Space(4) Next i If m ="" Then m = "массив пуст" L.Items.Add(m) End Sub

 

Рис. 4.7.2-3. Процедура форматного вывода массива Single в ListBox

Примера 4.7.2-1

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

 

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

 

Dim Sigma(5) As Integer, m(3) As Single

 

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

Одно из решений проблемы – выделять память под массив не на этапе компиляции – статически, а после определения его размера – динамически. В качестве размера массива может быть использована переменная, значение которой вычисляется или вводится перед объявлением массива:

 

РазмерМассива = Выражение или РазмерМассива = Cint(TextBox1.Text) Dim ИмяМассива(РазмерМассива) As Тип

 

Другое решение проблемы – разделить в программе объявление массива и определение его размера – выделение памяти под него.

При объявлении массива размер не указывается:

 

Dim ИмяМассива() As Тип

 

Значение размерности определяется позже (вычисляется или вводится) непосредственно перед его использованием, и тогда для выделения памяти уже объявленному массиву с указанием конкретной размерности массива используется оператор ReDim или ReDim Preserve:

 

ReDim ИмяМассива (РазмерМассива), ReDim Preserve ИмяМассива (РазмерМассива)

 

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

В следующем примере каждый раз при добавлении нового элемента к массиву происходит увеличение размера массива на единицу:

 

n = n + 1 ReDim Preserve Mas(n) Mas(n) = n + 4

 

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

 

Dim Мас() As String 'объявление динамического массива

 

Затем, в момент, когда необходимо распределить под него память, используется оператор ReDim:

 

ReDim Мас(9) ' или ReDim Preserve Мас(9)

 

Второй вариант используется для изменения размера массива и для сохранения содержимого.

На рис. 4.7.4-7, рис. 4.7.4-9 и рис. 4.7.4-10 приведены примеры программных кодов, использующие динамические массивы.

 

 

4.7.4. Базовые алгоритмы обработки
одномерных массивов


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: