
- •7. Одномерные массивы 114
- •8. Обработка двумерных массивов (матриц) 162
- •9. Обработка строк 183
- •10. Тип данных, определенный пользователем. Структуры 214
- •11. Использование подпрограмм 228
- •Приложение 52 310 Список литературы 313 Введение
- •1. Этапы создания Windows-приложения
- •2. Среда Visual Basic 2005
- •2.1. Структура среды Visual Basic 2005
- •2.2. Создание нового проекта
- •2.3. Сохранение проекта
- •2.4. Выполнение приложения
- •2.5. Основные команды среды Visual Basic 2005
- •2.6. Методы тестирования
- •2.7. Отладка приложений в среде vb
- •3. Разработка интерфейса в среде vb. Основные элементы управления
- •3.1. Метка
- •3.2. Текстовое поле
- •3.3. Кнопка
- •3.4. Окно списка
- •3.5. Выравнивание положения элементов управления
- •4. Программа линейной структуры
- •4.1. Понятие переменной
- •4.2. Типы данных
- •4.3. Объявление переменных
- •4.4. Оператор присваивания
- •Оператор присваивания работает справа налево.
- •4.5. Константы
- •4.6. Арифметические операции
- •4.7. Математические функции
- •4.8. Арифметическое выражение
- •4.9. Окно ввода (InputBox)
- •4.10. Окно вывода сообщения (MsgBox)
- •4.11. Пример. Вычисление площади треугольника
- •4.12. Пример. Нахождение цифр числа
- •5. Организация ветвлений
- •5.1. Логические константы и переменные
- •5.2. Операции сравнения
- •5.3. Логические операции
- •5.4. Логическое выражение
- •5.5. Условный оператор
- •5.6. Функция iIf
- •5.7. Оператор множественного ветвления ElseIf
- •5.8. Оператор выбора Select Case
- •5.9. Оператор безусловного перехода GoTo
- •5.10. Пример. Решение линейного уравнения
- •5.11. Пример. Программа-калькулятор
- •6. Программирование повторений
- •6.1. Цикл со счетчиком
- •6.1.1. Табуляция функции
- •6.1.2. Вычисление факториала
- •6.1.3. Обработка совокупности чисел с известным числом элементов
- •6.2. Цикл с условием
- •6.2.1. Ввод с проверкой
- •6.2.2. Обработка совокупности чисел с неизвестным числом элементов
- •6.2.3. Вычисление суммы ряда по общей формуле
- •Вычисление суммы ряда с использованием рекуррентного соотношения
- •6.2.5. Вычисление произведения ряда
- •Решение нелинейных уравнений методом простой итерации
- •7. Одномерные массивы
- •Массивы всегда обрабатываются в цикле.
- •7.1. Ввод массива
- •Вывод массива в окно списка и в текстовое поле
- •7.3. Вычисление суммы и произведения элементов массива
- •7.4. Определение количества элементов массива, удовлетворяющих некоторому условию
- •7.5. Вычисление среднего арифметического и среднего геометрического элементов массива, удовлетворяющих некоторому условию
- •7.6. Нахождение максимального элемента массива
- •7.7. Нахождение минимального элемента массива, удовлетворяющего некоторому условию
- •7.8. Поиск первого элемента массива, удовлетворяющего некоторому условию
- •7.9. Поиск последнего элемента массива, удовлетворяющего некоторому условию
- •7.10. Замена одного элемента массива
- •7.11. Замена всех элементов массива, удовлетворяющих некоторому условию
- •7.12. Перестановка местами двух элементов массива
- •7.13. Формирование нового массива из некоторых элементов исходного массива
- •7.14. Проверка совпадения всех элементов массива
- •7.15. Проверка упорядоченности всех элементов массива
- •7.16. Сортировка массива методом пузырька
- •7.17. Линейная сортировка массива (методом поиска минимума)
- •Никогда нельзя использовать одновременно оба способа перестановки элементов массива.
- •8. Обработка двумерных массивов (матриц)
- •8.1. Ввод прямоугольной матрицы
- •8.2. Вывод прямоугольной матрицы в окно списка и в текстовое поле
- •8.3. Поиск максимального элемента матрицы
- •8.4. Обработка матрицы по строкам
- •8.5. Обработка матрицы по столбцам
- •8.6. Обработка квадратных матриц
- •Для обработки элементов, стоящих на любой диагонали, достаточно одного цикла. Для обработки элементов, принадлежащих к одному из треугольников, необходимо использовать вложенные циклы.
- •9. Обработка строк
- •9.1. Основные функции обработки строк
- •9.2. Посимвольная обработка строки
- •9.3. Формирование массива слов строки
- •9.4. Формирование строки из массива слов
- •9.5. Слова-палиндромы
- •9.6. Выделение чисел из строки
- •9.7. Сравнение строк
- •9.8. Обработка многострочного текста
- •10. Тип данных, определенный пользователем. Структуры
- •10.1. Описание структуры. Область видимости. Понятие метода
- •10.2. Оператор With
- •10.3. Ввод массива структур
- •10.4. Вывод массива структур
- •10.5. Поиск в массиве структур
- •10.6. Формирование нового массива из некоторых элементов исходного массива
- •10.7. Сортировка массива структур
- •11. Использование подпрограмм
- •11.1. Определение процедуры и функции. Описание процедуры и функции
- •11.2. Передача параметров по ссылке и по значению
- •11.3. Формальные параметры и фактические переменные
- •11.4. Локальные и глобальные переменные
- •11.5. Static-переменные
- •Приложение 1
- •Приложение 2
- •Приложение 3
- •Приложение 4
- •Приложение 5
- •Приложение 6
- •Приложение 7
- •Приложение 8
- •Приложение 9
- •Приложение 10
- •Приложение 11
- •Приложение 12
- •Приложение 13
- •Приложение 14
- •Приложение 15
- •Приложение 16
- •Приложение 17
- •Приложение 18
- •Приложение 19
- •Приложение 20
- •Приложение 21
- •Приложение 22
- •Приложение 23
- •Приложение 24
- •Приложение 25
- •Приложение 26
- •Приложение 27
- •Приложение 28
- •Приложение 29
- •Приложение 30
- •Приложение 31
- •Приложение 32
- •Приложение 33
- •Приложение 34
- •Приложение 35
- •Приложение 36
- •Приложение 37
- •Приложение 38
- •Приложение 39
- •Приложение 40
- •Приложение 41
- •Приложение 42
- •Приложение 43
- •Приложение 44
- •Приложение 45
- •Приложение 46
- •Приложение 47
- •Приложение 48
- •Приложение 49
- •Приложение 50
- •Приложение 51
- •Приложение 52
- •Список литературы
7.5. Вычисление среднего арифметического и среднего геометрического элементов массива, удовлетворяющих некоторому условию
Алгоритмы решения задач вычисления среднего арифметического и среднего геометрического элементов массива, удовлетворяющих некоторому условию, представляют собой комбинацию алгоритмов определения количества элементов массива, удовлетворяющих некоторому условию, и вычисления суммы и произведения элементов массива соответственно. Для вычисления среднего арифметического необходимо найти сумму и количество элементов, удовлетворяющих поставленному условию. А для вычисления среднего геометрического надо найти произведение и количество нужных элементов (определение среднего геометрического нескольких чисел приведено в разделе 6.1.3). Рассмотрим особенности программной реализации этих алгоритмов на примере задачи вычисления среднего арифметического четных элементов и среднего геометрического нечетных элементов массива.
Объявляем переменные, необходимые для решения задачи. Переменные для хранения суммы и произведения всегда будут иметь тот же тип данных, что и элементы массива.
Dim summa, proiz As Integer
Переменные для хранения количества четных (kol1) и нечетных (kol2) элементов массива, очевидно, будут иметь целый тип.
Dim kol1, kol2 As Integer
Среднее арифметическое получается в результате деления, поэтому оно всегда имеет рациональный тип. То же относится и к среднему геометрическому, которое получается в результате извлечения корня некоторой степени.
Dim arifm, geom As Single
Задаем начальные значения: для суммы – ноль, для произведения – единица.
summa = 0
proiz = 1
До начала анализа элементов массива оба количества полагаются равными нулю.
kol1 = 0
kol2 = 0
Организуем цикл для анализа элементов массива. Элементы массива последовательно пронумерованы от 0 до n. Следовательно, счетчик цикла должен изменяться в этом же диапазоне. Тогда наi-м шаге цикла мы будем обрабатывать элемент массива с номеромi.
For i = 0 To n
На каждом шаге проверяем, является ли очередной элемент массива четным числом. Четные числа делятся на два без остатка. Другими словами, для четных чисел остаток при делении на два равен нулю.
If a(i) Mod 2 = 0 Then
Если текущий элемент массива является четным числом, то увеличиваем на единицу количество четных элементов массива, а к сумме добавляем значение элемента массива.
kol1 += 1
summa += a(i)
Else
В противном случае, если элемент массива является нечетным числом, мы увеличиваем на единицу количество нечетных чисел, а накопленное произведение умножаем на значение текущего элемента массива.
kol2 += 1
proiz *= a(i)
End If
Next
После окончания основного цикла анализируем полученные результаты, вычисляем значения среднего арифметического и среднего геометрического, если это возможно, и выводим ответы в окно списка. Чтобы зрительно отделить исходные данные от результатов вычислений, первым делом выведем горизонтальную черту.
lstA.Items.Add("-------------------------------")
Анализируем количество четных чисел.
If kol1 = 0 Then
Если количество четных чисел равно нулю, значит, в массиве нет ни одного четного числа. В этом случае невозможно вычислить их среднее арифметическое. Поэтому вместо ответа надо вывести поясняющий текст.
lstA.Items.Add("Нет четных")
Else
В противном случае мы вычисляем среднее арифметическое.
arifm = summa / kol1
Полученный результат мы выводим в окно списка.
lstA.Items.Add("Сред. арифм. четных = " + _
Str(arifm))
End If
Теперь анализируем количество нечетных чисел.
If kol2 = 0 Then
Если количество нечетных чисел равно нулю, значит, в массиве нет ни одного нечетного числа. В этом случае невозможно вычислить их среднее арифметическое. Поэтому вместо ответа надо вывести поясняющий текст.
lstA.Items.Add("Нет нечетных")
Else
Иначе мы анализируем знак подкоренного выражения.
If proiz > 0 Then
Если произведение нечетных чисел положительно, то мы можем вычислить их среднее геометрическое без дополнительных преобразований.
geom = proiz ^ (1 / kol2)
Полученное значение выводим в окно списка.
lstA.Items.Add("Сред. геом. нечетных = " + _
Str(geom))
Else
В противном случае (если подкоренное выражение отрицательное) мы должны проверить четность степени корня.
If kol2 Mod 2 = 0 Then
Если требуется извлечь корень четной степени, то задача вычисления среднего геометрического не имеет решения, так как извлечение корня четной степени из отрицательного числа невозможно. Поэтому вместо ответа выводим поясняющий текст.
lstA.Items.Add("Невозможно " + _
" вычислить сред. геом.")
Else
Иначе, если степень корня нечетная, то для вычисления корня потребуется составить арифметическое выражение. В Visual Basic 2005 операция извлечения корня произвольной степени определена только для положительных подкоренных выражений. Поэтому, когда необходимо извлечь корень нечетной степени из отрицательного числа, поступают следующим образом. Корень извлекается из модуля подкоренного выражения, а у полученного результата знак меняется на противоположный.
geom = -Math.Abs(proiz) ^ (1 / kol2)
Полученный результат выводим в окно списка.
lstA.Items.Add("Сред. геом. " + _
"нечетных = " + Str(geom))
End If
End If
End If
Полный текст программы представлен в приложении 24. Примеры работы программы приведены на рис. 39.
Рис. 39. Примеры работы программы вычисления среднего арифметического четных и среднего геометрического нечетных элементов массива