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

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Лабораторная работа № 3. Циклические алгоритмы

2024-02-15 70
Лабораторная работа № 3. Циклические алгоритмы 0.00 из 5.00 0 оценок
Заказать работу

Вверх
Содержание
Поиск

Задача 5. Найти среднее арифметическое четных чисел из N чисел, вводимых с клавиатуры. Решение. Среднее арифметическое – это значение суммы чисел, деленной на их количество. Поэтому для решения задачи потребуются переменные для накопления суммы и количества четных чисел. Пусть это будут S и k, для простоты – целого типа. Кроме того, в программе нужно ввести N или задать его с помощью присваивания. Для проверки на четность можно использовать функцию Mod, дающую целочисленный остаток от деления ее левого операнда на правый: результат операции x Mod y равен целому числу - остатку от деления x на y; так он будет 0, если x делится на y. Если x или y не целые числа, то они предварительно будут округлены до целого. Основу алгоритма составит циклическая процедура: ввести число, проверить: если оно четное, то добавить его к сумме S и увеличить счетчик четных чисел k на 1. Эти операторы нужно повторить N раз. На выходе из цикла сумма четных чисел и их количество будут посчитаны, останется только разделить S на k и запомнить результат. Для хранения результата возьмем переменную r, ее тип – Single –действительное число, т.к. искомое среднее – результат деления – не всегда будет целым числом:

 

Sub Среднее()

Dim S As Integer, r As Single, k As Integer, a As Integer

N = InputBox("Введите N – количество чисел")

S = 0

k = 0

For i = 1 To N

a = InputBox("Введите число")

If a Mod 2 = 0 Then

S = S + a

k = k + 1

End If

Next r = S / k

MsgBox (r)

End Sub

Обратите внимание, что переменные S и k предварительно обнуляются («чистятся»), причем до начала цикла. Чистку необходимо делать, т.к. при переводе программы на машинный язык под переменные отводится память, в ко- торой может что-нибудь уже находиться, какая-либо старая информация. Если убрать оператор S = 0, то в последующем присваивании S = S + a при вычислении правой части к значению a будет добавлено неизвестное значение S и результат будет неверный. Типичная ошибка, когда операции обнуления помещают в тело цикла, после заголовка:

 

For i = 1 To N S = 0      ‘неверно!

k = 0      ‘неверно!

a = InputBox("Введите число")

If a Mod 2 = 0 Then

S = S + a

k = k + 1

End If

Next

 

Тогда чистка происходит на каждом шаге исполнения цикла, поэтому после завершения цикла в S окажется лишь последнее введенное четное a, и k будет равен 1.

 

Задача 6. Посчитать произведение чисел, вводимых с клавиатуры до тех пор, пока не встретится 0.

Решение. Здесь заранее не известно, сколько чисел будет введено, поэтому лучше воспользоваться циклом While:

 

Sub Произведение()

Dim a As Integer, P As Integer

a = InputBox("Введите ненулевое число")

P = 1

While a <> 0

P = P * a

a = InputBox("Введите число")

Wend

MsgBox (P)

End Sub

 

Обратите внимание, что «чистка» переменной Р заключается в присвоении ей значения 1, т.к. Р участвует в произведении P = P *a и обнуление Р при- вело бы к нулевому результату всей программы. Исполнение цикла продолжается до тех пор, пока не введен 0 в переменную а. В первой строке мы потребовали, чтобы вначале было введено ненулевое число. А что, если все-таки пользователь программы ввел 0? Тогда цикл не проработает ни разу и результат будет Р=1. Такой же результат будет, если ввели 1, а затем 0. Как различить эти случаи? «Защититься» от первого нуля можно, поставив, например, «оберегающий» оператор Until c проверкой на ноль:

 

Sub Произведение ()

Dim a As Integer, P As Integer

Do

a = InputBox("Введите ненулевое число")

Loop Until a <>0 P = 1

While a <> 0

P = P * a

a = InputBox("Введите число")

Wend

MsgBox (P)

End Sub

Здесь первый оператор цикла не позволит продолжить программу, если вводятся нули: условие выхода из цикла a<>0.

 


Поделиться с друзьями:

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.