Циклы с условием (While-Wend и Do-Loop)

  • doc
  • 13.05.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 154. Циклы с условием (While-Wend и Do-Loop).doc

Циклы с условием (While-Wend и Do-Loop)

Задание 1. Разработать программу для вычисления бесконечного ряда с точностью 0 < p < 1, вводимой с клавиатуры, с использованием цикла While-Wend:

.

Выполнение. Для вычисления суммы ряда понадобится переменная, в которой эта сумма будет накапливаться, например s. Чтобы на первой итерации цикла в s было помещено первое рассчитанное значение, начальное значение для s должно быть «нейтральным» для суммирования, т.е. 0. На каждой итерации цикла будет осуществляться расчет заданной формулы, стоящей под знаком суммы (Σ), назовем его «слагаемым», и добавление текущего значения этого слагаемого в переменную s. Количество итераций цикла заранее неизвестно, но сказано, что сумму ряда следует считать с заданной точностью p, которая по условию задачи находится в интервале 0 < p < 1. Поэтому условием остановки цикла будем считать ситуацию, когда модуль слагаемого становится меньше введенной с клавиатуры точности p. По выполнению этого условия итерации цикла завершаются и осуществляется вывод «накопленной» суммы на экран.

 

Программа

1     Sub While_Wend_1() 'Начало подпрограммы (макроса)

2     p = Val(InputBox("Введите точность:")) 'Ввод точности p с клавиатуры

3      

4     s = 0 'Начальное значение суммы задается 0

5     n = 1 'Начальное значение n=1 по заданию

6     A = 1 'Задаем такое число, которое бы позволило выполниться циклу хотя бы первый раз

7     While Abs(A) > p 'Начало цикла и условие продолжения до тех пор, пока модуль слагаемого A больше введенной точности

8     A = 1 / (n * (n + 1)) 'Расчет текущего значения слагаемого при данном n

9     s = s + A 'Добавление слагаемого в сумму s

10   n = n + 1 'Увеличение параметра n на 1

11   Wend 'Конец тела цикла While

12    

13   Debug.Print "Сумма ряда ="; s 'Вывод накопленной суммы ряда на экран

14   End Sub 'Окончание подпрограммы

 

Словесное описание программы

После ввода точности p (с. 2) задаем начальное значение суммы s, которое бы не влияло на результат суммирования, т.е. 0. Далее задаем начальное значение для n=1 по заданию. В цикле мы будем рассчитывать текущее значение слагаемого (с. 8) и помещать результат в переменную a. Условием продолжения цикла будет то, что модуль этой переменной a больше введенной с клавиатуры точности p (с. 7). Однако до начала цикла значение a еще неопределенно, а, следовательно, цикл может не выполниться ни разу. Чтобы этого избежать, в с. 6 присваиваем a=1 (возможно любое число заведомо большее p, с учетом того, что 0 < p < 1 по заданию). В теле цикла рассчитываем очередное значение слагаемого a (с. 8), добавляем его в сумму s (с. 9) и увеличиваем текущую переменную n на 1 (с. 10). После закрытия цикла (с. 11) выводим накопленную сумму ряда на экран (с. 13).

 

Блок-схема

 

Задание 2. Реализовать задачу из задания 1 с помощью четырех форм цикла Do-Loop.

Выполнение. Выбор цикла мало влияет на алгоритм программы, потому описание по существу см. в задании 1. Здесь опишем только те изменения, которые потребуется внести:

1 Форма цикла Do-While-Loop полностью совпадает с циклом While-Wend. См. задание 1, поэтому здесь она описываться не будет.

2 Форма цикла Do-Until-Loop имеет только одно отличие: вместо условия продолжения цикла Abs(a) > p используется условие остановки цикла, т.е. Abs(a) <= p:

Программа Do-Until-Loop

 

15   Sub Do_Until_Loop_1() 'Начало подпрограммы (макроса)

16   p = Val(InputBox("Введите точность:")) 'Ввод точности p с клавиатуры

17    

18   s = 0 'Начальное значение суммы задается 0

19   n = 1 'Начальное значение n=1 по заданию

20   A = 1 'Задаем такое число, которое бы позволило выполниться циклу хотя бы первый раз

21   Do Until Abs(A) <= p 'Начало цикла и условие остановки, как только модуль слагаемого A станет меньше либо равен введенной точности

22   A = 1 / (n * (n + 1)) 'Расчет текущего значения слагаемого при данном n

23   s = s + A 'Добавление слагаемого в сумму s

24   n = n + 1 'Увеличение параметра n на 1

25   Loop 'Конец тела цикла Do-Loop

26    

27   Debug.Print "Сумма ряда ="; s 'Вывод накопленной суммы ряда на экран

28   End Sub 'Окончание подпрограммы

 

Отличие блок-схемы тоже только в направлении неравенства и положении надписи «да»:

Блок-схема Do-Until-Loop

 

3 Формы цикла Do-Loop-While и Do-Loop-Until имеют немного больше отличий. В связи с тем, что условия у этих циклов проверяются после первой итерации, отпадает необходимость в начальном значении для слагаемого a=1. Тело цикла будет выполнено хотя бы один раз при любых значениях a. Между собой эти циклы отличаются также только направлением неравенства в условии:

Программа Do-Loop-While

 

29   Sub Do_Loop_While_1() 'Начало подпрограммы (макроса)

30   p = Val(InputBox("Введите точность:")) 'Ввод точности p с клавиатуры

31    

32   s = 0 'Начальное значение суммы задается 0

33   n = 1 'Начальное значение n=1 по заданию

34   Do 'Начало цикла

35   A = 1 / (n * (n + 1)) 'Расчет текущего значения слагаемого при данном n

36   s = s + A 'Добавление слагаемого в сумму s

37   n = n + 1 'Увеличение параметра n на 1

38   Loop While Abs(A) > p 'Конец цикла и условие продолжения, пока модуль слагаемого A больше введенной точности

39    

40   Debug.Print "Сумма ряда ="; s 'Вывод накопленной суммы ряда на экран

41   End Sub 'Окончание подпрограммы

 

Блок-схемы отличаются тем, что блок условия находится после тела цикла. Между собой блок схемы также отличаются направлением неравенства и положением надписи «да».

 

 

 

Блок-схема Do-Loop-While

Программа Do-Loop-Until

42   Sub Do_Loop_Until_1() 'Начало подпрограммы (макроса)

43   p = Val(InputBox("Введите точность:")) 'Ввод точности p с клавиатуры

44    

45   s = 0 'Начальное значение суммы задается 0

46   n = 1 'Начальное значение n=1 по заданию

47   Do 'Начало цикла

48   A = 1 / (n * (n + 1)) 'Расчет текущего значения слагаемого при данном n

49   s = s + A 'Добавление слагаемого в сумму s

50   n = n + 1 'Увеличение параметра n на 1

51   Loop Until Abs(A) <= p 'Конец цикла и условие остановки, как только модуль слагаемого A станет меньше либо равен введенной точности

52    

53   Debug.Print "Сумма ряда ="; s 'Вывод накопленной суммы ряда на экран

54   End Sub 'Окончание подпрограммы

 

Блок-схема Do-Loop-Until


Скачано с www.znanio.ru