Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Задание 6. Использование условных операторов и операторы цикла при вычислении чисел Фибоначчи.



Использование условных операторов и операторы цикла при вычислении чисел Фибоначчи.

Любая более или менее серьёзная программа подразумевает использование управляющих инструкций, среди которых особое место занимают условные операторы и операторы циклов. Рассмотрим особенности применения таких операторов.

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

Оператор цикла позволяет выполнять последовательности однотипных действий.

1) Создадим с помощью оператора цикла FOR макрос, который заполняет ячейки документа числами Фибоначчи
(по имени средневекового математика Леонардо Пизанского, известного как Фибоначчи):

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,...

Числами Фибоначчи называют последовательность натуральных чисел, первые два из которых равны 1, а каждое последующее равно сумме двух предыдущих.

Примечание 3: Оказывается, эта последовательность имеет множество интересных с точки зрения математики свойств. Вот пример: вы можете разделить линию на два сегмента, так что соотношение между большим и меньшим сегментом будет пропорционально соотношению между всей линией и большим сегментом. Этот коэффицент пропорциональности, приблизительно равный 1,618, известен как золотое сечение. В эпоху Возрождения считалось, что именно эта пропорция, соблюденная в архитектурных сооружениях, больше всего радует глаз. Если вы возьмете последовательные пары из ряда Фибоначчи и будете делить большее число из каждой пары на меньшее, ваш результат будет постепенно приближаться к золотому сечению. Другую интересную информацию о числах Фибоначчи можно найти в Интернете: http://elementy.ru/trefil/21136; http://ru.wikipedia.org и др..

Также, в оператор For добавим условный оператор, с помощью которого обеспечим необходимость того, чтобы числами ячейки заполнялись только в том случае, если в активную ячейку введено число большее 2. В VBA существует условный оператор If…. Then….Else, который реализует означенный алгоритм. Программный код данного макроса приведен в листинге 18:

Листинг 18: Программный код макроса Fibon ()

Public Sub Fibon ()

Dim N As Integer

Dim i As Integer

Dim a As Integer

Dim b As Integer

N = ActiveCell.Value

If N<2 Then

MsgBox Prompt: = “Указано неверное значение!”, Title: = “Ошибка!”

Else

a = 1

ActiveCell.Offset(1,-1).Value = 1

ActiveCell.Offset(1,0).Value = a

b = 1

For i = 2 To N

ActiveCell.Offset(i,-1).Value = i

ActiveCell.Offset(i,0).Value = b

b = b + a

a = b – a

Next i

End If

End Sub

Рис. 26. Результат выполнения задания 6, п. 1.

В ячейку А4 введите слова: «Числа Фибоначчи в количестве N =», в ячейку В4 введите число 12 (сколько чисел Фибоначчи будет выведено с помощью макроса), далее выделите ячейку B4 со значением 12 (ячейка B4 станет активной) и далее запустите макрос на выполнение. Результат выполнения макроса будет выглядеть как на рис. 27. Внизу, под ячейкой B4 (в ячейках B5:В16) будут выведены 12 чисел Фибоначчи. Поэкспериментируйте сами, с выполнением данного макроса, задавая для вычисления разное число чисел Фибоначчи в ячейке B4.

Если в ячейку В4 будет введено число меньшее 2, то результат будет иным, см. рис. 27:

Рис. 27. Результат работы макроса при неверно указанном значении ячейки.

Данный макрос Fibon имеет недостатки, в частности не может вывести одно число Фибоначчи, когда значение
в активной ячейке равно 1, а также не может обработать случай, когда в ячейка В4 содержит нечисловое значение.

Приведённый ниже макрос Fibon2 решает эти проблемы (см. листинг 19):

Листинг 19: Программный код макроса Fibon2 ()

Public Sub Fibon2()

Dim N As Integer

Dim i As Integer

Dim a As Integer

Dim b As Integer

N = ActiveCell.Value

If Not IsNumeric(ActiveCell.Value) Then

MsgBox Prompt:=” Должно быть указано число!", Buttons:=vbCritical, Title:="Внимание!"

Exit Sub

End If

N = ActiveCell.Value

Select Case N

Case Is < 1

MsgBox Prompt:=" Указано неверное число!", Buttons:=vbInformation, Title:="Внимание!"

Case Is = 1

ActiveCell.Offset(1, -1).Value = 1

ActiveCell.Offset(1, 0).Value = 1

Case Else

ActiveCell.Offset(1, -1).Value = 1

ActiveCell.Offset(1, 0).Value = 1

a = 1

b = 1

i = 2

Do While i <= N

ActiveCell.Offset(i, -1).Value = i

ActiveCell.Offset(i, 0).Value = b

b = b + a

a = b - a

i = i + 1

Loop

End Select

End Sub

Как работает этот макрос? Сначала выполняется условный оператор, который проверяет условие того, что значение в ячейке является числовым. Для этого используется функция IsNumeric(). Если выражение, указанное аргументом функции, является числовым, то возвращается значение true (в противном случае результатом функции будет false). Поскольку перед функцией указана инструкция отрицания Not, блок условного оператора выполняется при нечисловом значении ячейки. Блок состоит из двух операторов. Первый выводит сообщение о том, что надо ввести числовое значение в активную ячейку. В функции MsgBox использован аргумент Buttons:=vbCritical, которым устанавливается тип окна сообщения с пиктограммой ошибки. Вторая команда – завершает процедуру Exit Sub. Альтернативная ветка Else в этом случае не используется.

Оператор Select Case проверяет значения переменной N (значение активной ячейки). Для случая, если это значение меньше 1 (условие Is < 1), выводится специальное информационное сообщение (используется аргумент Buttons:=vbInformation для функции MsgBox). Для случая, если значение активной ячейки равно 1 (условие Is=1), выводится одно число Фибоначчи. В прочих случаях выполняется блок команд Case Else. В этом блоке оператор цикла For заменен на оператор цикла Do While….Loop. Команды, размещенные в этом операторе, выполняются до тех пор, пока выполнено условие, указанное после ключевого словаWhile.

Результат вызова макроса Fibon2 при числовом, но некорректном значении в активной ячейке, показан на рис. 28:

Рис. 28. Попытка вычисления чисел Фибоначчи при неверно указанном значении в активной ячейке.

Если ввести единицу и запустить макрос, то будет выведено первое число Фибоначчи, см. рис. 29:

Рис. 29. Результат вывода первого числа Фибоначчи.

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

Контрольные вопросы:

1) Введите в ячейку A1 число 6. Как будет выглядеть результат выполнения макроса SetValue3 (), задание 2, п. 3.
если код макроса SetValue3 ()будет иметь вид как в листинге 7*?

Листинг 7*: Программный код макроса SetValue3 ()

Public Sub SetValue3 ()

Range (“B3:D8”).Value = Range (“A1”).Value+3

End Sub

2) Выделите активную ячейку D10. Используя макрос SetValue4 () измените его код так, чтобы отступ от активной ячейки по вертикали и по горизонтали составлял 2.

3) Установите в ячейках С4:D10 шрифт: Times, размер: 14 пт.. Далее, используя макрос Formats2 (), измените его код так, чтобы ячейкам С4:D10 присваивалось значение шрифта Times, начертание: Bold.

4) Установите в ячейках С4:D10 шрифт: Times, размер: 14 пт.. Далее, используя макрос Formats3 (), измените его код так, чтобы ячейки С4:D10 увеличились в 2 раза по ширине, высота ячеек увеличилась на 4 позиции, цвет шрифта: Green, стиль шрифта: Bold.

5) Введите в ячейку А3 значение 0,5. Используя макрос CellFormula (), вычислите значение ячейки B3 по формуле: SIN(A3^2).

6) Введите в ячейку А1 число 2, а в ячейку В1 число 3. Используя макрос CellFormula5, вычислите значение ячейки А2 (А2 считается активной) по формуле, согласно которой значение ячейки вычисляется как сумма 1, и значения соседней ячейки, отстоящей справа вверху от активной (ответ:4).

7) Введите в ячейку А1 число 2, в ячейку A2 число 4. Используя макрос CellFormula5, вычислите значение ячейки B1
(B1 считается активной) по формуле, согласно которой значение ячейки вычисляется как сумма 1, и квадрата значения соседней ячейки, отстоящей слева внизу от активной (ответ:17).

8) При выполнении макроса Fibon2 введите в активную ячейку количество чисел Фибоначчи, которое вы хотите вывести на экран. Сначала число 20, затем число 50 и запустите макрос на выполнение. Проверьте результат выполнения макроса. В каком случае он не работает и почему?





Дата публикования: 2014-11-03; Прочитано: 559 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...