Мегаобучалка Главная | О нас | Обратная связь


Лабораторная работа №19



2020-02-04 201 Обсуждений (0)
Лабораторная работа №19 0.00 из 5.00 0 оценок




Лабораторная работа №18

Циклы с проверкой условия ( Do … Loop )

 

Назначение данного вида циклов - повторение набора операторов, при неизвестном количестве повторов (итераций). В этом случае для завершения работы цикла используется проверка некоторого условия до выполнения операторов внутри цикла или после выполнения операторов внутри цикла.

Существует 4 вида синтаксиса данной конструкции:

 

Синтаксис 1.

 

Do While условие

 [операторы]

 [Exit Do]

Loop

 

где Do – оператор начинающий циклическую конструкцию.

While – ключевое слово, говорящее о том, что операторы внутри цикла должны выполняться до тех пор, пока выполняется условие, т.е. пока условие истинно (True).

Условие (необязательный) - числовое или строковое выражение, которое имеет значение True или False. Если условие имеет значение Null, то аргумент условия рассматривается как значение False. Более подробно этот параметр уже был описан при изучении конструкции If … Then … ElseIf … EndIf.

Exit Do (необязательный) - оператор, обеспечивающая альтернативную возможность выхода из цикла Do…Loop. Часто используемый вместе с определением некоторого условия (например, If…Then), оператор Exit Do передает управление оператору, непосредственно следующему за оператором Loop. Во вложенных циклах Do…Loop оператор Exit Do передает управление циклу охватывающего уровня по отношению к циклу, в котором она вызывается.

Loop – оператор, завершающий циклическую конструкцию.

 

В этом синтаксисе условие проверяется до начала выполнения операций внутри цикла. Цикл будет выполняться до тех пор, пока условие выхода из цикла – истинно (True). Когда параметр условие становится ложным (False), произойдет выход из цикла. Управление перейдет оператору, непосредственно следующему за оператором Loop. Операторы внутри цикла могут не выполняться, если параметр условие изначально является ложным (False).

 

Синтаксис 2.

 

Do Until условие

 [операторы]

 [Exit Do]

Loop

 

где Until – ключевое слово, говорящее о том, что операторы внутри цикла должны выполняться до тех пор, пока условие не выполняется, т.е. пока условие является ложным (False).

Остальные параметры этого синтаксиса рассмотрены выше.

В этом синтаксисе, так же как и в синтаксисе 1, условие проверяется до начала выполнения операторов внутри цикла. Операторы внутри цикла будут выполняться до тех пор, пока условие выхода из цикла не станет истинным. Когда условие становится истинным (True), произойдет выход из цикла. Управление перейдет оператору, непосредственно следующему за оператором Loop.

Операторы внутри цикла могут не выполняться, если параметр условие изначально является ложным (False)..

Синтаксис 3.

 

Do

 [операторы]

 [Exit Do]

Loop While условие

 

Все параметры данного синтаксиса рассмотрены выше.

В этом синтаксисе условие проверяется после выполнения операторов внутри цикла. Так же, как и в синтаксисе 1, операторы внутри цикла будут выполняться до тех пор, пока условие выхода из цикла – истинно (True). Когда параметр условие становится ложным (False), произойдет выход из цикла. Управление перейдет оператору, непосредственно следующему за оператором Loop. В отличие от синтаксиса 1, операторы внутри цикла выполняются хотя бы один раз, независимо от условия выхода из цикла.

Синтаксис 4.

 

Do

 [операторы]

 [Exit Do]

Loop Until условие

 

Все параметры данного синтаксиса также рассмотрены выше.

В этом синтаксисе условие проверяется после выполнения оператора внутри цикла. Так же, как и в синтаксисе 2, операторы внутри цикла будут выполняться до тех пор, пока условие выхода из цикла не станет истинным. Когда условие становится истинным (True), произойдет выход из цикла. Управление перейдет оператору, непосредственно следующему за оператором Loop.

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

Резюмируя, можно сказать, что в конструкции Do … Loop условие проверяется либо в начале, либо в конце конструкции. Операторы внутри конструкции выполняются либо когда условие истинно (при использовании ключевого слова While), либо они выполняются, когда условие ложно (при использовании ключевого слова Until).

В рассматриваемой далее процедуре ChkFirstWhile условие проверяется до входа в цикл с использованием ключевого слова While (применяется синтаксис 1).

 

Sub ChkFirstWhile()

counter = 0

myNum = 20

Do While myNum > 10

   myNum = myNum - 1

   counter = counter + 1

Loop

MsgBox "Выполнено " & counter & " итераций цикла."

End Sub

 

При выполнении программы цикл будет повторяться до тех пор, пока переменная myNum больше 10. Значение этой переменной уменьшается внутри цикла на единицу (myNum = myNum – 1). Переменная counter предназначена для подсчета количества итераций цикла. С каждым проходом цикла эта переменная увеличивается на единицу (counter = counter + 1). Когда переменная myNum станет меньше 10 (myNum = 9), произойдет выход из цикла. Оператор MsgBox выдаст сообщение о количестве итераций цикла рис. 8

 

Рис. 8

Если начальное значение myNum задать равным 9 вместо 20, операторы внутри цикла выполняться не будут. В окне MsgBox в этом случае будет напечатано «Выполнено 0 итераций цикла»

В следующей процедуре ChkFirstUntil условие проверяется также как и в предыдущем примере до входа в цикл, но с использованием ключевого слова Until (применяется синтаксис 2).

 

Sub ChkFirstUntil()

counter = 0

myNum = 20

Do Until myNum = 10

   myNum = myNum - 1

   counter = counter + 1

Loop

MsgBox "В цикле выполнено " & counter & " итераций."

End Sub

 

Цикл будет повторяться до тех пор, пока переменная myNum не станет равной 10. Значение этой переменной уменьшается внутри цикла на единицу (myNum = myNum – 1). Переменная counter предназначена для подсчета количества итераций цикла. С каждым проходом цикла эта переменная увеличивается на единицу (counter = counter + 1). Когда переменная myNum станет равной 10, произойдет выход из цикла. Оператор MsgBox выдаст сообщение о количестве итераций цикла: «Выполнено 10 итераций цикла».

Для демонстрации работы синтаксиса 3 предназначена следующей процедуре ChkLastWhile, в которой условие проверяется в конце цикла c использованием ключевого слова While.

 

Sub ChkLastWhile()

counter = 0

myNum = 9

Do

   myNum = myNum - 1

   counter = counter + 1

Loop While myNum > 10

MsgBox "В цикле выполнено " & counter & " итераций."

End Sub

 

Цикл должен повторяться до тех пор, пока переменная myNum больше 10. Однако при начальном значении 9, эта переменная станет равна 8 (myNum = myNum – 1). Следовательно, в процедуре оператора внутри цикла выполняются только один раз до того как условие примет значение False. Оператор MsgBox выдаст сообщение о количестве итераций цикла: «В цикле выполнено 1 итераций».

 

И, наконец, в следующей процедуре ChkLastUntil условие проверяется в конце цикла c использованием ключевого слова Until (применяется синтаксис 4).

 

Sub ChkLastUntil()

counter = 0

myNum = 1

Do

   myNum = myNum + 1

   counter = counter + 1

Loop Until myNum = 10

MsgBox "В цикле выполнено " & counter & " итераций."

End Sub

 

Цикл будет повторяться до тех пор, пока переменная myNum не станет равной 10. Значение этой переменной увеличивается внутри цикла на единицу (myNum = myNum + 1). Переменная counter предназначена для подсчета количества итераций цикла. С каждым проходом цикла эта переменная увеличивается на единицу (counter = counter + 1). Когда myNum станет равной 10, произойдет выход из цикла. Оператор MsgBox выдаст сообщение о количестве итераций цикла: «Выполнено 9 итераций цикла».

Замечание. Нужно быть внимательным в выборе параметра условие. При неправильном выборе этого параметра, можно получить при выполнении программы так называемый бесконечный цикл. Рассмотрим пример

 

Sub ChkLastWhile()

counter = 0

myNum = 9

Do

   myNum = myNum - 1

   counter = counter + 1

Loop While myNum = 10

MsgBox "В цикле выполнено " & counter & " итераций."

End Sub

 

В этом примере переменная myNum изначально имеет значение 9. Внутри цикла это значение уменьшается. Однако при проверке условия ожидается, что переменная myNum станет равной 10. Очевидно, что этого не может произойти. Следовательно, программа не выйдет из цикла. Это выглядит, как «зависшая» программа, которая не реагирует на внешние воздействия. Если эта ошибка произошла во время отладки программы, то прервать бесконечный цикл можно с помощью комбинации клавиш Ctrl + Break.

По правилу хорошего стиля программирования операторы внутри конструкции Do … Loop должны писаться с отступом вправо. Это улучшает читаемость программы. Если в программе встречаются вложенные конструкции Do … Loop или другие конструкции (If … Then … Else If … End If , Select Case … End Select , For … Next и другие), то внутри этих конструкции операторы также сдвигаются на несколько пробелов вправо. В рассматриваемых далее примерах эти правила учтены.

 

Пример. Составьте программу табу­лирования (вычисления значений) функции

 

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

Решение

1. Создайте в редакторе Word новый документ.

2. Перейдите в редактор VBA.

3. В проект соответствующий созданному документу вставьте новый модуль (меню Insert – Module).

4. Создайте в новом модуле процедуру:

 

Sub UsingDoLoop()

Dim x As Single, f As Single

   

Const a = 0.5

Set docNew = Documents.Add 'создаем новый документ

'создаем таблицу, состоящую из 1 строки и 2 столбцов

Set tblNew = docNew.Tables.Add(Selection.Range, 1, 2)

'заполняем первую строку программы

With tblNew

.Cell(1, 1).Range.InsertAfter "x"

.Cell(1, 2).Range.InsertAfter ("F(x)")

x = 0.1 'Начальное значение х

'Цикл по переменной х

Do Until x > 2 'Проверка условия выхода из цикла

   If х <> 2 * a Then

     If х < 2 * 2 Then

         f = Abs(Exp(x) - а) ^ (1 / 3)

     Else

       f = a + Sin(x)

     End If

     Selection.InsertRowsBelow 'вставляем новую строку в конец таблицы

     'заполняется ячейка x

     .Cell(.Rows.Count, 1).Range.InsertAfter x

     'заполняется ячейка F(x)

     .Cell(.Rows.Count, 2).Range.InsertAfter f

   End If

   x = x + 0.3 'Переход к следующему значению х

Loop 'Конец цикла, переход на Do

End With

End Sub

 

Пример. Цикл Do . . . Loop с постусловием. Вычислите сумму ряда

Решение

1. Создайте в редакторе Word новый документ.

2. Перейдите в редактор VBA.

3. В проект соответствующий созданному документу вставьте новый модуль (меню Insert – Module).

4. Создайте в новом модуле процедуру:

Sub UsingDoLoopEnd()

Dim i As Integer, S As Single

Const epsilon = 0.001

S = 1 'Начальное значение суммы ряда

i = 1 'Начальное значение аргумента

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

i = i + 1 'Следующее значение аргумента

S = S + (-1) ^ (i + 1) / i 'Вычисление суммы

Loop While 1 / i > epsilon 'Точность достигнута?

MsgBox "Сумма ряда = " & S 'Печать результата

End Sub

 

 

Лабораторная работа №19

Циклы с проверкой условия ( Do … Loop )

Задача. Составьте программу для выполнения предложенного вам задания.  Программа должна:

- содержать форму с элементами управления для ввода данных.

- иметь защиту от неправильно введенных данных.

- составить отчет, который должен содержать задание, таблицу расчета функции.

Разработанная программа должна быть предоставлена в двух вариантах:

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

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

 

Варианты задания.

 

1. Вычисляйте произведение последовательности натуральных чисел i=1, 2, 3 ... до тех пор, пока очередной сомножитель не превышает заданного числа n. Выведите полученное произведение и последний сомножитель.

2. Дано положительное число a<1. Вычисляйте и выводите числа вида , пока они остаются больше a (при этом n>1).

3. Дано действительное число x. Вычислите приближенное значение бесконечной суммы:

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

4. Дано действительное число x. Вычислите приближенное значение бесконечной суммы:

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

5. Дано действительное число x. Вычислите приближенное значение бесконечной суммы:

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

6. Дано действительное число x. Вычислите приближенное значение бесконечной суммы:

.

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

7. Найдите и выведите на дисплей значения степеней числа 3:

       

Вычисления продолжайте, пока 3n не превышает заданное число d. Вычисления проводите, не используя операцию возведения в степень.

8. Вычислите сумму последовательности натуральных чисел  Вычисления продолжайте до тех пор, пока сумма не превышает заданное число n. Определите, сколько чисел вошло в сумму.

9. Вычислите произведение последовательности натуральных чисел  Вычисления продолжайте до тех пор, пока сумма не превышает заданное число n. Определите, сколько чисел вошло в произведение.

10. Вычислите сумму квадратов последовательности натуральных чисел до тех пор, пока значение суммы не превышает заданное число n.

11. Вычислите приближенное значение бесконечной суммы (справа в скобках дано ее точное значение, с которым можно сравнить полученный ответ):

                            

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

12. Вычислите приближенное значение бесконечной суммы (справа в скобках дано ее значение, с которым можно сравнить полученный ответ):

                           (0,6931478...)

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

13. Вычислите приближенное значение бесконечной суммы (справа, в скобках дано ее точное значение, с которым можно сравнить полученный ответ):

                               

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

14. Вычислите приближенное значение бесконечной суммы (справа в скобках дано ее точное значение, с которым можно сравнить полученный ответ):

                                (1)

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

15. Вычислите приближенное значение бесконечной суммы (справа в скобках дано ее точное значение, с которым можно сравнить полученный ответ):

                                 

 

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

16. Вычислите приближенное значение бесконечной суммы (справа в скобках дано ее точное значение, с которым можно сравнить полученный ответ):

                         

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

17. Находите и выводите на дисплей значения степеней числа 2:

        

Вычисления продолжайте до тех пор, пока   не превысит заданное число d. Вычисления проводите, не используя операцию возведения в степень.

18. Находите и выводите на дисплей значения степеней числа 2:

        

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

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

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

21. Вычисляйте и выводите члены арифметической прогрессии, заданные рекуррентной формулой  до тех пор, пока очередной выводимый член прогрессии остается меньше заданного числа b.

22. Вычисляйте и выводите члены арифметической прогрессии, заданные рекуррентной формулой  до тех пор, пока очередной выводимый член прогрессии остается меньше заданного числа b.

23. Вычисляйте и выводите значения функции

 ;  до тех пор, пока очередное вычисленное значение остается больше заданного положительного числа b.

24. Сформируйте последовательность, элементы которой вычисляются по формуле

;

Вычисления продолжайте до тех пор, пока e.

25. Вводите числа и суммируйте их до тех пор, пока не будет введено число, большее чем первое по абсолютной величине.

26. Вводите числа и находите их произведение до тех пор, пока не будет введено число, делящееся на 3 без остатка.

27. Не используя операцию возведения в степень, вычисляйте и выводите члены последовательности, определяемые выражением

.

Вычисления проводите до тех пор, пока абсолютное значение очередного члена последовательности не станет меньше заданного числа b.

28. Вводите числа и находите их произведение до тех пор, пока не будет введено число, меньше первого по абсолютной величине.

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

30. Начав тренировки, спортсмен в первый день пробежал 10 км. Каждую следующую тренировку он увеличивал норму на 10% от предыдущей. Вычислите через сколько тренировок спортсмен будет пробегать за тренировку больше 20 км.

 



2020-02-04 201 Обсуждений (0)
Лабораторная работа №19 0.00 из 5.00 0 оценок









Обсуждение в статье: Лабораторная работа №19

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (201)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.01 сек.)