Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Организация программ обработки одномерных массивовСодержание книги
Поиск на нашем сайте Массив данных в программе рассматривается как переменная структурированного (составного) типа. Массиву присваивается имя, посредством которого можно ссылаться как на массив данных в целом, так и на любую из его компонент. Переменные, представляющие элементы массивов, называются переменными с индексами в отличие от простых переменных, представляющих в программе элементарные данные. Индекс в обозначении компонент массивов может быть константой, переменной или выражением целого типа. Если за каждым элементом массива закреплен только один индекс - его порядковый номер, то такой массив называется одномерным. Пример: числовая последовательность четных натуральных чисел 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. Например,
С элементами массива удобно работать, используя цикл 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; просмотров: 183; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.196 (0.01 с.) |