Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования.doc
Скачиваний:
3
Добавлен:
13.11.2018
Размер:
3.32 Mб
Скачать

Лабораторная работа № пр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.

Задачи для самостоятельной работы

  1. Текущее среднее. Числа x1, x2, … последовательно поступают с устройства ввода. Все числа хранить в памяти нет необходимости; после ввода каждого числа нужно вычислить и напечатать среднее значение всех введенных чисел: .

  1. Для заданных a и p вычислить по рекуррентному соотношению Ньютона: ; . Сколько итераций надо выполнить для достижения заданной погрешности , используя условие: ?

  1. Проверить численно справедливость следующего разложения: и оценить скорость сходимости, найдя число слагаемых, необходимое для достижения заданной погрешности . Примечение. Нам необходимо учесть, что число, возведенное в степень 0, равно 1, т.е. 20=1, и факториал 0!=1.