Лекция. ЛЕкция. Алгоритм. VBA начало. Решение задачи включает в себя следующие этапы
Скачать 1.35 Mb.
|
1. ПОНЯТИЕ И СВОЙСТВА АЛГОРИТМА 1.1. Понятие алгоритма Программное решение задачи включает в себя следующие этапы: 1) формализация задачи, т. е. математическая постановка (формулировка) задачи (запись условия задачи в виде последовательности определенных действий и формул, необходимых для ее решения); 2) выбор или разработка метода вычислений (например, численные методы решения нелинейных уравнений, систем линейных алгебраических уравнений, дифференциальных уравнений и др.); 3) алгоритмизация задачи, т. е. разработка алгоритма решения; 4) выбор языка программирования и составление программы. Алгоритм – строго определенная конечная последовательность арифметических и логических действий для решения задачи, обязательно приводящая к некоторому результату. Простейшими примерами алгоритмов являются правила, по которым выполняются четыре основных арифметических действия над числами. Эти правила для десятичной системы счисления еще в IX в. были определены среднеазиатским математиком Аль Хорезми. В результате «европеизации» имени этого ученого и возник термин «алгоритм». Любой алгоритм существует не сам по себе, а предназначен для определенного исполнителя (человека, робота, компьютера, языка программирования и т. д.). Совокупность команд, которые конкретный исполнитель умеет выполнять, называется системой команд исполнителя. 1.2. Свойства и виды алгоритмов Алгоритмы характеризуются следующими свойствами. Дискретность. Описываемый с помощью алгоритма процесс должен быть разбит на последовательность отдельных шагов, т. е. алгоритм должен состоять из отдельных законченных действий. Определенность (детерминированность). Это свойство означает, что неоднозначность толкования записи алгоритма недопустима, многократное применение алгоритма к одним и тем же исходным данным должно приводить к одним результатам. Результативность. Алгоритм обязательно должен приводить к определенному результату за конечное число шагов и обеспечивать его выдачу на устройство вывода информации (экран монитора, принтер) или в файл. Для этого в алгоритме должно быть предусмотрено исключение недопустимых ситуаций (деление на ноль, вычисление логарифма нуля или отрицательного числа и т. п.). Если решения задачи не существует, то в качестве результата должно быть выведено сообщение об этом. Последовательность правил, повлекшая за собой процедуру бесконечного выполнения операций, алгоритмом не является. Массовость. Обычно алгоритмы предназначены для решения не одной конкретной задачи, а некоторого класса задач определенного типа. В простейшем случае массовость подразумевает возможность использования различных исходных данных. Формальность. Эта особенность указывает на то, что любой исполнитель, способный воспринимать и выполнять инструкции алгоритма, действует формально, т. е. отвлекается от содержания поставленной задачи, не вникает в ее смысл, а лишь строго выполняет инструкции. Эффективность – свойство, которое позволяет решить задачу за приемлемое время. Различают следующие виды алгоритмов: линейный – список команд (указаний), выполняемых последовательно друг за другом; разветвляющийся – алгоритм, содержащий хотя бы одну проверку условия, в результате которой обеспечивается переход на один из возможных вариантов решения; циклический – алгоритм, предусматривающий многократное повторение одной и той же последовательности действий. Количество повторений определяется исходными данными или условием задачи. Любая алгоритмическая конструкция может содержать в себе другую конструкцию того же или иного вида, т. е. алгоритмические конструкции могут быть вложенными. 1.3. Способы представления алгоритмов Алгоритм, составленный для некоторого исполнителя, можно представить различными способами: с помощью словесного или графического описания, на алгоритмическом языке или на языке программирования. Словесное описание отражает структуру алгоритма в произвольной форме с помощью естественного языка с требуемой пошаговой детализацией, однако такая форма алгоритма громоздка и не имеет наглядности, что делает ее непригодной для реализации в математических расчетах. Алгоритмический язык в общем случае представляет собой систему обозначений и правил для единообразной и точной записи алгоритмов и их исполнения. Примером такой системы является псевдокод – описание структуры алгоритма на естественном, частично формализованном языке. В псевдокоде применяются формальные конструкции и математические символы. При записи алгоритма с помощью псевдокода применяются следующие служебные слова и символы: АЛГ – АЛГоритм; НАЧ – НАЧало алгоритма; КОН – КОНец алгоритма; НЦ – Начало Цикла; КЦ – Конец Цикла; := – присвоить значение; // – комментарий. После служебного слова АЛГ указывается название алгоритма. Каждая команда записывается с новой строки. В некоторых литературных источниках серию команд, составляющих тело какой-либо единой алгоритмической конструкции, рекомендуется заключать в операторные (фигурные) скобки. Последовательность записи алгоритма в псевдокоде: АЛГ Название алгоритма НАЧ Команда 1 Команда 2 ………… КОН 9 Присвоить значения переменным можно следующим образом: s := 5, x := 2 + y, m := m – n. Такого рода запись означает, что сначала выполняется действие над текущими значениями переменных в правой части от знака равенства, а затем полученный результат присваивается переменной, имя которой записано в левой части. Например, в результате операции k := k + 1 значение переменной k будет увеличено на единицу. Одним из наиболее наглядных способов записи алгоритма является изображение его в виде графической схемы. При этом алгоритм представляется последовательностью блоков(геометрических фигур), выполняющих определенные функции, и связей между ними, указывающих на порядок выполнения отдельных инструкций. Конфигурация и размеры блоков в графической схеме алгоритма (ГСА) определяются стандартом. Основное направление линий связи между блоками – сверху вниз и по часовой стрелке. Линии связи в других направлениях обязательно сопровождаются стрелками. Наиболее часто употребляемые блоки приведены в табл.1. Т а б л и ц а 1 2. ЯЗЫК ПРОГРАММИРОВАНИЯ VBA 2.1. Языки программирования Языки программирования – это искусственные языки, предназначенные для записи алгоритмов. Они считаются языками высокого уровня по отношению к уровню машинных (внутренних) команд. ЭВМ оперирует командами в двоичном коде (машинные команды), поэтому программу, написанную на языкевысокого уровня, необходимо перевести (транслировать) на язык машинных команд, «понятных» ЭВМ. Эту операцию выполняют обслуживающие программы-трансляторы (интерпретаторы и компиляторы).Компиляторы транслируют весь текст программы, написанной на языке высокого уровня, в машинные коды в ходе одного непрерывного процесса. При этом создается полная программа в машинных кодах, которая в дальнейшем используется без участия компилятора. Интерпретаторы построчно переводят программу, написанную на языке высокого уровня, в машинные коды, причем каждая строка тут же выполняется. Преимущество компиляторов (для языков Фортран, Паскаль, Си) состоит в высокой скорости выполнения готовой программы. Интерпретаторы (для языков Basic, Logo) более удобны при откладке программ, так как реализуют диалоговый стиль разработки программ. 2.2. Общие сведения о VBA VBA (Visual Basic for Applications) – это диалект языка Visual Basic, расширяющий его возможности и предназначенный для работы с приложениями Microsoft Office и другими приложениями, в том числе и от третьих фирм. Создавать несложные программы на VBA можно, ничего не зная о программировании. Для этого служит режим автоматического создания макросов, реализуемый с помощью макрорекордера, но этот язык имеет ограниченные возможности: не умеет проверять значения, чтобы в зависимости от них выполнять какое-либо действие, не работает с циклами, не умеет перехватывать и обрабатывать ошибки и т. д. Программирование помогает решить эти проблемы и значительно повысить мощь и возможности макросов, позволяя создавать пользовательские меню, диалоговые окна, панели инструментов и др. VBA считается объектно-ориентированным языком программирования. 2.3. Основные понятия языка программирования Объект – это объединение данных с программным кодом, предназначенным для их обработки. Объект представляет собой именованный элемент, имеющий – свойства, или характеристики, которые можно проверить или изменить; – методы, т. е. действия, которые можно выполнить над объектом; – события, т. е. возможные для объекта ситуации, на которые он может ответить заранее предопределенными действиями. Оператор – это наименьшая способная выполняться единица VBA-кода. Оператор может объявлять или определять переменную или выполнять какоелибо действие в программе. Другими словами, оператор – это обобщенная инструкция, которая содержит всю информацию, необходимую для выполнения определенных действий. Операторы в общем случае состоят из ключевых слов, выражений и операндов. Ключевые (зарезервированные) слова – это имена команд, операторов, процедур, функций. Операнды – это данные, используемые в программе. К ним относятся константы, переменные, массивы и значения функций. Процедура – наименьшая единица программного кода, на которую можно ссылаться по имени и которая может выполняться независимо. В VBA основные типы процедур – Sub и Function. Любая процедура содержит один или более операторов, помещенных между оператором объявления процедуры в начале и оператором завершения процедуры в конце. Модуль – именованная единица, состоящая из одной или нескольких процедур, а также объявлений, относящихся ко всем процедурам в модуле. 2.4. Алфавит VBA Программы составляются и записываются по определенным правилам с помощью алфавита языка – разрешенного к использованию набора символов, с помощью которого могут быть образованы слова и величины данного языка. Алфавит VBA включает в себя – прописные и строчные латинские буквы от A до Z и буквы кириллицы от А до Я; – десятичные цифры от 0 до 9; – знаки пунктуации: пробел, точка, запятая, точка с запятой, двоеточие, круглые скобки, кавычки, апостроф; – специальные символы (?, !, $, #, %); – знаки арифметических операций (+, –, *, /, \, ^). 2.5. Типы данных Типы данных относятся к фундаментальным понятиям любого языка программирования, они введены для рационального использования памяти ЭВМ. В языке VBA предусмотрены следующие типы данных: – числовые; – строковый (символьный, текстовый); – дата и время (Data – от 01.01.100 до 31.12.9999); – логический (Boolean – для хранения значений True и False); – объектный (хранит ссылку на любой объект в памяти); – Variant – специальный тип данных, который может хранить любые другие типы данных. Числовые типы данных перечислены в табл. 2. Начинающие программисты наиболее часто для хранения целых чисел используют тип данных Integer, для дробных чисел – Single. Символьные данные в общем случае представляют собой произвольную комбинацию символов и должны заключаться в кавычки, например: «1-я пара», «лекция», «тележка 1710», «т. 123456». Значения типа дата/время ограничиваются с двух сторон символами решетки,например: #11/05/2010#, #воскресенье, 14 марта 2010 г.#, #12:38:02# 2.6. Формы записи вещественных чисел в программе Целые числа записывают в программе обычным образом, например: 45, –3. Для записи вещественных чисел применяют два формата: основная (естественная) форма записи с фиксированной точкой. Десятичная точка отделяет целую часть числа от дробной. Знак плюс и нулевую целую часть можно опустить, например: 12.38, .874, 0.00012, –98723.25; экспоненциальная (показательная, нормализованная, константа с порядком) форма записи числа с плавающей точкой в виде: ±mE±p, (1) где m – мантисса (число с фиксированной точкой); E – основание степени, в качестве которого принято число 10; p – показатель степени числа 10 (в стандартном виде представляет собой двузначное число с добавлением при необходимости ведущего нуля). При этом следует иметь в виду, что число в экспоненциальной форме записывается без пробелов, знаки «+» можно опускать. Математически формулу (1) можно интерпретировать как ±m·10±p . 14 Экспоненциальную форму применяют при записи очень больших или очень малых чисел (например, см. табл. 1). Обычно абсолютное значение мантиссы записывается в диапазоне от 0 до 1, т. е. │m│Є [0; 1]. Примеры: 37000 → 0.37∙105 → 0.37E5 (или +0.37E+05) –0,00045 → –0.45∙10-3 → –0.45E–3. Данные в программе могут использоваться в виде переменных, констант, указателей функций, массивов. 2.7. Переменные Переменная – это величина, значение которой может изменяться в ходе выполнения программы. Переменная характеризуется именем, типом и значением. Имя переменной (идентификатор) состоит из комбинации букв, цифр длиной не более 255 символов. На первом месте должна быть буква, в имени переменной допускается использовать знак подчеркивания. Примеры имен переменных: Alfa, X, SUMMA, B23, KOD1_3, V, S. В среде профессиональных программистов переменным принято присваивать информативные имена. Поэтому при именовании переменных рекомендуется придерживаться определенных правил. Чаще всего для этого используется венгерское соглашение (в честь одного из программистов фирмы Microsoft Charles Simonyi, венгра по национальности): имя переменной должно начинаться с префикса, записанного строчными буквами и указывающего, что именно будет храниться в этой переменной, т. е. тип данных. Каждое слово в составном имени должно начинаться с заглавной буквы, например, nMyAge – числовая переменная, обозначающая «Мой возраст». Аналогичные правила действуют и при именовании других объектов, функций, методов. Перед первым использованием переменной в программе ее необходимообъявить, т. е. указать имя переменной и тип данных, который будет храниться в ней. Объявление каждой переменной делает программу надежной, ускоряет ее работу, уменьшает количество ошибок. Кроме того, только в этом случае будут действовать подсказки VBA по свойствам и методам. В программе переменные объявляются в разделе переменных по следующему формату: Dim имя_переменной As тип [, имя_переменной As тип]1 Примеры: Dim Tok As Single Dim V As Single, Pos As Integer Можно вообще не применять раздел описания переменных, в этом случае всем переменным по умолчанию присваивается тип Variant, однако это приводит кнерациональному использованию памяти ЭВМ. Для запрета использования переменных без их объявления рекомендуется в разделе общих объявлений программного модуля указать команду Oрtiоn Exрliсit В этом случае при попытке использования предварительно необъявленной переменной редактор VBA будет сообщать об ошибке. Для автоматического размещения команды Optiоn Exрliсit при загрузке редактора VBA необходимо зайти в меню Tools (инструменты), Options(настройки), Editor (редактор) и активизировать команду Require Variable Declaration (требуется объявление переменной). Следует иметь в виду, что эта установка начнет действовать только после нового запуска Excel. 2.8. Константы Константа – это величина, значение которой не изменяется в ходе выполнения всей программы. Константы бывают числовые и строковые (символьные). В программе константы объявляются в разделе констант. Записывается ключевое слово Const и за ним – имена (идентификаторы) и значения констант программы, например: Cоnst g = 9.81, Rmin = 0.1, z2 = –1Е5 Раздел Const обычно размещается в начале программы, в любом случае – до первого использования констант программой. Значение числа π VBA «не знает», его надо задавать в программе, например: Сonst рi = 3.1415926 или Const рi = 3.14 2.9. Встроенные функции В VBA имеется большой набор встроенных функций, использование которых существенно упрощает программирование. основные категории: математические функции, функции обработки строк, проверки, определения и преобразования типов данных, функции времени и даты, финансовые функции и др. Функция задается с помощью указателя функции, который записывается в виде имени, и аргументов, заключенных в круглые скобки: Имя_функции(аргументы) Аргументами функций могут быть константы, переменные, функции, арифметические выражения. Список встроенных математических функций приведен в табл. 3. Т а б л и ц а 3 Функции, отсутствующие в числе встроенных, необходимо записывать с использованием встроенных функций и известных математических соотношений: корень n-й степени: n n x x 1/ → x^(1/n), a b a b ln ln log → Log(b)/Log(a), lg x = log10 x → Log(x)/Log(10), аrcsin x = ) 1 arctg( 2 x x → Аtn(x/Sqr(1 – х^2)), 17 arссos x = ) 1 arctg( 2 x x → Аtn(Sqr(1 – х^2)/x). Аргумент тригонометрической функции должен быть в радианах. Формула перевода градусов в радианы: xрад = xград ∙ π/180°. Например, sin 60° → Sin(60*3.14/180). 2.10. Выражения Выражения представляют собой последовательную запись операндов, т. е. констант, переменных, функций, или любых их комбинаций, образованную с помощью знаков арифметических операций, а также операций отношения. В VBA всего семь арифметических операций: пять стандартных – сложение (+), вычитание (–), умножение (*), деление (/), возведение в степень (^) и две дополнительные: целочисленное деление (\), при котором дробная часть отбрасывается, (число не округляется), например: 5 \ 2 = 2; остаток от деления целых чисел a на b: a Mod b. Например, в результате выполнения операции X = 10 Mod 3 переменной X будет присвоено значение 1 (остаток от деления 10 на 3). Арифметические выражения соответствуют общепринятым алгебраическим выражениям. Результатом вычисления является число. Операции в сложном выражении выполняются в порядке старшинства: вычисление значения функции, возведение в степень, умножение и деление, сложение и вычитание. Операции одного приоритета выполняются последовательно слева направо. Для изменения приоритета используются круглые скобки. Запись выражения выполняется в одну строку, в выражении нельзя опускать знак умножения, ставить подряд два знака операций. Если в числителе или знаменателе дроби имеется многочлен, то его необходимо заключать в скобки. Логические выражения, примером которых являются отношения, применяются для сравнения значений выражений. Приоритет операций отношения ниже приоритета арифметических операций. Операции отношения (сравнения) следующие: – равенство ( = ); – больше ( > ), меньше ( < ); – больше или равно ( >= ), меньше или равно ( <= ); – не равно ( < > ). Операторы сравнения возвращают значение True, если утверждение истинно, или False, еслиутверждение ложно. При проверке нескольких условий применяются логические операции: And – логическое И; Or – логическое ИЛИ; Not – логическое отрицание. Примеры записи арифметических и логических выражений на языке VBA приведены соответственно в табл. 4 и 5. Т а б л и ц а 4 Таблица 5 2.11. Редактор Visual Basic Чтобы начать работу в редакторе Visual Basic, нужно его открыть. Во всех приложениях Microsoft Office, в том числе Excel, это можно сделать, нажав клавиши Alt + F11. Кроме того, открыть редактор VBA можно другим способом: в Microsoft Office 2003 в меню Сервис → Макрос выбрать Редактор Visual Basic, а в Microsoft Office 2010 – на вкладке ленты Разработчик выбрать пункт Visual Basic (если вкладка Разработчик на ленте отсутствует, то нужно установить соответствующий флажок в разделе Параметры Excel → Настройка ленты). Редактор VBA имеет стандартный вид для Windows-приложений (рис. 2): строка меню, панель инструментов и различные окна. Всего в редакторе VBA предусмотрено девять окон: – окно проводника проектов Project Explorer; – окно редактора программного кода Code; – окно свойств Properties; – окно формы UserForm; – панель инструментов управления Toolbox; – обозреватель проектов Object Browser; – окно контролируемых выражений Watch; – окно локальных переменных Locals; – окно Immediate для немедленного выполнения команд. Последние три окна используются при отладке программы. Любое из окон можно вывести на экран, выбрав в меню View одноименную команду. Если какое-либо окно не нужно, его можно закрыть, щелкнув левой кнопкой мыши по соответствующей кнопке в верхнем правом углу окна В окне проводника проектов представлено дерево компонентов приложения. Самый верхний уровень – это проект (Project), которому соответствует открытая книга Excel. Каждый проект является не только документом, содержащим данные, формулы, диаграммы и т. д., но и контейнером для хранения стандартных модулей и пользовательских форм, используемых для создания программ на языке VBA. В большинстве проектов используется только один стандартный модуль, куда записывается весь программный код. 2.12. Правила записи и ввода программ на VBA Программа на языке VBA записывается в стандартном модуле и оформляется в виде процедуры пользователя. Вставка нового модуля производится командой главного меню Insert → Module. Окно редактора кода Окно немедленного выполнения команд при отладке программы Окно проекта Окно свойств 21 Структура модуля следующая: Option Explicit 'Общие объявления модуля … ________________________________________________ Sub Процедура1() 'Операторы … End Sub ________________________________________________ Sub Процедура2() 'Операторы … End Sub Обычно в начале программы указывается ее название, затем идут разделы описания констант и переменных, после этого – текст собственно программы. Формат процедуры (программы) в общем случае следующий: Sub Имя_процедуры(список аргументов) 'Заголовок процедуры 'Объявления переменных и констант 'Последовательность инструкций (операторов) End Sub 'Конец процедуры Перед заголовком процедуры Sub могут быть ключевые слова, означающие область видимости данной процедуры: Public – открытая процедура, вызываемая из любой части программы; Private – локальная процедура, ее можно вызывать только из того модуля, в котором она расположена. Инструкции представляют собой последовательность логических строк. Каждая строка состоит из одного или нескольких операторов или процедур. Несколько операторов в одной строке друг от друга отделяются двоеточием. Ключевые слова должны записываться в точном соответствии с их синтаксисом. Рекомендуется использовать комментарии, поясняющие ход выполнения программы. Комментарии вводятся в программу с помощью оператора REM или одинарной кавычки (апострофа). Содержимое строки после оператора комментария транслятором игнорируется и не исполняется. Формат оператора: Rem Комментарий или 'Комментарий В процессе записи программы желательно применять структурирование текста, т. е. выделять блоки или фрагменты, применять отступы и т. д. При записи длинных строк для удобства чтения программы можно объединить несколько физических строк в одну логическую при помощи пробела и знака подчеркивания после него: MsgBox "Сумма равна " _ & Summa Такая запись равнозначна строке MsgBox "Сумма равна " & Summa При вводе ключевых слов VBA целесообразно применять режим дополнения слов: ввести несколько начальных букв и нажать Ctrl + Пробел. При этом произойдет автоматический ввод слова до конца (если оно единственное) или будет выдан перечень слов VBA, начинающихся на введенные буквы – тогда выбрать из этого списка нужное слово, затем нажать клавишу Tab (чтобы остаться в этой же строке) или Enter (для перехода на следующую строку). В одной программе на VBA при необходимости можно обращаться к различным рабочим листам Excel. Для установки нужного рабочего листа используется метод Seleсt (выбор) для объекта Worksheets (рабочий лист): Wоrkshееts("Имя листа").Select Пример: Workshеets("Лист1").Selесt 'Выбор рабочего листа с именем "Лист1". Работа с диапазоном ячеек таблицы выполняется с помощью объекта Range и соответствующего метода, например: Rangе("А:IV").Сlear 'Очистка текущего рабочего листа (столбцов с A по IV); Rаnge("А:F").Сlear 'Очистка столбцов с A по F; Range("3:8").Сlear 'Очистка строк с третьей по восьмую; Rаnge("A1:C5").Clеаr 'Очистка диапазона ячеек с A1 по C5; Rаnge("А1:C5").Dеlеtе 'Удаление ячеек с A1 по C5, включая все объекты в них. |