Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Макросы занятия.doc
Скачиваний:
5
Добавлен:
27.03.2015
Размер:
720.38 Кб
Скачать

Макросы занятие 4. Циклы.

Циклы.

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

Организовать циклы можно разными способами.

Задача.

Усложнение задания по расчету пени. Пеня начисляется на сумму с начисленными процентами за каждый день просрочки. Функция предполагает применение оператора цикла по числу просроченных дней.

Синтаксис. Напоминаем: инструкции, заключенные в [ ] являются необязательными и применяются по необходимости.

Цикл на основе оператора If

metka:

If <условие> then

<тело цикла>

GOTO metka

End if

«Классический» цикл.

For<переменная цикла>=<нач.значение>to<кон.значение> [<Step><знач.шага>]

<тело цикла>

[exitfor] экстренный выход из цикла ( по условию!)

<next>

Цикл по условию

While<условие>

< тело цикла >

Wend

Для условий нашей задачи предпочтителен «классический» цикл, так как точно известно, сколько дней просрочено.

PublicFunctionПеня2(долг!, дата_возвратаasDate, пеня_день!)

Dimi%,nd%

Пеня2=долг

nd=Date- дата_возврата Разница дней между текущей датой и договорной датой возврата

If (Date- дата_возврата) >0 Then Если срок нарушен

For i=1 to nd Цикл по числу дней просрочки

Пеня2= Пеня2+ Пеня2 * пеня_день Начисление процента за день

Next i Следующий день

End if Конец условия

End Function

Функция Факториал. Факториал есть произведение чисел по порядку от 1 до назначенного. Описание алгоритма сводится к следующим действиям:

  1. объявить функцию и описать аргумент

  2. описать внутренние переменные

  3. в цикле накапливать произведение чисел от 1 до введенного

  4. присвоить результат самой функции

Public Function Факториал (число!)

Dimi%,fkt#

fkt=1

For i=1 to число

fkt=fkt*i

Next i

Факториал=fkt

EndFunction

Функция Экспонента, в которой можно использовать написанную выше функцию Факториал.

вычислить с заданной точностью eps>0 функцию:

y=e^x=1 +x/1! +x^2/2! + ... +x^n/n!

Пояснения.

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

PublicFunctionЭкспонента (аргумент!,точность!)

Dim i%, func_ps#

Экспонента=1

Whileabs(Экспонента-func_ps)> точность

i=i+1

func_ps=Экспонента

Экспонента= Экспонента +аргумент ^i/ Факториал (i)

Wend

I=i

EndFunction

Выше использован оператор ABS(число), возвращающий модуль числа.

Самостоятельно.

1)Для функции экспонента

1.1 провести сравнение со стандартной, определив необходимый уровень точности до полного совпадения

1.2 Определить необходимое количество шагов для вычисления экспоненты при значениях аргумента х=2 и х=20

1.3 Выявить пределы расчета (по величине аргумента), сравнив результат по встроенной функции и вами созданной.

2)вычислить с заданной точностью eps>0 функцию:

y=shx=x + x^3/3! + x^5/5! + ... + x^(2n+1)/(2n+1)!

3) Вычисление f=10! Описать каждым из трех вариантов оператора цикла.

4) При помощи оператора цикла рассчитать Y в зависимости от введенного X