- •Часть 2 Основы программирования
- •Решения задач в среде Visual Basic for Applications Лабораторная работа № пр1 «Создание процедур»
- •Теоретические сведения
- •Процедуры, константы, переменные
- •Решение
- •Лабораторная работа № пр2 «Работа с условным оператором If ... Then»
- •Теоретические сведения
- •Решение
- •Найти значение функции y в точке X. .
- •Теоретические сведения
- •Решение
- •Лабораторная работа № пр4 «Программирование циклов с условием»
- •Теоретические сведения
- •Лабораторная работа № пр5 «Работа с рекуррентными формулами»
- •Решение
- •Для заданных значений n и X вычислить выражение: . Лабораторная работа № пр6 «Работа со строковыми переменными»
- •Теоретические сведения Строковые переменные
- •Функции преобразования типов
- •Решение
- •Глоссарий
- •1. Основы алгоритмизации
- •1. Основные понятия языка Visual Basic for Applications (vba)
- •1.2. Операция присваивания
- •1.3. Математические операции
- •Логические операции
- •2. Некоторые приемы оптимизации программ
- •Литература Основная
- •Дополнительная
Лабораторная работа № пр5 «Работа с рекуррентными формулами»
Цель работы: Получить устойчивые навыки работы с операторами VBA «Цикл с условием».
Задача 11 (цикл с условием). Для заданного найти наименьшее n такое, что 2n/n!< . Вывести все члены последовательности от 1-го до n-го.
Решение
Этап 1. Математическая часть
Дано: Eps – точность. Условие остановки выражение: 2n/n!< .
Найти: n – число шагов, u – результат возведения в степень.
Мы можем запрограммировать возведение в степень и вычисление факториала,
u = 1 'первый множитель
n = 0 'количество шагов
Range("C1:E20").Clear
Do Until (u < Eps) Or (n >= Limit)
n = n + 1
q = 1
For i = 1 To n
q = q * i
Next i
u = 2 ^ n / q 'очередной множитель
Cells(n, 4).Value = n
Cells(n, 5).Value = u
Loop
но при таких вычислениях может быстро накапливаться ошибка и мы можем получить не верный результат.
Обратим внимание, что
u1=2\1/1!,
u2=2\2/2!=2*2/(1*2)= u1*21/2,
u3=2\3/3!=22*2/(1*2*3)= и2*2/3 и т.д,
т.е. у нас возникает множитель 2/n, умноженный на значение предыдущего шага.
Нам необходимо учесть, что число шагов может быть невообразимо много, поэтому мы введет константу для ограничения шагов Limit = 100.
(!) Самостоятельно разработать алгоритм на естественном языке и составить блок-схему.
Этап 2. Ввод данных в таблицу Excel
В ячейку А1 вводится “Eps =”, В ячейку B1 – значение числа Eps.
Этап 3. Определение переменных
Константа Limit = 100 (тип Integer)
Вводятся: Eps (тип Single).
Промежуточные переменные: (счетчик цикла) u1 (тип Single) – значение на предыдущем шаге.
Выводятся (результат): u (тип Single) – результат возведения в степень, n (тип Integ) – количество шагов.
Этап 4. Написание процедуры
На рабочем листе Лист1 при помощи Элементов управления создать элемент Кнопка (СommandBatton1).
Навести курсор мыши на Кнопку в режиме конструктора (на панели Элементы управления нажата первая кнопка (линейка с треугольником)). Вызвать контекстное меню ПКМ Выбрать пункт Свойства закладку Alpabetic, в списке свойств выбрать Caption, справа в поле ввода удалить старое название и ввести новое название кнопки 2n/n < Eps.
Навести курсор на Кнопку в режиме конструктора. Вызвать контекстное меню ПКМ. Выбрать пункт Исходный текст. Автоматически попадаем в режим редактора VBA и появляется заголовок Процедуры-События:
Private Sub CommandButton1_Click()
Степень_двух
End Sub
Для создания новой процедуры (функции) необходимо набрать выполнить команду меню редактора VBA: Insert(Вставка)\Procedure(Процедура) в
открывшемся диалоговом окне рис. 2 Add Procedure (Вставка процедуры) установить переключатель Sub(Подпрограмма) В окне Name(Имя) ”Степень_двух” OK. После выполнения этих действий в окне модуля появится заготовка подпрограммы (функции) (заголовок и окончание), между которыми нужно поместить код тела подпрограммы (функции).
Набирать процедуру на месте курсора:
Public Sub Степень_двух()
'Описание констант
Const Limit As Integer = 100
'Описание переменных
Dim Eps As Single
Dim u As Single
Dim u1 As Single
Dim n As Integer
'Ввод переменных
Eps = Range("b1").Value
'Задание начальных значений
u = 1 'первый множитель
n = 0 'количество шагов
Range("C1:E20").Clear
'Вычисление значений
Do Until (u < Eps) Or (n >= Limit)
Cells(n, 4).Value = n
u1 = u
u = u1 * 2 / n 'очередной множитель
n = n + 1
Cells(n - 1, 5).Value = u
Loop
'Вывод результатов
Range("A6:A7").Clear
If n >= Limit Then
Range("A7").Value = n & " шагов не хватило для достижния точночти."
End If
End Sub
Этап 5. Выполнение
Перейти на рабочий лист (ViewMicrosoft Excel или Alt+F11). Выйти из режима Конструктора, левой клавишей мыши (ЛКМ) нажать Кнопку. В ячейках D1:E6 появится результат.
Этап 6. Переименование листа
Навести курсор на закладку Лист1, правой клавишей мыши (ПКМ) вызвать контекстное меню, выбрать пункт Переименовать, удалить старое название листа и с клавиатуры набрать новое Eps2, нажать Enter.
Задачи для самостоятельной работы
-
Текущее среднее. Числа x1, x2, … последовательно поступают с устройства ввода. Все числа хранить в памяти нет необходимости; после ввода каждого числа нужно вычислить и напечатать среднее значение всех введенных чисел: .
-
Для заданных a и p вычислить по рекуррентному соотношению Ньютона: ; . Сколько итераций надо выполнить для достижения заданной погрешности , используя условие: ?
-
Проверить численно справедливость следующего разложения: и оценить скорость сходимости, найдя число слагаемых, необходимое для достижения заданной погрешности . Примечение. Нам необходимо учесть, что число, возведенное в степень 0, равно 1, т.е. 20=1, и факториал 0!=1.