Введение 8 Этапы создания Windowsприложения 8
Скачать 6.98 Mb.
|
7.4. Определение количества элементов массива, удовлетворяющих некоторому условиюОпределение количества элементов массива, удовлетворяющих некоторому условию, выполняется практически также как и при обработке совокупности чисел (см. раздел 6.1.3). До начала обработки массива количество нужных элементов полагается равным нулю. На каждом шаге цикла проверяем, соответствует ли данный элемент поставленному условию. Если значение элемента удовлетворяет условию, то искомое количество увеличивается на единицу. Рассмотрим особенности программной реализации данного алгоритма на примере задачи определения количества положительных элементов в массиве. Объявляем переменную для хранения результатов вычислений. Так как количество элементов – всегда является целым числом, то эта переменная будет иметь тип Integer. Dim kol As Integer До начала анализа полагаем количество искомых элементов равным нулю. kol = 0 Организуем цикл для определения количества положительных элементов. Элементы массива последовательно пронумерованы от 0 до n. Следовательно, счетчик цикла должен изменяться в этом же диапазоне. Тогда на i-м шаге цикла мы будем обрабатывать элемент массива с номером i. For i = 0 To n На каждом шаге цикла проверяем, является ли текущий элемент массива положительным. If a(i) > 0 Then Если да, то количество положительных элементов увеличивается на единицу. kol += 1 End If Next После завершения основного цикла выводим полученные результаты. Сначала выводим горизонтальную черту, чтобы зрительно отделить результаты от исходных данных. lstA.Items.Add("-------------------------------") Анализируем полученное значение. If kol = 0 Then Если количество положительных элементов равно нулю, значит, в массиве нет ни одного положительного элемента. В этом случае вместо ответа выводим поясняющий текст. lstA.Items.Add("Нет положительных элементов") Else В противном случае выводим найденное количество положительных элементов. lstA.Items.Add("Количество положительных =" + _ Str(kol)) End If Полный текст программы представлен в приложении 23. Пример работы программы приведен на рис. 38. Рис. 38. Пример работы программы определения количества положительных элементов в массиве 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. Примеры работы программы вычисления среднего арифметического четных и среднего геометрического нечетных элементов массива |