Главная страница
Навигация по странице:

  • Совокупность всегда обрабатывается в пределах одного цикла.

  • Вычисление суммы чисел.

  • Вычисление произведения чисел.

  • Определение количества четных чисел в совокупности.

  • Вычисление среднего арифметического положительных чисел в совокупности.

  • Вычисление среднего геометрического отрицательных чисел в совокупности.

  • Поиск максимального числа в совокупности.

  • Поиск минимального числа, кратного трем.

  • Введение 8 Этапы создания Windowsприложения 8


    Скачать 6.98 Mb.
    НазваниеВведение 8 Этапы создания Windowsприложения 8
    АнкорVisual Basic 2005 (word97).doc
    Дата22.12.2017
    Размер6.98 Mb.
    Формат файлаdoc
    Имя файлаVisual Basic 2005 (word97).doc
    ТипРеферат
    #12532
    страница20 из 63
    1   ...   16   17   18   19   20   21   22   23   ...   63

    6. Программирование повторений


    Повторение – это многократное выполнение одного или нескольких действий алгоритма. Повторение – это еще одно проявление нелинейности алгоритма. Оно может быть реализовано явно (с помощью операторов цикла) или неявно (с помощью оператора безусловного перехода – см. раздел 5.9).

    Циклы делятся на две категории: циклы с известным числом повторений (циклы со счетчиком) и циклы с неизвестным числом повторений (циклы с условием). В первом случае для организации цикла используется специальная переменная (счетчик), значение которой меняется в заданном диапазоне с некоторым шагом. Во втором случае счетчика нет. Цикл продолжается пока выполняется некоторое условие. Его еще называют условием цикла.

    Классификация циклов приведена на рис. 24.


    Рис. 24. Классификация циклов

    6.1. Цикл со счетчиком


    Цикл со счетчиком применяется в тех случаях, когда можно точно определить, сколько раз должны повториться операторы программы. В Visual Basic 2005 цикл со счетчиком реализуется с помощью оператора For. Рассмотрим его синтаксис.

    For Счетчик = Нач. значение To Кон. Значение Step Шаг

    Операторы тела цикла

    Next

    В синтаксической структуре принято выделять две части: заголовок цикла (первая строка оператора цикла) и тело цикла (блок операторов, стоящих между строками For и Next). В старых версиях языка Basic после ключевого слова Next необходимо было указывать Счетчик цикла. В Visual Basic 2005 это является необязательным.

    Выполнение цикла со счетчиком происходит в несколько этапов.

    1. Заголовок цикла проверяется на отсутствие противоречий. Это возможно в двух случаях.

      • Если Начальное значение меньше Конечного Значения, то Шаг цикла должен быть больше нуля.

      • Если Начальное значение больше Конечного Значения, то Шаг цикла должен быть меньше нуля.

    Visual Basic 2005 позволяет не указывать Шаг в заголовке цикла, опуская при этом ключевое слово Step. В таких случаях Шаг цикла считается равным единице. Если заголовок цикла является противоречивым, то цикл выполняться не будет, а работа программы будет продолжена с оператора, стоящего после ключевого слова Next.

    1. Если в заголовке цикла нет противоречий, то переменная Счетчик становится равной Начальному значению.

    2. При данном значении Счетчика выполняются операторы тела цикла.

    3. Значение счетчика изменяется на величину Шага. Если Шаг положительный, то значение Счетчика будет увеличиваться. Если Шаг отрицательный – уменьшаться. Если в заголовке цикла шаг не указан, то значение Счетчика будет увеличиваться на единицу.

    4. Проверяется, попадает ли значение Счетчика в диапазон от Начального значения до Конечного значения. Если да, то происходит переход к пункту 3, и цикл выполняется еще раз. В противном случае работа цикла завершается.

    5. Если среди операторов тела цикла встречается оператор Exit For, то выполнение цикла после этого оператора сразу прекращается независимо от значения Счетчика.


    В качестве примеров работы цикла со счетчиком рассмотрим три задачи: построения таблицы значений функции, вычисление факториала и обработку совокупности числе с известным числом элементов.

    6.1.1. Табуляция функции


    Табуляция – это построение таблицы значений заранее заданной функции. Таблица строится на некотором отрезке изменения аргумента функции. Причем таблица строится не во всех точках отрезка, а только в некоторых. Существует два вида этой задачи.

    В первом случае известно, что точки на отрезке расположены равномерно и расстояние между ними одинаковое. Первая точка совпадает с началом отрезка. Исходными данными при этом являются: начало и конец отрезка и расстояние между двумя соседними точками (оно называется шаг табуляции). Такая задача называется табуляция с известным шагом.

    Во втором случае шаг табуляции неизвестен, но вместо него задано количество точек, расположенных на отрезке. Считается, что точки на отрезке расположены равномерно. Первая точка совпадает с началом отрезка, а последняя – с его концом. Исходными данными при этом являются: начало и конец отрезка и количество точек табуляции (другое название – количество узлов табуляции). Такая задача называется табуляция с известным числом узлов.

    Рассмотрим первый случай – табуляция с известным шагом. Построим таблицу для следующей функции.

    

    Возьмем отрезок , шаг табуляции обозначим h. Для ввода исходных данных будем использовать функцию InputBox и предусмотрим проверку правильности исходных данных. Исходные данные будем считать правильными, если левая граница отрезка меньше правой, а шаг h – положительный и не превышает длины отрезка. Результирующую таблицу значений будем выводить в окно списка lstResult. Внешний вид разработанной формы представлен на рис. 25. Обратите внимание, что форма предназначена для обоих типов табуляции. Полный текст программы приведен в приложении 11.


    Рис. 25. Экранная форма для задачи табуляции функции
    Разработку программы начнем с объявления переменных. Все необходимые нам переменные имеют тип Single.

    Dim a, b, h, x, y As Single

    Для организации повтора ввода данных в случае обнаружения ошибки пред блоком ввода поставим метку.

    vvod:

    Вводим с клавиатуры значения переменных a, b и h. Так как все эти переменные являются числами, то при вводе необходимо использовать преобразование Val.

    a = Val(InputBox("Введите начало отрезка"))

    b = Val(InputBox("Введите конец отрезка"))

    h = Val(InputBox("Введите шаг табуляции"))

    Проверяем правильность исходных данных. Ошибочными будут ситуации, когда левая граница отрезка больше, чем правая (a > b), когда шаг меньше или равен нулю (h <= 0) или когда шаг больше длины отрезка (h > b - a).

    If a > b Or h <= 0 Or h > b - a Then

    При обнаружении ошибки выводим сообщение и передаем управление на метку, стоящую перед блоком ввода, обеспечивая таким образом повторный ввод исходных данных.

    MsgBox("Неправильные данные")

    GoTo vvod

    End If

    Если исходные данные введены верно, то переходим к построению таблицы значений функции. Сначала очищаем окно списка от предыдущих результатов работы программы.

    lstResult.Items.Clear()

    Затем выводим в окно списка заголовок таблицы. Использование константы vbTab позволяет формировать колонки таблицы.

    lstResult.Items.Add("x" + vbTab + "y")

    Организуем цикл, который будет последовательно вычислять значение функции в каждой точке. В качестве счетчика цикла используем переменную x, в которой хранится значение аргумента функции. В соответствии с условием задачи значение аргумента должно меняться в пределах заданного отрезка. Поэтому начальное значение счетчика (аргумента) совпадает с левой границей отрезка, а конечное – с правой. Шаг цикла совпадает с шагом изменения аргумента.

    For x = a To b Step h

    Перед вычислением значения функции необходимо проверить, попадает ли значения аргумента в область допустимых значений. Для нашей функции недопустимыми являются те значения аргумента, при которых становится отрицательным подкоренное выражение или обращается в ноль знаменатель дроби.

    If x + 4 < 0 Or x = 0 Then

    Если значение переменной x не принадлежит области допустимых значений, то в результирующей таблице вместо значения функции надо вывести слово «Ошибка». Константа vbTab используется для формирования колонок таблицы.

    lstResult.Items.Add(Str(x) + vbTab + _

    "Ошибка")

    Else

    В противном случае, когда значение аргумент принадлежит области допустимых значений, вычисляем значение функции.

    y = Math.Sqrt(x + 4) + 1 / x

    В окно списка выводим значение аргумента и значение функции. Константа vbTab используется для формирования колонок таблицы.

    lstResult.Items.Add(Str(x) + vbTab + Str(y))

    End If

    Next

    На этом разработка программы завершена. Пример ее работы при следующих исходных данных (a = -10, b = 10, h = 2) приведен на рис. 26.


    Рис. 26. Пример работы программы табуляции функции
    Задача табуляции с известным числом узлов решается практически аналогично. Для этого необходимо вычислить шаг между двумя узлами. Это делается по формуле



    где n – количество узлов табуляции. Формула реализуется следующим образом.

    h = (b - a) / (n - 1)

    Эта строка вставляется непосредственно перед циклом For, и задача сводится к предыдущей. Текст программы табуляции функции с известным числом узлов приведен в приложении 12.

    6.1.2. Вычисление факториала


    Рассмотрим еще одно применение цикла For. Это задача вычисления факториала натурального числа.

    Факториалом натурального числа n называется произведение всех натуральных чисел от единицы до n включительно.



    Программная реализация этого процесса предполагает последовательное вычисление всех произведений. Сначала находится произведение 1 и 2. Полученный результат умножается на 3. Новый результат умножается на 4. И так далее до тех пор, пока не появится множитель n. Такой процесс называется вычисление произведения методом накопления. Рассмотрим программную реализацию этого алгоритма.

    Исходные данные будем вводить с помощью функции InputBox. Для вывода результата будем использовать функцию MsgBox. Поэтому на экранной форме будет находиться только кнопка, запускающая программу.

    Разработку программы начнем с описания переменных. Факториал числа является быстро растущей функцией. Поэтому для хранения результатов вычислений используют тип данных с максимальной емкостью. В Visual Basic 2005 это тип ULong. Он позволяет вычислять факториалы первых 20 чисел.

    Dim f As ULong

    Также нам потребуются две целых переменных: n – для хранения числа, факториала которого необходимо вычислить, i – для организации цикла. Так как значения этих переменных не будут превышать 20, то для них будем использовать тип Byte.

    Dim i, n As Byte

    Просим пользователя ввести число, факториал которого необходимо вычислить. Как всегда при вводе чисел используем преобразование Val.

    n = Val(InputBox("введите натуральное число n"))

    Начальное значение факториала полагаем равным единице, так как 1! = 1.

    f = 1

    Организуем цикл для вычисления факториала. Сомножители будут изменяться от 2 до n, что отображено в заголовке цикла.

    For i = 2 To n

    На каждом шаге цикла очередной сомножитель будет совпадать со значением счетчика i. Поэтому умножаем значение переменной f на i, а результат записываем обратно в переменную f вместо старого значения.

    f *= i

    Next

    После окончания цикла выводим полученные результаты. Знак плюс используется для соединения частей строки. Сначала выводим значение переменной n. Так как n – это число, то для его вывода необходимо использовать преобразование Str. Затем выводим знаки факториала и равенства. Наконец печатаем значение переменной f. Это и есть вычисленный факториал. Так как факториал – это число, то для его вывода используем преобразование Str.

    MsgBox(Str(n) + "! =" + Str(f))

    Полный текст рассмотренной программы приведен в приложении 13.

    6.1.3. Обработка совокупности чисел с известным числом элементов


    Совокупностью будем называть произвольный набор чисел, которые последовательно вводятся с клавиатуры. Совокупности чисел бывают двух видов: с известным числом элементов и с неизвестным числом элементов. В первом случае сначала указывается количество чисел, входящих в совокупность, а затем вводятся сами числа. Для работы с такими совокупностями используется цикл For. При обработке совокупности с неизвестным числом элементов количество ее элементов заранее неизвестно. Ввод продолжается до тех пор, пока не выполнится некоторое условие. Такая совокупность обрабатывается при помощи цикла с условием (см. раздел 6.2.2).

    Рассмотрим основные приемы для обработки совокупности с известным количеством элементов. Основное правило при решении задач этого типа можно сформулировать следующим образом.
    Совокупность всегда обрабатывается в пределах одного цикла.
    Для ввода всех исходных данных будем использовать функцию InputBox. Так как все вводимые величины являются числами, то при вводе необходимо использовать преобразование Val. Элементы совокупности будем выводить в окно списка. Дадим ему имя lstA. Вывод организуем в две колонки. В первой колонке будем печатать порядковый номер элемента, а во второй – значение элемента. В это же окно списка будем выводить результаты вычислений. Для каждого рассматриваемого приема обработки совокупности чисел с известным количеством элементов поместим на форму отдельную кнопку. Внешний вид разработанной экранной формы приведен на рис. 27.


    Рис. 27. Экранная форма программы обработки совокупности чисел с известным числом элементов
    Рассмотрим основные приемы обработки совокупности с известным числом элементов. Полные тексты всех рассматриваемых программ приведены в приложении 14.

    Вычисление суммы чисел.

    Сумма элементов совокупности вычисляется методом накопления. Для этого заводится отдельная переменная, в которой постепенно будет накапливаться нужная сумма. Начальное значение суммы задается перед основным циклом. До начала вычислений сумма равна нулю. На каждом шаге цикла к уже накопленной сумме прибавляется значение очередного элемента совокупности. Тогда после завершения основного цикла в этой переменной будет храниться сумма всех элементов совокупности.

    Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

    Dim a, i, n As Integer

    В переменной summa будет накапливаться результат.

    Dim summa As Integer

    Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

    lstA.Items.Clear()

    Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

    n = Val(InputBox("Введите количество элементов"))

    Задаем начальное значение переменной summa.

    summa = 0

    Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит n элементов, то номера этих элементов будут меняться в диапазоне от 1 до n. Поэтому начальное значение счетчика i (номера элемента) равно 1, а конечное – n.

    For i = 1 To n

    Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

    a = Val(InputBox("Введите элемент совокупности"))

    В окно списка выводим номер элемента совокупности (i) и его значение (a). Константа vbTab используется для организации вывода в две колонки.

    lstA.Items.Add(Str(i) + vbTab + Str(a))

    Добавляем значение элемента совокупности к переменной summa, накапливая в ней таким образом сумму всех элементов.

    summa += a

    Next

    После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

    lstA.Items.Add("-----------------------------------")

    Затем печатаем накопленное значение суммы.

    lstA.Items.Add("Сумма чисел =" + Str(summa))

    Вычисление произведения чисел.

    Произведение элементов также вычисляется накоплением. Но в отличие от суммы начальное значение произведения равно 1. Обратите внимание, если начальное значение произведения задать равным нулю, то получение результата станет невозможным. Начальное значение, так же как и в предыдущем случае, задается перед основным циклом. В цикле значение произведения умножается на очередной элемент совокупности. Тогда по завершении основного цикла мы получим искомое произведение всех элементов совокупности.

    Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

    • a – для хранения очередного элемента совокупности;

    • i – номер обрабатываемого элемента;

    • n – количество элементов совокупности.

    Dim a, i, n As Integer

    В переменной proiz будет накапливаться результат.

    Dim proiz As Integer

    Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

    lstA.Items.Clear()

    Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

    n = Val(InputBox("Введите количество элементов"))

    Задаем начальное значение произведения.

    proiz = 1

    Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит n элементов, то номера этих элементов будут меняться в диапазоне от 1 до n. Поэтому начальное значение счетчика i (номера элемента) равно 1, а конечное – n.

    For i = 1 To n

    Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

    a = Val(InputBox("Введите элемент совокупности"))

    В окно списка выводим номер элемента совокупности (i) и его значение (a). Константа vbTab используется для организации вывода в две колонки.

    lstA.Items.Add(Str(i) + vbTab + Str(a))

    Умножаем ранее накопленное произведение на очередной элемент совокупности, формируя таким образом искомый результат.

    proiz *= a

    Next

    После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

    lstA.Items.Add("-----------------------------------")

    Выводим вычисленное произведение.

    lstA.Items.Add("Произведение чисел =" + Str(proiz))

    Определение количества четных чисел в совокупности.

    Определение количества чисел во многом похоже на вычисление суммы, с той лишь разницей, что к результирующей переменной прибавляется единица, а не очередной элемент совокупности. Перед началом основного цикла количество нужных элементов полагается равным нулю. После ввода каждого элемента совокупности проводится анализ, соответствует ли данный элемент поставленному условию (например, является ли оно четным). Если значение элемента удовлетворяет условию, то искомое количество увеличивается на единицу.

    Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

    • a – для хранения очередного элемента совокупности;

    • i – номер обрабатываемого элемента;

    • n – количество элементов совокупности.

    Dim a, i, n As Integer

    Для подсчета количества четных элементов заведем специальную переменную. Очевидно, что она будет иметь целый тип.

    Dim kol As Integer

    Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

    lstA.Items.Clear()

    Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

    n = Val(InputBox("Введите количество элементов"))

    До начала основного цикла количество элементов полагаем равным нулю, так как в нашей совокупности пока нет ни одного четного числа.

    kol = 0

    Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит n элементов, то номера этих элементов будут меняться в диапазоне от 1 до n. Поэтому начальное значение счетчика i (номера элемента) равно 1, а конечное – n.

    For i = 1 To n

    Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

    a = Val(InputBox("Введите элемент совокупности"))

    В окно списка выводим номер элемента совокупности (i) и его значение (a). Константа vbTab используется для организации вывода в две колонки.

    lstA.Items.Add(Str(i) + vbTab + Str(a))

    Анализируем значение введенного элемента совокупности, проверяя, является ли оно четным. Если значение переменной a четное, то остаток от его деления на два будет равен нулю. Для нечетных чисел остаток от деления на два отличен от нуля. Он равен 1 для положительных чисел и -1 для отрицательных чисел.

    If a Mod 2 = 0 Then

    Если текущий элемент совокупности четный, то количество четных чисел необходимо увеличить на единицу. Новое значение будет записано в ту же переменную kol вместо старого значения.

    kol += 1

    End If

    Next

    После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

    lstA.Items.Add("-----------------------------------")

    Перед выводом найденного значения необходимо провести его анализ.

    If kol = 0 Then

    Если количество элементов равно нулю, значит, в совокупности нет четных чисел. В этом случае выводим поясняющее сообщение.

    lstA.Items.Add("В совокупности нет четных чисел") Else

    В противном случае выводим найденное значение.

    lstA.Items.Add("Количество четных чисел =" + _

    Str(kol))

    End If

    Вычисление среднего арифметического положительных чисел в совокупности.

    Среднее арифметическое элементов совокупности, удовлетворяющих некоторому условию (например, положительных) определяется как отношение суммы необходимых элементов к их количеству. Поэтому задача вычисления среднего арифметического решается как комбинация задач вычисления суммы и количества нужных элементов совокупности.

    Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

    • a – для хранения очередного элемента совокупности;

    • i – номер обрабатываемого элемента;

    • n – количество элементов совокупности.

    Dim a, i, n As Integer

    Для вычисления среднего арифметического необходимо найти сумму положительных элементов и их количество. Эти значения будем хранить соответственно в переменных summa и kol.

    Dim summa, kol As Integer

    Еще нам потребуется переменная для хранения результатов вычислений. Так как среднее арифметическое определяется в результате деления, то переменная sred обязательно должна иметь рациональный тип данных.

    Dim sred As Single

    Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

    lstA.Items.Clear()

    Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

    n = Val(InputBox("Введите количество элементов"))

    Перед основным циклом задаем начальные значения для суммы и количества.

    summa = 0

    kol = 0

    Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит n элементов, то номера этих элементов будут меняться в диапазоне от 1 до n. Поэтому начальное значение счетчика i (номера элемента) равно 1, а конечное – n.

    For i = 1 To n

    Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

    a = Val(InputBox("Введите элемент совокупности"))

    В окно списка выводим номер элемента совокупности (i) и его значение (a). Константа vbTab используется для организации вывода в две колонки.

    lstA.Items.Add(Str(i) + vbTab + Str(a))

    Анализируем значение очередного элемента совокупности.

    If a > 0 Then

    Если элемент – положительное число, то его значение необходимо прибавить к сумме, а количество положительных элементов увеличить на единицу.

    summa += a

    kol += 1

    End If

    Next

    После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

    lstA.Items.Add("-----------------------------------")

    Так как среднее арифметическое получается в результате деления, то перед его непосредственным вычислением необходимо проверить, обращается ли знаменатель дроби в ноль.

    If kol = 0 Then

    Если в совокупности не было положительных чисел, то их количество будет равно нулю. В этом случае невозможно вычислить среднее арифметическое положительных элементов. Поэтому вместо ответа мы выводим поясняющее сообщение.

    lstA.Items.Add("Нет положительных чисел")

    Else

    В противном случае (если количество неравно нулю) вычисляем среднее арифметическое.

    sred = summa / kol

    И выводим найденное значение.

    lstA.Items.Add("Сред. арифм. полож. чисел =" + _

    Str(sred))

    End If

    Вычисление среднего геометрического отрицательных чисел в совокупности.

    Среднее геометрическое элементов совокупности, удовлетворяющих некоторому условию (например, отрицательных) определяется как корень степени k из произведения необходимых элементов, где k – количество таких элементов. Поэтому задача вычисления среднего геометрического решается как комбинация задач вычисления произведения и количества нужных элементов совокупности. Извлечение корня k-ой степени реализуется как возведение числа в степень (1 / k).



    Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

    • a – для хранения очередного элемента совокупности;

    • i – номер обрабатываемого элемента;

    • n – количество элементов совокупности.

    Dim a, i, n As Integer

    Для вычисления среднего геометрического необходимо найти произведение и количество отрицательных чисел. Заведем отдельные переменные для хранения этих значений.

    Dim proiz, kol As Integer

    Среднее геометрическое определяется в результате извлечения корня некоторой степени. Поэтому итоговая переменная обязательно будет иметь рациональный тип данных.

    Dim geom As Single

    Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

    lstA.Items.Clear()

    Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

    n = Val(InputBox("Введите количество элементов"))

    Перед основным циклом задаем начальные значения для произведения и количества. Обратите внимание, что начальное значение произведения равно единице.

    proiz = 1

    kol = 0

    Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит n элементов, то номера этих элементов будут меняться в диапазоне от 1 до n. Поэтому начальное значение счетчика i (номера элемента) равно 1, а конечное – n.

    For i = 1 To n

    Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

    a = Val(InputBox("Введите элемент совокупности"))

    В окно списка выводим номер элемента совокупности (i) и его значение (a). Константа vbTab используется для организации вывода в две колонки.

    lstA.Items.Add(Str(i) + vbTab + Str(a))

    Анализируем значение очередного элемента совокупности.

    If a < 0 Then

    Если элемент является отрицательным числом, то его необходимо включить в произведение. При этом количество отрицательных элементов увеличится на единицу.

    proiz *= a

    kol += 1

    End If

    Next

    После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

    lstA.Items.Add("-----------------------------------")

    Перед вычислением среднего геометрического необходимо провести анализ промежуточных результатов.

    if kol = 0 Then

    Если количество отрицательных чисел равно нулю, то задача вычисления среднего геометрического не имеет смысла. В этом случае надо вывести поясняющее сообщение.

    lstA.Items.Add("Нет отрицательных чисел")

    Else

    В противном случае мы должны проверить знак полученного произведения.

    If proiz > 0 Then

    Если произведение чисел получилось положительным, то можно извлекать из него корень любой ненулевой степени.

    geom = proiz ^ (1 / kol)

    Else

    Иначе (когда подкоренное выражение отрицательное) извлечение корня возможно только при нечетной степени корня. Очевидно, что для данной задачи отрицательное произведение будет получаться только при нечетном количестве сомножителей. Поэтому дополнительную проверку степени корня можно не выполнять. Обратите внимание, что в Visual Basic 2005 операция извлечения корня произвольной степени определена только для положительных подкоренных выражений. Поэтому, когда необходимо извлечь корень нечетной степени из отрицательного числа, поступают следующим образом. Корень извлекается из модуля подкоренного выражения, а у полученного результата знак меняется на противоположный.

    geom = -Math.Abs(proiz) ^ (1 / kol)

    End If

    После извлечения корня выводим полученное значение среднего геометрического отрицательных элементов совокупности.

    lstA.Items.Add("Сред. геом. отриц. чисел =" + _

    Str(geom))

    End If

    Поиск максимального числа в совокупности.

    Для того чтобы найти максимальное число в совокупности нам потребуется дополнительная переменная, в которой будет храниться значение максимального из уже введенных элементов. После ввода каждого нового элемента совокупности мы будем проверять, не превышает ли его значение ранее найденного максимума. Если да, то значение максимума необходимо задать равным введенному элементу. Таким образом, после окончания основного цикла значение максимума будет совпадать со значением наибольшего элемента совокупности.

    Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

    • a – для хранения очередного элемента совокупности;

    • i – номер обрабатываемого элемента;

    • n – количество элементов совокупности.

    Dim a, i, n As Integer

    Нам потребуется переменная, в которой будет храниться значение максимального элемента совокупности. Обратите внимание, что тип этой переменной всегда будет совпадать с типом элемента совокупности.

    Dim max As Integer

    Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

    lstA.Items.Clear()

    Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

    n = Val(InputBox("Введите количество элементов"))

    Перед основным циклом задаем начальное значение максимума. Так как в процессе анализа элементов совокупности значение максимума будет увеличиваться, то начальное значение этой переменной должно быть достаточно маленьким.

    max = -100000

    Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит n элементов, то номера этих элементов будут меняться в диапазоне от 1 до n. Поэтому начальное значение счетчика i (номера элемента) равно 1, а конечное – n.

    For i = 1 To n

    Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

    a = Val(InputBox("Введите элемент совокупности"))

    В окно списка выводим номер элемента совокупности (i) и его значение (a). Константа vbTab используется для организации вывода в две колонки.

    lstA.Items.Add(Str(i) + vbTab + Str(a))

    Анализируем значение элемента совокупности.

    If a > max Then

    Если оно превышает ранее найденный максимум, то значение текущего элемента совокупности запоминается как новое значение максимума.

    max = a

    End If

    Next

    После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

    lstA.Items.Add("-----------------------------------")

    Теперь выводим найденное значение максимума.

    lstA.Items.Add("Максимальное число =" + Str(max))

    Поиск минимального числа, кратного трем.

    Нахождение минимального элемента совокупности практически аналогичного поиску максимума. Изменить надо лишь используемую операцию сравнения и начальное значение. Так как в процессе анализа элементов совокупности значение минимума будет уменьшаться, то его начальное значение должно быть достаточно большим.

    При поиске минимального (или максимального) числа, удовлетворяющего некоторому условию (например, кратного трем), в алгоритме возникает дополнительное условие. Теперь в сравнении будут участвовать только те элементы, которые удовлетворяет поставленному условию.

    Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

    • a – для хранения очередного элемента совокупности;

    • i – номер обрабатываемого элемента;

    • n – количество элементов совокупности.

    Dim a, i, n As Integer

    Нам потребуется переменная, в которой будет храниться значение минимального элемента совокупности. Обратите внимание, что тип этой переменной всегда будет совпадать с типом элемента совокупности.

    Dim min As Integer

    Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

    lstA.Items.Clear()

    Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

    n = Val(InputBox("Введите количество элементов"))

    Перед основным циклом задаем начальное значение минимума. Так как в процессе анализа элементов совокупности значение минимума будет уменьшаться, то начальное значение этой переменной должно быть достаточно большим.

    min = 100000

    Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит n элементов, то номера этих элементов будут меняться в диапазоне от 1 до n. Поэтому начальное значение счетчика i (номера элемента) равно 1, а конечное – n.

    For i = 1 To n

    Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

    a = Val(InputBox("Введите элемент совокупности"))

    В окно списка выводим номер элемента совокупности (i) и его значение (a). Константа vbTab используется для организации вывода в две колонки.

    lstA.Items.Add(Str(i) + vbTab + Str(a))

    Анализируем значение очередного элемента совокупности.

    If a Mod 3 = 0 And a < min Then

    Если оно кратно трем (то есть остаток от его деления на 3 равен нулю) и само значение меньше ранее найденного минимума, то значение текущего элемента совокупности запоминается как новое значение минимума.

    min = a

    End If

    Next

    После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

    lstA.Items.Add("-----------------------------------")

    Так как в совокупности может не быть чисел, кратных трем, то перед выводом результата, необходимо провести его проверку.

    If min = 100000 Then

    Если за время выполнения основного цикла значение минимума не изменилось и совпадает с начальным значением, значит, что в совокупности не было элементов, кратных трем. В таком случае необходимо вместо значения минимума вывести поясняющее сообщение.

    lstA.Items.Add("Нет чисел, кратных 3")

    Else

    Иначе мы можем вывести найденное значение.

    lstA.Items.Add("Минимальное кратное трем = " + _

    Str(min))

    End If

    Два примера работы программы в режиме вычисления среднего арифметического положительных чисел приведены на рис. 28.



    Рис. 28. Пример работы программы обработки совокупности с известным числом элементов

    1   ...   16   17   18   19   20   21   22   23   ...   63


    написать администратору сайта