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

Макросы занятие 3. Условия, ветвление решения.

Написание задач и функций на закрепление материала.

Оператор условия:

If <условие> then <действия если условие выполняется> [else <действия если условие не выполняется>] end If

является одним из наиболее популярных операторов для ветвления решения.

Квадратные скобки указывают необязательные инструкции.

Например, есть некая переменная х, имеющая числовое значение.

Требуется написать функцию, реализующую решение простейшей системы ограничений.

10, если х<0

F(x)= х2, если х>0 иx<11

1/x, если х>11

Результат может выглядеть так:

PublicFunctionфункция_ограничений(x!)

функция_ограничений=1/x

ifx<0thenфункция_ограничений=10

Ifx>0andx<11thenфункция_ограничений=x^2

End Function

Обратим ваше внимание на оформление «двойного» условия, которое трактуется как соблюдение первого ивторого одновременно с помощьюand.

Аналогично можно использовать условие выполнения одного из нескольких, тогда связующим оператором будет or(или).

F(x)= 1/x, если х<0 илиx>11

х2, в остальных случаях

PublicFunctionфункция_ограничений1(x!)

Ifx<0orx>11thenфункция_ограничений1=1/xelseфункция_ограничений1=x^2

EndFunction

Функции для практического использования.

Задача: написать функцию по расчету итогового долга при условии, что нарушение сроков возврата ведет к начислению пени по назначенным процентам.

Исходные данные: Долг, срок возврата, пеня % в день.

Выполнение.

Войти через меню “сервис-макросы-Редактор VBA” в редактор. Через меню VBAInsert” или русской редакции «Вставка» вставить “Module” (модуль) и в модуль вставить процедуру, как функцию. Подробнее начальные действия см. в методичке. VBA вставляет «заглушку» для дальнейших манипуляций программиста.

Public Function Пеня()

End Function

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

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

End Function

Далее необходимо построить логику вычислений и реализовать в виде программного кода:

Пеня не может быть меньше долга и если срок возврата нарушен, то начисления процентов производятся на каждый день просрочки до текущего дня. Так может быть прочитан программный код на «человеческом» языке. Способ вызова прост. Достаточно обратиться к мастеру функций и в категории «Определенные пользователем» вызвать функцию пеня. В представленной функции используется оператор Date, возвращающий системную дату ПК.

Расчет проведен 24.04.03. Результат на рис.

Результат при тех же начальных условиях будет равен 16385.

Самостоятельно выполнить следующие задания.

  1. Подпрограмма - по координатам трех вершин некоторого треугольника найти его площадь и периметр.

  2. Функция - даны координаты ( как целые от 1 до 8 ) двух полей шахматной доски. Дать ответ о возможности перехода коня с одного поля на другое за один ход.

  3. Функция – к задаче определения прогрессивного налога из файла ex1.xls лист Фонд зп.

Макросы занятие 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

EndFunction

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

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

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

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

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

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