Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования.pdf
Скачиваний:
39
Добавлен:
13.02.2015
Размер:
785.63 Кб
Скачать

Задача 9. Числа a, b, c тогда только тогда являются сторонами треугольника , когда существуют такие положительные числа x, y, z, что

ì a =

x +

y

ï

y +

z

í b =

ï

x +

z

î c =

Лабораторная работа № ПР3 «Программирование циклов с параметром»

Цель работы: научиться использовать оператор VBA «Цикл с параметром» и вычислять с его помощью сумму и произведение.

Теоретические сведения

Программирование цикла с параметром

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

Циклы со счетчиком (с известным числом повторений) еще называют циклами For, или циклами For … Next. Синтаксис цикла For … Next таков:

For Счетчик = Начало To Конец [Step Шаг] Операторы

[Exit For]

[Операторы] Next [Счетчик],

где For – зарезервированное слово VBA, обозначающее начало цикла; Счетчик

– переменная, определенная в качестве счетчика цикла, при первом выполнении циклв принимает значение Начало и каждый раз при выполнении оператора Next увеличивается на величину, заданную параметром Шаг; To – зарезервированное слово VBA, разделяющее значения Начало и Конец; Step – зарезервированное слово VBA, используемое для задания шага цикла, необязательный аргумент; Шаг – число, задающее значение, на которое увеличивается (или уменьшается) значение счетчика на каждом шаге, это число может быть отрицательным; Exit For – оператор экстренного выхода из цикла (необязательный), обычно вкладывается в оператор If…Then или Select… Case; Next – зарезервированное слово VBA, обозначающее конец цикла.

Если зарезервированное слово Step отсутствует, то значение шага равен единице.

11

Задача 10 (цикл с параметром). Составить программу вычисления

суммы и произведения числовой последовательности. ån bi

и Õn

bi ,

i= a

i= a

 

bi = sin(2i + 0.4)

 

 

Решение

Этап 1. Математическая часть

Дано: начало a и конец n суммирования и произведения. Найти: Sum, Pr.

(!) Самостоятельно разработать алгоритм на естественном языке и составить блок-схему.

Этап 2. Ввод данных в таблицу Excel

В ячейку А1 вводится значение числа a, в ячейку B1 вводится значение числа n, в ячейку C1 вводится значение шага h для цикла.

Этап 3. Определение переменных

Вводятся: a, n, h (тип Single).

Промежуточные переменные: (счетчик цикла) i (тип Integer), (bi) b (тип Single). Выводятся (результат): Sum, Pr (тип Single).

Этап 4. Написание процедуры

На рабочем листе Лист1 при помощи Элементов управления создать элемент

Кнопка (СommandBatton1).

Навести курсор мыши на Кнопку в режиме конструктора (на панели Элементы управления нажата первая кнопка (линейка с треугольником)). Вызвать контекстное меню ПКМ Выбрать пункт Свойства закладку Alpabetic, в списке свойств выбрать Caption, справа в поле ввода удалить старое название и ввести новое название кнопки Сумма и Произведение.

Навести курсор на Кнопку в режиме конструктора. Вызвать контекстное меню ПКМ. Выбрать пункт Исходный текст. Автоматически попадаем в режим редактора VBA и появляется заголовок Процедуры-События:

Набирать процедуру на месте курсора:

Private Sub CommandButton1_Click() Dim a, n, h, i As Integer

Dim Sum, Pr, b As Single 'Ввод данных

a = Range("A1").Value

n = Range("B1").Value

h = Range("C1").Value 'Вычисления

Sum = 0

Pr = 1

For i = a To n Step h

b = Sin(2 * i + 0.4) Sum = Sum + b

Pr = Pr * b Next i

’Вывод результатов в ячейки B4 и B5

12

Range("B4").Value = "Сумма = " & Sum

Range("B5").Value = "Произведение = " & Pr

End Sub

Этап 5. Выполнение

 

 

Перейти

на

рабочий

лист

(ViewMicrosoft Excel или Alt+F11). Выйти из режима Конструктора, левой клавишей мыши (ЛКМ) нажать Кнопку. В ячейке В4 появится результат «Максимальное число = 10».

Этап 6. Переименование листа

Навести курсор на закладку Лист1, правой клавишей мыши (ПКМ) вызвать контекстное меню, выбрать

пункт Переименовать, удалить старое название листа и с клавиатуры набрать новое Сумма_Произведение, нажать Enter.

Лабораторная работа № ПР4 «Программирование циклов с условием»

Цель работы: научиться использовать оператор VBA «Цикл с условием».

Теоретические сведения

Программирование цикла с условием

Циклы с условием применяются тогда, когда число повторений неизвестно, а некоторые действия в программе должны повторяться до тех пор, пока выполняется определенное условие или до тех пор, пока не будет выполнено определенное условие. Условием может быть любым выражением, принимающим значение True (Истина) или False (Ложь). В VBA есть два основных цикла с условием — цикл Do While ... Loop и цикл Do Until ... Loop. Оба они могут быть с предусловием или с постусловием.

Циклы Do While | Until имеют следующий синтаксис:

Цикл с предусловием:

Do While | Until <Условие>

Операторы

[Exit Do] Loop

Цикл с постусловием:

Do

Операторы

[Exit Do]

Loop While | Until <Условие>,

13

где Do — зарезервированное слово VBA, указывающее на начало цикла; While| Until — зарезервированные слова VBA, если используется While -> цикл выполняется, если <Условие> принимает значение True и заканчивает свою работу, если <Условие> принимает значение False. Если используется Until -> цикл выполняется, если <Условие>=False и заканчивает свою работу, если <Условие>=True; <Условие> — логическое выражение, принимающее значение True или False; Loop — зарезервированное слово VBA, указывающее на окончание цикла.

Цикл с предусловием и Цикл с постусловием отличаются тем, что Цикл с постусловием выполняется хотя бы один раз до проверки <Условие>, а Цикл с предусловием может не выполняться ни разу, если не выполняется <Условие>.

Используя цикл с условием, можно организовать бесконечный цикл. Иногда это бывает необходимо, гораздо чаще это происходит из-за ошибки пользователя. Для создания бесконечного цикла условное выражение должно быть таким, которое никогда не выполняется или выполняется всегда. Выйти из такого бесконечного цикла и прервать работу программы можно, нажав комбинацию клавиш <Ctrl+Break>.

Вызов процедуры

Выполнить процедуру типа Sub, у которой аргументы есть, можно только вызвав её из другой процедуры.

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

Если процедура имеет аргументы, то она будет требовать эти аргументы при выполнении своей работы. Вызывается процедура с помощью оператора Call, вслед за которым должно следовать имя процедуры и список её параметров в скобках. Вместо входных параметров могут стоять их значения. Допускается и бесскобочная запись оператора вызова (при этом ключевое слово Call – имя оператора – не используется).

Лабораторная работа № ПР5 «Работа с рекуррентными формулами»

Цель работы: Получить устойчивые навыки работы с операторами VBA «Цикл с условием».

Задача 11 (цикл с условием). Для заданного ε найти наименьшее n

такое, что 2n/n!< ε . Вывести все члены последовательности от 1-го до n-го.

Решение

Этап 1. Математическая часть

Дано: Eps – точность. Условие остановки выражение: 2n/n!< ε. Найти: n – число шагов, u – результат возведения в степень.

Мы можем запрограммировать возведение в степень и вычисление факториала,

u = 1 'первый множитель n = 0 'количество шагов

14

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()

15

Степень_двух End Sub

Для создания новой процедуры (функции) необходимо набрать выполнить команду меню редактора VBA: Insert(Вставка)\Procedure(Процедура) → в

открывшемся

диалоговом

окне

рис.3

Add Procedure (Вставка процедуры)

установить

переключатель

Sub(Подпрограмма)

В окне

Name(Имя) ”Степень_двух” OK. После выполнения этих действий в окне модуля появится заготовка подпрограммы (функции) (заголовок и окончание), между которыми нужно поместить код тела подпрограммы (функции).

Рис.3. Окно Вставка

процедуры

Набирать процедуру на месте курсора:

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 & " шагов не хватило для достижния точночти."

16

End If

End Sub

Этап 5. Выполнение

Перейти на рабочий лист (ViewMicrosoft Excel или Alt+F11). Выйти из режима Конструктора, левой клавишей мыши (ЛКМ) нажать Кнопку. В ячейках D1:E6 появится результат.

Этап 6. Переименование листа

Навести курсор на закладку Лист1, правой клавишей мыши (ПКМ) вызвать контекстное меню, выбрать пункт Переименовать, удалить старое название листа и с клавиатуры набрать новое Eps2, нажать

Enter.

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

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

чисел: sn = 1 ån xk . n k = 1

Задача 13. Для заданных a и p вычислить x = pa по рекуррентному соотношению Ньютона:

xn+ 1

=

1

é

( p - 1)xn +

a

ù

 

 

 

ê

 

ú

 

 

 

xnp1

 

= a .

 

 

p ë

 

û ;

x0

Сколько итераций надо выполнить для достижения заданной погрешности e, используя условие: xn+ 1 - xn £ ε ?

Задача 14.

 

Проверить численно справедливость следующего разложения:

ex = 1 +

 

x

 

+

x2

+ +

xn

+ и оценить скорость сходимости, найдя число

1!

2!

n!

 

 

 

 

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

17