
- •Практическое занятие № 1 Управление ходом программы Конструкция ветвления If…Then…ElseIf…EndIf. Логические операции
- •Задания для самостоятельной работы № 1 Использование конструкций ветвления If…Then…ElseIf…EndIf
- •Задания для самостоятельной работы № 2 Использование конструкций ветвления If…Then…ElseIf…EndIf
- •Задания для самостоятельной работы №3 Использование инструкций выбора Select Case.
- •Задания для самостоятельной работы №4 Использование конструкций ветвления If…Then…ElseIf…EndIf, инструкций выбора Select Case
- •Задания для самостоятельной работы №5 Использование конструкций ветвления If…Then…ElseIf…EndIf, инструкций выбора Select Case
- •Задания для самостоятельной работы №6 Использование конструкции For…Next. Вычисление рядов.
- •Задания для самостоятельной работы №7 Использование конструкции For…Next. Табулирование функции.
- •Задания для самостоятельной работы №8 Программы с циклами по условию Do…Loop
- •Задания для самостоятельной работы № 9 Использование циклов For…Next, Do…Loop
- •Задания для самостоятельной работы №10 Использование циклов For…Next? Do…Loop
- •Практическое занятие №2 Действия над массивами данных
- •Задания для самостоятельной работы №11 Одномерные массивы
- •Задания для самостоятельной работы №12 Двумерные массивы
- •Задания для самостоятельной работы №13 Матрицы
Задания для самостоятельной работы №6 Использование конструкции For…Next. Вычисление рядов.
Задача. Составьте программу, которая производит расчет согласно варианту задания.
Разработанная программа должна быть предоставлена в двух вариантах:
в первом программа должна содержать подробные комментарии, для того чтобы преподаватель мог без труда оценить принятый вами для решения задачи алгоритм;
во втором программа должна быть полностью без комментариев для проведения контроля полученных знаний.
Программа должна содержать форму с текстовыми полями для ввода величин, кнопками для выполнения расчета, формирования отчета, выхода из программы.
В программе нужно предусмотреть защиту от неправильно введенных данных.
Сформировать отчет средствами VBA. Отчет должен содержать: условие задачи; формулу расчета с обозначениями; полученный результат.
Варианты задания.
1. Дано натуральное число n. Вычислите
Дано натуральное число N. Вычислите
3. Дано натуральное число N. Вычислите произведение первых N сомножителей
Дано натуральное число N. Вычислите
Дано действительное число х. Вычислите
5. Даны натуральное число n и действительное число х. Вычислите
7. Даны действительное число a и натуральное число n. Вычислите
8. Даны действительное число a и натуральное число n. Вычислите
9. Даны действительное число a и натуральное число n. Вычислить
10. Дано действительное число x. Вычислите
11. Вычислите
12. Даны натуральное число n и действительное число х. Вычислите
13. Дано натуральное число n. Вычислите
14. Дано натуральное число n. Вычислите
15. Дано натуральное число n. Вычислите
16. Дано натуральное число n. Вычислите
17. Дано натуральное число n. Вычислите
18. Для данного действительного числа x вычислите по схеме Горнера
19. Числа Фибоначчи (fn) определяются формулами
Определите f40.
20. Дано натуральное число n. Вычислите
21. Дано натуральное число n. Вычислите
22. Вычислите
23. Вычислите
24. Даны натуральные числа n и k. Вычислите
25. Дано натуральное число n. Вычислите
Задания для самостоятельной работы №7 Использование конструкции For…Next. Табулирование функции.
Задача.
Составьте программу
для вычисления значений функции
,
на отрезке
с шагом h.
Результат представьте в виде таблицы в документе Word, первый столбец которой содержит значения аргумента, второй — соответствующие им значения функции.
Разработанная программа должна быть предоставлена в двух вариантах:
в первом программа должна содержать подробные комментарии, для того чтобы преподаватель мог без труда оценить принятый вами для решения задачи алгоритм;
во втором программа должна быть полностью без комментариев для проведения контроля полученных знаний.
Программа должна содержать форму с текстовыми полями для ввода величин, кнопками для выполнения расчета, формирования отчета, выхода из программы.
В программе нужно предусмотреть защиту от неправильно введенных данных.
Сформировать отчет средствами VBA. Отчет должен содержать: условие задачи; формулу расчета с обозначениями; полученный результат.
Варианты задания.
1. |
2. |
3. |
4. |
5. |
6. |
7. |
8. |
9. |
10. |
11. |
12. |
13. |
14. |
15. |
16. |
17. |
18. |
19. |
20. |
21. |
22. |
23. |
24. |
25. |
26. |
Циклы с проверкой условия (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