- •Содержание
- •Введение
- •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.6 Организация программ обработки двумерных массивов
Для описания многомерных массивов используются конструкции, аналогичные рассмотренным в п. 3.5, однако отличие состоит в том, что границы размерностей указываются через запятую, например:
Dim A(3, 4) As Integer ‘Объявлена таблица 4 строки, 5 столбцов
Dim B(l To 4, 1 To 5) As Single ‘Объявлена таблица 4 строки, 5 столбцов
В данном примере объявленные массивы являются двумерными и содержат одинаковое количество элементов, но начальная нумерация элементов различна, так массив A нумеруется начиная с нуля, В - начиная с единицы.
Аналогом двумерного массива может быть любая таблица, в том числе и электронная, заполненная любым набором однотипных данных.
Двумерные массивы называют матрицами размерностью n строк и m столбцов.
При обработке многомерных массивов используются вложенные циклы For … Next. Например, необходимо ввести значения элементов двумерного массива А.
Листинг 16. Фрагмент программы заполнения двумерного массива A
…………………………
Dim A() As Single
Dim m, n, i, j As Integer
n = InputBox(“Введите количество строк”)
m = InputBox(“Введите количество столбцов”)
ReDim A(1 To n, 1 To m)
For i = 1 То n
For j = 1 To m
A(i, j) = InputBox(“Введите элемент массива ” & i & “строки ” & j & “столбца ”)
Debug.Print A(i, j); ‘вывод элементов в одной строке
Next j
Debug.Print ‘вывод с новой строки
Next i
…………………………
В данном фрагменте при i=1 внутренний цикл по j работает n раз и производится ввод элементов первой строки, затем при i=2 внутренний цикл по j работает так же n раз и так пока i не станет больше m.
Оператор Debug.Print с пустым списком вывода используется для заполнения позиций, оставшихся после вывода i-ой строки, пробелами, поэтому следующая строка матрицы выводится с начала новой строки окна Immediate. Например, см. рис. 25:
Рис. 25 Результаты вывода элементов массива в виде таблицы
В пункте 2.6.5 были построены математические модели и блок-схемы наиболее распространенных алгоритмов обработки двумерных массивов. Рассмотрим примеры программ, где алгоритм представляет собой обработку двумерного массива данных. В данных примерах ввод массивов осуществляется при помощи функции Rnd() – датчика случайных чисел (см. таблицу 6).
Листинг 17. Нахождение общего выпуска продукции каждого вида
Sub Пример10_1()
Randomize
Dim VP() As Single, S() As Single
Dim n As Integer, m As Integer
Dim i As Integer, j As Integer
n = InputBox("Введите число строк n")
m = InputBox("Введите число столбцов m")
ReDim VP(1 To n, 1 To m), S(1 To n)
For i = 1 To n
For j = 1 To m
VP(i, j) = Int(60 * Rnd() + 50) 'Целая часть случ. чисел от 50 до 110
Debug.Print VP(i, j);
Next j
Debug.Print
Next i
For i = 1 To n
S(i) = 0
For j = 1 To m
S(i) = S(i) + VP(i, j)
Next j
Next i
For i = 1 To n
Debug.Print "Общий выпуск продукции " & i & "= " & S(i)
Next i
End Sub
Листинг 18. Нахождение максимального выпуска продукции каждого вида и месяца с максимальным выпуском
Sub Пример10_2()
Randomize
Dim VP() As Single, Max() As Single
Dim K() As Integer
Dim n As Integer, m As Integer
Dim i As Integer, j As Integer
n = InputBox("Введите число строк n")
m = InputBox("Введите число столбцов m")
ReDim VP(1 To n, 1 To m), Max(1 To n)
ReDim K(1 To n) As Integer
For i = 1 To n
For j = 1 To m
VP(i, j) = Int(60 * Rnd() + 50) ' Целая часть случ. чисел от 50 до 110
Debug.Print VP(i, j);
Next j
Debug.Print
Next i
For i = 1 To n
Max(i) = VP(i, 1)
K(i) = 1
For j = 2 To m
If VP(i, j) > Max(i) Then
Max(i) = VP(i, j)
K(i) = j
End If
Next j
Next i
For i = 1 To n
Debug.Print "max выпуск продукции" & i & "=" & Max(i) & "месяц- " & K(i)
Next i
End Sub