3 3
Министерство образования Республики Беларусь
Министерство образования и науки Российской Федерации
ГОСУДАРСТВЕННОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ
Кафедра «Автоматизированные системы управления»
ИНФОРМАТИКА
ЯЗЫК VBA
Могилев 2008
Содержание
Введение………………………………………………………………………4
Введение в программирование…………………………………………..5
Основные понятия программирования………………………………….5
Основы программирования Visual Basic for Applications (VBA)………………………………………….……………………………………..6
Типы данных и переменные…………………………………………….….8
Организация ввода-вывода……………………………………………..12
2 Операторы……………………………………………………………..…..16
2.1 Оператор присваивания (=) ……………………………………….…...16
2.2 Условный оператор (If…Then…Else…End If)………………………..17
2.3 Оператор цикла с параметром (For…Next)……………………………18
2.4 Циклы с предусловием и постусловием……………………………….20
3 Массивы……………………………………………………………………22
4 Процедуры и функции…………………………………………………….25
5 Обработка строк……………………………………………………….......28
6 Форма и элементы управления…………………………………………...31
7 Методические рекомендации по оформлению пояснительной записки курсового проекта…………………………………………………………………..42
Список литературы………………………………………………….…..49
Введение
В методических указаниях приведены основные сведения о системе программирования VisualBasicforApplication(VBA) ( в качестве приложения будет табличный процессорExcel), которые могут использоваться при выполнении контрольных и курсовых работ, а также могут использоваться при подготовке к экзаменам. Эти методические указания помогут сделать первые шаги в освоенииVBA. Постепенно, переходя от основных понятий и алгоритмов, мы перейдем к проектированию пользовательских форм, научимся работать с текстовыми полями, кнопками, флажками, списками и другими управляющими элементами, что позволит создавать программы с дружественным интерфейсом под платформуWindows.
При описании основных операторов приведен общий синтаксис (запись) оператора, а затем рассмотрены примеры. При этом в угловых скобках “< >” указывается параметр, который пользователь задает сам, а в “[ ]” указывается необязательный параметр, который может быть применен или опущен по необходимости.
1 Введение в программирование
1.1 Основные понятия программирования
Величина —это отдельный информационный объект, который имеет имя, значение и тип.
Величины бывают постоянными и переменными.
Постоянная величина (константа) не изменяет своего значения в ходе выполнения алгоритма. Константа может обозначаться собственным значением (числа 10, 3.5)или символическим именем (число π).
Переменная величина может изменять значение в ходе выполнения алгоритма. Переменная всегда обозначается символическим именем (X,A,R5 и т.п.), начинается с буквы и не содержит пробелов.
Тип величины определяет множество значений, которые может принимать величина, и множество действий, которые можно выполнять с этой величиной. Основные типы величин: целый, вещественный, символьный, логический.
Выражение —это запись, определяющая последовательность действий над величинами. Выражение может содержать константы, переменные, знаки операций, функции. Например:
А+В; 2Х -Y;K+L-sin(X).
Решение любой задачи имеет три части:
) ввод данных;
) обработка данных;
) вывод результата.
Команда ввода —команда, по которой значения переменных задаются через устройства ввода (например, клавиатуру).
Команда вывода — команда, по которой значение величины отражается на устройстве вывода компьютера (например, на экран дисплея).
Обработка данных может включать команды присваивания, ветвления и цикла.
Команда ветвления разделяет алгоритм на два пути в зависимости от некоторого условия, затем исполнение алгоритма выходит на общее продолжение. Ветвление бывает полное и неполное.
Команда цикла обеспечивает повторное выполнение последовательности команд (тела цикла) по некоторому условию.
Для условного обозначения алгоритмических операций применяются схемы алгоритма (таблица 1).
Потоки данных и потоки управления отображаются линиями. Направления слева направо и сверху вниз являются стандартными, нестандартные направления обозначаются стрелками. Следует избегать пересечений линий.
Таблица 1
Символ |
Значение |
Применение |
Процесс |
Обработка данных любого вида (выполнение операции или группы операций) | |
Решение |
Выбор направления выполнения программы в зависимости от некоторых переменных условий | |
Данные |
Обозначает ввод, вывод данных | |
Типовой процесс |
Одна или несколько операций, которые определены в другой программе, модуле | |
Модификация |
Выполнение операций, меняющих команды или группы команд | |
Пуск-останов |
Начало, конец обработки данных или выполнения программы |
1.2 Основы программирования на Visual Basic for Applications (VBA)
В данных методических указаниях рассматривается Visual Basic for Applications (VBA) - встроенный язык программирования приложений Microsoft Office, в частности, электронных таблиц Excel.
Для создания программы на VBA необходимо находясь в рабочей книге Excel, выполнить команду Сервис/Макрос/Редактор Visual Basic. Возвратиться из редактора VBA в рабочую книгу можно нажатием кнопки Вид Microsoft Excel. Программа размещается в модуле, который добавляется к файлу Excel и будет сохраняться вместе с ним.
Интерфейс редактора VBA состоит из следующих основных компонентов: окно проекта, окно свойств, окно редактирования кода, окна форм, меню и панели инструментов (рисунок 1).
В окне проекта представлена иерархическая структура файлов форм и модулей текущего проекта. В проекте автоматически создается модуль для каждого рабочего листа и для всей книги. Кроме того, модули создаются для каждой пользовательской формы макросов и классов.
В окне проекта выводится проект всех открытых рабочих книг. Это позволяет легко копировать формы и коды из одного проекта в другой, что ускоряет процесс создания новых приложений.
В окне свойств перечисляются основные установки свойств выбранной формы или элемента управления. Используя это окно, можно просматривать свойства и изменять их установки. Для просмотра свойств выбранного объекта надо либо щелкнуть кнопку Окно свойств, либо выбрать команду Вид/ Окно свойств (View/Property Window).
Программа (код программы) записывается в окне кода. Окно кода используется при написании любой программы VBA, будь это код макроса, запуск которого осуществляется при нажатии кнопки в созданной пользователем форме, или подпрограмма. Код программы вводится непосредственно в окно кода, так же как текст в любом текстовом редакторе.
Для того чтобы получить окно модуля, необходимо выполнить следующие действия: Вставка / Модуль(Insert / Module).
Рисунок 1 - Интерфейс редактора VBA
VBA является современным языком программирования, полностью оснащенным всеми необходимыми структурными операторами и типами данных.
Кроме того, в VBA применяются объекты, что делает его использование при разработке прикладных программ более понятным и легким. В объектно-ориентированном программировании данные и код, который манипулирует этими данными, объединены в структуре, называемой объектом. Объект обладает определенными свойствами и методами.
Свойства - это характеристики объекта, такие как размер, цвет, положение на экране, или состояние объекта, например доступность или видимость.
Методы – это действия, выполняемые над объектом.
Пример.
Worksheets(“Лист1”).Visible = False |
С помощью установки свойству Видимость значения Ложь скрывается рабочий лист “Лист 1”. |
Worksheets (“Лист 2”).Delete |
При помощи метода Delete удаляется этот рабочий лист “Лист 2” . |
Программный объект может являться частью другого, большего программного объекта. Для доступа к свойствами и методам объекта, являющегося составной частью более крупного объекта, нужно определить каждый из сборных объектов, начиная с самого левого (большего объекта), а затем поставить точку и указать следующий, составной объект, затем опять ставится точка и определяется следующий внутренний объект, пока не будет определен объект, к свойствам и методам которого необходимо получить доступ.
Пример.
Workbooks("Kнигa1").Worksheets(“Лucm1").Range("A14").Font – получаем доступ к рабочей книге "Книга1", рабочему листу “Лист1", шрифту ячейки "A14".
Объектами Excelявляются таблицы, рабочие книги, диаграммы, области ячеек и др. Семейство представляет собой объект, содержащий несколько других объектов, как правило, одного и того же типа.
Например, семейство Workbooks объединяет все открытые рабочие книги.
Обратиться к элементу семейства можно по имени или номеру.
Пример:
Worksheets (“Лист1”) или Worksheets (1)
1.3 Типы данных и переменные
Тип данных определяет, каким образом величина хранится в памяти компьютера. Задавая тип данных, мы налагаем некоторые ограничения на сохраняемую величину, а именно: величина переменной, количество разрядов и др.
Наиболее распространенные типы данных приведены в таблице 2.
Таблица 2
Тип данных |
Диапазон |
Byte (целый без знака) |
От 0 до 255 |
Boolean (логический) |
True или False |
Integer (целый) |
от - 32768 до 32767 |
Long (длинный целый) |
от - 2147483648 до 2147483647 |
Single (число с плавающей запятой обычной точности) |
От - 3.402823Е +38 до - 1.401298Е-48 и от 1.401298Е-45 до 3.402823Е+38 |
Double (число с плавающей запятой двойной точности) |
От -1,79769313486232Е308 до -4,94065645841247Е-324 для отрицательных значений; от 4,94065645841247Е-324 до 1,79769313486232Е308 для положительных значений |
Date (дата и время) |
от 01. 01. 100 до 31. 12.9999 |
String (строка) |
от 0 до 65535 символов |
Variant |
Любой встроенный тип данных |
Переменные - это поименованные области в памяти компьютера. После вычисления какого-либо значения оно записывается в память, чтобы затем можно было к нему возвращаться. Использование переменных дает Visual Basic возможность создавать прямое соответствие между областями памяти и заданным именем. Затем можно использовать это имя в программе.
Имя переменной может содержать цифры, буквы и знак подчеркивания, но обязательно должно начинаться с буквы.
Объявляя переменную, можно указать ее тип, указывая тем самым Visual Basic, какой тип данных должен быть использован при записи переменной в память. Если тип не указан - по умолчанию используется тип Variant, который дает возможность хранить в нем практически любую величину. Переменная объявляется следующим образом:
Dim <ИмяПеременной> [As Тип]
Пример.
Dim A As Integer |
Переменная А объявляется как целочисленная |
Dim Фамилия As String |
Переменная Фамилия объявляется как строка символов |
Константы, в отличие от переменных, не могут изменять свои значения. Использование констант делает программы легче читаемыми и позволяет проще вносить исправления —отпадает необходимость многократно исправлять значения по тексту программы, т. к. достаточно ввести новое значение при определении константы.
Const <ИмяКонстанты> [As Single] = <Выражение>
Пример
Const ПроцентнаяСтавка As Single =0.2
Const g=9.8
Над переменными и константами могут выполняться операции.
В таблице 3 представлены математические операции VBA.
Таблица 3
Выражение |
Операция |
Пример | ||
А |
B |
Результат | ||
A+B |
Сложение |
5 |
2.75 |
7,75 |
А – В |
Вычитание |
5 |
2,75 |
2,15 |
А * В |
Умножение |
2 |
6 |
12 |
А/В |
Деление |
7 |
2 |
3.5 |
A \ В |
Целочисленное деление |
7 |
2 |
3 |
A mod В |
Остаток от деления по модулю |
7 |
2 |
1 |
A^B |
Возведение в степень |
2 |
3 |
8 |
Стандартные математические функции VBA представлены в таблице 4.
Таблица 4
Обращение |
Функция |
Abs(х) |
Модуль аргумента |
Atn(x) |
Арктангенс (радианы) |
Соs (x) |
Косинус (x в радианах) |
Eхр(х) |
ex — экспонента |
Int(x) |
Целая часть х, полученная отбрасыванием дробной части |
Fix(x) |
Число, округленное до ближайшего меньшего целого |
Log(x) |
Натуральный логарифм |
Sin(x) |
Синус (х—в радианах) |
Sqr(x) |
Корень квадратный |
Tan(x) |
Тангенс числа |
Старшинство операций (в порядке убывания приоритета):
операции в скобках;
вычисление функции;
^ ;
смена знака;
*, /, \, mod;
+, -
= , >,<,>=,<=,<>,
Not,
And,
Or,
Xor.
Логические выражения в результате вычисления принимают логические значения True(Истина) илиFalse(Ложь). Операндами логического выражения могут быть логические константы, переменные логического типа, отношения. ВVBAчаще используют 4логические операции: отрицание —NOT, логическое умножение —AND, логическое сложение —OR, исключающее “или” —XOR. Результаты логических операций для различных значений операндов приведены в таблице 5. Использованы обозначения: Т —True,F —False.
Таблица 5
А |
В |
not A |
A and В |
А оr В |
А хоr В |
Т |
Т |
F |
Т |
Т |
F |
Т |
F |
F |
F |
Т |
Т |
F |
F |
Т |
F |
F |
F |
F |
Т |
Т |
F |
Т |
Т |
Пример. Записать математические выражения в виде арифметических выражений на VBA
Математическое выражение |
Выражение на VBA |
x2-7x+6 |
x^2-7*x+6 |
(Abs(x)-Abs(y))/(1+Abs(x*y)) | |
ln |
Log(Abs((y-Sqr(Abs(x)))*(x-y/(z+(x)^2/4)))) |
Функции преобразования типов выполняют преобразование переменной некоторого типа в заданный тип (таблица 6). Чаще всего выполняется преобразование из строки символов в число и числа в его строковое представление.
Таблица 6
Функция |
Назначение |
Val (строка) |
Возвращает числа, содержащиеся в строке, как числовое значение соответствующего типа |
Str(число) |
Возвращает значение типа variant (String), являющееся строковым представлением числа |
В качестве допустимого разделителя функция Str воспринимает только точку. При наличии другого десятичного разделителя следует использовать функцию CStr. Остальные функции преобразования из данного типа в указанный приведены в таблице 7.
Таблица 7
Функция |
Тип, в который преобразуется выражение |
CBool |
Boolean |
CByte |
Byte |
CDate |
Date |
CDbl |
Double |
CInt |
Integer |
CLng |
Long |
CSng |
Single |
CStr |
String |
Функции проверки типа позволяют узнать, является ли переменная выражением определенного типа (таблица 8).
Таблица 8
Функция |
Проверка |
IsNumeric(х) |
Является ли переменная числовым значением |
IsNull(х) |
Является ли переменная пустым значением (Null) |
IsError(х) |
Является ли переменная кодом ошибки |
1.4 Организация ввода-вывода
Ввод и вывод данных в VBA может выполняться несколькими способами: с листа Excel, с помощью диалоговых окон, с помощью пользовательской формы.
Для ввода данных с листа или вывода на лист используется объект Worksheets и его методы Range или Cells.
Метод Rangeиспользует в качестве аргументов одну или две ссылки на ячейки и возвращают объектRange. Ссылки на ячейки должны быть оформлены в стилеА1 (колонка-буква-строка-число). Ссылка на единичную ячейку, использованная в качестве аргумента, возвращаетобъект Range для единичной ячейки. Две ссылки на единичные ячейки возвращают объект Range для прямоугольной области, заключенной между этими двумя ячейками:
X = Worksheets(“Лист1”).Range(“B1”).Value |
Присваиваем переменной Х значение ячейки B1 листа Лист1. |
Worksheets(“Лист1”).Range(“B1”).Value = Х |
Выводим в ячейку B1 листа Лист1 значение переменной Х |
Worksheets(“Лист1”).Range(“C1”,”D6”).Value = 2 |
Выводим в ячейки C1 и D6 листа Лист1 число 2 |
Worksheets(“Лист1”).Range(“В7:С9”).Value = 3 |
Выводим в диапазон ячеек “В7:С9” листа Лист1 число 3 |
Метод Cells, получая в качестве аргументов два целых числа, возвращают объект, содержащий единичную ячейку. Аргументы определяют номера строки и столбца выбранной ячейки.
A=Worksheets(1).Cells(1,2).Value |
Переменной А присвоено значение из ячейки первой строки и второго столбца первого листа. |
Worksheets(1).Cells(2,2).Value= Х |
В ячейку второй строки и второго столбца заносится значение переменной Х |
Для ввода данных с клавиатуры используется окно ввода InputBox (таблица 9), а для вывода информации на экран – окно сообщений MsgBox(таблица 10).
Таблица 9
Функция InputBox |
Выводит на экран диалоговое окно, содержащее сообщение, поле ввода и две кнопки OK и Cancel. Устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа string по нажатию кнопки OK, содержащее текст, введенный в поле. При нажатии кнопки Cancel возвращает пустую строку. Синтаксис: InputBox(prompt[, title] [, default])
|
Пример.
Имя =InputBox(“Введите Ваше имя”, “Пример окна ввода”)
На экране появится окно.
Рисунок 2 – Пример окна ввода
Переменной Имя будет присвоено значение типа String, введенное пользователем.
Следует учесть, что, поскольку введенные пользователем данные считаются текстом, при вводе числовых значений необходимо преобразовать их к одному из числовых типов данных с помощью функции преобразования типа, например val илиCDbl.
X=CDbl(InputBox(“Введите значение Х”, “Пример окна ввода”, “1,678”))
В результате выполнения этой операции на экране появится окно ввода.
Рисунок 3 – Пример окна ввода
Введенное пользователем значение будет преобразовано к типу Double и присвоено переменной Х. Если пользователь не будет вводить значение, а просто нажмет кнопку OK, переменной Х будет присвоено значение по умолчанию – 1.678.
Таблица 10
Процедура MsgBox |
Выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа integer, указывающее, какая кнопка была нажата. Синтаксис: MsgBox(prompt[, buttons] [, title]) Аргументы: prompt — строковое выражение, отображаемое как сообщение в диалоговом окне; buttons — числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию этого аргумента равняется 0. Значения констант, определяющих число и тип кнопок используемого значка, приведены в таблицах 11—12; title — строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения |
Значения параметра Buttons процедуры MsgBox, определяющие отображаемые в диалоговом окне кнопки, приведены в таблице 11:
Таблица 11
Константа |
Значение |
Отображаются кнопки |
vbOKOnly |
0 |
OK |
VbOKCancel |
1 |
OK, Отмена |
VbAbortRetryIgnore |
2 |
Стоп, Повтор, Пропустить |
VbYesNoCancel |
3 |
Да, Нет, Отмена |
VbYesNo |
4 |
Да, Нет |
VbRetryCancel |
5 |
Повтор, Отмена |
При написании программ с откликом, когда нужно знать, какая кнопка диалогового окна была нажата (таблица 12), вместо возвращаемых значений удобнее использовать следующие константы VBA, которые делают код программы более читаемым и, к тому же, их легко запомнить.
Таблица 12
Константа |
Значение |
Нажатая кнопка |
vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo |
1 2 3 4 5 6 7 |
ОК Отмена (Cancel) Прервать (Abort) Повторить (Retry) Пропустить (Ignore) Да (Yes) Нет (No) |
Пример.
N = MsgBox (“Значение переменной Х=” & X & Chr(10) & “Продолжить вычисления?”, VbYesNo, “Пример окна MsgBox”)
Если к моменту выполнения данного оператора переменная Х равнялась числу 2,14587895, то на экране появится следующее окно
Рисунок 4 – Пример окна сообщений
Пользователь может нажать одну из кнопок – Да или Нет. Если будет нажата кнопка Да, переменной N будет присвоено значение 6 , если будет нажата кнопка Нет – 7. Проанализировав в дальнейшем это значение, можно выбрать одну из ветвей выполнения программы.
Часто процедура MsgBox используется в «минимальном» варианте - только для вывода сообщения, с одной кнопкой – OK. В этом случае аргументы не берутся в скобки. Например:
MsgBox “Значение переменной Х=” & X
Рисунок 5 – Пример окна сообщений
2 Операторы
2.1 Оператор присваивания (=)
Оператор присваивания позволяет задать (присвоить) переменной значение другой переменной, выражения или объекта.
Синтаксис: <переменная> <выражение>
Порядок выполнения: вычисляется значение <выражения>и присваивается полученное значение <переменной> (вычисляется значение выражения, стоящего справа от знака присваивания, и присваивается переменной, стоящей слева от знака присваивания).
Изображение в блок – схеме:
Пример. Вычислить значение функцииf(x,y)=|x|+sin2(y+5).
Public Sub prog1()
Dim x As Double, y As Double Dim f As Double x=CDbl(InputBox("Введите х")) y=CDbl(InputBox("Введите y"))
f = Abs(x) + Sin(y + 5) ^ 2
MsgBox "Результат = " & f
End Sub |
Заголовок процедуры prog1 (начало программы) Описание переменных: переменные x,y,f вещественного типа (Double) Ввод значений х и у. Функция InputBox выводит на экран окно с полем ввода и сообщением «Введите х» и возвращает значение типа строка (String). Для преобразования вводимого значения к вещественному типу – Double- используется функция CDbl. Вычисление значения переменной f: функция Abs(аргумент) возвращает модуль аргумента, Sin(аргумент) – синус аргумента, ^ - степень числа. Процедура MsgBox выводит на экран окно сообщений с текстом «Результат = 12» (если f=12). Конец программы. |
Рисунок 6 - Блок-схема программыprog1
2.2 Условный оператор (If…Then…Else…End If)
Условный оператор позволяет выбирать и выполнять действия в зависимости от истинности некоторого условия.
Синтаксис: условный оператор имеет два варианта синтаксиса:
a) однострочная форма записи условного оператора:
If <условие> Then [<операторы 1>] [Else [<операторы 2>]];
б) блочная форма записи условного оператора:
If <условие 1> Then
[<операторы 1>]
. . .
[ElseIf <условие n> Then
[<операторы n> ]…
[Else]
[<ИначеОператоры>]]
End If.
Порядок выполнения: вычисляется значение<условие>.Оно может принимать значенияTRUE (Истина) илиFALSE (Ложь). Если<условие>принимает значениеTRUE, то выполняются [<операторы 1>] (операторы веткиThen), в противном случае - [<операторы 2>] (операторы веткиElse).
Изображение в блок – схеме:
Пример. Определить вид введенного числа – положительное, отрицательное или ноль.
Public Sub prog2() Dim x As Double Dim s As String x=Worksheets(1).Range("A1")
If x > 0 Then s = "положительное" ElseIf x = 0 Then s = "ноль" Else s = "отрицательное" End If
Worksheets(1).Range("C2")=s End Sub |
Описание переменной строкового типа Ввод значения переменной х. Значение располагается на Листе1 (Worksheets(1)) в ячейке А1 (Range ("A1")). Условный оператор. Если условие принимает значение True (Истина), то выполняется оператор присваивания ветки Then (s=”положительное”) и завершается условный оператор, в противном случае проверяется второе условие: x=0. Если условие True, то s присваивается значение “нуль”, иначе – “отрицательное”.
Вывод результата–s–на лист1 в ячейку С2. |
Рисунок 7 - Блок-схема программыprog2
2.3 Оператор цикла с параметром (For…Next)
Оператор цикла Forпозволяет повторять группу операторов заданное число раз.
Синтаксис: For<счётчик_цикла>=<начало>To<конец> [Step<шаг>]
<тело цикла>
[Exit For]
. . .
Next[<счётчик_цикла>],
где <счётчик_цикла> — числовая переменная;
<начало>- начальное значение (выражение) переменной<счётчик_цикла>;
<конец> - заключительное значение (выражение) переменной<счётчик_цикла>;
<тело цикла> -это последовательность операторов, которая будет выполнена заданное число раз.
Порядок выполнения: переменной <счётчик_цикла> присваивается значение <начало> и проверяется условие:<начало> <конец>; если условие неверно, то<тело цикла> не выполняется и управление передается на оператор, следующий заNext. Если же условие выполняется, то выполняется<тело цикла>, затем значение<счётчик_цикла> изменяется на значение<шаг>(увеличится в случае положительного значения<шаг>, и уменьшается при отрицательном значении<шаг>). Данный процесс будет выполняться, пока значение<счётчик_цикла> не достигнет значения<конец>(если шаг положителен, цикл завершится, когда впервые выполнится условие: <счетчик_цикла> <конец>. Если шаг цикла отрицателен, условие его завершения: <счетчик_цикла> <конец> ). Досрочно завершить циклFor…Nextможно и с помощью оператораExit For. Такие операторы могут быть расположены в тех местах тела цикла, где требуется из него выйти, не дожидаясь выполнения условия завершения.
Изображение в блок-схемах:
Пример. Вычислить n-ый член последовательности, заданной формулой , если.
Public Sub prog3() Dim n As Byte Dim an As Integer,a1 As Integer, a2 As Integer n=CByte(InputBox("n ="))
a1 = 1: a2 = 1
For i = 3 To n
an = a1 + a2
a1 = a2: a2 = an
Next i MsgBox an End Sub |
Описание переменной типа Byte
Ввод значения переменной n (номера элемента последовательности) через окно ввода и преобразование введенного значения к типу Byte Присваивание начальных значений переменным а1 и а2 (двоеточием разделяются операторы, записанные на одной строке) Организация цикла For…Next, в котором счетчик i изменяется от 3 до n с шагом 1 Вычисление следующего члена последовательности как сумму двух предыдущих членов последовательности Изменение последнего и предпоследнего значений последовательности на данный момент Увеличение счетчика на 1 (конец тела цикла)
|
Рисунок 8 - Блок-схема программыprog3
2.4 Циклы с предусловием и постусловием
Циклы данного вида используются, когда заранее неизвестно, сколько раз будет выполняться тело цикла.
Циклы с предусловием (DoWhile…Loop,While…Wend,DoUntil…Loop) представлены в таблице 13, а операторы циклов с постусловием (Do…LoopWhile,Do…LoopUntil) - в таблице 14.
Отличие циклов с предусловием от циклов с постусловием заключается в том, что тело цикла первых может не выполниться ни разу, в то время как тело цикла с постусловием всегда выполнится хотя бы один раз.
Таблица 13
Синтаксис |
Do While <условие> <тело цикла> [Exit Do] … Loop |
While <условие> <тело цикла> Wend
|
Do Unlil <условие> <тело цикла> [Exit Do] … Loop |
Порядок выполнения |
<Тело цикла> будет выполняться в том случае, когда <условие> имеет значение истина (TRUE) (цикл продолжается при истинном значении <условия>). Если <условие> ложно (FALSE), то выполняются операторы, стоящие за циклом. В первом случае есть возможность досрочного выхода из цикла (это реализовано через Exit Do) |
<Тело цикла> выполняется до тех пор, пока <условие> не примет значение истина (цикл продолжается при ложном значении <условия>). Есть возможность досрочного выхода из цикла (это реализовано через Exit Do) | |
Изображение в блок-схемах |
|
|
Таблица 14
Синтаксис |
Do <тело цикла> [Exit Do] … Loop While <условие> |
Do <тело цикла> [Exit Do] … Loop Until <условие> |
Порядок выполнения |
<Тело цикла> будет выполняться в том случае, когда <условие> имеет значение истина (цикл продолжается при истинном значении <условия>). Если <условие> ложно, то выполняются операторы, стоящие за циклом. Предоставлена возможность досрочного выхода из цикла (это реализовано через Exit Do) |
<Тело цикла> выполняется до тех пор, пока <условие> не примет значение истина (цикл продолжается при ложном значении <условия>). Есть возможность досрочного выхода из цикла (это реализовано через Exit Do) |
Окончание таблицы 14
Изображение в блок-схемах |
|
|
Пример. Организовать ввод последовательности целых чисел, пока их сумма не превысит целого числа m. Вывести количество введенных чисел.
Public Sub prog4() Dim x As Integer, m As Integer Dim s As Integer Dim i As Integer m=InputBox("Введите число m") i = 1 s =InputBox("Введите 1 число") Do While s <= m
i = i + 1 x=InputBox("Введите " & i & "число") s = s + x
Loop MsgBox ("Количество чисел " & i) End Sub |
Ввод предельного числа Номер вводимого числа последовательности Ввод первого числа последовательности
Цикл с предусловием: тело цикла выполня- ется пока условие s<=m имеет значение Истина (TRUE) Тело цикла: увеличение номера на 1; ввод очередного (i-го) значения; добавление введенного значения к преды- дущему значению суммы Конец тела цикла Вывод значения переменной i
|
Рисунок 9. Лист 1 - Блок-схема программы prog4
Рисунок 9. Лист 2 - Блок-схема программыprog4. Продолжение