
- •Содержание
- •Введение
- •1 Рабочая программа по дисциплине «информатика»
- •Раздел 2. Алгоритмизация и программирование
- •2 Основы алгоритмизации
- •2.1 Основные этапы подготовки и решения задачи на компьютере
- •2.2 Постановка задачи. Разработка математической модели
- •2.3 Алгоритм и его свойства
- •2.4 Форма записи алгоритма на естественном языке
- •2.5 Графическая форма записи алгоритма
- •2.6 Типовые вычислительные процессы и структуры алгоритмов
- •2.6.1 Линейный вычислительный процесс
- •2.6.2 Разветвляющийся вычислительный процесс
- •2.6.3 Циклический вычислительный процесс
- •2.6.4 Алгоритмы обработки одномерных информационных массивов
- •2.6.5 Алгоритмы обработки двумерных информационных массивов
- •3 Язык программирования vba
- •3.1 Элементы языка
- •3.2 Программирование алгоритмов линейной структуры
- •3.3 Программирование алгоритмов разветвленной структуры
- •3.4 Программирование алгоритмов циклической структуры
- •3.5 Организация программ обработки одномерных массивов
- •3.6 Организация программ обработки двумерных массивов
- •4 Контрольная работа и методические указания по её выполнению
- •4.1 Выбор варианта
- •4.2 Задание 1. Варианты задач
- •4.3 Задание 2. Варианты задач
- •4.4 Задание 3. Теоретический вопрос
- •4.5 Методические указания по выполнению контрольной работы
- •4.5.1 Пример выполнения задания 1
- •4.5.2 Пример выполнения задания 2
- •4.5.3 Пример выполнения задания 3
- •Вопросы для подготовки к экзамену
- •Программирование алгоритмов циклической структуры.
- •Литература
- •Указатель
- •650992, Г. Кемерово, пр. Кузнецкий, 39. Тел. 25-75-00.
3.5 Организация программ обработки одномерных массивов
Массив данных в программе рассматривается как переменная структурированного (составного) типа. Массиву присваивается имя, посредством которого можно ссылаться как на массив данных в целом, так и на любую из его компонент.
Переменные, представляющие элементы массивов, называются переменными с индексами в отличие от простых переменных, представляющих в программе элементарные данные. Индекс в обозначении компонент массивов может быть константой, переменной или выражением целого типа.
Если за каждым элементом массива закреплен только один индекс - его порядковый номер, то такой массив называется одномерным.
Пример: числовая последовательность четных натуральных чисел 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
В данном случае оба массива содержат одно и то же количество элементов. Однако нумерация элементов массива А начинается с нуля, в то время как нумерация элементов В - с единицы. Для явного указания границ следует использовать служебное слово То, в то время как при описании стандартного массива с нумерацией элементов от нуля необходимо просто указать значение верхней границы.
Динамические массивы используются в том случае, когда количество элементов массива заранее неизвестно и будет определяться в процессе выполнения программы.
Описание динамических массивов осуществляется в два этапа:
-
объявить массив с использованием служебного слова Dim, но без указания размерности;
-
в нужном месте программы описать данный массив с требуемым значением для размерности при помощи оператора 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. Заполнение одномерного массива элементами, отвечающими данному соотношению: a1=1; a2=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
…………………………