Организация программ обработки одномерных массивов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Организация программ обработки одномерных массивов



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

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

Если за каждым элементом массива закреплен только один индекс - его порядковый номер, то такой массив называется одномерным.

Пример: числовая последовательность четных натуральных чисел 2, 4, 6, ¼, N представляет собой одномерный массив, элементы которого можно обозначить А(1)=2, А(2)=4, А(3)=6, ¼, А(К)=2 × (К+1), где К - номер элемента, а 2, 4, 6, ¼, N - значения. Индекс (порядковый номер элемента) записывается в круглых скобках после имени массива. Например, A(7) - седьмой элемент массива А; D(6) - шестой элемент массива D.

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

Статические массивы При объявлении такого массива значения его верхней и нижней границ не могут быть изменены в программе.

Данный вид массивов описывается так же, как и переменные - при помощи служебного слова Dim с последующим указанием типа после служебного слова As. При этом может быть указана как верхняя граница, так и обе границы одновременно. Например,

Dim A(9) As Integer

Dim B(l To 10) As Single

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

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

Описание динамических массивов осуществляется в два этапа:

1. объявить массив с использованием служебного слова Dim, но без указания размерности;

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

Например,

Dim arrA () As Integer ‘Описание типа массива
n=InputBox(“Введите размерность массива”) ‘Ввод значения размерности в диалоговое окно ввода
ReDim arrA(n) As Integer ‘Указание размерности

С элементами массива удобно работать, используя цикл For. В этом случае в качестве счетчика цикла будет использоваться значение индекса элемента. Цикл ввода элементов массива с последующим их выводом в окно Immediate на языке VBA можно записать как показано в Листинге 9 и Листинге 10.

Листинг 9. Введение последовательности чисел 1, 2, –5, 6, –111, 0 в память компьютера

Sub Ввод_статического_массива()

Dim i, N As Integer

Dim A(6) As Single

For i = 1 To 6

A(i) = InputBox("Введите" & i & "-й элемент массива")

Debug.Print i; "-й элемент ", A(i)

Next i

End Sub

Листинг 10. Заполнение одномерного массива элементами, отвечающими данному соотношению: a 1=1; a 2=1; ai = ai –2+ ai –1 (i = 3, 4, ¼, n)

Sub Ввод_динамического_массива()

Dim i, N As Integer

Dim A() As Single

N = InputBox("Введите количество элементов")

ReDim A(N) As Single

A(1) = 1

A(2) = 1

For i = 3 To N

A(i) = A(i - 1) + A(i - 2)

Next i

For i = 1 To N

Debug.Print i; "-й элемент ", A(i)

Next i

End Sub

В пункте 2.6.4 были построены математические модели и блок-схемы наиболее распространенных алгоритмов обработки одномерных массивов. Рассмотрим примеры программ, где алгоритм представляет собой обработку массива данных.

Листинг 11. Определение общей и средней суммы оборота

Sub Пример7_1()

Dim A() As Single

Dim S, C As Single

Dim i, N As Integer

N = InputBox("Введите количество элементов массива")

ReDim A(N) As Single

For i = 1 To N

A(i) = InputBox("Введите" & i & "-й элемент массива")

Debug.Print i; "-й оборот ", A(i)

Next i

S = 0

For i = 1 To N

S = S + A(i)

Next i

С = S / N

Debug.Print "общая сумма оборота за месяц= "; S

Debug.Print "средняя сумма оборота за месяц= "; С

End Sub

Примечание. Порядок вычисления произведения элементов массива такой же, как показано в Листинге 11. Отличие в том, что первоначальное значение произведения Р = 1 и формула для накопления произведения имеет вид: P = P * A(i).

Листинг 12. Нахождение количества дней с оборотом, равным плану D

Sub Пример7_2()

Dim A() As Single

Dim D As Single

Dim i, K, N As Integer

D = InputBox("Введите план оборота за день")

N = InputBox("Введите количество элементов массива")

ReDim A(N) As Single

For i = 1 To N

A(i) = InputBox("Введите" & i & "-й элемент массива")

Debug.Print i; "-й оборот ", A(i)

Next i

K = 0

For i = 1 To N

If A(i) = D Then

K = K + 1

End If

Next i

Debug.Print "количество дней c оборотом "; D; "= "; K

End Sub

Листинг 13. Определение максимального оборота предприятия за данный период и номера дня с максимальным оборотом

Sub Пример7_3()

Dim A() As Single

Dim M As Single

Dim i, NM, N As Integer

N = InputBox("Введите количество элементов массива")

ReDim A(N) As Single

For i = 1 To N

A(i) = InputBox("Введите" & i & "-й элемент массива")

Debug.Print i; "-й оборот ", A(i)

Next i

M = A(1)

NM = 1

For i = 2 To N

If A(i) > M Then

M = A(i)

NM = i

End If

Next i

Debug.Print "Номер дня с максимальным оборотом="; NM

Debug.Print "Максимальный оборот предприятия= "; M

End Sub

Листинг 14. Организация нового массива, содержащего информацию об ежедневном отчислении денежных средств в дополнительный фонд

Sub Пример7_4()

Dim A() As Single

Dim B() As Single

Dim i, N As Integer

N = InputBox("Введите количество элементов массива")

ReDim A(N) As Single

ReDim B(N) As Single

For i = 1 To N

A(i) = InputBox("Введите" & i & "-й элемент массива")

Debug.Print i; "-й оборот "; A(i)

Next i

For i = 1 To N

B(i) = 0.05 * A(i)

Next i

For i = 1 To N

Debug.Print i; "-е отчисление "; B(i)

Next i

End Sub

Листинг 14. Накопление общего веса продуктов, срок хранения которых менее 1 месяца

Sub Пример8()

Dim K() As Single

Dim C() As Single

Dim P() As String

Dim S As Single

Dim i, N As Integer

N = InputBox("Введите количество элементов массива")

ReDim K(N) As Single

ReDim C(N) As Single

ReDim P(N) As String

For i = 1 To N

P(i) = InputBox("Введите" & i & "-й продукт")

K(i) = InputBox("Введите" & i & "-й вес")

C(i) = InputBox("Введите" & i & "-й срок хранения")

Next i

Debug.Print "N", "Наименование", "Вес, кг", "Срок хранения, дни"

S = 0

For i = 1 To N

If C(i) < 30 Then

S = S + K(i)

End If

Debug.Print i, P(i), K(i), C(i)

Next i

Debug.Print "Вес продуктов со сроком хранения меньше месяца= "; S

End Sub

Листинг 15. Сортировка веса продуктов по возрастанию

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

…………………………

For i = 1 To N - 1

l = i

For j = i To N

If K(j) <= K(l) Then l = j

Next j

Pr = K(i): K(i) = K(l): K(l) = Pr

Next i

For i = 1 To N

Debug.Print "K("; i; ")= "; K(i)

Next i

…………………………



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 95; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.216.163 (0.016 с.)