Лекция 6 (версия - Главная...

48
1 Лекция 6 (версия VBA с 2007г.) 1. Алгоритмизация и программирование 1. Алгоритмизация и программирование ...................................................................................................... 1 1.1. Понятие алгоритма. Свойства алгоритма ........................................................................................... 2 1.2. Этапы решения задач на компьютере ................................................................................................. 2 1.3. Способы записи алгоритмов ................................................................................................................ 3 1.3.1. Блок-схемы алгоритмов .................................................................................................................... 3 1.3.2. Алгоритмический язык...................................................................................................................... 4 1.5. Основные принципы структурного программирования ................................................................... 4 1.6. Типы алгоритмов .................................................................................................................................. 5 1.7. Классификация языков программирования ..................................................................................... 10 2. Visual Basic Application ............................................................................................................................. 10 2.1. Алфавит ............................................................................................................................................... 11 2.2. Классификация данных ...................................................................................................................... 11 2.4. Стандартные функции ........................................................................................................................ 13 Программы на VBA ................................................................................................................................... 14 3. Основные конструкции ......................................................................................................................... 14 3.1. Линейные программы......................................................................................................................... 14 4. Встроенные диалоговые окна ............................................................................................................... 15 4.1. Окно сообщения MsgBox ................................................................................................................... 15 4.2. Окно ввода InputBox ........................................................................................................................... 15 5. Работа с листом Excel ............................................................................................................................ 16 6. Вызов макроса по кнопке ...................................................................................................................... 17 3.2. Условный оператор IF ........................................................................................................................ 17 3.3. Оператор выбора Select Case ............................................................................................................. 20 3.4. Циклические алгоритмы .................................................................................................................... 21 3.4.1. Цикл с параметром For Next ........................................................................................................... 22 3.4.2. Цикл Do Loop ................................................................................................................................... 23 3.4.3. Вложенные циклы............................................................................................................................ 24 3.4.4. Решение задач .................................................................................................................................. 25 3. Работа с массивами ................................................................................................................................ 25 3.1. Статические массивы ......................................................................................................................... 26 3.2. Динамические массивы ...................................................................................................................... 28 3.3. Решение задач ..................................................................................................................................... 29 3.4. Сортировка массива............................................................................................................................ 30 3.5. Двухмерные массивы ......................................................................................................................... 31 4. Строковые операторы и функции ........................................................................................................ 34 5. Общие процедуры и функции............................................................................................................... 36 5.1. Процедуры Sub .................................................................................................................................... 36 5.2. Функции Function................................................................................................................................ 37 6. Объектно-ориентированное программирование ................................................................................ 39 7. Программирование приложений на VBA............................................................................................ 40 7.1. Основные определения....................................................................................................................... 40 7.2. Принципы создания и работы приложений ..................................................................................... 44 7.3. Структура и сохранение простого проекта ...................................................................................... 44 7.4. Форма и ее характеристики ............................................................................................................... 45 Карточки для студентов. Задачи на ветвление. .......................................................................................... 47 Карточки для студентов. Задачи на циклы. ................................................................................................. 48

Upload: dinhphuc

Post on 17-Sep-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

1

Лекция 6 (версия VBA с 2007г.)

1. Алгоритмизация и программирование 1. Алгоритмизация и программирование ...................................................................................................... 1

1.1. Понятие алгоритма. Свойства алгоритма ........................................................................................... 2

1.2. Этапы решения задач на компьютере ................................................................................................. 2

1.3. Способы записи алгоритмов ................................................................................................................ 3

1.3.1. Блок-схемы алгоритмов .................................................................................................................... 3

1.3.2. Алгоритмический язык...................................................................................................................... 4

1.5. Основные принципы структурного программирования ................................................................... 4

1.6. Типы алгоритмов .................................................................................................................................. 5

1.7. Классификация языков программирования ..................................................................................... 10

2. Visual Basic Application ............................................................................................................................. 10

2.1. Алфавит ............................................................................................................................................... 11

2.2. Классификация данных ...................................................................................................................... 11

2.4. Стандартные функции ........................................................................................................................ 13

Программы на VBA ................................................................................................................................... 14

3. Основные конструкции ......................................................................................................................... 14

3.1. Линейные программы ......................................................................................................................... 14

4. Встроенные диалоговые окна ............................................................................................................... 15

4.1. Окно сообщения MsgBox ................................................................................................................... 15

4.2. Окно ввода InputBox ........................................................................................................................... 15

5. Работа с листом Excel ............................................................................................................................ 16

6. Вызов макроса по кнопке ...................................................................................................................... 17

3.2. Условный оператор IF ........................................................................................................................ 17

3.3. Оператор выбора Select Case ............................................................................................................. 20

3.4. Циклические алгоритмы .................................................................................................................... 21

3.4.1. Цикл с параметром For Next ........................................................................................................... 22

3.4.2. Цикл Do Loop ................................................................................................................................... 23

3.4.3. Вложенные циклы ............................................................................................................................ 24

3.4.4. Решение задач .................................................................................................................................. 25

3. Работа с массивами ................................................................................................................................ 25

3.1. Статические массивы ......................................................................................................................... 26

3.2. Динамические массивы ...................................................................................................................... 28

3.3. Решение задач ..................................................................................................................................... 29

3.4. Сортировка массива ............................................................................................................................ 30

3.5. Двухмерные массивы ......................................................................................................................... 31

4. Строковые операторы и функции ........................................................................................................ 34

5. Общие процедуры и функции............................................................................................................... 36

5.1. Процедуры Sub .................................................................................................................................... 36

5.2. Функции Function ................................................................................................................................ 37

6. Объектно-ориентированное программирование ................................................................................ 39

7. Программирование приложений на VBA ............................................................................................ 40

7.1. Основные определения....................................................................................................................... 40

7.2. Принципы создания и работы приложений ..................................................................................... 44

7.3. Структура и сохранение простого проекта ...................................................................................... 44

7.4. Форма и ее характеристики ............................................................................................................... 45

Карточки для студентов. Задачи на ветвление. .......................................................................................... 47

Карточки для студентов. Задачи на циклы. ................................................................................................. 48

2

1.1. Понятие алгоритма. Свойства алгоритма

Алгоритм – строгая, полностью определенная последовательность действий с изменяемыми ис-

ходными данными, направленная на достижение поставленной цели или решение задачи.

Термин алгоритм происходит от имени узбекского ученого IX в. Аль-Хорезми, который в своем труде

«Арифметический трактат», переведенном в XII в. с арабского на латынь, изложил правила арифметических

действий над числами в позиционной десятичной системе счисления. Эти правила и называли алгоритмами.

Таким образом, изучающиеся в школе правила сложения, вычитания, деления, умножения чисел, правила пре-

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

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

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

во всевозможных ситуациях.

Свойства алгоритма - набор свойств, отличающих алгоритм от любых предписаний и обеспе-

чивающих его автоматическое исполнение.

Выделяют 5 основных свойства алгоритма:

1. Понятность алгоритма для данного исполнителя – алгоритм должен быть задан с помощью зара-

нее четко и однозначно определенных действий (команд), составляющих СКИ.

2. Определенность (точность) – алгоритм должен предусматривать определенный порядок выпол-

нения действий, т.е. должно быть указано, какую следующую команду исполнять после заверше-

ния текущего указания и какая команда последняя.

3. Дискретность – требует от алгоритма пошаговой записи и выполнения (т.е. команды алгоритма

выполняются последовательно, с точной фиксацией моментов окончания выполнения одной ко-

манды и начала выполнения следующей, т. е. алгоритм должен содержать последовательность

указаний (команд), каждое из которых приводит к выполнению в ЭВМ одного шага).

4. Результативность – алгоритм должен обеспечивать обязательное получения результата после

конечного числа шагов, (при этом отрицательный результат – тоже результат, например, если

компьютер выдает, предусмотренное алгоритмом сообщение «Решения нет, т.к. дискриминант

<0», то такой алгоритм результативный, а если произошло зацикливание - то нет), т.е..

5. Массовость – алгоритм должен обеспечивать возможность его применения для решения класса

однотипных задач с различными исходными данными.

1.2. Этапы решения задач на компьютере

Компьютер – универсальное средство для решения многих информационных задач, для решения которых

используют различное программное обеспечение и системы программирования.

Исходя из условия задачи, пользователю остается решить, какими средствами воспользоваться. Например,

СУБД, математический пакет, ТР и т.п. Если же подходящего ПО нет, приходится прибегать к программиро-

ванию на универсальных языках, создавая свою уникальную программу.

Работа по решению прикладной задачи на КП проходит через следующие этапы:

Задача → формализация → алгоритм → программа → компьютер → результат

1. Постановка задачи. На этом этапе должно быть четко определено, что дано и что требуется найти.

2. Математическая формализация. Выбор модели и метода решения. Задача формулируется на

обычном разговорном языке, в виде формул, соотношений, зависимостей.

3. Разработка и запись алгоритма. Алгоритм разрабатывается и записывается на одном из формаль-

ных языков или с помощью блок-схем.

4. Составление программы. Программа – это тот же алгоритм, но записанный на понятном компью-

теру языке – языке программирования.

5. Отладка и тестирование программы. Компьютер переводит введенную программу с языка про-

граммирования на язык машинных команд с помощью транслятора и решает задачу. Под отлад-

кой программы понимается процесс испытания работы программы и исправление обнаруженных

3

при этом ошибок. Обнаружить ошибки помогает транслятор.

Проверка на компьютере правильности алгоритма производится с помощью тестов. Тест – это

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

Главная задача программиста подобрать набор тестов таким образом, чтобы проверить все воз-

можные ветви решения. (например, решение квадратного уравнения).

6. Проведение расчетов и анализ полученных результатов.

Анализ результатов. Для определения правильности решения задачи в зависимости от класса

применяют разные подходы: 1) сравнивают с результат с результатом, рассчитанный в соответст-

вии с тем же методом, но вручную, с помощью калькулятора; 2) сопоставление с эксперимен-

тальными фактами и теоретическими воззрениями.

1.3. Способы записи алгоритмов

Выбор способа записи алгоритма зависит от характера задачи. Алгоритм вычислительного характера мож-

но записать одно или последовательностью формул, алгоритм приготовления кулинарного шедевра – удобно

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

нятен при записи словами и формулами.

Из формальных способов записи алгоритмов чаще других используется язык блок-схем и алгоритмический

язык.

1. Запись алгоритма словами.

2. Блок-схемы алгоритмов.

3. Алгоритмический язык.

1.3.1. Блок-схемы алгоритмов

Запись алгоритма на языке блок-схем обладают большой наглядностью, так как хорошо просматривается

структура алгоритма.

Блок-схема – строится по определенным правилам и включают в себя геометрические фигуры (бло-

ки различной конфигурации), соединенные между собой линиями, указывающими порядок выполне-

ния операций. Вид блоков и последовательность их соединения соответствует типу и последовательности действий алгорит-

ма.

Основные блочные символы:

Блок начала и конца алгоритма; в овале пишут слова «начало» и «конец»

Блок ввода и вывода информации; в блоке ввода перечисляются имена дан-

ных, подлежащих вводу в алгоритм

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

которые надо выполнить при решении программы.

Выбор одного из двух направлений выполнения алгоритма в зависимости

от некоторого условия, записываемого внутри ромба (ветвление)

Блок изменения некоторого параметра, используется, например, в блок-

схемах циклических алгоритмов со счетчиком.

Использование ранее созданных и отдельно описанных алгоритмов (так на-

зываемых вспомогательных алгоритмов).

4

Правила составления блок-схем:

1. Все линии, указывающие на последовательность выполнения действий, должны быть замкнуты-

ми.

2. Линии не должны пересекаться.

3. При передаче управления в схеме снизу вверх или справа налево линии обязательно помечают

стрелками.

4. Не допускается передача управления «в никуда». Источник и получатель должны быть четко

обозначены.

1.3.2. Алгоритмический язык

Алгоритмический язык – это язык, предназначенный для записи алгоритмов. Он включает: набор

символов (алфавит), правила записи алгоритмов (синтаксис) и правила истолкования записей (семан-

тику).

алг Название (список переменных и их типы)

арг список аргументов (то, что дано)

рез список результатов (что надо найти)

нач ввод вспомогательных переменных

программа

выв список данных, выводимых на печать

кон

Типы данных: вещ, цел, нат (натуральные), стр или лит (строковый)

1.5. Основные принципы структурного программирования

Программирование – это процесс составления компьютерной программы на основе некоторого

алгоритма.

Структурное программирование основывается на двух важнейших принципах:

Последовательной детализации алгоритма,

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

любой сложности.

В теории структурного программирования доказано, что алгоритм любой сложности можно по-

строить с помощью следующих базовых структур:

1) Следование 2) Ветвление 3) Цикл

Каждая из структур имеет только один вход и только один выход, что позволяет соединять их

между собой в процессе разработки алгоритма любое количество элементов базовых структур в лю-

бом порядке.

S

нет

да P

Вход Вход

Выход

S

нет

да

P

Выход

нет да

Выход

S1 S2

P

S

Вход

Выход

Вход

5

1.6. Типы алгоритмов

Тип алгоритма определяется характером решаемой в соответствии с его командами задачи, а

также используемыми базовыми структурами.

Тип алгоритма Базовая структура

1. Линейные алгоритмы Следование

2. Ветвящиеся Ветвление

3. Циклические Цикл

Линейные алгоритмы – алгоритм, в котором команды выполняются в порядке их естественно-

го следования друг за другом независимо от каких-либо условий.

Ветвящиеся алгоритмы – алгоритмы, которые содержат блок, который имеет два альтерна-

тивных выхода, выбор которых осуществляется в зависимости от выполнения или невыполнения не-

которого условия.

Циклический алгоритм – алгоритм, предусматривающий многократное повторение одних и

тех же действий, называемых телом цикла. Циклические алгоритмы отличаются наличием в струк-

туре алгоритма обратной связи. Циклические алгоритмы делятся на алгоритмы с известным и неизвестным заранее числом повторений.

Их условно называют «Для» и «Пока». В обоих случаях окончание циклического процесса определяется по-

ставленным заранее условием.

3 вида циклических алгоритмов:–

1) цикла с параметром – алгоритм с заранее известным числом повторений;

2) цикл с предусловием – условие проверяется до выполнения тела цикла; такой цикл может не

выполниться ни разу;

3) цикл с постусловием – условие проверяется после выполнения тела цикла; такой цикл обяза-

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

Вспомогательный (подчиненный) алгоритм (процедура) – алгоритм, ранее разработанный и

целиком используемый при алгоритмизации конкретной задачи.

Линейные алгоритмы

№1. По сторонам прямоугольника найти площадь.

алг Площадь (вещ А, B, S)

арг А, B

рез S

нач

S:=А*В

выв S

кон

Упражнение 1. Чему равны значения переменных X и Y после выполнения операторов

X:=5

Y:=X+5

X:=Y

Y:=X+Y

Упражнение 2. При каком начальном значении X результат Y , после выполнения операторов

Y:=X+5

X:=Y

Y:=X+Y

равен 14?

Решение:

6

(с конца)

X Y

7 7 Т.к. X=Y и Y=X+Y=14

2 7 Y=X+5=7

Ветвление алгоритмы

Если Условие

То Действие 1

Иначе Действие 2

Все

№ 2. Из трех чисел найти максимальное.

алг Корни (вещ А, B, C)

арг А, B, C

рез МАX

нач

если А>=B и A>=C

то МАХ:=А

иначе если В>=А и В>=C

то МАХ:=В

иначе МАХ:=С

все

все

выв МАХ

кон

Задачи на ветвление.

1. Решить уравнение y=ax+b.

2. Найти y, если

y=корень кв. из х, если x>0

y=10, если x=0

y=x2 если x<0

3. (самостоятельно) По температуре воды, определить ее состояние – лед, вода, пар.

4. Даны три числа. Найти максимальное.

5. Определить к какой координатной четверти принадлежит точка с координатами (x,y).

6. Определить, является ли т.(a,b) частью круга с центром в т. (x,y) и радиусом R.

Примечание. Лучше рассматривать не корень квадратный, а квадрат.

7. Прямоугольник со сторонами параллельными осям координат задается координатами одной из

диагоналей (x1,y1)- (x2,y2). Определить, является ли т.(a,b) частью данного прямоугольника.

Примечание. Сначала переставить значения координат так, чтобы x1<x2, y1<y2.

Проверить x1<=a<=x2, y1<b<=y2.

7

8. Определить, принадлежит ли т.(a,b) области, ограниченной кривыми y=x2, Y=2x+5.

x2<=y, 2x+5 <=Y

9. (самостоятельно) Определить, является ли т.(a,b) частью квадрата, стороны которого парал-

лельны осям координат. Квадрат задается координатами левого нижнего угла (x,y) и стороной

А.

10. Клетка на шахматной доске задается парой координат. Даны две пары координат (x1,y1),

(x2,y2). Определить, каким фигурам может принадлежать данных ход.

Король: |x1-x2| <=1 и |y1-y2| <=1

Пешка: |x1-x2| <=2 и y1= y2

Слон: |x1-x2|= |y1-y2|

Ладья: x1=x2 XOR y1= y2 ((x1=x2 и y1<> y2 или x1<>x2 и y1= y2))

Ферзь: x1=x2 или y1= y2 или |x1-x2|= |y1-y2|

Конь: |x1-x2|=1 и |y1-y2| =2 или |x1-x2|=2 и |y1-y2| =1

11. Даны три числа А, В и С. Определить:

a. Существует ли данный треугольник (Сумма ЛЮБЫХ двух сторон должна быть

БОЛЬШЕ третьей стороны)

b. Если треугольник существует, то: тип треугольника по соотношению сторон

- равносторонний A=В и В=С,

- равнобедренный A=В или В=С , XOR

- разносторонний A<>В и В<>С и A<>С ;

c. тип треугольника по его углам:

-прямоугольный (для ОДНОЙ из сторон выполняется a2=b

2+c

2)

a2=b

2+c

2 или b

2= a

2+c

2 или c

2= a

2+b

2

-тупоугольный (для ОДНОЙ из сторон выполняется a2>b

2+c

2)

-остроугольный (для ВСЕХ сторон выполняется a2<b

2+c

2)

a2<b

2+c

2 и b

2< a

2+c

2 и c

2< a

2+b

2

Ветвление типа выбор

выбор

при Условие 1: Действия 1

при Условие 2: Действия 2

Иначе Действия N

все

№ 3. Определить награды участникам конференции.

алг награда (нат А, стр N)

арг А

рез N

8

нач

выбор

при А=1: N:=‖золото‖

при А=1: N:=‖серебро‖

при А=1: N:=‖бронза‖

Иначе N:=‖грамота участника‖

Все

выв N

кон

Задачи на выбор

1. Определить награды участникам конференции (1-3 место - золото, серебро, бронза соответствен-

но, остальным - грамота участника).

2. По номеру месяца (1-12) определить время года.

3. По введенному часу (1-24) определить время суток.

Циклические алгоритмы. Цикл с параметром

для k от n1 до n2 [шаг n3]

нц

тело цикла

кц

№ 4. Подсчитать сумму четных целых чисел от 0 до 100.

алг сумма (цел А, S)

арг А

рез S

нач

S:=0

для A от 0 до 100 шаг 2

нц

S:=S+A

кц

выв S

кон

Циклические алгоритмы. Цикл с предусловием

пока Условие

нц

тело цикла

кц

№ 4. Подсчитать сумму четных целых чисел от 0 до 100.

алг сумма (цел А, S)

арг А

рез S

нач

S:=0

А:=0

пока A ≠ 100

нц

А:=А+2

S:=S+A

9

кц

выв S

кон

Задачи на циклы.

Цикл с параметром

1. Найти сумму всех целых чисел от A до B, где А и В – целые числа, (B>=A) вводятся с клавиатуры.

2. Вычислить где N вводится с клавиатуры.

3. (самостоятельно) Найти сумму кубов всех целых чисел от 10 до 50.

4. Вычислить сумму: .

5. Найти произведение четных целых чисел от 0 до 100.

6. Вывести значения функции для х из промежутка [0,10].

7. (самостоятельно) Вывести значения функции f(x)=sin x для х из промежутка [0,6] с шагом 0,1.

8. Господин открыл счет в банке, вложив N рублей под К процентов годовых. В конце каждого меся-

ца на имеющуюся сумму начисляется процент. Определить:

a. Прирост суммы вклада за 1-й, 2-й, … 6 месяцы;

b. Сумму вклада через 6 месяцев.

9. (самостоятельно) Одноклеточная амеба каждые 3 часа делится на 2 клетки. Определить, сколько

клеток будет через 3,6,9,…, 24 часа.

10. Известны результаты аттестации 30 студентов – оценки 0,1,2. Подсчитать количество 0, 1, 2.

Цикл с предусловием

11. Дано число N.

a. Напечатать все натуральные числа, квадрат которых не превышает N.

b. Найти первое натуральное число, квадрат которого больше N.

12. С клавиатуры вводится последовательность целых чисел, признаком конца является ввод 0.

a. Найти среднее значение введенных чисел (0 не считать).

b. Найти максимальное число (0 не учитывать).

c. Найти минимальное число (0 не учитывать).

13. Начав тренировки, лыжник в 1-й день пробежал 10 км. Каждый следующий день он увеличи-

вал пробег на 10% от пробега предыдущего дня. Определить:

a. В какой день он пробежит больше 20 км,

b. В какой день суммарный пробег за все дни превысит 100 км.

10

1.7. Классификация языков программирования

Для решения задачи на компьютере необходимо исходные данные задачи и алгоритм ее реше-

ния записать на формальном языке программирования в виде программы, ввести программу и данные

в память компьютеру и подать команду на исполнение программы.

По степени зависимости языков программирования от структуры конкретного компьютера их

условно делят на:

1. Языки низкого уровня. К ним относят языки машинных команд конкретных компьютеров.

Программа представляет последовательность команд, содержащих коды выполняемых компьютером

операций и адреса участвующих в этих операциях операндов. Это машинно-зависимые языки.

Достоинства: быстродействие и малые затраты памяти.

Недостатки: программа, записанная на машинном коде одного КП, не всегда может работать на ком-

пьютере другой структуры; программирование связано с большими временными затратами.

Желание облегчить программирование привело к разработке языков, в которых вместо конкрет-

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

несколько действий в одной команде. К этим языкам относят так называемые автокоды и языки ас-

семблера.

2. Языки программирования высокого уровня – машинно-независимые. Достаточно, чтобы

компьютер имел транслятор – переводчик программ с языка программирования на машинный язык.

Делятся на:

2.1. Проблемно-ориентированные языки разрабатываются с целью сделать более эффективным

программирование задач одного класса, например, экономических задач (Кобол), искусственного ин-

теллекта (Пролог), обучения (Лого), язык гипертекстовой разметки в Интернет (HTML), язык модели-

рования виртуальной реальности (VRML) и т.д.

2.2. Универсальные языки – позволяют решать широкий спектр задач различного характера.

(Basic, Quick Basic, Visual Basic; Pascal; Delphi, Си и т.д.)

3. Одним из перспективных направлений развития технологий программирования считается

создание объектно-ориентированных языков.

В качестве основного понятия ООП выступает объект. Процесс программирования сводится к

конструированию программ с помощью мыши из готовых или вновь создаваемых объектов и записи

кода, определяющего свойства и функционирование этих объектов. (Visual Basic, Delphi).

2. Visual Basic Application Запуск :

MS Office -2003

1 способ: Сервис \ Макрос \ Редактор Visual Basic.

2 способ: Сервис \ Макрос \ Макросы: Создать.

MS Office 2007

1. На вкладке Разработчик щелкните Visual Basic.

Примечание. Чтобы отобразить вкладку Разработчик надо:

a. Нажмите кнопку «Microsoft Office» , затем нажмите кнопку Параметры Excel.

b. Щелкните Основные и затем установите флажок Показывать на ленте вкладку разра-

ботчика.

2. На вкладке Разработчик выберите пункт Visual Basic (загрузится окно редактора) или Макросы

(запустится мастер по созданию макроса).

11

2.1. Алфавит

Алфавит языка включает следующий набор символов:

1. прописные и строчные буквы латинского алфавита и русского алфавитаA-Z, a-z;

2. арабские цифры 0,1,2,…,9;

3. знаки арифметических действий: *,-,+,/, \ (целочисленное деление), ^

4. знаки операций отношений =, <>, и т.д.

5. знаки препинания и разделители: . , : ; - ! ? «» ‗

6. (), [], пробел, подчеркивание

7. символы объявления типа: % - целое число одинарной точности, & - целое число двойной точно-

сти; ! –вещественное число одинарной точности, # - вещественное число двойной точности, $ -

знак строкой величины.

2.2. Классификация данных

Некоторые задачи имеют дело с очень большими числами (например, расстояния в космосе), другие опериру-

ют малыми (например, оценки студентов). В связи с этим для экономии памяти КП используют разные типы

числовых и нечисловых данных.

В VB выделяют следующие типы:

Имя типа Описание Объѐм,

байт

Диапазон

минимальное знач. максимальное знач.

Byte целое 1 0 255

Integer целое число одинарной

точности 2 -32 768 32 767

Long длинное целое 4 -2 147 483 648 2 147 483 647

Single

вещественное число с пла-

вующей точкой одинарной

точности

4

-3.402823E38

3.402823E38

Double

вещественное число с пла-

вующей точкой двойной

точности

8

-1.79769313486231E308

1.79769313486232E308

Currency

Вещ-ное число с фиксиро-

ванной точкой

(до 15-ти цифр перед точ. и

до 4 - после), используется

для фин.расчетов

8

-922 337 203 685

477.5808

922 337 203 685 477.5807

или

922 E12

Date Дата и время 8 January 1, 100 December 31, 9999

String строка произвольной дли-

ны

10 + чис-

ло симво-

лов

"" (пустая строка) до 2 миллиардов символов

String строка фиксированной

длины

число

символов 0 символов 65536 символов

Boolean Логический тип 2 False True

Variant

Этот тип данных в процес-

се работы может превра-

щаться в любой другой в

зависимости от того, какая

величина в действительно-

сти объявляется.

16 байт

(для чи-

сел),

22+число

символов

(для

строк)

Object Содержит адрес объекта 4

12

Правильное определение в программе типов всех величин считается одним из правил хорошего стиля

программирования.

Данные, используемые в программе можно разделить на две группы:

1) константы – величины, значения которых задаются заранее и не изменяются при выполнении

программы.

Синтаксис определения типа данных следующий:

[Private | Public] const Имя_константы [as Тип] = значение

Например,

const Золотое_сечение = 1.618

Public const ПИ = 3.14

const ПИ as Double = значение

2) переменные – величины, которые в процессе выполнения программы могут менять свое значение,

под переменной можно понимать поименованную область памяти компьютера, в которой хранится

значение этой переменной.

Синтаксис определения типа данных следующий:

Dim | Private | Public Данные as Тип

Требования к имени констант и переменных:

должно начинаться с буквы,

должны содержать только буквы, цифры и подчеркивание,

должно быть уникальным внутри области видимости;

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

Объявление переменных может быть:

1. Неявное объявление – это когда переменная не объявляется заранее, но используется в програм-

ме. Программа автоматически создают переменную типа Variant.

2. Явное объявление - производится с использование оператора Option Explicit в разделе General

Declarations текущего модуля. В этом случае все переменные, используемые в программе долж-

ны быть объявлены.

Служебные слова Dim | Private | Public определяют область действия переменных.

Область видимости переменных определяет, какая часть кода программы «знает» о существовании

данной переменной:

Оператор Переменная Где объявлена Область видимости

Dim Локальная Внутри процедуры Только в данной процедуре, не сохраняет

значение

Static Локальная ста-

тическая

Внутри процедуры Только в данной процедуре, сохраняет

значение

Dim

Или

Private

Уровня модуля В разделе General

Declarations

Во всех процедурах модуля

Public Открытая,

уровня модуля

формы

В разделе General

Declarations

Во всех процедурах всех модулей проекта

13

2.3. Основные математические действия

Операция

VBA

Действие Тип операндов Тип результат Пример Рез-т

+ Сложение Числовой Числовой

- Вычитание Числовой Числовой

* Умножение Числовой Числовой х=7*а

/ деление Числовой,

! Целые округ-

ляются

х=5/2 (x - вещ)

y=5/2 (y - цел)

х=2,5

y=3

\ Деление наце-

ло

Числовой (дроб-

ные округляются

до целых)

целый х=19\4

y=1\4

z=8.5\4.2

х=4

y=0

z=9\4=2

mod Остаток

от деления

Числовой (дроб-

ные округляются

до целых)

целый Х =19 mod 4

y=8.5 mod 4.2

X=3

y=9 mod 4=1

^ Возведение

в степень

Числовой Числовой X=2^3

y=25^(1/2)

X=8

y=5 & Склейка строк любой строковый Х= ―2‖&‖3‖

Y=5&5

Z=x & ―+‖ & Y

X=23

Y=55

Z=23+55

Приоритет операций: (), ^, (-), *, /, \, mod, +, -

2.4. Стандартные функции

Матеем.

запись

Описание Функция

VBA

Пример

Математика VBA

Sin x Синус угла, заданного в радиа-

нах

Sin (x) y = sin2

х y=sin (x) ^2

Cos x Косинус угла, заданного в ра-

дианах

Cos(x) y= cos x2 y= cos (x^2)

tg x Тангенс угла, заданного в радиа-

нах

Tan(x) y = tg2x Y = Tan (2*x)

Arctg x Арктангенс угла, заданного в ра-

дианах

Atn(x) y = 2∙arctg x y = 2 * Atn (x)

|х| Модуль числа Abs(x) y=|2х+6| y= Abs (2*x+6)

х Корень квадратный Sqr(x) z=sqr (x^2+y^2)

ех экспонента Exp(x) f = 5 e

2p f= 5 * Exp (2*p)

Ln x натуральные логарифм Log(x) a = Ln 2x

b = Log3x

c = Lgx

a= Log (2*x)

b=Log (x) / Log (3)

с=Log (x) / Log

(10)

Целая часть числа – округляет до

ближайшего меньшего целого

Int(x)

х= Int(10.9)

Ответ: х=10

Отбрасывает дробную часть чис-

ла

Fix(x)

х= fix (10.9)

Ответ: х=10

Знак числа Sgn(x)

Преобразует число в строку Str(x)

Преобразует строку в число Val(x)

Генератор случайных чисел

(0…1)

Rnd X=int(rnd*(N+1))

Случ. целое число из

[0,N]

14

Инициализация генератора слу-

чайных чисел

randomize

Правила записи выражений

1. выражение записывается в одну строку;

например, 24

12

са записывается: 1/12 + 4/(а+с) – с*с

2. в выражении можно использовать только круглые скобки;

3. суммы и разности в числителях и знаменателях, а также произведения в знаменателях заключа-

ются в круглые скобки.

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

неправильно: 3*а*-2 правильно: 3*а*(-2)

5. нельзя пропускать знак умножения:

неправильно: 2а+4с правильно: 2*а+4*с

6. операции выполняются слева направо в соответствии со старшинством операций, изменить

порядок выполнения можно используя скобки.

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

своего использования.

Примеры.

Программы на VBA

Принцип работы программ, создаваемых в среде VBA, отличается от программ в обычном про-

цедурном языке (Паскаль), где команды выполняются последовательно, оператор за оператором.

Программы на VBA носят событийно-управляемый характер. Программа на VBA – это набор проце-

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

пользователя (работа с клавиатурой, мышью, открытие или закрытие Листа, нажатие на кнопку и

т.п.).

В общем виде процедура обработки события записывается так:

[Private | Public] Sub Объект[_событие] ([параметры])

Последовательность операторов

End Sub

Private, Public – параметр, указывающий область видимости процедуры. (в модуле описания или во

всех модулях соответственно),

Событие – название события, например щелчок мышью по объекту (Click)/

Параметры – аргументы процедуры.

3. Основные конструкции

3.1. Линейные программы

Самые простые по структуре линейные алгоритмы. Линейные алгоритмы – алгоритм, в кото-

ром команды выполняются в порядке их естественного следования друг за другом независимо от ка-

ких-либо условий.

15

Задача 1. Вычислить по заданному радиусу (5) длину окружности и площадь круга.

Дано: R=5, радиус круга.

Найти: S, площадь круга и L, длину окружности

Блок-схема Алгоритм Программа на VBA Комментарии

алг Пример1 (вещ L,R,S)

арг R

рез L,S

нач

L:=2*3.14 R

S:=3.14*R^2

выв R,L,S

кон

Option Explicit Sub Ex()

Const R=5

Dim L as Single, S as

Single

L=2*3.14*R

S=3.14*R^2

MsgBox ―Длина= ‖ &

L & ―Площадь = ‖ &

S

End Sub

Проверка данных

Заголовок процедуры

Описание констант

Описание переменных

Вычисление длины

Вычисление площади

Вывод ответа

Конец процедуры

4. Встроенные диалоговые окна

4.1. Окно сообщения MsgBox

Оператор MsgBox выводит простейшие сообщения для пользователя, может использоваться для вы-

вода результатов.

Синтаксис:

MsgBox сообщение [, атрибуты] [, заголовок]

Сообщение – текст, отображаемый в диалоговом окне.

Заголовок – строка в заголовке окна.

Например, MsgBox ―Длина= ‖ & L , , «Ответ»

Атрибуты – системные константы, которые определяют особенности окна, различные кнопки (ОК,

Отмена, Да, Нет и т.п.) и значки (значок критического сообщения или ! или ?).

Список констант выдается после того, как поставлена разделительная запятая.

Например,

vbOKCancel – окно с кнопками «ОК» и «Отмена»

vbOKOnly – окно с 1 кнопкой «ОК».

vbCritical – отображается значок критического сообщения (красный крест).

vbInformation – отображается значок информационного сообщения (i).

Если требуется поместить в окно сообщения различные кнопки и значок, то константы складывают-

ся.

Например, MsgBox ―Длина= ‖ & L , vbOKCancel+vbInformation, «Ответ»

Примечание. Окно MsgBox можно использовать как функцию. В этом случае аргументы пишут в

круглых скобках, а результатом функции является число от 1 до 7, обозначающее какая кнопка была

нажата.

а=MsgBox (сообщение, атрибуты, заголовок)

4.2. Окно ввода InputBox

Оператор InputBox используется для ввода информации пользователем.

Синтаксис:

InputBox сообщение [,заголовок] [,умолчание]

Сообщение – текст, отображаемый в диалоговом окне.

Заголовок – строка в заголовке окна.

Умолчание – строка, которая будет по умолчанию находиться в текстовом поле.

Начало

R=5

Конец

Выв S

L=2 ∙ 3.14 R

S=3.14 R2

16

Примечание. Окно InputBox можно использовать как функцию. В этом случае аргументы пишут в

круглых скобках, а результатом функции будет введенная строка.

Имя переменной = InputBox (сообщение [,заголовок] [,умолчание])

Задача 2. Перевести рост, заданный в см в м и см.

Ответ вывести в виде фразы «Мой рост … м … см». Рост (Н) запрашивается с клавиату-

ры.

Блок-схема Программа на VBA

Option Explicit Sub Ex()

Dim h as Single, m as Single, s as single

h=Inputbox(―Введите рост в см‖)

m=h \100

s = h mod 100

MsgBox ―Мой рост ‖ & m & ― м ‖ & s & « см »

End Sub

5. Работа с листом Excel

Активировать рабочий лист книги Excel:

worksheets(Номер листа | «Название листа»).Activate

Например,

если лист имеет стандартное имя (например, лист1)

worksheets(1).Activate или worksheets(«Лист1»).Activate

если лист имеет некоторое имя, например Квадрат, то worksheets(«Квадрат»).Activate

Обратиться к ячейке текущего листа:

1) cells(номер строки, номер столбца)

2) range (―адрес ячейки‖)

Например,

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

х= cells (1,2) или х= range («В2»)

2) Для того чтобы в ячейку А2 поместить число 10 надо записать:

cells (2,1)=10 или range («А2»)=10

Задача 3. Вычисление НДС. Дана процентная ставка НДС и сумма. Найти сумму без НДС.

Начало

Конец

Вывод ответа

S=h mod 100

M= h \ 100

Ввод Н

17

Блок-схема Программа на VBA (2 способа)

Sub Ex()

Dim NDS as Single, Summa as Single, SBN as single

worksheets(1).Activate

NDS = range (―B3‖)

Summa = range (―B5‖)

SBN= Summa-Summa*NDS/100

range (―B6‖)=SBN

End Sub

2 способ (без использования листа).

Sub Ex()

Dim NDS as Single, Summa as Single, SBN as single

NDS =Inputbox(―Введите величину НДС в процентах‖)

Summa =Inputbox(―Введите сумму‖)

SBN= Summa-Summa*NDS/100

MsgBox ―Сумма без НДС ‖ & SBN

End Sub

6. Вызов макроса по кнопке

I. Создать макрос:

1. Вызвать окно макроса: Сервис \ Макрос \ Макросы.

2. В появившемся окне задать имя макроса, например «Задача1».

3. Выбрать кнопку создать.

4. Появится окно VBA с заголовком и концом процедуры.

5. Записать программный код.

6. Закрыть макрос.

II. Добавить на лист кнопку:

1. При необходимости открыть панель инструментов Форма: Вид \ Панели инструментов: Фор-

мы.

2. На панели выбрать инструмент «Кнопка». На листе обозначить размер и положение кнопки.

3. После этого появится окно «Назначить макрос объекту», в котором надо выбрать название

макроса (например, «Задача1»).

4. Изменить надпись на кнопке можно выбрав в контекстном меню команду «Изменить

текст».

III. Нажав на кнопку можно выполнить тот или иной макрос.

Примечание. Изменить ранее созданный макрос: Сервис \ Макрос \ Макросы: Изменить.

3.2. Условный оператор IF

Ветвящиеся алгоритмы – алгоритмы, которые содержат блок, который имеет два альтерна-

тивных выхода, выбор которых осуществляется в зависимости от выполнения или невыполнения не-

которого условия.

Условный оператор изменяет ход выполнения программы в зависимости от результата проверки

условия.

Начало

Конец

Вывод ответа

SBN= Summa-

Summa*NDS/100

Ввод NDS, Summa

Условие

Оператор 2 Оператор 1

Да (истина, true) Нет (ложь, false)

18

1) Простой условный оператор If записывается в виде одной строки и используется тогда, ко-

гда в случае истинности или ложности условия требуется выполнить только один оператор.

Синтаксис:

If Условие then Оператор1 else Оператор2

Например, из двух чисел выбрать большее.

If a>b then max=a else max=b

2) Составной условный оператор If записывается в несколько строк, может содержать не-

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

выполнить несколько операторов.

Синтаксис:

If Условие then

Блок Операторов1

[ElseIf Условие2 then

Блок Операторов2]

[Else

Блок ОператоровN]

End If

Операторы - любой из операторов. В том числе пустой оператор - оператор, который не выпол-

няет никаких действий.

Например, if a>=0 then a=sqrt(a) else

После else стоит пустой оператор. В этом случае служебное слово else можно не писать.

Например, if a>=0 then a=sqrt(a)

Такое ветвление называется не полным.

Примечание. Если операторы записываются в одну строку, то отделяются друг от друга двоеточи-

ем.

Условие – логическое выражение, то есть выражение, о котором можно сказать истинно оно или

ложно. Условие может быть:

1. Простое - логическая переменная, логическая функция или логическое выражение.

В логических выражениях применяют знаки отношений: < (меньше), <=(меньше или равно), =

(равно), > (больше), >= (больше или равно), <> (не равно).

Например, x > 5, x + y <= z, a * 2 = 6.

2. Составное - состоит из простых условий, связанных между собой логическими операциями and

(и), or (или), not (не), xor (исключающее или). Каждое простое условие в составном заключается в

скобки.

Составные условия рассматриваются как единое целое.

Правила определения истинности:

Условие 1

А

Условие 2

В

Операция И

A And B

Операция ИЛИ

A Or B

Исключающее ИЛИ

A Xor B

НЕ

Not A

True True True True False False

True False False True True

False True False True True True

False False False False False

Приоритет операций: Not, And, Or, Xor

19

Задача 4. В каждый подарочный набор входят 1 блокнот, 2 карандаша и 4 ручки. Имеется А

блокнотов, В карандашей и С ручек. Сколько всего получится подарочных наборов?

Блок-схема Алгоритм

Другими словами надо найти минимальное число.

Sub Present()

Dim A as Integer, B as Integer, C as Integer, K as Integer

A =Inputbox(―Введите количество блокнотов‖)

B =Inputbox(―Введите количество карандашей‖)

C =Inputbox(―Введите количество ручек‖)

B= B \ 2

C= C\ 4

If A<B then K=A else K=B

If C<K then K=C

MsgBox ―Всего наборов ‖ & K

End Sub

Задача 5. Найти действительные корни квадратного уравнения ax2+bx+c=0.

Дано: а,b,c.

Найти: x1,x2

Блок-схема Программа

Sub Ex()

Dim A as Single, B as Single, C as single

Dim D as Single, X1 as Single, X2 as Single

A =Inputbox(―Введите A<>0‖)

B =Inputbox(―Введите B‖)

C =Inputbox(―Введите C‖)

D = B^2-4*A*C

If D>=0 then

X1 = (-B – sqr (D))/(2*A)

X2 = (-B + sqr (D))/(2*A)

MsgBox ―X1= ‖ & X1 &― X2= ‖ & X2

Else

MsgBox ―Действительных корней нет‖

End If

End Sub

Задача 6. Вычислить значение функции:

Y =x2 при x>10,

= корень из х при 0<=X<=10,

= |х| при х<0

Начало

Ввод а,b,c

Конец

B=B\2

A<B нет да

K=A

C=C\4

K=B

C<K нет да

K=C

Вывод К

Начало

Ввод а,b,c

Конец

Вывод х1,х2

D=b2 -4ac

D>=0 нет да

Вывод «решения нет»

х1=

х2=

20

Блок-схема Программа

Sub Ex()

Dim X as Single, Y as Single

Worksheets (1).activate

X = Cells (2,2)

If X>10 then

Y=X^2

ElseIf (X>=0) and (X<=10) then

Y=Sqr(X)

Else

Y=abs(X)

End If

Cells (4,2)= Y

End Sub

3.3. Оператор выбора Select Case

Оператор выбора позволяет сделать выбор среди нескольких вариантов в программе в зависи-

мости от значения условного выражения.

Синтаксис:

Select Case Выражение для проверки

Case Список1

Блок операторов1

Case Список2

Блок операторов2

[Case else

Блок операторовElse]

End Select

Выражение для проверки - любое числовое или строковое выражение, в зависимости от значе-

ния которого выполняется соответствующий блок операторов.

Блок операторов – операторы, которые выполняются, если значение выражения для проверки

находится в соответствующем списке значений.

Блок операторовElse– операторы, которые выполняются, если значение выражения для про-

верки не совпадает ни с одним из значений.

Список – списки выражений, записанные в одной из форм:

Перечень значений через запятую;

Диапазон, записывается с помощью оператора To (например, case 1 To 10);

С помощью неравенств – оператор Is (например, Case Is <100).

В списках могут быть использованы различные формы записи.

Начало

Ввод x

Конец

x>10 нет да

Y=x2 x>=0 и

х<=10 нет да

Y=sqr(x)

Вывод у

21

Задача 7. По номеру месяца определить сезон (зима, весна, лето, осень).

Блок-схема

Программа

Sub Ex()

Dim M as Integer, Season as String

M =Inputbox(―Введите номер месяца‖)

Select Case M

Case 12,1,2

Season = ―зима‖

Case 3 to 5

Season = ―весна‖

Case 6 to 8

Season = ―лето‖

Case 9 to 11

Season = ―осень‖

Case else

Season = ―Вы уверены, что такой месяц есть?‖

End Select

MsgBox Season

End Sub

3.4. Циклические алгоритмы

Циклический алгоритм – алгоритм, предусматривающий многократное повторение одних и тех же

действий, называемых телом цикла. Циклические алгоритмы отличаются наличием в структуре алгоритма об-

ратной связи. Циклические алгоритмы делятся на алгоритмы с известным и неизвестным заранее числом по-

вторений. Их условно называют «Для» и «Пока». В обоих случаях окончание циклического процесса опреде-

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

Начало

Ввод M

Конец

M=? иначе

S=‖зима‖

М=12,1,2

Вывод S

S=‖весна‖

М=3,4,5

S=‖лето‖

М=6,7,8

S=‖осень‖

М=9,10,11

S=‖нет такого месяца‖

22

3.4.1. Цикл с параметром For Next

Оператор For Next организует в программе выполнение группы операторов (тела цикла) задан-

ное число раз.

Блок-схема Алгоритм Программа

для i от n1 до n2 шаг n3

нц

Тело цикла

Кц

For Счетчик= Начало То Конец [ step Шаг]

[Операторы]

[Exit For]

Next [Счетчик][, Счетчик…]

Счетчик – числовая переменная.

Начало и Конец – начальное и конечное значение счетчика (значение, переменная или выраже-

ние того же типа что и счетчик).

Шаг – величина изменения значения счетчика. Ели шаг не указан, то по умолчанию принимает-

ся равным 1. При выходе из цикла переменная Счетчик=Конец+Шаг .

Оператор Exit For позволяет выйти из цикла до его завершения. Обычно используется в сочета-

нии с условным оператором If.

Задача 8. Найти сумму целых нечетных чисел от 1 до N (где N задается с клавиатуры).

Блок-схема Программа

Sub Ex()

Dim A as Long, S as Long, n is Integer

N=InputBox (―Введите n‖)

For a=1 To n step 2

S=S+a

Next a

End Sub

Задача 9. Написать программу, заполняющую ячейки иА2:В11 следующим образом:

Sub Cikl()

Dim x As Integer

Worksheets(1).Activate

For x = 1 To 10

Cells(x + 1, 1) = x

Cells(x + 1, 2) = x ^ 2

Next x

End Sub

Начало

x=1,10

Конец

Вывод x,x^2

Начало

Ввод n

S=s+a

a=1,n,2

Конец

Вывод s

Тело цикла

I=n1,n2,n3

23

Задача 10. Табулирование функции. Выполнить расчѐт К значений функции y=sin x для х

от А с шагом h. А, h, К взять с листа. Результат вывести на текущий лист(ячейки листа

А6:С10)

Sub Cikl()

Dim K As Integer, x As Single, y As Single

Dim A As Single, h As Single

Dim i As Integer

Worksheets(1).Activate

K = Cells(1, 2)

A = Cells(2, 2)

h = Cells(3, 2)

x = A

For i = 1 To K

y = Sin(x)

Cells(5 + i, 1) = i

Cells(5 + i, 2) = x

Cells(5 + i, 3) = y

x = x + h

Next i

End Sub

3.4.2. Цикл Do Loop

Оператор Do Loop организует циклический процесс без счетчика. Возможно 4 способа записи

данного цикла с использованием двух ключевых слов While и Until.

Цикл с предусловием:

Do While Условие входа

[Операторы] [Exit Do]

Loop

Do Until Условие выхода

[Операторы] [Exit Do]

Loop

Цикл с постусловием:

Do

[Операторы] [Exit Do]

Loop While Условие входа

Do

[Операторы] [Exit Do]

Loop Until Условие выхода

S

нет

да

Усл

S

да

нет

Усл

S

да

нет Усл

S

нет

да Усл

Начало

i=1,K

Конец

Вывод i,x,y

Ввод К,А,h

X=A

y=sin x

x=x+h

24

Цикл с использованием ключевого слова While выполняется до тех пор, пока условием истинно.

Цикл с использованием ключевого слова Until выполняется, пока условие не станет истинным.

Задача 11. Решим предыдущую задачу (Табулирование функции) другими способами.

С предусловием и ключевым словом While

Sub Cikl()

Dim K As Integer, x As Single, y As Single

Dim A As Single, h As Single, i As Integer

Worksheets(2).Activate

K = Cells(1, 2): A = Cells(2, 2)

h = Cells(3, 2)

x = A : i = 0

Do While i < K

y = Sin(x)

i = i + 1

Cells(5 + i, 1) = i

Cells(5 + i, 2) = x

Cells(5 + i, 3) = y

x = x + h

Loop

End Sub

С постусловием и ключевым словом Until

Sub Cikl()

Dim K As Integer, x As Single, y As Single

Dim A As Single, h As Single, i As Integer

Worksheets(2).Activate

K = Cells(1, 2)

A = Cells(2, 2) : h = Cells(3, 2)

x = A : i = 0

Do

y = Sin(x)

i = i + 1

Cells(5 + i, 1) = i

Cells(5 + i, 2) = x

Cells(5 + i, 3) = y

x = x + h

Loop Until i = K

End Sub

3.4.3. Вложенные циклы

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

Вложенность может быть многократной.

Начало

Конец

Ввод К,А,h

X=A, i=0

I<K

да

нет

Вывод i,x,y

y=sin x,

i=i+1

x=x+h

Начало

Конец

Вывод i,x,y

Ввод К,А,h

X=A, i=0

y=sin x,

i=i+1

x=x+h

I<K да нет

25

Задача 12. Вывести на экран таблицу умножения, размера N на N (где N запрашивается с

клавиатуры).

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

Sub Table()

Dim n As Integer

Dim i As Integer, j As Integer

Worksheets(1).Activate

'Размерность таблицы

n = InputBox("Введите N")

'Нумерация 1-й строки и 1-го

столбца

For i = 1 To n

Cells(1, i + 1) = i

Cells(i + 1, 1) = i

Next i

'Заполнение таблицы

For i = 1 To n

For j = 1 To n

Cells(i + 1, j + 1) = i * j

Next j, i

End Sub

3.4.4. Решение задач

Задача 13. Определить, является ли заданное с клавиатуры число совершенным, т.е. рав-

ным сумме всех своих делителей отличных от самого числа (например, 6 = 1+2+3).

Sub Num()

Dim a As Integer

Dim S As Integer, d As Integer

a = InputBox("Введите число")

For d = 1 To a \ 2

S = S + d

Next d

If a = S Then MsgBox "да" Else MsgBox "Нет"

End Sub

Задача 14. Вывести на Лист таблицу значений температуры по Цельсию от 0 до 100º с дискрет-

ностью в 10º и их эквивалентов по шкале Фаренгейта, используя формулу Tф=9Тц/5+32.

3. Работа с массивами

Массив – упорядоченное множество однотипных элементов, объединенных общим именем.

К основным параметрам массивов относят:

тип элементов (числовой, строковый, логический);

размерность – число измерений (одномерный, двухмерный и т.п.);

размер - количество элементов массива в каждом измерении.

В качестве элементов массива выступают переменные с индексами – номерами элементов в

массиве.

Индексы – целые числа. По умолчанию начинаются с 0. Чтобы нумерация началась с 1, надо в

разделе General Declaration записать Option Base 1.

Массивы делятся на статические и динамические.

Начало

J=1,N

Конец

Ввод N

i=1,N

Вывод i*j

i=1,N

Вывод i,i

26

3.1. Статические массивы

Параметры массивов этого типа задаются в процессе проектирования и не могут изменяться во

время выполнения программы.

Объявление массива:

1. Массив из N+1 элементов, индексы от 0 до N:

Dim Имя_массива (N) as Тип_элементов_массива

Например,

Dim Х (10) as Integer

2. Массив из N элементов, индексы от 1 до N:

Option Base 1

Dim Имя_массива (N) as Тип_элементов_массива

Например,

Option Base 1

Dim B (5) as String

3. Массив из (B-A)+1 элементов, индексы от A до B:

Dim Имя_массива (A To B) as Тип_элементов_массива

Например,

Dim C (2 To 5) as Date

Задание массива, заполнение значениями:

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

1. Ввод массива присваиванием значений. Используется, когда в массиве содержится не-

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

Пример 1. Задать массив, содержащий три фамилии Иванов, Петров, Сидоров.

Sub Ex1()

Dim Name (2) as String

Name(0)=‖Иванов‖

Name(1)=‖Петров‖

Name(2)=‖Сидоров‖

End Sub

2. Ввод массива в цикле. Используется, когда значения элементов массива связаны между со-

бой какой-либо зависимостью.

Пример 2. Задать массив чисел, являющихся степенями целого числа А от нулевой до 10-й.

Sub Ex2()

Dim X (10) as Long

Dim i as Integer, A as Integer

A=InputBox‖Введите число‖

For i = 0 To 10

X(i)=A^i

Next i

End Sub

27

3. Ввод массива с клавиатуры. Значения вводятся в цикле по запросу функции InputBox.

Пример 3. Ввести массив X (N), где N=10.

Sub Ex3()

Const N=10

Dim X (N) as Integer

For i = 0 To N

X(i)=InputBox‖Введите элемент массива X(‖ & I & ―)=‖

Next i

End Sub

4. Задание массива случайным образом. Используется для задания массива случайных чисел

из заданного диапазона.

Пример 4. Задать массив 10 случайных целых чисел из диапазона (-50,50).

Sub Ex4()

Dim T (9) as Integer

Randomize

For i = 0 To 9

X(i)= Int(-50+Rnd*101)

Next i

End Sub

Примечание.

Диапазон Тип Запись Пример

[1,B] целое x= Int(Rnd*A+1) [1,100] x= Int(Rnd*100+1)

[A,B] целое x=Int(Rnd*(B-A+1)+A) [50,230] x= Int(Rnd*181+50)

[A,B] вещ x=Int(Rnd*(B*10-A*10+1)+A*10)/10 [-5.0,4.9] x= Int(Rnd*100-50)/10

5. Задание массива с помощью функции Array. Позволяет задавать список, состоящий из ве-

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

Синтаксис:

Переменная = Array (Список)

Пример 5. Задать массив из двух фамилий и двух оценок.

Option Base 1

Sub Ex5()

Dim A(4) as Variant

A= Array (―Петров‖, 5, ―Иванов‖, 4)

End Sub

6. Задание элементов массива на листе Excel.

Пример 6. Сформировать массив по ячейкам В2:В5 .

Option Base 1

Sub Ex6()

Dim A(4) as Integer, i as Integer

For i=1 to 4

A(i) = Cells(i+1,2)

Next i

End Sub

28

Вывод массива

1. Вывод массива в одну строку (например, в текстовое окно).

Пример 7. Сформированный ранее одним из способов массив A(N) вывести в окно сообщений.

S=‖‖

For i=0 to N

S=S & A(i)

Next i

MsgBox ―Массив: ‖ & S

2. Вывод массива на лист Excel.

Пример 8. Заполнить ячейки В2:В5 случайными целыми числами от [1,10], образующими мас-

сив Х(4).

Option Base 1

Sub Ex7()

Dim X(4) as Integer, i as Integer

‗Формирование массива

Randomize

For i=1 to 4

X(i) = Int (Rnd*11+1)

Next i

‗Вывод на лист

For i=1 to 4

Cells(i+1,2)=X(i)

Next i

End Sub

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

Массивы этого типа могут изменять границы своих индексов (размер) в процессе выполнения

программы. Так как предельные значения индексов заранее неизвестны, то динамические массивы

объявляются пустыми.

Объявление массива:

Dim Имя_массива () as Тип_элементов_массива

Например,

Dim Х () as Integer

По ходу программы в массив добавляются элементы. Коррекция границ массива производится с

помощью оператора ReDim внутри процедуры. Если первоначально тип элементов массива был оп-

ределен как Variant, то можно переопределить и тип.

Синтаксис:

ReDim [Preserve] Имя (Границы) [As Тип]

Ключевое слово Preserve позволяет сохранить значения при переопределении границ массива, в

противном случае массив обнуляется.

29

Пример 9. Заполнить массив A(n), где n запрашивается с клавиатуры.

Option Base 1

Sub Ex9()

Dim A () as Integer, i as Integer, n as Integer

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

For i= 1to n

A(i) =InputBox (―Введите элемент массива‖)

Next i

End Sub

3.3. Решение задач

Задача 1. Найти среднее значение элементов массива.

Sub Ex()

Const n=5

Dim A (n) as Integer, i as Integer, S as Integer

For i= 0 to n

A(i) =InputBox (―Введите элемент массива‖)

S=S+A(i)

Next i

S=S/n

MsgBox ―Среднее значение=‖ & S

End Sub

Задача 2. Найти максимальный элемент массива.

Sub Ex()

Dim A () as Integer, i as Integer, n as Integer, max as Integer

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

For i= 0 to n

A(i) =InputBox (―Введите элемент массива‖)

Next i

‗ Поиск максимума

Max = A(0)

For i= 0 to n

If A(i) > max then max= A(i)

Next i

MsgBox ―Максимум=‖ & max

End Sub

Задача 3. Перевернуть одномерный массив.

Sub ex()

Dim A(10) As Integer

Worksheets(1).Activate

For i = 1 To 10

A(i) = Cells(i, 1)

Next

For i = 1 To 5

R = A(i): A(i) = A(10 - i + 1): A(10 - i + 1) = R

Next

For i = 1 To 10

Cells(i, 2) = A(i)

Next

End Sub

30

3.4. Сортировка массива

Задача. Пусть задан массив случайных целых чисел А(N). Отсортировать его по возрастанию.

До процедур, чтобы были видны в обоих

процедурах.

Const n = 5

Dim A(1 To n) As Integer

Sub Sort()

Dim i As Integer, k As Integer, Index As Integer

Dim Min As Integer, R As Integer

'Задание массива

Randomize

For i = 1 To n

A(i) = Int(Rnd * 11)

Next i

1. Метод прямого выбора (перебора).

1. Просмотреть массив, начиная от 1-го

элемента, найти минимальный и помес-

тить его на место первого, а первый на

место минимального.

2. Просмотреть массив, начиная от 2-го

элемента, найти минимальный и поме-

нять местами со 2-м элементом

3. И т.д., пока не будет просмотрен весь

массив.

'1 способ. Поиск минимального.

For k = 1 To n

Min = A(k)

For i = k To n

If A(i) <= Min Then Min = A(i): Index = i

Next i

A(Index) = A(k): A(k) = Min 'меняем значения местами

Next k

InputArray

2. Метод прямого обмена (перебора).

1. Просматривается весь массив от начала

до конца и в том случае, если из двух

соседних элементов «нижний» больше

«верхнего», элементы меняются места-

ми. Таким образом, самый большой

оказывается на последнем месте.

2. Операция повторяется для оставшихся

элементов (от начала до предпоследне-

го и т.д.) и т.д.

'2 способ. Обмен

For i = n - 1 To 1 Step -1

For k = 1 To i

If A(k) > A(k + 1) Then

R = A(k): A(k) = A(k + 1): A(k + 1) = R

End If

Next k, i

InputArray

End Sub

Sub InputArray()

'Вывод массива в окно сообщений

Dim i As Integer, S As String

S = ""

For i = 1 To n

S = S & " " & A(i)

Next i

MsgBox "Массив: " & S

End Sub

3. Метод быстрой сортировки:

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

вая далеко отстоящие друг от друга элементы, и постепенно уменьшать этот интервал до 1.

Это означает, что на последних шагах сортировка сводится к перестановкам соседних элементов.

31

Если за текущий просмотр не было сделано ни одной перестановке, то перебор прекращается - мас-

сив отсортирован.

3.5. Двухмерные массивы

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

Задача 3. Заполнить журнал данными, сформиро-

вав двумерный массив случайных чисел -оценками

(2,3,4,5).

Sub Ex()

Const n = 3, m = 2

Dim A(n, m) As Integer

Dim i As Integer, j As Integer

Worksheets(1).Activate

Randomize

For i = 0 To n

For j = 0 To m

A(i, j) = Int(Rnd * 4 + 2)

Cells(i + 2, j + 3) = A(i, j)

Next j, i

End Sub

Для квадратных матриц А (1 to n, 1 to n):

Главная диагональ: i=j

Побочная диагональ: i+j=n+1

Выше главной диагонали: i<j

Ниже главной диагонали: i>j

Задача 4. Сформировать двумерный массив размерности N (N вводится с клавиатуры) и

вывести его на лист по правилу: элементы главной диагонали равны 1, элементы выше глав-

ной диагонали равны сумме индексов (i+j), а элементы ниже ее – разности (i-j) .

Sub Ex()

Dim A() As Integer

Dim i As Integer, j As Integer, n As Integer

Worksheets(1).Activate

n = InputBox("Введите N")

ReDim A(1 To n, 1 To n)

For i = 1 To n

For j = 1 To n

If i = j Then

A(i, j) = 1

ElseIf i < j Then A(i, j) = i + j

Else: A(i, j) = i - j

End If

Cells(i, j) = A(i, j)

Next j, i

End Sub

Оператор обязательно на новую строку (всегда)!

Если в одной строке, то через :

Задача.

Крестики-нолики на листе

Sub ex()

Dim M(1 To 3, 1 To 3) As String, A As Integer, B As Integer

Dim S As String, F As Boolean. Hod as Integer

32

Worksheets(1).Activate

Range("A1:C3") = ""

hod = 0

Do

hod = hod + 1

If hod Mod 2 = 1 Then S = "X" Else S = "0"

Do

A = InputBox("Введите номер строки 1-3", "Ход " & S)

B = InputBox("Введите номер столбца 1-3", "Ход " & S)

Loop Until M(A, B) = ""

M(A, B) = S

Cells(A, B) = S

'Проверка

F = False

If M(1, 1) = S And M(2, 2) = S And M(3, 3) = S Then F = True ‗главная диагональ

If M(1, 3) = S And M(2, 2) = S And M(3, 1) = S Then F = True ‗побочная диагональ

If M(A, 1) = S And M(A, 2) = S And M(A, 3) = S Then F = True ‗в строке

If M(1, B) = S And M(2, B) = S And M(3, B) = S Then F = True ‗в столбце

Loop Until hod = 9 Or F

If F Then

MsgBox ("Выиграли " & S)

Else: MsgBox ("Ничья")

End If

End Sub

2. Проверить, является ли заданный массив магическим квадратом.

Контрольная сумма (3) 45/3=15

Контрольная сумма (4) 34

Option Base 1

Sub ex()

Dim M() As Integer, i As Integer, j As Integer

Dim A() As Integer, R As Integer

Dim n As Integer, k As Integer

Dim S As String, F As Boolean

Worksheets(1).Activate

'Заполнение двумерного и одномерного массивов

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

ReDim M(1 To n, 1 To n)

ReDim A(1 To n * n)

S = 0: k = 0

For i = 1 To n

For j = 1 To n

k = k + 1

M(i, j) = Cells(i, j)

4 9 2

3 5 7

8 1 6

16 3 2 13

5 10 11 8

9 6 7 12

4 15 14 1

33

A(k) = Cells(i, j)

S = S + M(i, j)

Next j, i

S = S \ n

'проверка чисел от 1 до n, сравниваются с к,

' если равно ставится на к-тое место,

' если в результате на к-том месте такое же занчение,

' то все в порядке.

For k = 1 To n * n

F = True

For i = 1 To n * n

If A(i) = k Then

R = A(k): A(k) = A(i): A(i) = R

End If

Next i

If A(k) <> k Then F = False

Next k

'проверка сумм

s3 = 0: s4 = 0

For i = 1 To n

s1 = 0: s2 = 0

For j = 1 To n

s1 = s1 + M(i, j) 'строка

s2 = s2 + M(j, i) 'столбец

If i = j Then s3 = s3 + M(i, j) 'главная диагональ

If i + j = n + 1 Then s4 = s4 + M(i, j) 'побочная диагональ

Next j

If s1 <> S Or s2 <> S Then F = False

Next i

If s3 <> S Or s4 <> S Then F = False

If F Then MsgBox ("Магический") Else MsgBox ("Не магический")

End Sub

34

4. Строковые операторы и функции

Строкой называется ограниченный двойными кавычками набор символов.

Пустая строка «».

Строки можно объединять с помощью + или &.

Обозначения: S – строка (тип String), х – число, k – количество (целое число), n – позиция в

строке.

Asc(S) Возвращает ASCII – код

первого символа строки

Asc(«А»)=65

Asc(«Bit»)=66

Chr(x) Возвращает символ, соот-

ветствующий ASCII – ко-

ду.

Chr(66) = B

Hex(x) Переводит число в 16-

ричную систему

Hex(30)=1Е

Oct(x) Переводит число в 8-

ричную систему

Oct(9)=11

Str(x) Переводит число в строку Str(5) = «5»

Val(S) Переводит строку в число Val(«5 лет») = 5

Val(«Лет 5») = 0

Lcase(S) Все буквы преобразует в

строчные

Lcase(«Бит») = «бит»

Ucase(S) Все буквы преобразует в

прописные

Ucase («Бит») = «БИТ»

StrConv(S,код) Изменяет регистр в строке,

код 1 – все прописные, 2-

все строчные, 3- каждое

слово начинается с про-

писной

StrConv(«это я»,3) = «Это Я»

Len(S) Длина строки Len(«Экран») =5

Left (S,k) Возвращает подстроку с

начала строки, состоящую

из k символов

Left («Дискета»,4) = «Диск»

Right (S,k) Возвращает подстроку с

конца строки, состоящую

из k символов

Right («Экран»,4) = «Кран»

Mid (S,n[,k]) 1) функция – возвращает

часть строки, начиная с по-

зиции n, длиной k симво-

лов (если k не указано, то

до конца строки)

2) оператор – заменяет

часть строки подстрокой,

начиная с позиции n встав-

ляет k первых символов

другой строки

A=Mid («Сокол»,2,3) = «Око»

a=‖класс‖: b=‖олово‖

Mid (a,2,3)=b (а= «колос»)

InStr([n, ]S1,S2) Возвращает номер позиции

вхождения строки S2 в S1,

поиск осуществляется на-

чиная с позиции n (если не

указана, то с начала стро-

ки)

InStr(«Сокол», «око») =2

InStr(3,«Сокол», «о») =4

35

InStrRev(S1,S2) Выполняет поиск подстро-

ки с конца

InStr(«Сокол», «о») =4

LTrim (S), RTrim(S),

Trim(S)

Удаляет пробелы соответ-

ственно с начала, конца и с

обеих сторон

StrReverse(S) Изменяет порядок следо-

вания символов на обрат-

ный

StrReverse(«Телефон») = «нофелеТ»

Space(k) Возвращает строку из ука-

занного количества пробе-

лов

а=Space(3) = « »

String(k,S) Возвращает строку из ука-

занного количества ука-

занных символов

а= String(3, «а») = «ааа»

StrComp(S1,S2, Способ) Возвращает результат

сравнения двух строк:

-1, если S1<S2

0, если S1=S2

1, если S1>S2

Способ сравнения (0 – дво-

ичное, 1 - посимвольное)

StrComp(«бал», «бак», 1) = 1

Replace (S1,S2,S3, [n, m,

p])

В строке S1

находит подстроку S2 и

заменяет ее подстрокой S3,

поиск начинается с пози-

ции n,

делается m замен (если

опущен то все),

р – способ сравнения (0 –

двоичное, 1 - посимволь-

ное)

Replace("Мама", "м", "п", , , 1)= «папа»

Регистр значения не имеет

Split (S [, p, n, m]) Преобразует строку в од-

номерный массив, где

p – разделитель (по умол-

чанию пробел),

n – число элементов,

m - критерий

Join (S , p) Преобразует одномерный

массив в строку, где

p – разделитель (по умол-

чанию пробел)

Задача 1. Подсчитать количество заданных

символов в тексте.

Решение: просматриваем текст посимвольно с

начала до конца и с появлением заданного сим-

вола добавляем к счетчику 1.

Sub Ex()

Dim S as String, a as String

Dim i as Integer, k as Integer

S=InputBox(―Введите строку‖)

a=InputBox(―Введите символ‖)

For i=1 to Len(S)

If Mid(S,i,1)=a then k=k+1

Next

MsgBox k

End Sub

36

Задача 2. Создать макрос для ТР «Word», оставляющий в выде-

ленном тексте между словами только по одному пробелу.

Комментарии. Перебираем выделенный текст по символам.

Если символ не пробел (код <> 32), то записываем его в новую

переменную s2 и меняем флажок на True (т.е., есть последний

обработанный символ не пробел).

Если символ пробел, то добавляем его к s2 и меняем флажок на

False, чтобы со 2, 3 и т.д. пробелом на эту ветку не попасть.

Sub Один_пробел()

' Один_пробел Макрос

' Макрос создан 18.10.2007 Kuklins

s1 = Selection.Text

s2 = ""

For i = 1 To Len(s1)

x = Mid(s1, i, 1)

If Asc(x) <> 32 Then

f = True

s2 = s2 & x

ElseIf f Then

s2 = s2 & x

f = False

End If

Next

Selection.Text = s2

End Sub

5. Общие процедуры и функции

В VB имеется возможность выделить неоднократно повторяющиеся фрагменты программы в от-

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

Подпрограммой называют самостоятельный фрагмент программы, оформленный особым спосо-

бом и снабженный именем.

Существует два вида процедур:

1. Процедуры Sub

2. Функции Function.

5.1. Процедуры Sub

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

выполнения определенных действий.

Это последовательность операторов, выполняемых как единое целое. Процедуры являются само-

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

изменять значения своих параметров.

Структура процедуры повторяет структуру программу.

Синтаксис:

[Private | Public] Sub Имя_процедуры ([параметры])

Операторы

End Sub

Ключевое слово Private означает, что процедура является локальной (закрытой), т.е. она не может

быть вызвана за пределами модуля формы.

Если указано ключевое слово Public или ключевое слово не указано, то процедура является от-

крытой, т.е. ее можно вызывать из любой другой формы проекта.

Имя_процедуры – любое правильное символическое имя, по котором процедура будет вызываться

из программы.

параметры – объявление переменных, значения которых передаются из/ в вызывающей програм-

мы.

37

Вызов процедуры осуществляется по одному из операторов:

Call Имя_процедуры ([параметры])

Или

Имя_процедуры [параметры]

При наличии ключевого слова Call параметры

заключены в круглые скобки.

Одну и ту же процедуру можно вызывать многократно, задавая ее параметрам различные значе-

ния.

Задача 1. Заданы массивы случайных целых чисел А(N) и В(N). Получить новый массив С(N),

где Сi=Ai+Bi. Каждый из массивов вывести на экран с помощью оператора MsgBox.

Option Base 1

Const n = 5

Dim A(n) As Integer, B(n) As Integer, C(n) As Integer

!

Sub InputArray(X() As Integer, Name As String)

'Вывод массива в окно сообщений

Dim i As Integer, S As String

S = ""

For i = 1 To n

S = S & " " & X(i)

Next i

MsgBox "Массив " & Name & ":" & S

End Sub

Параметр Массив указы-

вается как динамический

без указания границ.

Sub Ex()

Dim i As Integer, k As Integer, Index As Integer

Dim Min As Integer, R As Integer

'Формирование массивов А, В, С

Randomize

For i = 1 To n

A(i) = Int(Rnd * 101)

B(i) = Int(Rnd * 101)

C(i) = A(i) + B(i)

Next i

'Вывод массивов

InputArray A, "A"

Call InputArray(B, "B")

InputArray C, "C"

End Sub

5.2. Функции Function

Функция – последовательность операторов, выполняемых как единое целое. Результатом выпол-

нения функции является одно значение, которое возвращается в место вызова функции. Является

также самостоятельной частью программного кода.

Синтаксис:

[Private | Public] Function Имя_функции ([параметры]) as Тип_результата

Операторы

End Function

Private или Public - локальная (закрытая) или открытая функция.

38

Имя_функции – любое правильное символическое имя, по котором функция будет вызываться из

программы.

параметры – объявление переменных, значения которых передаются из/ в вызывающей програм-

мы.

Вызов функции осуществляется по схеме:

Имя_переменной = Имя_функции ([параметры])

Отличия между процедурами и функциями:

1. Вызов функции всегда осуществляется в правой части выражения или оператора, либо как аргу-

мент другой процедуры/функции или диалоговых окон.

2. Функции имеют тип, как переменные.

3. Возвращаемое функцией значение присваивается самому имени функции, поэтому внутри тела

функции обязательно должна быть строка

Имя_функции = Значение

Задача 2. Треугольник задан координатами своих вершин (массивы X(3) иY(3) соответственно).

Вычислить периметр треугольника.

Option Base 1

Dim X(3) As Single, Y(3) As Single !

Function Storona (X1 As Single, Y1 As Single, X2 As Single, Y2 As Single)

'Расчет длины по двум точкам

Storona =sqr((X1-X2)^2+(Y1-Y2)^2)

End Function

Sub Ex()

Dim d1 As Single, d2 As Single, d3 As Single, P as Single, I as Integer

‗Ввод координат

For i = 1 To 3

X(i)=InputBox (―Введите Х‖ & i)

Y(i)=InputBox (―Введите Y‖ & i)

Next i

D1=Storona (X(1), Y(1), X(2), Y(2))

D2=Storona (X(2), Y(2), X(3), Y(3))

D3=Storona (X(3), Y(3), X(1), Y(1))

P= D1+ D2+ D3

MsgBox "Периметр=" & P

End Sub

x1,y1

x2,y2

x3,y3

D1

D3

D2

39

6. Объектно-ориентированное программирование

ООП является в настоящее время наиболее популярной технологией программирования, а так-

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

ООП называется методика анализа, проектирования и написания приложений с помощью

структуры классов, каждый из которых является целостным фрагментом кода и обладает свойствами

и методами.

Объектно-ориентированный подход объединяет статическую модель, описывающую свойства

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

ООП является в настоящее время наиболее популярной технологией программирования, а так-

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

Основной единицей в ООП является объект, который заключает в себе как описывающие его

данные (свойства) так и средства обработки этих данных (методы).

Группа объектов, обладающих одинаковым набором свойств и методов образуют класс. Каж-

дый объект по отношению к своему классу является экземпляром.

В концепции ООП выделяют три функциональные характеристики:

Инкапсуляция - объединение в объекте его свойств и возможных над ним операций (мето-

дов). Объект, с одной стороны, обладает определенными свойствами, которые характеризу-

ют его состояние в данный момент времени, а, с другой стороны, над ним возможны опера-

ции, которые приводят к изменению этих свойств.

Например, файловая система ПК может содержать сотни файлов. Все файлы обладают од-

ним и тем же набором свойств (имя, путь к файлу, и т.п.) и операций (переименование, пе-

ремещение, копировании и т.п.) и образуют класс объектов Файлы. Каждый отдельный файл

является экземпляром этого класса и имеет конкретные значения свойств (имя, путь, …).

Класс: Форма. Свойства: размер, заголовок и т.д. Методы: Close, Open

Наследование – способность объекта сохранять свойства и методы класса-родителя.

Наследование определяет отношение между классами, объекты класса-потомок обладают

всеми свойствами и методами класса-родителя.

Полиморфизм (много форм) – одна и та же операция над объектами различных классов

может выполняться различными методами.

Например, копирование файлов и копирование символов.

Наиболее распространенными системами ОО визуального П являются Visual Basic Borland Del-

phi.

Суть ООП – создание приложений из объектов. Одни объекты приходится полностью создавать

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

Важное место в технологии ООП занимает событие. В качестве событий могут рассматриваться

щелчок мыши на объекте, нажатие определенной клавиши, открытие документа и т.д. В качестве ре-

акции на события вызывается определенная процедура, которая может изменить свойства объекта,

вызывать его методы и т.д.

В системах ООП обычно используется графический интерфейс, который позволяет визуализи-

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

и поведение с помощью мыши.

40

7. Программирование приложений на VBA

7.1. Основные определения

Visual Basic позволяет создавать сложные Windows-приложения с проверенным годами пользо-

вательским интерфейсом.

Visual Basic — это визуализированная система программирования, работающая с объектами.

Проект в VB – совокупность всех файлов, входящих в данное приложение (файлы модулей

форм, стандартных модулей, модулей классов).

Форма – это окно, на котором создается пользовательский интерфейс программы. Форма может

содержать меню, кнопки, окна списков, полосы прокрутки и другие элементы, существующие в

Windows-приложениях.

Объект - основное понятие объектно-ориентированного программирования – элементы управ-

ления, которые мы видим, раскрывая окна системы или приложений Windows:

кнопки (CommandButton),

надписи (Label),

текстовые окна – поля ввода (TextBox),

списки (ListBox),

флажки (CheckBox),

переключатели (OptionButton),

рамки (Frame),

изображения (Image),

графические поля (PictureBox),

и т. п.

Форма (Form), в которой размещаются эти элементы управления, — тоже является объектом.

Одного типа объектов на форме может быть несколько. Их различают по именам и при совпаде-

нии имен — по номерам.

Объекты характеризуются свойствами, событиями и методами.

Свойство - это характеристики объекта, определяющие его размер, положение на экране, внеш-

ний вид, цвет или состояние объекта (например, доступность или видимость) и т. п.

Значения свойствам объектов присваиваются или изменяются:

по умолчанию самой программой (часто оптимальные значения);

пользователем в процессе конструирования (дизайна) приложения;

программным путем, при выполнении кода программы:

Синтаксис:

Свойство = значение свойства

ИЛИ

Объект.Свойство = значение свойства

Примеры:

Forml.Fontsize = 18 - размер шрифта на форме

Command1.Caption = "Вычислить" - надпись на кнопке

41

Свойства можно задавать с помощью специального окна.

Диалоговое окно Свойства - одно из главных окон среды разра-

ботки.

Выводится на экран или клавишей F4 или командой Вид \ Окно

свойств (View \ Properties Window).

В верхней строке название объекта, свойства которого в настоя-

щий момент отображаются в окне.

Окно свойств имеет две вкладки: Алфавит (свойства расположе-

ны по алфавиту) и Категории (свойства сгруппированы по назначе-

нию: Внешний вид, Позиция, Масштаб, Шрифт и т.п. )

Чтобы задать объекту (форме, кнопке, рисунку и т. п.) значение

некоторого его свойства, нужно этот объект выделить и внести тре-

буемое значение в соответствующую строку окна свойств.

Таблица. Некоторые свойства и их описание

Свойство Описание. «Задает…»

Общие

Name Имя объекта в программном коде

Caption Текст, отображаемый в заголовке объекта или на объекте

BackColor Цвет фона

BackStyle Стиль фона (закрашенный (FmBackStyleOpaqe) или прозрачный (

FmBackStyleTransparent)

ControlTipText текст всплывающей подсказки, которая появляется, когда пользователь наводит

указатель мыши на элемент управления. Рекомендуется к заполнению для всех эле-

ментов управления (для формы не предусмотрена).

ForeColor Цвет находящегося на объекте текста или графики

Enabled Определяет доступность объекта, может ли объект отвечать на события, сгенериро-

ванные пользователем

Font Шрифт объекта

Height Высота объекта в твипах

Width Ширина объекта в твипах

Left Расстояние между внутренним левым краем объекта и левым краем объекта, его со-

держащего

Top Расстояние между внутренним верхним краем объекта и верхним краем объекта, его

содержащего

Picture Путь и имя файла рисунка, загружаемого в объект

Index Номер, идентифицирующий объект в массиве объектов

TabIndex Порядок перехода объектов клавишей Tab на форме

DragMode Режим перетаскивания: 0 – запрещено, 1 - разрешено

BorderStyle Стиль границы объекта (значения зависят от типа объекта)

UserForm

ShowModal возможность перехода пользователя к другим формам (False) или отсутствие такой

возможности (True)

Кнопка CommandButton

Cancel Кнопку отмены, срабатывающую на нажатие Esc

Default Кнопку по умолчанию, срабатывающую на нажатие Enter

Надпись Label

42

Aligment Выравнивание текста внутри надписи: 0 – по левому краю, 1 – по правому краю, 2 –

по центру

AutoSize Устанавливает возможность (True) авоматического изменения размера в соответст-

вии с длиной текста

WordWrap Возможность автоматического перехода на новую строку при достижении границы

надписи.

Текстовое окно TextBox

Locked Можно ли редактировать объект

ScrollBars Есть ли полосы прокрутки: 0- нет, 1 – горизонтальная, 2 – вертикальная, 3 -обе

Text Текст, содержащийся в объекте

Value

(идентично -

Text)

то текстовое значение, которое содержится в этом поле.

Используется для занесения исходного значения и для приема значения, введенного

пользователем, в строковую переменную.

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

стить весь текст.

Использовать не рекомендуется, так как может нарушиться весь дизайн вашей фор-

мы.

ControlSource ссылка на источник текстовых данных для поля.

Может ссылаться на ячейку в Excel, на поле в Recordset и т.п. При изменении поль-

зователем данных в текстовом поле автоматически изменится значение на источни-

ке, определенном в ControlSource.

MaxLength максимальная длина значения, которое можно ввести в поле.

MultiLine можно ли использовать в текстовом поле несколько строк или необходимо обой-

тись одной.

PasswordChar указать, за каким символом будут "прятаться" вводимые пользователем значения.

Используется, конечно, при вводе пароля.

ScrollBars будут ли показаны горизонтальная и вертикальная полосы прокрутки (в любом со-

четании).

Если текст может быть большим, без них не обойтись.

WordWrap автоматический переход на новую строку при достижении границы текстового по-

ля.

настоятельно рекомендуется включать в тех ситуациях, когда значение MultiLine

стоит в True.

Изображение Image

Stretch Растягивается ли рисунок по размерам объекта

Таймер Timer

Enabled Включает / отключает таймер

Interval Количество миллисекунд, проходящих до вызова события таймера

Переключатель OptionButton

Value Выбран или нет объект: True – выбран, False – не выбран

Флажок CheckBox

Value Выбран или нет объект: 0 – не выбран, 1 – выбран, 2 – выбран и не доступен

И др.

Событие – это применяемые к объекту действия, на которые можно запрограммировать реак-

цию, отклик.

Каждому объекту в VB соответствует определенный набор событий.

Пример: В системе Windows щелчок мышью (событие) на кнопке Пуск открывает окно с глав-

ным меню (отклик).

Например, нажатие кнопки (событие), как правило, приводит в реальных приложениях к вы-

полнению определенных действий (отклику на событие).

43

Событием формы служит, например, щелчок на ней мышью (событие Click), на который в каче-

стве реакции формы можно запрограммировать появление па форме текста, рисунка; окрашивание ее

в другой цвет и т. п.

Таблица. События объектов и их описание

Событие Описание, «Возникает, когда… »

Activate форма становится активным окном

Change содержимое объекта изменяется

Click пользователь нажимает, а затем отпускает кнопку мыши над объектом

DblClick пользователь дважды щелкает кнопкой

Deactivate форма перестает быть активным окном

DragDrop операция переташить-и-бросить завершена

DragOver операция перетащить-и-бросить в процессе

KeyDown пользователь нажимает клавишу клавиатуры, в то время как объект активен

KeyPress пользователь нажимает одну из клавиш доступа к объекту

KeyUp пользователь отпускает клавишу клавиатуры, в го время как объект активен

Load при загрузке формы

MouseDown пользователь нажимает кнопку мыши, в то время как объект активен

MouseMove пользователь передвигает указатель мыши над объектом

MouseUp пользователь отпускает кнопку мыши в то время как объект активен

Paint любая часть формы или графического поля передвигается, увеличивается или

уменьшается

Refresh Приводит к полной перерисовке объекта

Resize форма отображается впервые или размер объекта изменяется

Timer истекает установленный таймеру интервал

Unload форма убирается с экрана

Методы - это команды на выполнение с объектом некоторых действий.

Например,

UserForm – Форма

метод описание применение

UserForm1.Show

Если форма уже была за-

гружена в память, она про-

сто станет видимой, если

еще нет — то будет авто-

матически загружена

(произойдет событие

Load).

1)из макроса, привязанного к кнопке или клавиа-

турной комбинации;

2) из кода для элемента управления, расположен-

ного в самом документе (например,

CommandButton) или на другой форме — для пе-

рехода между формами;

3) поместить ее в обработчик события Open для

документа Word или книги Excel, чтобы форма

открывалась автоматически при открытии доку-

мента.

UserForm1.Cls очищает форму

UserForm1.Hide

форма будет убрана с эк-

рана, но останется в памя-

ти.

UserForm1.Unload

Удаление формы из памя-

ти

44

7.2. Принципы создания и работы приложений

Процесс создания Windows-приложения делят на два этапа:

1. Этап конструирования (дизайна) – этап визуального программирования.

С панели инструментов в форму (будущее окно приложения) перетаскиваются кнопки, переклю-

чатели, текстовые окна и другие управляющие элементы. Этим элементам задаются свойства —

имена, названия, размеры, положение, цвет и т. п.

2. Этап программирования и записи кода программы На языке программирования записываются

алгоритмы решения задач, вывода результатов, алгоритмы работы управляющих элементов при-

ложения.

В соответствии с этими этапами можно разделить на две части и программу приложения.

1. 1 часть определяет состав, внешний вид окон приложения и расположенных на них элементов

управления, а также свойства этих элементов. Она содержит всю информацию о пользователь-

ском интерфейсе разработанного приложения.

2. 2 часть программы — это код программы, состоящий из процедур обработки событий. Эта часть

определяет поведение всех элементов приложения при работе с ними пользователя.

Таким образом, принцип работы программ Windows-приложений, написанных на Visual Basic,

носит событийно-управляемый характер. Программа на Visual Basic -- это набор процедур обработки

событий, возникающих в результате работы пользователя (работа с клавиатурой, мышью, воздейст-

вие на элемент управления в окнах приложений).

В общем виде процедура обработки события записывается так:

[ Private | Public ] Sub объект_событие ( [параметры] )

Последовательность инструкций

End Sub

Private - параметр, указывающий на тип процедуры, доступной только в модуле, в котором вы-

полняется описание (присваивается по умолчанию), Public – доступна для всех модулей всех проек-

тов.

Событие – название события, например, щелчок мышью (Click) и т.п.

Параметры определяют особенности события, например то, какая кнопка мыши была нажата

(левая, средняя, правая) и т. п.

Например, процедура обработки события-- щелчка на кнопке cmdВыход может иметь одну ин-

струкцию — End, завершающую работу программы:

Private Sub cmdВыход_Click( )

End

End Sub

7.3. Структура и сохранение простого проекта

Даже простой проект ввиду сложности своей структуры сохраняется в нескольких файлах:

файл проекта — Visual Basic Project (расширение vbp) - служит для хранения связей между ком-

понентами проекта;

файлы форм-- Visual Basic Form File (расширение frm) - по числу форм в проекте сохраняют пол-

ную информацию о форме и размещенных на ней управляющих элементах;

автоматически дописываемый файл Стили и Состояния с характеристиками рабочего пространст-

ва проекта - Visual Basic Project Workspai t (расширение vbw).

В сложных проектах количество различных типов файлов может быть больше десяти. Обилие в

проекте файлов с разными расширениями определяем некоторые особенности их сохранения. Опти-

мальный вариант— все файлы каждого проекта размещаются в отдельной папке. Это исключает пу-

45

таницу, возникающую при поиске, перемещениях и копировании проектов. К тому же такое сохране-

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

Сохранять проект желательно начинать на начальных этапах его конструирования, на этапе за-

писи кода программы. Обычно проект отлаживается по процедурам обработки событий. Записаны

инструкции процедуры — запуск проекта; записана новая процедура — новый запуск для проверки

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

проекта при возможных зависаниях системы.

7.4. Форма и ее характеристики

Формами называют главные элементы приложений. Они служат в качестве окон Windows-

приложений, платформ, контейнеров для размещения элементов управления. Приложение может

иметь несколько форм. Простейшие и широко распространенные приложения строятся на одной

форме.

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

оконное меню (слева), название формы (свойство Caption) и три кнопки справа: Свернуть, Развер-

нуть/Восстановить и Закрыть.

Основные свойства:

Name, Caption, BackColor, FontSize, FillColor, WindowState и некоторые другие (см. в Окне

свойств).

Основные события:

Load, Unload, DragDrop, MouseDown, MouseMove, Resize и др. Список доступных событий

можно увидеть в правом списке окна кода программы.

Основные методы:

Circlele, Cls, Hide, Line, Show и др.

46

Sub Латиница()

'' Латиница Макрос

' Макрос создан 03.10.2007 Учитель

Dim Lat As String, Cyr As String

Lat = "qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,./" & Chr(34)

Cyr =

"йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ."

End Sub

47

Карточки для студентов. Задачи на ветвление.

1. Решить уравнение y=ax+b.

2. Найти y, если

y=корень кв. из х, если x>0

y=10, если x=0

y=x2 если x<0

3. (самостоятельно) По температуре воды, определить ее состояние – лед, вода, пар.

4. Даны три числа. Найти максимальное.

5. Определить к какой координатной четверти принадлежит точка с координатами (x,y).

6. Определить, является ли т.(a,b) частью круга с центром в т. (x,y) и радиусом R.

Примечание. Лучше рассматривать не корень квадратный, а квадрат.

7. Прямоугольник со сторонами параллельными осям координат задается координатами одной из

диагоналей (x1,y1)- (x2,y2). Определить, является ли т.(a,b) частью данного прямоугольника.

Примечание. Сначала переставить значения координат так, чтобы x1<x2, y1<y2.

Проверить x1<=a<=x2, y1<b<=y2.

8. Определить, принадлежит ли т.(a,b) области, ограниченной кривыми y=x2, Y=2x+5.

x2<=y, 2x+5 <=Y

9. (самостоятельно) Определить, является ли т.(a,b) частью квадрата, стороны которого параллельны

осям координат. Квадрат задается координатами левого нижнего угла (x,y) и стороной А.

10. Клетка на шахматной доске задается парой координат. Даны две пары координат (x1,y1), (x2,y2).

Определить, каким фигурам может принадлежать данных ход.

11. Даны три числа А, В и С. Определить:

a. Существует ли данный треугольник (Сумма ЛЮБЫХ двух сторон должна быть

БОЛЬШЕ третьей стороны)

b. Если треугольник существует, то: тип треугольника по соотношению сторон

- равносторонний A=В и В=С,

- равнобедренный A=В или В=С , XOR

- разносторонний A<>В и В<>С и A<>С ;

c. тип треугольника по его углам:

-прямоугольный (для ОДНОЙ из сторон выполняется a2=b

2+c

2)

a2=b

2+c

2 или b

2= a

2+c

2 или c

2= a

2+b

2

-тупоугольный (для ОДНОЙ из сторон выполняется a2>b

2+c

2)

-остроугольный (для ВСЕХ сторон выполняется a2<b

2+c

2)

a2<b

2+c

2 и b

2< a

2+c

2 и c

2< a

2+b

2

Задачи на выбор

1. Определить награды участникам конференции (1-3 место - золото, серебро, бронза соответствен-

но, остальным - грамота участника).

2. По номеру месяца (1-12) определить время года.

3. По введенному часу (1-24) определить время суток.

48

Карточки для студентов. Задачи на циклы.

Цикл с параметром

1. Найти сумму всех целых чисел от A до B, где А и В – целые числа,

(B>=A) вводятся с клавиатуры.

2. Вычислить где N вводится с клавиатуры.

3. (самостоятельно) Найти сумму кубов всех целых чисел от 10 до 50.

4. Вычислить сумму: .

5. Найти произведение четных целых чисел от 0 до 100.

6. Вывести значения функции для х из промежутка [0,10].

7. (самостоятельно) Вывести значения функции f(x)=sin x для х из проме-

жутка [0,6] с шагом 0,1.

8. Господин открыл счет в банке, вложив N рублей под К процентов годо-

вых. В конце каждого месяца на имеющуюся сумму начисляется про-

цент. Определить:

Прирост суммы вклада за 1-й, 2-й, … 6 месяцы;

Сумму вклада через 6 месяцев.

9. (самостоятельно) Одноклеточная амеба каждые 3 часа делится на 2 клет-

ки. Определить, сколько клеток будет через 3,6,9,…, 24 часа.

10. Известны результаты аттестации 30 студентов – оценки 0,1,2. Подсчи-

тать количество 0, 1, 2.

Цикл с предусловием

11. Дано число N.

Напечатать все натуральные числа, квадрат которых не превышает N.

Найти первое натуральное число, квадрат которого больше N.

12. С клавиатуры вводится последовательность целых чисел, признаком

конца является ввод 0.

Найти среднее значение введенных чисел (0 не считать).

Найти максимальное число (0 не учитывать).

Найти минимальное число (0 не учитывать).

13. Начав тренировки, лыжник в 1-й день пробежал 10 км. Каждый сле-

дующий день он увеличивал пробег на 10% от пробега предыдущего дня.

Определить:

В какой день он пробежит больше 20 км,

В какой день суммарный пробег за все дни превысит 100 км.