Лекция 6 (версия VBA с 2007г.)
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
Алгоритм – строгая, полностью определенная последовательность действий с изменяемыми исходными данными, направленная на достижение поставленной цели или решение задачи.
Термин алгоритм происходит от имени узбекского ученого IX в. Аль-Хорезми, который в своем труде «Арифметический трактат», переведенном в XII в. с арабского на латынь, изложил правила арифметических действий над числами в позиционной десятичной системе счисления. Эти правила и называли алгоритмами. Таким образом, изучающиеся в школе правила сложения, вычитания, деления, умножения чисел, правила преобразования алгебраических выражений, правила построения геометрических фигур, грамматические правила правописания слов и предложений – все это алгоритмы. Многие правила, инструкции, записанные в воинских уставах, функциональных, должностных обязанностях, представляют собой подробнейшие указания, годные во всевозможных ситуациях.
Свойства алгоритма - набор свойств, отличающих алгоритм от любых предписаний и обеспечивающих его автоматическое исполнение. Выделяют 5 основных свойства алгоритма:
1. Понятность алгоритма для данного исполнителя – алгоритм должен быть задан с помощью заранее четко и однозначно определенных действий (команд), составляющих СКИ.
2. Определенность (точность) – алгоритм должен предусматривать определенный порядок выполнения действий, т.е. должно быть указано, какую следующую команду исполнять после завершения текущего указания и какая команда последняя.
3. Дискретность – требует от алгоритма пошаговой записи и выполнения (т.е. команды алгоритма выполняются последовательно, с точной фиксацией моментов окончания выполнения одной команды и начала выполнения следующей, т. е. алгоритм должен содержать последовательность указаний (команд), каждое из которых приводит к выполнению в ЭВМ одного шага).
4. Результативность – алгоритм должен обеспечивать обязательное получения результата после конечного числа шагов, (при этом отрицательный результат – тоже результат, например, если компьютер выдает, предусмотренное алгоритмом сообщение «Решения нет, т.к. дискриминант <0», то такой алгоритм результативный, а если произошло зацикливание - то нет), т.е..
5. Массовость – алгоритм должен обеспечивать возможность его применения для решения класса однотипных задач с различными исходными данными.
Компьютер – универсальное средство для решения многих информационных задач, для решения которых используют различное программное обеспечение и системы программирования.
Исходя из условия задачи, пользователю остается решить, какими средствами воспользоваться. Например, СУБД, математический пакет, ТР и т.п. Если же подходящего ПО нет, приходится прибегать к программированию на универсальных языках, создавая свою уникальную программу. Работа по решению прикладной задачи на КП проходит через следующие этапы:
Задача → формализация → алгоритм → программа → компьютер → результат
1. Постановка задачи. На этом этапе должно быть четко определено, что дано и что требуется найти.
2. Математическая формализация. Выбор модели и метода решения. Задача формулируется на обычном разговорном языке, в виде формул, соотношений, зависимостей.
3. Разработка и запись алгоритма. Алгоритм разрабатывается и записывается на одном из формальных языков или с помощью блок-схем.
4. Составление программы. Программа – это тот же алгоритм, но записанный на понятном компьютеру языке – языке программирования.
5. Отладка и тестирование программы. Компьютер переводит введенную программу с языка программирования на язык машинных команд с помощью транслятора и решает задачу. Под отладкой программы понимается процесс испытания работы программы и исправление обнаруженных при этом ошибок. Обнаружить ошибки помогает транслятор.
Проверка на компьютере правильности алгоритма производится с помощью тестов. Тест – это конкретный вариант значений исходных данных, для которого известен ожидаемый результат. Главная задача программиста подобрать набор тестов таким образом, чтобы проверить все возможные ветви решения. (например, решение квадратного уравнения).
6. Проведение расчетов и анализ полученных результатов.
Анализ результатов. Для определения правильности решения задачи в зависимости от класса применяют разные подходы: 1) сравнивают с результат с результатом, рассчитанный в соответствии с тем же методом, но вручную, с помощью калькулятора; 2) сопоставление с экспериментальными фактами и теоретическими воззрениями.
Выбор способа записи алгоритма зависит от характера задачи. Алгоритм вычислительного характера можно записать одно или последовательностью формул, алгоритм приготовления кулинарного шедевра – удобно записать словами в пронумерованных пунктах. Алгоритм решения квадратного уравнения будет наиболее понятен при записи словами и формулами.
Из формальных способов записи алгоритмов чаще других используется язык блок-схем и алгоритмический язык.
1. Запись алгоритма словами.
2. Блок-схемы алгоритмов.
3. Алгоритмический язык.
Запись алгоритма на языке блок-схем обладают большой наглядностью, так как хорошо просматривается структура алгоритма.
Блок-схема – строится по определенным правилам и включают в себя геометрические фигуры (блоки различной конфигурации), соединенные между собой линиями, указывающими порядок выполнения операций.
Вид блоков и последовательность их соединения соответствует типу и последовательности действий алгоритма.
Основные блочные символы:
|
Блок начала и конца алгоритма; в овале пишут слова «начало» и «конец» |
|
Блок ввода и вывода информации; в блоке ввода перечисляются имена данных, подлежащих вводу в алгоритм |
|
Процесс решения задачи, в прямоугольнике блока записывают действия, которые надо выполнить при решении программы. |
|
Выбор одного из двух направлений выполнения алгоритма в зависимости от некоторого условия, записываемого внутри ромба (ветвление) |
|
Блок изменения некоторого параметра, используется, например, в блоксхемах циклических алгоритмов со счетчиком. |
|
Использование ранее созданных и отдельно описанных алгоритмов (так называемых вспомогательных алгоритмов). |
Правила составления блок-схем:
1. Все линии, указывающие на последовательность выполнения действий, должны быть замкнутыми.
2. Линии не должны пересекаться.
3. При передаче управления в схеме снизу вверх или справа налево линии обязательно помечают стрелками.
4. Не допускается передача управления «в никуда». Источник и получатель должны быть четко обозначены.
Алгоритмический язык – это язык, предназначенный для записи алгоритмов. Он включает: набор символов (алфавит), правила записи алгоритмов (синтаксис) и правила истолкования записей (семантику).
алг Название (список переменных и их типы) арг список аргументов (то, что дано) рез список результатов (что надо найти)
нач ввод вспомогательных переменных
программа
выв список данных, выводимых на печать кон
Типы данных: вещ, цел, нат (натуральные), стр или лит (строковый)
Программирование – это процесс составления компьютерной программы на основе некоторого алгоритма.
Структурное программирование основывается на двух важнейших принципах:
§ Последовательной детализации алгоритма,
§ Использование набора базовых структур (следование, ветвление, цикл) для построения алгоритма любой сложности.
В теории структурного программирования доказано, что алгоритм любой сложности можно построить с помощью следующих базовых структур:
1) Следование |
2) Ветвление |
3) Цикл |
|
|
|
Каждая из структур имеет только один вход и только один выход, что позволяет соединять их между собой в процессе разработки алгоритма любое количество элементов базовых структур в любом порядке.
Тип алгоритма определяется характером решаемой в соответствии с его командами задачи, а также используемыми базовыми структурами.
Тип алгоритма |
Базовая структура |
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? Решение: (с конца)
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.
8. Определить, принадлежит ли т.(a,b) области, ограниченной кривыми y=x2, Y=2x+5. x2<=y, 2x+5 <=Y
Король: |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=b2+c2)
a2=b2+c2 или b2= a2+c2 или c2= a2+b2
-тупоугольный (для ОДНОЙ из сторон выполняется a2>b2+c2)
-остроугольный (для ВСЕХ сторон выполняется a2<b2+c2)
a2<b2+c2 и b2< a2+c2 и c2< a2+b2
Ветвление типа выбор выбор при Условие 1: Действия 1 при Условие 2: Действия 2
…
Иначе Действия N все
№ 3. Определить награды участникам конференции.
алг награда (нат А, стр N) арг А рез N
нач |
|
|
выбор при А=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
нц А:=А+2
S:=S+A
кц
выв 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 км.
Для решения задачи на компьютере необходимо исходные данные задачи и алгоритм ее решения записать на формальном языке программирования в виде программы, ввести программу и данные в память компьютеру и подать команду на исполнение программы.
По степени зависимости языков программирования от структуры конкретного компьютера их условно делят на: 1. Языки низкого уровня. К ним относят языки машинных команд конкретных компьютеров. Программа представляет последовательность команд, содержащих коды выполняемых компьютером операций и адреса участвующих в этих операциях операндов. Это машинно-зависимые языки.
Достоинства: быстродействие и малые затраты памяти.
Недостатки: программа, записанная на машинном коде одного КП, не всегда может работать на компьютере другой структуры; программирование связано с большими временными затратами.
Желание облегчить программирование привело к разработке языков, в которых вместо конкретных адресов и кодов операций применяется символика, используются макрокоманды, объединяющие несколько действий в одной команде. К этим языкам относят так называемые автокоды и языки ассемблера. 2. Языки программирования высокого уровня – машинно-независимые. Достаточно, чтобы компьютер имел транслятор – переводчик программ с языка программирования на машинный язык. Делятся на:
2.1. Проблемно-ориентированные языки разрабатываются с целью сделать более эффективным программирование задач одного класса, например, экономических задач (Кобол), искусственного интеллекта (Пролог), обучения (Лого), язык гипертекстовой разметки в Интернет (HTML), язык моделирования виртуальной реальности (VRML) и т.д. 2.2. Универсальные языки – позволяют решать широкий спектр задач различного характера. (Basic, Quick Basic, Visual Basic; Pascal; Delphi, Си и т.д.)
3. Одним из перспективных направлений развития технологий программирования считается создание объектно-ориентированных языков.
В качестве основного понятия ООП выступает объект. Процесс программирования сводится к конструированию программ с помощью мыши из готовых или вновь создаваемых объектов и записи кода, определяющего свойства и функционирование этих объектов. (Visual Basic, Delphi).
Запуск :
MS Office -2003
1 способ: Сервис \ Макрос \ Редактор Visual Basic. 2 способ: Сервис \ Макрос \ Макросы: Создать.
MS Office 2007 1. На вкладке Разработчик щелкните Visual Basic.
Примечание. Чтобы отобразить вкладку Разработчик надо:
a.
Нажмите кнопку «Microsoft Office» , затем нажмите кнопку Параметры
Excel.
b. Щелкните Основные и затем установите флажок Показывать на ленте вкладку разработчика.
2. На вкладке Разработчик выберите пункт Visual Basic (загрузится окно редактора) или Макросы (запустится мастер по созданию макроса).
Алфавит языка включает следующий набор символов:
1. прописные и строчные буквы латинского алфавита и русского алфавитаA-Z, a-z;
2. арабские цифры 0,1,2,…,9;
3. знаки арифметических действий: *,-,+,/, \ (целочисленное деление), ^
4. знаки операций отношений =, <>, и т.д.
5. знаки препинания и разделители: . , : ; - ! ? «» ‗
6. (), [], пробел, подчеркивание
7. символы объявления типа: % - целое число одинарной точности, & - целое число двойной точности; ! –вещественное число одинарной точности, # - вещественное число двойной точности, $ - знак строкой величины.
Некоторые задачи имеют дело с очень большими числами (например, расстояния в космосе), другие оперируют малыми (например, оценки студентов). В связи с этим для экономии памяти КП используют разные типы числовых и нечисловых данных.
В 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 |
|
Правильное определение в программе типов всех величин считается одним из правил хорошего стиля программирования.
Данные, используемые в программе можно разделить на две группы:
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 |
Во всех процедурах всех модулей проекта |
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, +, -
|
Инициализация генератора случайных чисел |
randomize |
|
|
Правила записи выражений 1. выражение записывается в одну строку; например, с2 записывается:
1/12 + 4/(а+с) – с*с
2. в выражении можно использовать только круглые скобки;
3. суммы и разности в числителях и знаменателях, а также произведения в знаменателях заключаются в круглые скобки.
4. Две последовательные операции должны разделяться круглыми скобками, неправильно: 3*а*-2 правильно: 3*а*(-2)
5. нельзя пропускать знак умножения: неправильно: 2а+4с правильно: 2*а+4*с
6. операции выполняются слева направо в соответствии со старшинством операций, изменить порядок выполнения можно используя скобки.
7. если в выражении используются переменные, то они должны получить значения до первого своего использования.
Примеры.
Принцип работы программ, создаваемых в среде VBA, отличается от программ в обычном процедурном языке (Паскаль), где команды выполняются последовательно, оператор за оператором. Программы на VBA носят событийно-управляемый характер. Программа на VBA – это набор процедур обработки событий. Работой программы управляют события, возникающие в результате работы пользователя (работа с клавиатурой, мышью, открытие или закрытие Листа, нажатие на кнопку и т.п.).
В общем виде процедура обработки события записывается так:
[Private | Public] Sub Объект[_событие] ([параметры])
Последовательность операторов
End Sub
Private, Public – параметр, указывающий область видимости процедуры. (в модуле описания или во всех модулях соответственно),
Событие – название события, например щелчок мышью по объекту (Click)/ Параметры – аргументы процедуры.
Самые простые по структуре линейные алгоритмы. Линейные алгоритмы – алгоритм, в котором команды выполняются в порядке их естественного следования друг за другом независимо от каких-либо условий.
Задача 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 |
Проверка данных Заголовок процедуры Описание констант Описание переменных
Вычисление длины Вычисление площади Вывод ответа
Конец процедуры |
Оператор MsgBox выводит простейшие сообщения для пользователя, может использоваться для вывода результатов.
Синтаксис:
MsgBox сообщение [, атрибуты] [, заголовок] Сообщение – текст, отображаемый в диалоговом окне.
Заголовок – строка в заголовке окна.
Например, MsgBox ―Длина= ‖ & L , , «Ответ»
Атрибуты – системные константы, которые определяют особенности окна, различные кнопки (ОК, Отмена, Да, Нет и т.п.) и значки (значок критического сообщения или ! или ?). Список констант выдается после того, как поставлена разделительная запятая.
Например, vbOKCancel – окно с кнопками «ОК» и «Отмена» vbOKOnly – окно с 1 кнопкой «ОК». vbCritical – отображается значок критического сообщения (красный крест).
vbInformation – отображается значок информационного сообщения (i).
Если требуется поместить в окно сообщения различные кнопки и значок, то константы складываются.
Например, MsgBox ―Длина= ‖ & L , vbOKCancel+vbInformation, «Ответ»
Примечание. Окно MsgBox можно использовать как функцию. В этом случае аргументы пишут в круглых скобках, а результатом функции является число от 1 до 7, обозначающее какая кнопка была нажата. а=MsgBox (сообщение, атрибуты, заголовок)
Оператор InputBox используется для ввода информации пользователем.
Синтаксис:
InputBox сообщение [,заголовок] [,умолчание]
Сообщение – текст, отображаемый в диалоговом окне.
Заголовок – строка в заголовке окна.
Умолчание – строка, которая будет по умолчанию находиться в текстовом поле.
Примечание. Окно 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 |
Активировать рабочий лист книги 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. Вычисление НДС. Дана процентная ставка НДС и сумма. Найти сумму без НДС.
Блок-схема |
Программа на 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 |
I. Создать макрос:
1. Вызвать окно макроса: Сервис \ Макрос \ Макросы.
2. В появившемся окне задать имя макроса, например «Задача1».
3. Выбрать кнопку создать.
4. Появится окно VBA с заголовком и концом процедуры.
5. Записать программный код.
6. Закрыть макрос.
II. Добавить на лист кнопку:
1. При необходимости открыть панель инструментов Форма: Вид \ Панели инструментов: Формы. 2. На панели выбрать инструмент «Кнопка». На листе обозначить размер и положение кнопки.
3. После этого появится окно «Назначить макрос объекту», в котором надо выбрать название макроса (например, «Задача1»).
4. Изменить надпись на кнопке можно выбрав в контекстном меню команду «Изменить текст».
III. Нажав на кнопку можно выполнить тот или иной макрос.
Примечание. Изменить ранее созданный макрос: Сервис \ Макрос \ Макросы: Изменить.
Ветвящиеся алгоритмы – алгоритмы, которые содержат блок, который имеет два альтернативных выхода, выбор которых осуществляется в зависимости от выполнения или невыполнения некоторого условия.
Условный оператор изменяет ход выполнения программы в зависимости от результата проверки условия.
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
Задача 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
Блок-схема |
Программа |
|
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 |
Оператор выбора позволяет сделать выбор среди нескольких вариантов в программе в зависимости от значения условного выражения. Синтаксис:
Select Case Выражение для проверки
Case Список1
Блок операторов1
Case Список2
Блок операторов2
…
[Case else
Блок операторовElse]
End Select
Выражение для проверки - любое числовое или строковое выражение, в зависимости от значения которого выполняется соответствующий блок операторов.
Блок операторов – операторы, которые выполняются, если значение выражения для проверки находится в соответствующем списке значений.
Блок операторовElse– операторы, которые выполняются, если значение выражения для проверки не совпадает ни с одним из значений. Список – списки выражений, записанные в одной из форм:
§ Перечень значений через запятую;
§ Диапазон, записывается с помощью оператора To (например, case 1 To 10); § С помощью неравенств – оператор Is (например, Case Is <100).
В списках могут быть использованы различные формы записи.
Задача 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 |
Циклический алгоритм – алгоритм, предусматривающий многократное повторение одних и тех же действий, называемых телом цикла. Циклические алгоритмы отличаются наличием в структуре алгоритма обратной связи. Циклические алгоритмы делятся на алгоритмы с известным и неизвестным заранее числом повторений. Их условно называют «Для» и «Пока». В обоих случаях окончание циклического процесса определяется поставленным заранее условием.
Оператор 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 |
Задача 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 |
Оператор Do Loop организует циклический процесс без счетчика. Возможно 4 способа записи данного цикла с использованием двух ключевых слов While и Until.
Цикл с предусловием:
|
|
Do While Условие входа [Операторы] [Exit Do] Loop |
Do Until Условие выхода [Операторы] [Exit Do] Loop |
Цикл с использованием ключевого слова 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 |
Циклы могут быть вложенными. Вложенным называют цикл, входящий в тело другого цикла. Вложенность может быть многократной.
Задача 12. Вывести на экран таблицу умножения, размера N на N (где N запрашивается с клавиатуры).
Составим программу, которая автоматически заполняет все необходимые ячейки листа.
|
|
Sub Table() |
|
|
|
|
Dim n As Integer Dim i As Integer, j As Integer Worksheets(1).Activate 'Размерность таблицы n = InputBox("Введите N") 'Нумерация 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 |
и |
1-го |
Задача 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.
Массив – упорядоченное множество однотипных элементов, объединенных общим именем. К основным параметрам массивов относят:
§ тип элементов (числовой, строковый, логический);
§ размерность – число измерений (одномерный, двухмерный и т.п.); § размер - количество элементов массива в каждом измерении.
В качестве элементов массива выступают переменные с индексами – номерами элементов в массиве.
Индексы – целые числа. По умолчанию начинаются с 0. Чтобы нумерация началась с 1, надо в разделе General Declaration записать Option Base 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
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
Вывод массива
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
Массивы этого типа могут изменять границы своих индексов (размер) в процессе выполнения программы. Так как предельные значения индексов заранее неизвестны, то динамические массивы объявляются пустыми.
Объявление массива:
Dim Имя_массива () as Тип_элементов_массива
Например,
Dim Х () as Integer
По ходу программы в массив добавляются элементы. Коррекция границ массива производится с помощью оператора ReDim внутри процедуры. Если первоначально тип элементов массива был определен как Variant, то можно переопределить и тип.
Синтаксис:
ReDim [Preserve] Имя (Границы) [As Тип]
Ключевое слово Preserve позволяет сохранить значения при переопределении границ массива, в противном случае массив обнуляется.
Пример 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
Задача 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
Задача. Пусть задан массив случайных целых чисел А(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. Просмотреть массив, начиная от 1-го For k = 1 To n элемента, найти минимальный и помес- Min = A(k)
тить его на место первого, а первый на For i = k To n
место минимального. If A(i) <= Min Then Min = A(i): Index = i
2. Просмотреть массив, начиная от 2-го Next i элемента, найти минимальный и поме- A(Index) = A(k): A(k) = Min 'меняем значения местами нять местами со 2-м элементом Next k
3. И т.д., пока не будет просмотрен весь InputArray массив.
2. Метод прямого обмена (перебора). '2 способ. Обмен
1. Просматривается весь массив от начала 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
2. Операция повторяется для оставшихся 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.
Это означает, что на последних шагах сортировка сводится к перестановкам соседних элементов.
Если за текущий просмотр не было сделано ни одной перестановке, то перебор прекращается - массив отсортирован.
Для формирования и вывода двухмерных массивов используются вложенные циклы.
Задача 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
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)
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
Строкой называется ограниченный двойными кавычками набор символов.
Пустая строка «».
Строки можно объединять с помощью + или &.
Обозначения: 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 |
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
Задача 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
В VB имеется возможность выделить неоднократно повторяющиеся фрагменты программы в отдельные подпрограмм, которые можно использовать без их повторного написания и отладки.
Подпрограммой называют самостоятельный фрагмент программы, оформленный особым способом и снабженный именем. Существует два вида процедур:
1. Процедуры Sub
2. Функции Function.
Процедура – независимая именованная часть программы, которую можно вызывать по имени для выполнения определенных действий.
Это последовательность операторов, выполняемых как единое целое. Процедуры являются самостоятельной частью программного кода, могут принимать параметры, выполнять ряд операторов и изменять значения своих параметров.
Структура процедуры повторяет структуру программу.
Синтаксис:
[Private | Public] Sub Имя_процедуры ([параметры])
Операторы End Sub
Ключевое слово Private означает, что процедура является локальной (закрытой), т.е. она не может быть вызвана за пределами модуля формы.
Если указано ключевое слово Public или ключевое слово не указано, то процедура является открытой, т.е. ее можно вызывать из любой другой формы проекта.
Имя_процедуры – любое правильное символическое имя, по котором процедура будет вызываться из программы. параметры – объявление переменных, значения которых передаются из/ в вызывающей программы.
Вызов процедуры осуществляется по одному из операторов:
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
Функция – последовательность операторов, выполняемых как единое целое. Результатом выполнения функции является одно значение, которое возвращается в место вызова функции. Является также самостоятельной частью программного кода.
Синтаксис:
[Private | Public] Function Имя_функции ([параметры]) as Тип_результата
Операторы
End Function
Private или Public - локальная (закрытая) или открытая функция.
Имя_функции – любое правильное символическое имя, по котором функция будет вызываться из программы. параметры – объявление переменных, значения которых передаются из/ в вызывающей програм-
мы.
Вызов функции осуществляется по схеме: Имя_переменной = Имя_функции ([параметры])
Отличия между процедурами и функциями:
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) x2,y2
'Расчет длины по двум
точкам
Storona =sqr((X1-X2)^2+(Y1-Y2)^2)
End Function
Sub Ex() x1,y1 D3 x3,y3
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
ООП является в настоящее время наиболее популярной технологией программирования, а также развитием структурного и модульного программирования, однако имеет свои характерные черты.
ООП называется методика анализа, проектирования и написания приложений с помощью структуры классов, каждый из которых является целостным фрагментом кода и обладает свойствами и методами.
Объектно-ориентированный подход объединяет статическую модель, описывающую свойства объекта и и динамическую модель, описывающую их изменение.
ООП является в настоящее время наиболее популярной технологией программирования, а также развитием структурного и модульного программирования, однако имеет свои характерные черты.
Основной единицей в ООП является объект, который заключает в себе как описывающие его данные (свойства) так и средства обработки этих данных (методы).
Группа объектов, обладающих одинаковым набором свойств и методов образуют класс. Каждый объект по отношению к своему классу является экземпляром.
В концепции ООП выделяют три функциональные характеристики:
§ Инкапсуляция - объединение в объекте его свойств и возможных над ним операций (методов). Объект, с одной стороны, обладает определенными свойствами, которые характеризуют его состояние в данный момент времени, а, с другой стороны, над ним возможны операции, которые приводят к изменению этих свойств.
Например, файловая система ПК может содержать сотни файлов. Все файлы обладают одним и тем же набором свойств (имя, путь к файлу, и т.п.) и операций (переименование, перемещение, копировании и т.п.) и образуют класс объектов Файлы. Каждый отдельный файл является экземпляром этого класса и имеет конкретные значения свойств (имя, путь, …).
Класс: Форма. Свойства: размер, заголовок и т.д. Методы: Close, Open
§ Наследование – способность объекта сохранять свойства и методы класса-родителя. Наследование определяет отношение между классами, объекты класса-потомок обладают всеми свойствами и методами класса-родителя.
§ Полиморфизм (много форм) – одна и та же операция над объектами различных классов может выполняться различными методами.
Например, копирование файлов и копирование символов.
Наиболее распространенными системами ОО визуального П являются Visual Basic Borland Delphi.
Суть ООП – создание приложений из объектов. Одни объекты приходится полностью создавать самостоятельно, другие можно взять в готовом виде из разнообразных библиотек.
Важное место в технологии ООП занимает событие. В качестве событий могут рассматриваться щелчок мыши на объекте, нажатие определенной клавиши, открытие документа и т.д. В качестве реакции на события вызывается определенная процедура, которая может изменить свойства объекта, вызывать его методы и т.д.
В системах ООП обычно используется графический интерфейс, который позволяет визуализировать процесс программирования. Появляется возможность создавать объекты, задавать им свойства и поведение с помощью мыши.
Visual Basic позволяет создавать сложные Windows-приложения с проверенным годами пользовательским интерфейсом.
Visual Basic — это визуализированная система программирования, работающая с объектами.
Проект в VB – совокупность всех файлов, входящих в данное приложение (файлы модулей форм, стандартных модулей, модулей классов).
Форма – это окно, на котором создается пользовательский интерфейс программы. Форма может содержать меню, кнопки, окна списков, полосы прокрутки и другие элементы, существующие в Windows-приложениях.
Объект - основное понятие объектно-ориентированного программирования – элементы управления, которые мы видим, раскрывая окна системы или приложений Windows: § кнопки (CommandButton),
§ надписи (Label),
§ текстовые окна – поля ввода (TextBox),
§ списки (ListBox),
§ флажки (CheckBox),
§ переключатели (OptionButton),
§ рамки (Frame),
§ изображения (Image),
§ графические поля (PictureBox), § и т. п.
Форма (Form), в которой размещаются эти элементы управления, — тоже является объектом.
Одного типа объектов на форме может быть несколько. Их различают по именам и при совпадении имен — по номерам.
Объекты характеризуются свойствами, событиями и методами.
Свойство - это характеристики объекта, определяющие его размер, положение на экране, внешний вид, цвет или состояние объекта (например, доступность или видимость) и т. п.
Значения свойствам объектов присваиваются или изменяются:
§ по умолчанию самой программой (часто оптимальные значения); § пользователем в процессе конструирования (дизайна) приложения; § программным путем, при выполнении кода программы:
Синтаксис:
Свойство = значение свойства
ИЛИ
Объект.Свойство = значение свойства
Примеры: |
|
Forml.Fontsize = 18 |
- размер шрифта на форме |
Command1.Caption = "Вычислить" |
- надпись на кнопке |
Свойства можно
задавать с помощью специального окна.
Диалоговое окно Свойства - одно из главных окон среды разработки.
Выводится на экран или клавишей 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 |
||||||
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 щелчок мышью (событие) на кнопке Пуск открывает окно с главным меню (отклик).
Например, нажатие кнопки (событие), как правило, приводит в реальных приложениях к выполнению определенных действий (отклику на событие).
Событием формы служит, например, щелчок на ней мышью (событие 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 |
Удаление формы из памяти |
|
Процесс создания 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
Даже простой проект ввиду сложности своей структуры сохраняется в нескольких файлах:
§ файл проекта — Visual Basic Project (расширение vbp) - служит для хранения связей между компонентами проекта;
§ файлы форм-- Visual Basic Form File (расширение frm) - по числу форм в проекте сохраняют полную информацию о форме и размещенных на ней управляющих элементах;
§ автоматически дописываемый файл Стили и Состояния с характеристиками рабочего пространства проекта - Visual Basic Project Workspai t (расширение vbw).
В сложных проектах количество различных типов файлов может быть больше десяти. Обилие в проекте файлов с разными расширениями определяем некоторые особенности их сохранения. Оптимальный вариант— все файлы каждого проекта размещаются в отдельной папке. Это исключает путаницу, возникающую при поиске, перемещениях и копировании проектов. К тому же такое сохранение облегчает перенос создаваемых приложений на другие компьютеры.
Сохранять проект желательно начинать на начальных этапах его конструирования, на этапе записи кода программы. Обычно проект отлаживается по процедурам обработки событий. Записаны инструкции процедуры — запуск проекта; записана новая процедура — новый запуск для проверки правильности работы и т. д. Перед запусками проект желательно сохранять. Это исключит потерю проекта при возможных зависаниях системы.
Формами называют главные элементы приложений. Они служат в качестве окон Windowsприложений, платформ, контейнеров для размещения элементов управления. Приложение может иметь несколько форм. Простейшие и широко распространенные приложения строятся на одной форме.
Форма представляет собой прямоугольник со строкой заголовка, на котором расположены оконное меню (слева), название формы (свойство Caption) и три кнопки справа: Свернуть, Развернуть/Восстановить и Закрыть.
Основные свойства:
Name, Caption, BackColor, FontSize, FillColor, WindowState и некоторые другие (см. в Окне свойств).
Основные события:
Load, Unload, DragDrop, MouseDown, MouseMove, Resize и др. Список доступных событий можно увидеть в правом списке окна кода программы. Основные методы:
Circlele, Cls, Hide, Line, Show и др.
Sub Латиница()
'' Латиница Макрос
' Макрос создан 03.10.2007 Учитель
Dim Lat As String, Cyr As String
Lat = "qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,./" & Chr(34) Cyr =
"йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ."
End Sub
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 осям
координат. Квадрат задается координатами левого нижнего угла (x,y) и стороной
А.
10. Клетка на шахматной доске задается парой координат. Даны две пары координат (x1,y1), (x2,y2). Определить, каким фигурам может принадлежать данных ход.
11. Даны три числа А, В и С. Определить:
a. Существует ли данный треугольник (Сумма ЛЮБЫХ двух сторон должна быть
БОЛЬШЕ третьей стороны)
b. Если треугольник существует, то: тип треугольника по соотношению сторон
- равносторонний A=В и В=С,
- равнобедренный A=В или В=С , XOR
- разносторонний A<>В и В<>С и A<>С ;
c. тип треугольника по его углам:
-прямоугольный (для ОДНОЙ из сторон выполняется a2=b2+c2)
a2=b2+c2 или b2= a2+c2 или c2= a2+b2
-тупоугольный (для ОДНОЙ из сторон выполняется a2>b2+c2)
-остроугольный (для ВСЕХ сторон выполняется a2<b2+c2)
a2<b2+c2 и b2< a2+c2 и c2< a2+b2
Задачи на выбор
1. Определить награды участникам конференции (1-3 место - золото, серебро, бронза соответственно, остальным - грамота участника).
2. По номеру месяца (1-12) определить время года.
3. По введенному часу (1-24) определить время суток.
Цикл с параметром
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 км.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.