Пример решения алгоритма с ветвлением
Рассмотрим решения алгоритма, блок–схема которого приведена на рис. 1.6.
Условие задачи: с клавиатуры вводится число "а = 15". Необходимо вычислить значения переменных а и S, полученных в результате исполнения алгоритма.
Рис.1.6.
Разберем последовательность действий.
1. Проверяем условие: 15<=10. Условие не выполняется. Значит, выполнение алгоритма пойдет по правой ветви.
2. Вычисляем значение переменной S: S = 5.
В результате действия алгоритма переменные примут значения: a =15; S = 5.
Самостоятельное задание 1.1.
На рисунке 1.7. дана блок схема алгоритма с условием. Необходимо вычислить значения переменных «х» и «y», полученных в ходе выполнения алгоритма.
Рис. 1.7.
Самостоятельное задание 1.2. Измените блок с условием: (x<y) и найдите значения переменных «x» и «y».
Разберем пример решения циклического алгоритма с условием. На рис. 1.8. дана блок-схема циклического алгоритма. В результате действия алгоритма переменные X и Y примут значения…
Рис. 1.8
1). Проверяем условие: 30>40 нет. x = 30+2=32; y = 40-4=36
2). Проверяем условие: 32>36 нет. 32+2=34; y = 36-4=32.
3). Проверяем условие: 34>32 да. x=34; y=32.
Самостоятельное задание 1.3. Разберем более сложный пример. На рис. 1.9. показана алгоритмическая структура цикл, внутри которого находится ветвление.
Рис. 1.9
Составим таблицу (см. Таблицу 1), в которую будем заносить значения переменных и результаты проверки условий на каждом шаге.
Таблица 1
N итерации | X | Y | Проверка условия | Действия |
0 | 55 | 75 | 55<>40 (не равно)-да. Выполняем тело цикла | 55>75 – нет, y=y-x=75-55=20 |
1 | 55 | 20 | 55<>20 – да Выполняем тело цикла | 55>20 – да x:=x-y=55-20=35 |
2 | 35 | 20 | 35<>20 – да Выполняем тело цикла. | 35>20 – да x:=x-y=35-20=15 |
Закончите расчеты самостоятельно и сверьте с ответом в конце главы.
Контрольное задание 1.4.
На рис. 1.9. дана блок-схема циклического алгоритма. Необходимо вычислить значение переменной S, полученное после исполнения алгоритма.
Рис. 1.9.
Ответы к самостоятельным заданиям
Задание 1.1 x=1; y=2.
Задание 1.3. x=5; y=5.
ГЛАВА 2. СРЕДА ДЛЯ НАПИСАНИЯ ПРОГРАММ НА VBA
Реальные объекты окружающего мира обладают тремя базовыми характеристиками: они имеют набор свойств, способны разными методами изменять эти свойства и реагировать на события, возникающие как в окружающем мире, так и внутри самого объекта. Именно в таком виде в языках программирования и реализовано понятие объекта как совокупности свойств (структур данных, характерных для этого объекта), методов их обработки (подпрограмм изменения свойств) и событий, на которые данный объект может реагировать, и которые приводят к изменению свойств объекта.
Объект представляет программный компонент, который позволяет инкапсулировать (скрыть или расположить внутри себя) данные вместе с кодом (фрагментом текста программы), предназначенным для обработки объектов. Метод как раз и представляет собой действие, выполняемое над объектом. Синтаксис применения того или иного метода выглядит следующим образом:
Объект1.Метод. Здесь под названием Объект1 подразумевается имя объекта (все объекты имеют имена и по этим именам к ним можно обращаться), а слово Метод как раз определяет конкретный метод для данного объекта. Свойство представляет атрибут объекта, который определяет его характеристики, такие как цвет, размер, положение на экране, состояние объекта (например, видимость). Чтобы изменить характеристики объекта, надо просто изменить значения тех или иных его свойств. Синтаксис установки значения свойства аналогичен обращению к методу:
Объект1.Свойство = ЗначениеСвойства
Например, чтобы установить красный цвет у объекта с именем МоеЯблоко, необходимо написать конструкцию следующего вида МоеЯблоко . Цвет = Красный.
Следующим понятием, о котором стоит поговорить после объектов, методов и свойств, являются события. На языке VBA событие называется Events. Событие представляет собой действие, распознаваемое объектом (например, щелчок мышью или нажатие клавиши), для которого можно определить отклик (метод фактически определяет реакцию на событие). События возникают в результате действий пользователя или программы. Также они могут быть вызваны операционной системой.
Суть программирования на языке Visual Basic как раз и заключается в этих двух понятиях: событие и отклик на него. Если пользователь производит какое-либо воздействие (например, нажимает кнопку мыши), то в качестве отклика автоматически выполняется программный код созданной пользователем процедуры. Если такой отклик не создан, т.е. не написана соответствующая процедура, то и операционная система никак не реагирует на данное событие, и оно остается безответным.
В этом разделе мы начнем знакомство с возможностями VBA в среде Excel. Поэтому запустите Excel и выведите на экран панель инструментов – Элементы управления (для этого в меню Вид надо выбрать раздел Панели инструментов и поставить отметку напротив строки - Элементы управления). В результате на экране появится новая панель инструментов – Элементы управления (рис.2.1).
Рис. 2.1.
Для того чтобы на рабочем листе разместить какой-нибудь элемент управления (из указанной выше панели инструментов), необходимо перейти в режим конструктора (с помощью кнопки, показанной на рисунках 2.2 и 2.3). Теперь для того, чтобы перенести тот или иной элемент на рабочий лист, необходимо щелкнуть на нем левой кнопкой мыши, и далее разместить его на рабочем листе (при нажатой левой кнопке мыши).
В Office 2007 действия с элементами управления проводятся на вкладке Разработчик. Для того чтобы эта вкладка появилась на экране, необходимо активизировать кнопку Office, выбрать команду Параметры Excel и установить флажок «Показывать вкладку Разработчик на ленте».
Далее на вкладке Разработчик с помощью раскрывающегося списка команды «Вставить» находим Элементы управления – Рис.3. Используем элементы группы ActiveX. Не путайте их с элементами управления формы.
Обратите внимание на работу макросов. Для создания элементов и для последующей работы программ макросы должны быть включены.
В Office 2003 выполните команду: Сервис – Макрос – Безопасность. Установите уровень безопасности не выше среднего. Сохраните изменения, закройте книгу и снова ее откройте. Макросы не отключайте.
В Office 2007 работа макросов настраивается на вкладке Разработчик.
Рис.2.2.
Рис.2.3.
2.1. ЭЛЕМЕНТЫ УПРАВЛЕНИЯ. КОМАНДНАЯ КНОПКА И ТЕКСТОВОЕ ОКНО
Задание 2.1. Разместим командную кнопку, как это показано на рис.2.4 (в дальнейшем тексте командная кнопка будет называться просто кнопкой).
Важно отметить, что после размещения элемента управления на рабочем листе Excel этот элемент становится объектом. При этом первоначальное имя объекта назначается автоматически (например, CommandButton1), но в дальнейшем это имя можно изменить. Таким образом мы создали элемент управления в режиме конструктора, и если Вы хотите воспользоваться этим элементом управления, необходимо выйти из режима конструктора (нажатием на кнопку «Режим конструктора»). В результате выполненных действий на рабочем листе появилась кнопка, которая пока никакой роли не играет.
Теперь вернемся в режим конструктора и рассмотрим некоторые свойства созданной кнопки.
Рис. 2.4.
Для просмотра свойств кнопки ее сначала необходимо выделить (щелкнуть мышкой), а затем нажать кнопку для открытия окна свойств объекта (рис.2.4). Можно открыть окно свойств и правой кнопкой мыши, выбрав в контекстном меню пункт «Свойства».
Левая колонка окна свойств содержит название свойства, а правая - значение этого свойства. Так, первая строка окна свойств на рис.2.4 (Name CommandButton 1) говорит о том, что свойству Name по умолчанию присваивается значение CommandButton 1. Если мы хотим дать другое имя этой кнопке, то вместо CommandButton 1 мы должны набрать другое имя (без пробелов). В качестве примера введем имя Кнопка1. Теперь выберем свойство Caption , которое означает надпись на кнопке. Измените значение этого свойства (например, на название Ввод текста). Значение свойства Caption можно писать с пробелами. Далее поменяем цвет кнопки. Для этого изменим значение свойства BackColor.
Можно также поменять шрифт букв – для этого существует свойство Font. За цвет букв отвечает свойство ForeColor. В результате кнопка на рабочем листе может принять примерно следующий вид (рис.2.5).
Свойство Visible отвечает за видимость элемента в режиме программы. Если свойство Visible принимает значение True, элемент видим. Если False – невидим.
Рис. 2.5.
Теперь разместим на листе другой элемент управления – Текстовое окно (рис. 2.6). В списке элементов оно носит название «поле». Для размещения этого элемента необходимо щелкнуть на пиктограмме элемента поле, и далее при нажатой левой кнопке мыши разместить этот элемент на рабочем листе.
Рис. 2.6.
Установите значение свойства Nam е этого нового элемента – ТекстовоеОкно. Выберем цвет (свойство BackColor ) текстового окна серым. Далее установим свойство MultiLine в значение True. В этом случае длинный текст в этом окне будет переноситься со строки на строку.
Теперь перейдем к обработке событий. Наша задача сделать так, чтобы при щелчке по кнопке в текстовом окне выводился текст (например, "Пример вывода текста"). Разберем, как это сделать.
Перейдите в режим конструктора. Далее откройте редактор для написания исходного кода. Для этого можно дважды щелкнуть по созданной кнопке (Кнопка1). Откроется окно редактора исходного кода (Рис. 2.7). Другой способ перехода в среду для написания кода – меню Сервис, далее пункты Макросы и Редактор Visual Basic).
Щелчок по созданной кнопке должен обеспечить вывод в текстовое окно соответствующего текстового сообщения. Для этого в левом списке (рис.2. 7) необходимо выбрать объект Кнопка1, а затем в правом списке событие Click (щелчок по кнопке). На рис.2.8 показан результат – на экране появляется окно процедуры, которая будет выполняться при щелчке по кнопке.
Рис. 2.7.
Первое слово Private говорит о том, что это внутренняя процедура только для данного листа. Для других листов эта процедура недоступна. Альтернативным вариантом является Public (общая процедура – в этом случае доступна для других листов). Слово Sub говорит о том, что это процедура. Дальнейшая запись Кнопка1_ Click ( ) – имя процедуры. Это имя формируется автоматически из двух составляющих - Кнопка1 (имя кнопки) и Click (действие – щелчок по кнопке). Это так называемая предопределенная процедура – она существует и выполняется всегда - когда мы щелкаем по кнопке.
Рис. 2.8.
Запись End Sub говорит о завершении рассматриваемой процедуры. Теперь между этими двумя строками напишем программный фрагмент (рис. 2.9).
Рис. 2.9.
Прокомментируем новые моменты, присутствующие на рис. 2.9. Словосочетание ТекстовоеОкно.Text говорит о том, что выбирается объект с именем ТекстовоеОкно и изменяется его свойство Text (фактически это – текст, который располагается в этом текстовом окне). Знак равенства и последующая фраза говорят о том, что рассматриваемому свойству присваивается значение Пример вывода текста . Теперь перейдем из окна редактора Visual Basic в Excel (рис. 2.10). В результате щелчка по кнопке в текстовом окне появится заданный текст.
Рис. 2.10.
Создадим еще одну кнопку, щелчок по которой будет приводить к удалению текста в текстовом окне. Зададим имя (Name) «Кнопка2». Надпись на кнопке Caption – Удаление текста (рис. 2.10).
Программный код для щелчка по этой кнопке будет выглядеть так, как показано на рис. 2.11.
Рис. 2.11
Две кавычки означают пустую строку.
2.2. СПИСОК И ПОЛЕ СО СПИСКОМ
Рассмотрим теперь следующий элемент управления – поле со списком (рис. 2.12). Этот элемент применяется для хранения списка значений. В этом элементе всегда отображается только одно значение списка. После активизации поля со списком список раскрывается и из него можно выбрать необходимый элемент. Кроме свойства Name у данного элемента есть несколько важных свойств. Рассмотрим их для дальнейшего использования.
Рис. 2.12
Создайте на листе элемент Поле со списком и откройте окно его свойств. Свойства Name, Visible, BackColor, ForeColor аналогичны свойствам кнопки. Обратите внимание, что свойство Caption отсутствует, как и у текстового окна.
Свойства, которые будут рассматриваться ниже: ListIndex , ListCount , в окне свойств не отображаются. Они будут фигурировать только в тексте программы.
Свойство ListIndex содержит номер текущего элемента списка (того, который подсвечен – на нем щелкнули мышкой при выборе). Нумерация элементов списка начинается с нуля. Фактически по значению этого свойства можно определить, какой элемент списка ему соответствует. Свойство ListCount содержит число элементов списка, а свойство Text выбранный в списке элемент.
Теперь рассмотрим наиболее используемые методы работы со списком. Метод Clear удаляет все элементы из поля со списком. Синтаксис использования:
ИмяОбъекта. Clear
Метод AddItem добавляет элемент в список. Синтаксис использования:
ИмяОбъекта. AddItem элемент. Метод RemoveItem – удаление элемента из списка. Синтаксис использования:
RemoveItem номер удаляемого элемента
Задание 2.2. Разработаем на рабочем листе следующий программный фрагмент (рис. 2.13).
Рис. 2.13.
Необходимо обеспечить выполнение следующих действий:
· по щелчку по кнопке Заполнение список заполняется строками – яблоко, груша, слива, дыня, арбуз;
· по щелчку по полю со списком выбранный элемент помещается в текстовое окно;
· по щелчку по кнопке Очистка текстовое окно и поле со списком очищаются – становятся пустыми.
Для заполнения поля со списком по щелчку по кнопке Заполнение необходимо процедуру Заполнение_ Click ( ) оформить так как показано на рис. 2.14.
Рис. 2.14.
Далее для заполнения текстового окна по щелчку по полю со списком (при выборе того или иного элемента списка) необходимо процедуру Список_ Click ( ) оформить так как показано на рис. 2.15.
Рис. 2.15.
Теперь для очистки списка и текстового окна необходимо написать обработку события Щелчок по кнопке Очистка (рис. 2.16).
Рис. 2.16.
Теперь разрабатываемый программный фрагмент на рабочем листе готов, и Вы можете попробовать его в работе (выйдя из режима конструктора).
2.3. ЛИНЕЙКА ПРОКРУТКИ
Рассмотрим работу с линейкой прокрутки (элемент управления ScrollBar). Откройте новый лист, на котором расположите линейку прокрутки и текстовое окно (рис.2.17).
Рис. 2.17.
Рассмотрим свойства:
· Value – значение, соответствующее положению ползунка на линейке прокрутки ;
· Max - значение, соответствующее правому крайнему положению ползунка на линейке прокрутки;
· Min - значение, соответствующее левому крайнему положению ползунка на линейке прокрутки;
· SmallChange – значение, соответствующее изменению Value при щелчках по стрелкам линейки прокрутки;
· LargeChange – значение, соответствующее изменению Value при щелчках по полосе линейки прокрутки.
Установим Min = 0, Max =100, SmallChange = 1, LargeChange = 5. Далее введите функцию, которая выполняется при передвижении движка линейки прокрутки:
Private Sub Линейка_Change()
ТекстовоеОкно.Text = Линейка.Value
End Sub
Выйдите из режима конструктора и посмотрите на результат работы программы.
2.4. РИСУНОК
Элемент управления Рисунок (Image) служит контейнером для размещения рисунка. Свойство Picture определяет, какой рисунок вставлен в контейнер – рис. 2.18. Свойство PictureSizeMode позволяет устанавливать нужный размер рисунка. Значение этого свойства 1- fmPictureSizeModeStretch позволяет сохранить пропорции рисунка. Для помещения рисунка в контейнер используется метод LoadPicture. Пример записи:
Image1.Picture = LoadPicture("c:\Windows\Паркет.bmp")
В скобках, в кавычках, указывается полный путь к файлу и название файла с указанием расширения рисунка.
Будьте внимательны с указанием расширения рисунка - у разных типов рисунков оно разное. Например, в папке Windows хранятся рисунки для оформления Рабочего стола. Эти рисунки имеют расширения .bmp. Примеры расширений графических файлов: .TIFF; .PNG; .GIF; .BMP.
Для удаления рисунка используется программный код:
Image1.Picture = LoadPicture("")
Две кавычки означают, что рисунка в контейнере нет.
Рис. 2.18
Выполните упражнение. Создайте программный фрагмент, показанный на рис. 2.18. Запишите программные коды для командных кнопок для размещения и удаления картинки в контейнере Image.
ГЛАВА 3. ПРИМЕРЫ ПРОГРАММИРОВАНИЯ НА VBA
В этом разделе рассмотрим примеры, поясняющие возможности VBA. Первая задача – разобраться с работой операторов цикла. Цикл – это повторяющиеся действия. Циклы бывают разных типов: циклы с условием, циклы с предусловием, циклы с известным числом повторений. Цикл с условием выполняется, пока не наступит некоторое событие – например, некоторая переменная примет заданное значение. Цикл с известным числом повторений будет повторяться, пока некоторая переменная, называемая счетчиком, не «пробежит» заданный диапазон значений – от начального до конечного. Рассмотрим работу двух типов цикла.
Задание 3.1. Разработаем программный фрагмент следующего содержания. На рабочем листе располагается кнопка, при нажатии на которую происходит подсчет суммы всех чисел, начиная от 1 до 10 . На рис. 3.1 показан результат действия этой программы- после щелчка по кнопке появляется окно с сообщением о подсчитанной сумме.
Рис.3.1
Применим оператор цикла с известным числом повторений. Синтаксис этого цикла следующий:
For < i = начальное значение> To <конечное значение> Step
<группа операторов>
Next
Где i - переменная типа счетчик;
Step – шаг изменения переменной типа счетчик. Если шаг равен единице, то он не записывается в тексте программы;
<группа операторов> - это повторяющиеся действия;
Next – ключевое слово, после которого цикл снова идет к своему началу или завершается.
Для вывода на экран значения суммы будем использовать функцию MsgBox(), которая вызывает диалоговое окно с сообщением.
Создадим на листе кнопку и назовем ее Счет. Откроем редактор исходного кода и введем переменную для обозначения суммы (Sum) типа Integer. Ввод и описание переменных производится в особой области исходного кода General _ Declarations (Рис.3.2). Dim – определить (ключевое слово Visual Basic), далее Sum – имя переменной, As Integer - определение типа данной переменной как целого числа.
Рис.3.2.
Для щелчка по кнопке Счет1 запишем программный код, показанный на рис. 3.3.
Рис.3.3.
Поясним эту запись:
Sum = 0’ переменной Sum присваиваем значение 0.
For i =1 To 10’ счетчик пробегает значения от 0 до 10;
Sum = Sum + i’ при каждом изменении счетчика сумма будет увеличиваться на значение равное i.
MsgBox(Sum) - для вывода значения на экран используется функция вывода окна с сообщением.