ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Вычисление суммы бесконечного убывающего ряда с заданной точностью. Итерационные циклы

 

Задача сводится к нахождению суммы

,

каждое слагаемое, которой является функцией от номера n, определяющего место этого слагаемого в сумме, а также может являться функцией одного или нескольких дополнительных параметров.

Вычисление суммы ряда состоит в получении в результате циклического процесса последовательности u(1), u(2), ..., u(n), ..., сходящейся к своему предельному значению, т. е. . Здесь u(n) – сумма n членов бесконечного ряда.

Для вычисления суммы ряда используется рассмотренный выше прием накопления суммы: суммирование считается законченным при выполнении условия достижения заданной погрешности e: . Задача нахождения суммы ряда является типичным примером итерационного процесса, так как заранее не известно, при каком числе членов ряда будет достигнута требуемая точность.

Процесс вычисления определяется рекуррентным соотношением (т.е. к предыдущему значению прибавляется текущее) u(n)=u(n-1)+u(n). Алгоритм нахождения суммы ряда показан на рис 4.

Рис. 4. Вычисление суммы ряда

 

В приведенной блок-схеме для вычисления суммы ряда используется рассмотренный выше прием накопления суммы. Только теперь суммирование считается законченным тогда, когда выполнится условие – значение члена ряда станет меньше заданной погрешности e: .

Для организации такого итерационного цикла (т.е. цикл с заранее неизвестным числом повторений) применяется оператор Do...Loop. Именно здесь проявляется удобство этого оператора, поскольку, используя, оператор For...Next, поставленную задачу решить не удается – For...Next – оператор цикла с заранее заданным числом повторений.

 

Сложные циклические процессы. Вложенные циклы

 

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

При программировании алгоритмов со структурой вложенных циклов необходимо выполнять следующее требование: внутренний оператор цикла и принадлежащая ему область действия должны полностью содержаться в области внешнего оператора цикла. Иными словами, внешний цикл всегда начинается раньше, а заканчивается позже, чем внутренний.

Целесообразно производить разделение вычислений между внешним и внутренним циклами, если это возможно. Во внешний цикл необходимо включать все вычисления, не зависящие от параметра внутреннего цикла. Это позволит значительно сократить время выполнения программы, поскольку число повторений внешнего цикла меньше, чем внутреннего. По этой причине в качестве параметра внешнего цикла выбирают переменную, с которой связаны наиболее сложные вычисления

Описание массивов

В программировании часто возникает необходимость обработки большого количества однородных данных – массивов (последовательностей чисел, временных рядов, матриц и т.п.). Массив – это множество однотипных элементов, объединенных общим именем и занимающих в компьютере определенную область памяти, доступ к которым осуществляется по индексу. Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива). Массив является удобным способом хранения нескольких связанных элементов данных в едином контейнере для большего удобства и эффективности программирования. Все элементы данных, сохраняемых в массиве, должны иметь один и тот же тип.

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

В зависимости от числа индексов массивы могут быть одномерными, двумерными и т.д. Так, например, в записи а = (а1, а2 …, аn) переменные а1, а2 …, аn являются компонентами вектора а и образуют одномерный массив.

Матрица

 

 

представляет собой двумерный массив, элементы которого обозначены переменной в с двумя индексами. Первый индекс соответствует номеру строки, второй – номеру столбца, на пересечении которых расположен соответствующий элемент матрицы.

Таким образом, количество индексов у переменной определяет размерность массива, а общее число элементов в массиве – размер.

Для задания индексированных переменных в VBA применяется оператор Dim (от англ. Dimension – размерность), который задает имя массиву и его размер:

Dim имя массива (измерения массива) As type,

имя массива – имя массива, к которому предъявляются такие же требования, как и к именам переменных (см. лабораторную работу «Основы работы в VBA. Линейное программирование»)

измерения массива – данная опция может быть задана следующим образом:

нижний индекс ТО верхний индекс, нижний индекс ТО верхний индекс, …

или

верхний диапазон, верхний диапазон, ....

 

type – один из типов переменных (Integer, Single, Double, и т.д.)

 

Следующие примеры являются допустимыми объявлениями массива:

 

Dim str_array(1 To 100) As String

Dim str_Multiplication(0 To 15, 0 To 15) As String

Если условия задачи таковы, что размер массива заранее не определен, то поступают так: в начале программы объявляется пустой массив, а когда становится известен его размер, определяют его в помощью оператора ReDim. Как это делается, рассмотрено ниже.

Динамические массивы

Иногда бывает трудно заранее определить, сколько элементов нужно будет поместить в список. Для этого используют динамические массивы.

Динамические массивы используются в том случае, когда количество элементов массива заранее не известно и будет определяться в процессе выполнения программы. Как следствие, после того, как работа с динамическими массивом в программе будет выполнена, можно освободить память, которую он занимает.

Динамический массив объявляется так же, как и любой другой тип массива – оператором Dim. Единственное отличие состоит в том, что не указывается (в скобках) размер массива. Например:

Dim A() As Byte

Этой строкой создается массив, но откладывается решение о том, сколько он будет иметь элементов. Перед тем, как использовать этот массив, необходимо указать его размер, который во время работы программы можно изменять сколько угодно раз. Это делается с помощью оператора ReDim.

ReDim A(5)

Следует отметить, что при указании значений для размерностей динамического массива оператором ReDim его тип не может быть изменен.

При помощи оператора ReDim можно установить любые значения границ и количество размерностей, а также менять любой из установленных параметров как в сторону уменьшения, так и увеличения.

Dim A() As Byte

ReDim A(5) 'Диапазон от 0 до 5

ReDim A(1 To 4) 'Диапазон от 1 до 4

ReDim A(3, 3, 1 To 3) 'Диапазон от 0 до 3,

'от 0 до 3, от 1 до 3

В качестве как верхней, так и нижней границы могут быть использованы не только числа, но и переменные целого типа:

Dim n As Integer

Dim A() As Integer

n = 10

ReDim A(n)

 

При каждом выполнении оператора ReDim все значения элементов массива, которые до этого в нем хранились, будут потеряны, так как данный оператор обнуляет все элементы в соответствии с их типом, например числовые массивы принимают значение 0, а символьные "" (пусто). Для того чтобы имеющиеся в массиве значения не пропали при его переопределении, следует использовать служебное слово Preserve:

Sub primer()

Dim n As Integer

Dim i As Integer

Dim a() As Integer

n = 10

ReDim a(n)

For i = 1 To n

a(i) = i ^ 2

Next i

ReDim Preserve a(15)

For i = 11 To 15

a(i) = i ^ 3

Next i

End Sub

В данной программе требуется заполнить массив из десяти элементов квадратами первых десяти натуральных чисел. Затем следует переопреде-ление размера массива до 15 и заполнение новых элементов (с 11 по 15) кубами следующих натуральных чисел.

 

Заполнение массивов данными

 

Для ввода элементов массива можно использовать следующие способы:

1) функцию InputBox – функция InputBox отображает диалоговое окно, содержащее текст, который запрашивает пользователя ввести некоторое значение и текстовое окно для ввода этого значения.

– для одномерного массива:

Dim A() As Integer

n = InputBox("Введите размер массива", "Определение размера массива")

ReDim A(n)

For i = 1 To n

'команда в редакторе VB набирается в одну строку

A(i) = InputBox("Введите элемент массива А(" & i & ")", "Заполнение массива")

Next i

При своей работе приведенный кусок программы выводит следующие окна:

....

 

– для двумерного массива:

Dim A() As Integer

n = InputBox("Введите количество строк массива")

m = InputBox("Введите количество столбцов массива")

ReDim A(n, m)

For i = 1 To n

For j = 1 To m

A(I, j) = InputBox("Введите элемент массива А(" & i & "," & j & ")")

Next j

Next i

 

2) функцию Сells – данные считываются из рабочего листа Excel. В этом случае пользователь перед запуском программы вводит данные элементов массива в ячейки рабочего листа Excel.

 

– для одномерного массива:

Dim a(10) As Integer

For i = 1 To 10

'массив записан в 5-ой строке рабочего листа Excel

a(i) = Cells(5, i)

Next i

– для двумерного массива:

 

 

Dim a(10, 5) As Integer

For i = 1 To 10

For j = 1 To 5

a(i, j) = Cells(i, j)

Next j

Next i

Этот способ более предпочтителен, поскольку он не требует ввода данных с клавиатуры каждый раз при новом появлении диалогового окна.

3) использование генератора случайных чисел Rnd(), если значение массива не задано. При таком способе заполнения массива надо учесть, что перед использованием функции Rnd() надо инициализировать генератор случайных чисел, а также то, что он выдает числа в интервале от 0 до 1.

– для одномерного массива:

Randomize Timer

Dim a() As Single

n = InputBox("Введите размер массива")

ReDim a(n)

For i = 1 To n

a(i) = 50 - Int(Rnd() * 100) / 10

Next i

 

– для двумерного массива:

Randomize Timer

Dim a() As Single

n = InputBox("Введите количество строк массива")

m = InputBox("Введите количество столбцов массива")

ReDim a(n, m)

For i = 1 To n

For j = 1 To m

a(I, j) = 50 - Int(Rnd() * 100) / 10

Next j

Next i

 

4) с помощью формулы, если массив заполняется по какой-либо закономерности, причем значение элемента массива зависит от его местоположения:

 

– для одномерного массива:

Dim a() As Single

n = InputBox("Введите количество строк)

ReDim a(n)

For i = 1 To n

a(i) = 5 * i / (i + 4)

Next i

– для двумерного массива:

Dim a() As Single

n = InputBox("Введите количество строк", "Определение размера массива. Запрос 1 из 2")

m = InputBox("Введите количество столбцов", "Определение размера массива. Запрос 2 из 2")

ReDim a(n, m)

For i = 1 To n

For j = 1 To m

a(i, j) = 5 * i / (j + 4)

Next j

Next i

 

Вывод массивов на печать

 

Вывести массив на печать можно следующими способами:

1) в рабочий лист Excel – для этого используется известная уже функция Cells:

для одномерного массива: для двумерного массива:
For i = 1 To n ‘вывод в 10 строку рабочего ‘листа Cells(10, i) = a(i) Next i For i = 1 To n For j = 1 To m ‘вывод начинается с ‘5 строки 4 столбца Cells(i+5, j+4) = a(i, j) Next j Next i

 

2) в диалоговое окно. Для этого весь массив переписывается в какую-либо одну текстовую переменную (например Text), которая и выводится в диалоговое окно. При выводе двумерного массива перед выводом необходимо сформировать строки и столбцы. Для этого используется функция Chr(13) – перевод каретки, которая при заполнении строки переводит курсор на начало следующей строки и Chr(9) – вставляет символ табуляции между элементами массива в строке. Здесь также массив предварительно записывается в текстовую переменную, которая выводится в диалоговое окно.

Для одномерного массива:   Для двумерного массива:
Text = "" For i = 1 To n Text = Text & a(i) & Chr(9) Next i MsgBox "Массив:"&Chr(13)& Text   Text = "" For i = 1 To n For j = 1 To m Text = Text & a(i, j) & Chr(9) Next j Text = Text & Chr(13) Next i MsgBox "Массив:" & Chr(13) & Text
     

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти