
- •Е. А. Сидорова, п. С. Челобанов основы программирования на vba омск 2011
- •1. Понятие и свойства алгоритма
- •1.1. Понятие алгоритма
- •1.2. Свойства и виды алгоритмов
- •1.3. Способы представления алгоритмов
- •2. Язык программирования vba
- •2.1. Языки программирования
- •2.2. Общие сведения о vba
- •2.3. Основные понятия языка программирования
- •2.4. Алфавит vba
- •2.5. Типы данных
- •2.6. Формы записи вещественных чисел в программе
- •2.7. Переменные
- •2.8. Константы
- •2.9. Встроенные функции
- •2.10. Выражения
- •2.11. Редактор Visual Basic
- •2.12. Правила записи и ввода программ на vba
- •2.13. Создание первой программы
- •3. Управление вводом и выводом данных
- •3.1. Оператор присваивания
- •3.2. Операторы ввода данных
- •3.3. Генерирование случайных чисел
- •3.4. Операторы вывода данных
- •4. Линейные вычислительные процессы
- •5. Разветвляющиеся вычислительные процессы
- •5.1. Алгоритм разветвляющегося процесса
- •5.2. Оператор условного перехода If
- •5.2.1. Однострочный (линейный) оператор If
- •If Условие Then Операторы_1 [ Else Операторы_2 ],
- •5.2.2. Блочная форма оператора If
- •5.3. Объединение условий с помощью логических операций
- •5.4. Оператор безусловного перехода GoTo
- •5.5. Оператор выбора Select Case
- •6. Символьные переменные
- •6.1. Общие понятия
- •6.2. Сравнение строк
- •6.3. Строковые функции
- •6.4. Оператор Mid
- •7. Введение в объектно-ориентированное программирование
- •7.1. Основные понятия
- •7.2. Создание пользовательского интерфейса
- •7.3. Установка свойств объектов и определение методов
- •7.4. Составление программного кода
- •7.5. Создание пользовательского приложения с использованием формы
- •7.5.1. Создание формы
- •7.5.2. Разработка программного кода
- •8. Циклические вычислительные процессы
- •8.1. Понятие цикла
- •8.2. Арифметический цикл
- •8.2.1. Цикл с разветвлением
- •8.2.2. Цикл со счетчиком. Вычисление максимума и минимума
- •8.2.3. Вложенные циклы
- •8.3. Вычисление сумм и произведений
- •8.4. Итерационные циклы
- •8.4.1. Операторы цикла Do … Loop
- •9. Модульное программирование.
- •9.1. Понятие процедуры
- •9.2. Параметры процедур – формальные и фактические
- •9.3. Разработка процедур-функций
- •9.4. Разработка процедур-подпрограмм
- •9.5. Срочный выход из процедур и циклов
- •10. Переменные с индексами. Одномерные массивы
- •10.1. Понятие массива
- •10.2. Ввод массива
- •10.2.1. Считывание массива с листа Excel
- •10.2.2. Заполнение массива случайными числами
- •10.3. Вывод массива
- •10.4. Решение задач с использованием массивов
- •644046, Г. Омск, пр. Маркса, 35
8.3. Вычисление сумм и произведений
На
практике часто приходится решать задачи
по вычислению математических
выражений вида
,
т. е. накапливать сумму, или
– накапливать произведение.
Нахождение
суммы
заключается в циклическом вычислении
промежуточных сумм Si
посредством определения очередного
слагаемого fi
и добавления его к значению суммы
предыдущих слагаемых Si-1.
Таким образом, накопление суммы можно
представить в виде последовательности
однотипных вычислений (для наглядности
примем n = 1):
(3)
Поскольку в памяти компьютера обычно не требуется сохранять значения всех слагаемых и промежуточных сумм, то их можно представить простыми переменными, т. е. хранить в памяти ЭВМ в одних и тех же ячейках. Тогда общая формула для накопления суммы будет иметь вид:
S = S + fi. (4)
В формуле (4) – и в правой, и в левой частях – указана одна и та же переменная S. Суть формулы заключается в том, что к ранее найденному промежуточному значению суммы S (в правой части формулы) прибавляется очередное слагаемое fi, и полученное текущее значение суммы присваивается этой же переменной S (в левой части). Чтобы формулу (4) можно было использовать и для расчета первого промежуточного значения суммы (равного первому ее слагаемому), следует принять начальное значение суммы S равным нулю.
Пример
ЦС1.
Вычислить:
для произвольного x.
Общая формула накопления суммы для исходного выражения имеет вид: S = S + i∙x. ГСА решения данной задачи приведена на рис. 30.
Т
екст
программы:
Sub Пример_ЦС1() 'Накопление суммы
Dim x As Single
Dim S As Single
Dim i As Byte
x = Val(InputBox("Введите x") 'Ввод x
S = 0 'Начальное значение суммы
For i = 1 To 4
S = S + i * x 'Накопление суммы в цикле
Next i
Debug.Print "S = "; S 'Вывод результата
End Sub
Аналогичным
образом вычисляется произведение
,
отличие состоит в том, что общая формула
имеет вид
,
а начальное значение произведения,
которое задается перед циклом, должно
быть равно единице.
Пример
ЦС2.
Вычислить:
для произвольного x.
По аналогии с примером ЦС1 общая формула накопления произведения имеет вид: P = P ∙ i∙x. ГСА решения задачи приведена на рис. 31, текст программы имеет вид:
Sub Пример_ЦС2() 'Накопление произведения
Dim x As Single
Dim P As Single
Dim i As Byte
x = Val(InputBox("Введите x") 'Ввод x
P
= 1 'Начальное значение произведения
For i = 1 To 4
P = P * i * x 'Накопление произведения в цикле
Next i
Debug.Print "P = "; P 'Вывод результата
End Sub
Таким
образом, можно сформулировать общий
порядок вычисления суммы
или произведения
:
– задать перед циклом начальное значение накапливаемой переменной. Если не указано иначе, то в качестве него обычно принимают:
при накоплении суммы: S = 0;
при накоплении произведения: P = 1;
при вычислении количества (счетчик): C = 0;
– организовать цикл (For i = n To k);
– записать в теле цикла закон изменения переменной (накапливаемая переменная обязательно должна быть и в левой, и в правой частях формулы):
при накоплении суммы: S = S + fi ;
при накоплении произведения: P = P * fi ;
при вычислении количества: C = C + 1;
– вывести после цикла итоговое значение накапливаемой переменной.
Пример ЦС3. На вкладе в банке находится 5 тыс. р. Какая сумма будет на вкладе через пять лет, если годовой процент по вкладу составляет 25 %?
Итоговая сумма определяется по формуле:
(5)
где Sg – сумма вклада на конец g-го года;
Dg = 0,25* Sg. – доход по вкладу в g-м году.
Графическая схема алгоритма решения задачи в полной форме приведена на рис. 32. Текст программы аналогичен примеру ЦС1.
П
ример
ЦС4.
Вычислить:
при x
= 0,5.
Обозначим
,
тогда
ГСА для вычисления суммы с изображением цикла в полной форме была приведена в примере ЦС1, для вычисления произведения – в примере ЦС2, для данного примера составим ГСА в краткой форме (рис. 33). Текст программы имеет вид:
Sub Пример_ЦС4()
Dim x As Single, i As Byte, k As Byte
Dim S As Single, P As Single, Dim W As Single
x = 0.5
'---- Вычисление суммы ----
S = 0
For i = 1 To 8
S = S + (x – i) ^ 2
Next i
Debug.Print "S="; S
'
----
Вычисление произведения ----
P = 1
For k = 7 To 15
P = P * (k + x ^ 2)
Next k
Debug.Print "P = "; P
'---- Расчет значения W ----
W = 4 * x ^ (1 / 3) + S / (5 * P)
Debug.Print "W = "; W
End Sub
Пример ЦС5. Вычислить:
y = 120 – cos 2x – cos 4x – … – cos 20x
для произвольного x.
Запишем этот пример в виде:
y
= 120 – S,
где
,
тогда решить задачу можно аналогично примерам ЦС1 и ЦС4. Параметром цикла накопления суммы является переменная i, изменяющаяся с шагом Δi = 2. Текст программы имеет вид:
Sub Пример_ЦС5( )
'Вычисление суммы членов ряда
Dim x As Single, i As Byte
Dim S As Single, y As Single
x = Val(InputBox("Введите x")) 'Ввод x
S = 0 'Начальное значение суммы
For i = 2 To 20 Step 2 'Цикл накопления суммы
S = S + Cos(i * x)
Next i
y = 120 – S 'Расчет y
Debug.Print "y = "; y 'Вывод результата
End Sub