Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования.pdf
Скачиваний:
39
Добавлен:
13.02.2015
Размер:
785.63 Кб
Скачать

5.Имена не должны совпадать с зарезервированными словами VBA.

6.Имя не должны повторяться ни на одном уровне определения, то есть в одно процедуре не могут быть объявлены две переменные с одинаковыми именами.

1.2.Операция присваивания

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

ИмяПеременной = Значение где ИмяПеременной — имя переменной; символ « = » знак операции

присваивания; Значение — числа, или комбинация переменных, констант и функций, связанных знаками операций являющимися каким-либо выражением.

1.3. Математические операции Операции сложения, вычитания, умножения и деления называют основными

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

Пример 1.

Result = 10\3 – результат 3 (целая часть от деления); Result = 10 Mod 3 – результат 1 (остаток от деления); Result = 3^2 – результат 9;

Result = -3*2 – результат -6.

1.4. Операции отношения

Операция отношения может иметь только два результирующих значения — True (Истина) и False (Ложь), которые могут быть присвоены переменным

28

типа Boolean или определенному свойству объекта. Перечень операций отношения VBA приведен в табл.1.

Операции отношения применяются для записи выражений условия, результатом выполнения которых являются значения True (Истина) или False (Ложь). Примеры записи операции отношения приведены в табл.1.

Таблица 1. Операции отношения их использование

Операция

Значения

Выражение

 

Результат

 

 

переменных

условия

 

 

 

=

a = 10, b = 5

a = b

False (Ложь), т.к. 10 не равно 5

<>

a = 10, b = 5

a < > b

True (Истина), т.к. a = 10, b = 5 Þ 10

 

a = 10, b = 5

a < b

<> 5, Þ а не равно b

 

<

False (Ложь), т.к. 10 не больше 5

>

a = 10, b = 5

a > b

True (Истина), т.к. 10 больше 5

=>

a = 10, b = 10

a =>b

True (Истина), т.к. 10 равно 10

<=

a = 10, b = 5

a <=b

False (Ложь), т.к. 10 не больше 5

 

 

Text1.Text

True (Истина), если слово «Вася»

 

 

= “Вася”

является

содержимым

первого

 

 

 

текстового поля, в противном случае –

 

 

 

False (Ложь)

 

 

 

k > = 15

True (Истина), если переменная k

 

 

 

содержит значение не меньше 15, в

 

 

 

противном случае – False (Ложь)

1.5. Логические операции

 

 

 

 

Логические операции применяются в логических выражениях. Если существует несколько условий выбора в операциях отношения, то эти операции связываются между собой логическими операциями. Логические операции VBA приведены в табл.2, результат выполнения этих операций (таблица

истинности) табл.3.

 

 

 

Таблица 2. Логические операции

Логические

Результат

 

операции

 

 

And

Принимает значение True, если обе переменных

 

 

одновременно принимают значения True, в остальных

 

 

случаях False ( операция конъюнкция)

 

Or

Принимает значение False, если обе переменные

 

 

одновременно принимают значения False; в остальных

 

29

 

случаях True (операция дизъюнкция)

 

 

 

 

Not

Если переменная принимает значение True, то

 

результирующим значением будет False. Если

 

переменная

принимает

значение

False,

то

 

результирующее значение будет True (операция

 

отрицание).

 

 

 

 

 

 

 

Xor

Если только одна из связываемых переменных имеет

 

значение True, то результирующее значение так же

 

будет True. Если обе переменных принимают

 

одинаковые значения True или False, то

 

результирующее значение будет False.

 

 

 

 

 

 

Таблица 3. Таблица истинности

Операнды

 

 

Выражения

 

 

 

a

b

a And b

Not(a And b)

a Or b

a Xor b

True

True

True

False

True

False

True

False

False

True

True

True

 

False

True

False

True

True

True

 

False

False

False

True

False

False

1.6. Константы и переменные

В таблице ниже (табл.4) приведены примеры объявления переменных, их размеры памяти и предельный диапазон значений, примеры использования.

 

 

Таблица 4. Базовые типы переменных VBA

Типы

Размер

Диапазон

 

Пример

данных

 

значений

 

 

Integer

2 байта

-32768 до 32767

Целочисленные

Dim I as Integer

Byte

1 байта

0 до 255

Dim K as Byte

Long

4 байта

-2147483648 до

типы

Dim J as Long

 

 

2147483647

 

 

Single

4 байта

-3.402E38 до

 

Dim F as Single

 

 

3.402E38

Вещественные

 

Double

8 байта

-1.79E308 до

типы

Dim Summa as

 

 

1.79E308

 

Double

Boolean

2 байта

False или True

Булевский тип

Dim Yes as

 

 

 

Boolean

 

 

 

 

String

10

+ до 2 млрд

Строковый тип

Dim Stroka as

 

байта

символов

String

 

 

Date

8 байта

от 1 янв 100г. до

Тип Дата

Dim BirthDay as

 

 

31 дек 9999г.

Date

 

 

 

Variant

16

все числовые

Значения любого

Dim Chislo as

 

байта

подтипы

из

Variant

30

 

перечисленных

 

типов данных

1.7. Встроенные математические функции

 

Таблица 5. Математические функции VBA

Примеры

Значение

функций

 

Abs(x)

Возвращает модуль числа x

Cos(x)

Возвращает косинус числа x, заданного в радианах

Sin(x)

Возвращает синус числа x, заданного в радианах

Sqr(x)

Возвращает квадратный корень из числа x

Rnd[(x)]

Возвращает псевдослучайное число одинарной точности

 

в интервале от 0 до 1. Необязательный параметр,

 

устанавливает то, как генерируется следующее

Int(x)

псевдослучайное число

Возвращает выделенную целую часть числа x

Tan(x)

Возвращает тангенс числа x

Atn(x)

Возвращает арктангенс числа x в радианах

Exp(x)

Возвращает результат возведения числа e в указанную

Log(x)

степень x, где e – основание натурального логарифма

Возвращает значение натурального логарифма числа x

2. Некоторые приемы оптимизации программ

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

31

заниматься оптимизацией программы.

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

При оптимизации программы необходимо выявить те фрагменты исходного текста, которые являются “основными потребителями” ресурса, а затем перепрограммировать эти фрагменты, решая задачу оптимизации.

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

I.Оптимизация, не зависящая от компилятора.

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

II.Инициализация объектов данных.

Во многих программах какую-то часть объектов данных необходимо инициализировать, то есть присваивать им начальные значения. Такое присваивание выполняется либо в самом начале программы, либо, например, в начале цикла. Правильная инициализация объектов данных позволяет

32

сэкономить драгоценное процессорное время. Так, например, если речь идет об инициализации массивов, использование цикла, скорее всего, будет менее эффективным, чем объявление этого массива типизированной константой.

III.Программирование арифметических операций.

В том случае, когда значительная часть времени работы программы отводится арифметическим вычислениям, немалые резервы повышения скорости работы программы тратятся в правильном программировании арифметических (и логических) выражений. Важно понимать, что различные арифметические операции значительно различаются по быстродействию. Самыми быстрыми являются операции сложения и вычитания. Более медленным является умножение, затем идет деление. Относительно много времени тратится на обращение к подпрограммам. Быстродействие также зависит от типа операндов.

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

ax4 + bx3 + cx2 + cx + e

При условии, что вычисление степени производится перемножением основания определенное число раз, нетрудно найти, что в этом выражении содержится 10 умножений (“медленных” операций). Однако это же выражение можно записать в следующем виде:

(((ax + b) * x + c) * x + d) * x +e

Такая форма записи называется схемой Горнера. В этом выражении имеется 4 умножения и 4 сложения. Общее количество операций уменьшилось почти в два раза, соответственно уменьшится и время вычисления многочлена.

IV. Циклы

Различается и время выполнения циклов. Время выполнения цикла со счетчиком и цикла постусловием при всех прочих равных условиях совпадает, цикл с предусловием выполняется несколько дольше (примерно на 20-30%).

33

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

for j := 1 to 100000 for k := 1 to 1000 a := 1

next k next j

выполняется примерно на 10 % дольше, чем цикл for j := i to 1000

for k := 1 to 100000 a := 1

next k next j

На первый взгляд, и в первом и во втором случае 10 000 000 раз выполняется оператор присваивания, и затраты времени на это должны быть одинаковы в обоих случаях. Но это не так. Объясняется это тем, что инициализация цикла, то есть обработка процессором его заголовка с целью определения начального и конечного значения счетчика, а также шага приращения счетчика требует времени. В первом случае 1 раз инициализируется внешний цикл и 100 000 раз — внутренний, то есть всего выполняется 100 001 инициализаций. Вo втором случае, как нетрудно подсчитать, таких инициализаций оказывается тишь 1001.

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

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

34

Summ = 0

For i=1 to 1000

Summ = Summ + a * x[i]

Next i

Очевидно, что другая форма записи этого цикла оказывается более экономной:

Summ = 0

For i=1 to 1000

Summ = Summ +* x[i]

Next i

Summ = a * Summ

так как она содержит всего одно умножение при том же числе сложений, против 1000 умножений в первом случае.

V.Инвариантные фрагменты кода

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

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

35

ЛИТЕРАТУРА

Базовая

1.Васильев А., Андреев А. VBA в Office 200. Учебный курс. СПб.: Питер, 2001. – 432с.

2.Подлин Ш. Освой самостоятельно программирование для Microsoft Excel 2000 за 24 часа. Пер с анг. Ус.пос. – М.: Издательский дом «Вильямс», 2000. – 304с.

3.Ананьев А.И., Федоров А.Ф. Самоучитель Visual Basic 6.0. – СПб.: БЧИПетербург, 2002. – 624с.

4.Немнюгин С.А. Turbo Pascal: практикум. – М., 2000.

5.Йенсен К., Вирт Н. Паскаль: руководство для пользователя. – М., 1989.

6.Фаронов В.В. Турбо Паскаль. – М., 1992.

Дополнительная

1.Информатика / под ред. Н.В.Макаровой. – М., 2000.

2.Информатика: базовый курс / под ред. С.В.Симонович. – СПб., 2001.

3.Савельев А.Я. Основы информатики. – М., 2001.

4.Могилев А.В., Пак Н.И., Хеннер Е.К. Информатика. – М., 2000.

Рекдактор Н.Е.Гладких Темплан 2009 г., поз.25

Подписано в печать 15.02.09. Формат 60х84/16. Ризограф. Бумага писчая. Уч.-изд.л.2,4. Тираж 150 экз. Заказ Редакционно-издательский центр Ростовского государственного строительного университета

344022, Ростов-на-Дону, ул. Социалистическая, 162

36