Министерство образования и науки Российской Федерации ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
В.В. Регеда, О.Н. Регеда
ОСНОВЫ ПРОГРАММИРОВАНИЯ НА VBA
Учебное пособие Рекомендовано в качестве учебного пособия УМО вузов РФ по образованию в области энергетики для студентов, обучающихся по специальности 180800 «Электрооборудование автомобилей и тракторов»
Пенза 2004
УДК 001.8 (083.95) А 22 Приводится обзор языков программирования. Изложены основные возможности языков программирования Turbo Basic и VBA для Word и Excel. Рассмотрены примеры создания с помощью VBA приложений с богатыми функциональными возможностями. Методические указания подготовлены кафедрой «Электротехники и транспортного электрооборудования» и предназначены для лабораторных и индивидуальных занятий студентов специальностей 180800 и 230700 по курсу «Информатика». Ил. 10, табл. 29, библиогр. 9 назв.
С о с т а в и т е л и: В. В. Регеда, О. Н. Регеда
Рецензент
А. А. Данилов, зам. директора ФГУ Пензенского центра метрологии и стандартизации, доктор технических наук
ВВЕДЕНИЕ Программа – упорядоченная последовательность команд, необходимых для управления компьютером (ПК). Эти команды поступают на процессор как совокупность нулей и единиц, т.е. числами. Последовательность чисел – машинный код. Алгоритм – это точно определенное описание способа решения задачи в виде конечной последовательности действий. Для представления алгоритма в виде, понятном ПК, служат языки программирования, с помощью которых пишется программа. Затем программа с помощью транслятора либо переводится в машинный код, либо исполняется. Языки программирования – это искусственные языки с ограниченным числом слов, значения которых понятно транслятору, и очень строгими правилами записи команд (операторов). При нарушении формы записи программы возникают синтаксические либо логические ошибки. Поиск ошибок – тестирование, процесс устранения ошибок – отладка. С помощью языков программирования создается текст программы. Чтобы получить работающую программу необходимо либо сразу перевести текст программы в машинный код (откомпилировать), либо сразу выполнять команды языка с помощью интерпретатора, который поочередно анализирует отдельные команды и затем сразу же выполняет их. После того как текущий оператор выполнен, интерпретатор перейдет к следующему. Такие программы работают медленно и не могут выполняться сами, отдельно от интерпретатора. Компиляторы же полностью обрабатывают текст программы, просматривают его в поисках синтаксических ошибок и автоматически переводят его в машинный код. В результате получается компактная, быстрая «исполняемая» программа. Однако компиляторы неэффективны при работе с данными сложной структуры. В реальных системах программирования перемещены обе эти технологии. 1. ЯЗЫКИ ПРОГРАММИРОВАНИЯ 1.1. Уровни и поколения языков программирования Язык программирования низкого уровня – это ассемблер, который просто представляет каждую команду машинного кода, но не в виде чисел, а с помощью символьных, условных обозначений (мнемоник). Конкретной
компьютерной архитектуре соответствует свой язык ассемблера. Чаще всего их используют для написания небольших системных приложений (драйверов устройств). Языки программирования высокого уровня значительно ближе и понятнее человеку, чем ПК. В настоящее время можно выделить 5 поколений языков программирования: 1) Начало 50-х годов – язык ассемблер. 2) Конец 50-х годов начало 60-х годов – символический ассемблер, в котором появилось понятие переменной. 3) В 60-х годах – универсальные языки программирования высокого уровня. 4) С начала 70-х годов до настоящего времени – проблемноориентированные языки, оперирующие понятиями узкой предметной области. 5) С середины 90-х годов – системы автоматического создания прикладных программ с помощью визуальных средств разработки без знания программирования. Инструкции вводятся в ПК в максимально наглядном и удобном виде, а затем автоматически формируется текст на универсальных языках программирования. 1.2. Технологии программирования Различают алгоритмическое, структурное, событийноориентированное и объектно-ориентированное программирование. Алгоритмические языки программирования представляют алгоритм в виде последовательности основных алгоритмических структур: – линейных; – ветвлящихся; – циклических. Алгоритм на выбранном языке программирования описывается с помощью команд описания данных, вычисления значений и управления последовательностью выполнения программы. Основные элементы алгоритмического языка программирования: 1) Переменные и константы. 2) Арифметические операции, используемые для создания арифметических выражений. 3) Логические операции и выражения.
4) Указатели. В некоторых языках программирования возможно явное указание адреса физической памяти как в ассемблере. 5) Сложные данные (списки, деревья, …). 6) Массивы. 7) Описания переменных. 8) Операторы присвоения. 9) Комментарии. 10) Условные операторы. 11) Операторы цикла. 12) Операторы ввода-вывода. Структурное программирование предполагает дополнительное использование подпрограмм, процедур и функций. Наличие подпрограмм позволяет вести проектирование и разработку приложений сверху-вниз – такой подход получил название – нисходящее проектирование. Сначала общая задача разбивается на глобальные подзадачи (модули). Затем каждый модуль разбивается на подпрограммы, которые, в свою очередь, могут содержать другие подпрограммы. Небольшие подпрограммы значительно проще отлаживать, а это повышает общую надежность всей программы. Кроме того, подпрограммы могут повторно использоваться, а это повышает производительность труда программистов. Развитием идея нисходящего проектирования стало событийноориентированное программирование. Оно возникло в связи с широким распространением визуальных систем типа Windows, идеология которых основана на событиях. Структура программы при событийноориентированном программировании следующая: главная часть программы – один бесконечный цикл, который опрашивает Windows, следя за появлением новых сообщений. При обнаружении сообщения вызывается подпрограмма, отвечающая за обработку соответствующего события, а цикл опроса продолжается до получения сообщения «конец работы». Применение структурного и событийно-ориентированного программирования существенно повысило производительность труда программистов. Но это уже был предел возможностей человека. В середине 80-х годов возникло понятие объекта и объектноориентированного программирования (ООП). ООП является развитием технологии структурного программирования, но имеет свои характерные черты. ООП по сути – это создание приложений из объектов как из «кирпичиков». Одни объекты приходится создавать полностью самостоятельно,
другие – можно позаимствовать в готовом виде из разнообразных библиотек. Важное место в технологии ООП занимает событие (щелчок клавиши мыши на объекте, нажатие определенной клавиши, открытие документа и т. д.). В качестве реакции на событие может вызываться определенная процедура, которая может изменять свойства объекта, вызывая его методы. В настоящее время в ООП обычно используется графический интерфейс, позволяющий визуализировать процесс программирования. Появилась возможность создавать объекты, задавать им свойства с помощью мыши. Наиболее распространенные системы программирования на ООП – Visual Basic и Borland Delphi. В среде MS Office в качестве объектов выступают: приложения, документы, окна и т.п. Каждый из этих объектов является исполнителем алгоритма. Команды объекту могут давать либо другие объекты, функционирующие в этой системе, либо пользователь персонального компьютера. Для того чтобы объект мог автоматически выполнять алгоритм в среде MS Office, необходимо записать его на том формальном языке, который этот объект «понимает». Таким языком в MS Office является Visual Basic for Application (VBA), который является ядром ООП языка программирования Visual Basic. 1.3. Обзор языков программирования высокого уровня FORTRAN (Фортран) – первый компилируемый язык (50-е годы), не очень удобный, но позволяет получить эффективный исполняемый код. Имеются большие наработки (библиотеки), используемые по сей день. Cobol (Кобол) – компилируемый язык, используется в экономике (начало 60-х годов). Отличается "многословностью". Реализованы мощные средства работы с большими объемами данных. Используется и сейчас. Algol (Алгол) – компилируемый язык (60-е годы) с большими возможностями, но у него сложная структура. Pascal (Паскаль) – (конец 70-х годов) похож на Algol, удобен для создания крупных проектов. Basic (Бейсик) – и интерпретатор и компилятор самый популярный в мире, прост в изучении. С (СИ) – планировался для замены ассемблера, чтобы иметь возможность создавать столь же эффективные и компактные программы и при этом не зависеть от конкретного типа процессора. Во многом похож на Pascal и имеет дополнительные средства для работы с памятью в виде ука-
зателей. В 70е годы на нем написано множество прикладных и системных программ. С++(СИ++) – это объектно-ориентированное применение языка СИ (80-е годы). Требует высокого уровня профессиональной подготовки. Java (Джава, Ява) – был создан в 90-е годы на основе С++ с целью упрощения. Его особенность: компиляция не в машинный код, а в платформенно-независимый байт-код, он может выполняться с помощью виртуальной Java – машины JVM, версии которой созданы сегодня для любых платформ. Этот язык сейчас второй по популярности после Бейсика. Используется в основном для поддержки всевозможных мобимых устройств и микрокомпьютеров, встраиваемых в бытовую технику (технология Jini), а также для создания платформенно-независимых программных модулей, способных работать на серверах в глобальных и локальных сетях. Языки программирования баз данных предназначены для создания записей, имеющих единообразную структуру, с которыми выполняются однообразные операции. Для эффективной обработки групп записей в базах данных используют структурированный язык запросов SQL. Помимо этого языка системы управления базами банных СУБД имеют еще и свой уникальный язык, ориентированный на особенности этой системы. Языки программирования для Интернета обладают характерными особенностями: языки являются интерпретаторами, которые распространяются бесплатно, а сами программы распространяются в исходных текстах. Такие языки называются скрипт–языками. Наиболее популярные из них приведены ниже. HTML – язык для оформления Web-документов. Он очень прост и содержит элементарные команды. Форматирование текста, добавление рисунков, организации ссылок и таблиц. Perl (80-е годы) – это мощное средство эффективной обработки больших текстовых файлов, генерации текстовых отчетов и для управления задачами. Он превосходит С. Tcl/Tk – (80-е годы) направлен на автоматизацию рутинных процессов, не зависит от типа системы и позволяет создать программы с графическим интерфейсом. VRML – (94 год) предназначен для организации виртуальных трехмерных интерфейсов. Язык графического моделирования UML – позволяет изобразить с помощью мышки таблицы баз данных, объекты программ и взаимосвязи между ними в системе, имеющей генератор исходных текстов программ на основе созданной модели (CASE-системы).
Среди менее распространенных языков программирования отметим еще ряд языков. PL/1 – (64 год) значительно более мощное средство, чем Pasсаl и С, но его достоинства не сразу были оценены. Например, у него существует уникальная возможность указания точности вычислений. Используется до сих пор Smalltalk (Смолток) – (80-е годы) отличается тем, что содержит только объекты и сообщения. LISP (Лисп) – (60-е годы). Интерпретируемый язык программирования. Оперирует структурой данных в виде списка, позволяет организовать эффективную обработку больших объемов текстовой информации. Системы программирования содержат разнообразные средства создания программ: – текстовый редактор; – компилятор; – редактор связей; – библиотека функций; – отладчик программы. Из универсальных языков программирования сегодня наиболее популярны следующие: Basic – для освоения требует начальной подготовки (школы); Pascal – для освоения требует специальной подготовки; С ++ – для освоения требует профессиональной подготовки. Для каждого из этих зыков сегодня имеется немало систем программирования, ориентированных на разные ПК и операционные системы. Наиболее популярные системы проектирования программ для Windows для языков программирования – это – Microsoft Visual Basic для Basic; – Borland Delphi для Pascal$ – Borland C++ Bulider для Cu++$ – Symantec Cafе для Java.
2. TURBO BASIC 2.1. Основные элементы языка программирования TURBO BASIC Программа, написанная в среде TURBO BASIC (TB), представляет собой совокупность программных строк, имеющих следующий формат: [номер строки] оператор [:оператор] ... [‘комментарий] или метка: или $метаоператор Квадратные скобки при описании формата всех команд здесь и далее по тексту описания данных лабораторных работ обозначают, что заключенная в них часть конструкции является необязательной, но если она есть, то присутствует без самих квадратных скобок. Таким образом, нумерация строк в TB не требуется, хотя при необходимости она возможна. Операторы представляют собой действия, выполняемые программой. В строке может быть один или несколько операторов, разделенных двоеточием. Длина программной строки в TB может быть до 249 символов. Если оператор не помещается в одной экранной строке, то его можно разбить на несколько экранных строк, поставив в конце строки символ подчеркивания ( _ ). При этом следующая строка будет рассматриваться как продолжение предыдущей. Номер строки − это целое десятичное число от 0 до 65535. Номера – необязательно использовать в программе, но если они есть, то используются для идентификации (распознавания) строк программы. Никаких ограничений, за исключением того, что все строки должны иметь разные номера, на взаимное расположение номеров строк не накладывается. К любой строке может быть добавлен неисполняемый оператор − комментарий, отделенный от последнего оператора знаком апострофа (‘) или оператором REM. Комментарий может быть как первым, так и не первым в строке. Метка должна быть в строке без операторов (хотя комментарий в этой строке может быть). Она служит для идентификации оператора, следующего непосредственно за ней. Метка должна начинаться с буквы и может содержать произвольное число букв и цифр. Заглавные и строчные буквы в метке не различаются. За меткой должно следовать двоеточие.
Основными элементами языка TB являются символы, с помощью которых записываются константы, переменные, массивы, выражения, встроенные функции и операторы. При написании программы можно использовать символы из определенного набора, называемого алфавитом языка. Он включает в себя буквы от A до Z и от a до z, цифры от 0 до 9, пробел, а также специальные символы: = (знак равенства), + (плюс), – (минус), * (звездочка, знак умножения), / (слэш, знак деления), \ (знак целочисленного деления), ^ (крышка, знак возведения в степень), % (знак процента), & (амперсенд), ! (восклицательный знак), # (знак номера), $ (знак доллара), ( ) (круглые скобки), [ ] (квадратные скобки), , (запятая), . (точка), ‘ (апостроф), ; (точка с запятой), : (двоеточие), ? (восклицательный знак), < (знак больше), > (знак меньше), “ (кавычки), _ (подчеркивание). Кроме того, в комментариях и символьных константах могут использоваться заглавные и строчные буквы кириллицы (русские буквы). Определенное множество слов в TB зарезервировано, т.е. не может использоваться в программах в качестве имен переменных. TB поддерживает несколько типов числовых и символьных данных. К числовым данным относятся следующие типы: целое (число без десятичной точки в диапазоне от - 32768 до 32767); длинное целое (в диапазоне от -2147483648 до 2147483647); вещественное (число с десятичной точкой в 38 38 диапазоне от 10- до 10 , однако точность представления его ограничивается 6 значащими цифрами); вещественное двойной точности (число с де308 сятичной точкой в диапазоне от 10-308 до 10 и может иметь до 16 значащих цифр). Константы − это элементы языка, значения которых определены и неизменны. Они бывают числовыми и символьными. Числовые константы, в свою очередь, могут быть целыми и вещественными. Они используют цифры, знак минус и необязательный знак плюс. Целые числа, например число 257, допускается записывать и в двоичном (&B100000001), восьмеричном (&401) и в шестнадцатеричном (&H101) представлении. Вещественные константы можно задавать как в десятичном (0.000235988), так и в экспоненциальном (235.988E-6) представлении. Символьные константы представляют собой набор символов алфавита языка, заключенных в кавычки (“Среднее значение”, “263”). Переменные − это элементы языка, значения которых заранее не определены и могут меняться в процессе выполнения программы. Идентифицируются переменные именами. В процессе выполнения программы пе-
ременным можно присваивать значения констант, либо других переменных, либо выражений. Переменные разделяются на числовые и символьные (строковые). Числовой переменной можно присвоить значение любого числа, а символьной − значение строки символов. Имя переменной должно начинаться с буквы, хотя и может содержать цифры. Заглавные и строчные буквы не различаются. Зарезервированные слова не могут применяться в качестве имен переменных. Кроме того, имя переменной не может начинаться с букв FN (это начало имени пользовательской функции). Как и константы, переменные могут принадлежать к одному из пяти типов: целому, длинному целому, вещественному, вещественному двойной точности, символьному. Имя переменной определяет ее тип. Имя символьной переменной должно заканчиваться знаком $, например F$, МАХ$. В конце имени целой переменной должен стоять знак % (A%=15). В длинной целой используется амперсенд & (a&=7600&). Вещественная переменная может заканчиваться знаком ! (a!=15.1). Вещественная переменная двойной точности должна заканчиваться знаком # (a#=15.14578943). Если в имени переменной не используется никакой из приведенных здесь знаков, то переменная имеет вещественный тип (x=1.7, y=1.0). Массив − это последовательность данных одинакового типа, имеющих общее имя. Элемент массива является отдельной переменной. Он идентифицируется путем указания в скобках после имени массива номера (индекса) элемента. Выражения в TB состоят из элементов и операций, связывающих их. Выражение может иметь целый и символьный тип. Элементами выражений могут быть константы, переменные и функции. Функции в TB реализуют стандартные математические функции и иные стандартные процедуры. В TB используются встроенные функции и операторы. Элементы числовых выражений могут связываться между собой с помощью арифметических и логических операций, приведенных в таблице 2.1 в порядке убывания их приоритета (устанавливающего порядок выполнения операций в выражении).
Таблица 2.1 Обозначение операции ^ -
Наименование операции
Возведение в степень Унитарная операция минус (для обозначения отрицательных чисел или изменения знака) * , / Умножение, деление \ Деление нацело MOD Вычисление остатка от деления (взятие по модулю) + , Сложение, вычитание <, <=, Операции сравнения =, >=, >, <> NOT Логическое НЕ AND Логическое И OR , XOR Логическое ИЛИ , исключающее ИЛИ EQV Логическая эквивалентность IMP Логическая импликация Операции с одинаковым приоритетом выполняются в порядке просмотра выражения слева направо. Для изменения порядка выполнения операций в выражении можно использовать скобки. Все арифметические операции имеют традиционную форму записи для математики, а операция 31 MOD 4 обозначает остаток от целочисленного деления 31 на 4 и дает в результате число 3. Результатом операции сравнения является логическая истина, представляемая числом -1, или логическая ложь, представляемая 0. 2.2. Среда программирования TURBO BASIC Запуск среды TB осуществляется путем запуска файла tb.exe. При этом на экране монитора появляется диалоговая многооконная среда (рис. 2.1). Конфигурация окон может отличаться от показанной на рисунке, но максимальное число окон, видимых в главном меню, может быть четыре: окно редактирования (Edit), окно трассировки (Trace), окно выполнения (Run), окно сообщений (Massage). Кроме того, внизу экрана имеется строка функциональных клавиш, а в верхней части экрана – строка главного меню.
Рис. 2.1
Окно редактирования позволяет создавать и редактировать любые программы. Окно трассировки обеспечивает последовательное выполнение каждой программной строки, метки, имени процедуры и функции по мере прогона программы. В окне сообщений отображается статистика компилирования и другие сообщения, в том числе и сообщения об ошибках. В окне прогона отображаются результаты работы программы. Размеры и конфигурация окон могут быть изменены. Нажатие на клавишу Esc переводит курсор из окон редактирования и выполнения в главное меню. Выбор команд (переключение режимов) в главном меню осуществляется или нажатием клавиши, соответствующей первой букве команд в главном меню, или подводом с помощью клавиш управления курсором светящегося окна (курсора) к соответствующему элементу меню и нажатием клавиши Enter. В нижней строке экрана находится подсказка о назначении некоторых клавиш в TB. Результатом выбора разделов меню Edit, Run и Compile является появление соответствующего окна, а для всех остальных разделов в главном меню − появление соответствующего ниспадающего меню. На рис. 2.2 показаны команды, содержащиеся в меню File. Команды в ниспадающем меню выбираются так же, как и в главном. Для возвращения в главное меню из ниспадающего меню необходимо нажать клавишу Esc. Опция Load меню File служит для выбора файла, загружаемого в ТВ. При выборе этой опции появляется новое окно, в котором нужно ввести или имя файла, или "маску". По умолчанию в окне задана маска *.bas, которая означает все файлы с расширением .bas. После ввода маски и нажатия на клавишу Enter появляется очередное всплывающее окно,
на котором указаны все файлы текущего каталога, соответствующие маске. Выбор файлов осуществляется с помощью клавиш управления курсором и клавиш Home, End, PgUp, PgDn , а для завершения команды необходимо нажать на клавишу Enter. В результате происходит переход в режим редактирования выбранного файла.
Рис.2.2
Опция Change dir меню File используется для смены текущего каталога. Для сохранения текущей программы, находящейся в окне редактирования, в виде текстового файла с новым именем необходимо выбрать опцию File→Write to и нажать на клавишу Enter. В появившемся окне ввести с клавиатуры новое имя файла и нажать на клавишу Enter. Для сохранения последней версии поименованной программы можно воспользоваться опцией File→Save, которая сохраняет текущий файл в текущем каталоге с именем по умолчанию, при этом предыдущая версия этого файла получает расширение .bak и также сохраняется в этом каталоге. Опция File→Quit осуществляет выход из TB (такой же результат получается при одновременном нажатии клавиш Alt и X). Опция File→New инициализирует режим редактирования нового файла, имеющего по умолчанию имя noname.bas, с удалением предыдущего содержимого окна редактирования и из оперативной памяти. Команда Edit главного меню осуществляется вход во встроенный редактор, предназначенный для создания и редактирования исходных текстов программ (листингов). В окне редактирования верхней является строка состояния, в ней указано имя редактируемого файла, номер строки (Line) и позиция (Col) экрана, в которой расположен курсор. При вклю-
ченном режиме вставки символа в строке состояния высвечивается слово Insert. В этом случае вводимый символ вставляется перед курсором, в противном случае вводимый символ заменяет тот символ, под которым находится курсор. Переход на новую строку с помощью клавиши Enter возможен только при включенном режиме вставки, переключение которого выполняется нажатием клавиши Ins. 2.3. Линейное программирование в TURBO BASIC 1)
Набрать с помощью клавиатуры листинг программы на TB:
CLS : X=5 PRINT Включите принтер, заправьте в него бумагу” INPUT " и нажмите клавишу Enter"; d PRINT "Введите дату выполнения работы” INPUT " и нажмите клавишу Enter"; d LPRINT "Работа выполнена ";d INPUT "Введите фамилию 1 студента";A$ LPRINT “студентом кафедры ПРИБОРОСТРОЕНИЕ ”,A$, END Программа, подобная набранной, в которой после завершения работы каждого оператора управление передается последующему, носит линейный характер. Оператор CLS очищает экран и устанавливает курсор в левый верхний угол (строка 1, позиция 1). Второй оператор присваивает переменной X значение, равное 5. Так как он находится в той же строке, что и первый, то отделяется от него двоеточием. Оператор ввода информации INPUT позволяет присваивать переменным, стоящим после необязательной подсказки в кавычках, числовые или символьные значения, в соответствии с типом этой переменной. Так переменная A$ символьная, поэтому она принимает значение, равное цепочке символов введенных с клавиатуры (например, Simonova), а переменная d числовая и ей присваивается значение даты выполнения работы. Когда начинает выполняться этот оператор, то программа переходит в режим ожидания ввода с клавиатуры. После ввода требуемого значения необходимо нажать клавишу Enter и программа продолжит выполняться. Оператор LPRINT выводит информацию на принтер. Если после него в кавычках следует любой текст, то на принтер выводится этот текст без кавычек, если же стоит имя символьной или числовой переменной (напри-
мер, A$ или d) − то значения этих переменных (например, Simonova или 22.03.97). Оператор END означает конец выполнения программы. При работе в режиме редактирования программы наиболее часто применяемыми являются следующие клавиатурные команды, приведенные ниже. Причем запись Ctrl+Q,R значит, что сначала нажимается клавиша Ctrl, а затем последовательно, не отпуская её, клавиши Q и R. Команды перемещения курсора: на символ влево
−→
на строку вверх
−↑
на символ вправо
−←
−↓ − PgUp − Home − PgDn − End − Ctrl+Q,R − Ctrl+C Команды включения и удаления: вставка строки − Ctrl+N удаление строки − Ctrl+Y удаление части строки от курсора до конца − Ctrl+Q,Y удаление символа над курсором − Del удаление символа слева от курсора − Backspace Блоковые команды: отметка начала блока − Ctrl+K,B отметка конца блока − Ctrl+K,K чтeние блока из файла − Ctrl+K,R копирование блока − Ctrl+K,C удаление блока − Ctrl+K,Y перемещение блока − Ctrl+K,V отмена выделения блока − Ctrl+K,H запись блока в файл − Ctrl+K+W на строку вниз на страницу вверх в начало строки на страницу вниз конец строки в начало файла конец файла
2) Скопировать вторую и третью от конца строки программы перед командой END, используя блоковые команды. Для этого подведите курсор к началу третьей от конца строки в программе и нажмите клавиши Ctrl+K,B. Переведите курсор с помощью клавиши ↓ в начало предпоследней строки, а затем с помощью клавиши End в конец этой строки и нажмите клавиши Ctrl+K,K. Включите режим вставки (нажата клавиша Ins), если он отключен, а затем на клавиши Enter и Home, если курсор не находится на первой позиции строки экрана. Скопируйте выделенный блок, нажав клавиши Ctrl+K,C. Отмените выделение блока, нажав клавиши Ctrl+K,H. 3) Изменить во вновь вставленной строке с оператором INPUT текст символьной константы, введя вместо цифры 1 цифру 2. 4) Дописать в программу строку для вычисления значения арифметического выражения, приведенного в таблице 2.2 для варианта, заданного преподавателем. Предусмотреть вывод на принтер полученного значения с помощью оператора PRINT арифметическое выражение. Таблица 2.2. № Арифметическое № Арифметическое выражение варианта варианта выражение X−3 3 2 cos 3X+10 1 5 (sin X) + 3cos (X ) 6X 2 1 3 2tg (X) + 2 6 tg 3 X +(3 +⎜X ⎜) X+4 3 3 2 3 7 sin 3X + X – 13 cos(X ) – 3X
4
2
(tg X2– X − 2 )
8
4x +3⎜X ⎜ x −1
5) Сохранить набранную программу, нажав на клавишу F2. 6) Для выполнения написанной программы нажать клавишу Esc и активизируйте команду меню Run. Сначала ваша программа переводится в машинные коды и на экране появится окно компиляции Message, а затем, если в программе нет синтаксических ошибок, на экране появляется окно выполнения (Run). В нашей программе строка с номером 2 содержит синтаксическую ошибку: символьная константа не имеет открывающей кавычки. Поэтому программа перестанет выполняться и в первой строке окна выполнения появится сообщение об ошибке: Error 471: Unknown identifier/syntax error. При этом курсор стоит в позиции ошибки, а для ее исправления в данном случае необходимо добавить недостающую кавычку.
7) Нажать клавишу Esc, повторно запустите программу на выполнение. В результате работы программы на принтере должны быть распечатаны четыре строки, содержащие информацию о том, когда и кем выполнена лабораторная работа, а также результат вычисления значения арифметического выражения. 8) Откомпилировать, созданную программу с помощью команды меню Compile. В результате в рабочем каталоге создается файл с именем pr1.exe. Во время компиляции в окне сообщений появляется информация о количестве строк исходного текста и операторов. Если обнаруживается ошибка, то в строке состояния окна Edit выдается сообщение о ней, и курсор помещается в том месте, где эта ошибка обнаружена. 9) Выйти из среды TB, используя опцию Quit команды File. Найти файл pr1.exe и посмотреть его содержимое. Обратить внимание на то, чем он отличается от файла pr1.bas. Запустить его на исполнение из среды Norton Commander, подведя курсор к имени файла и нажав на клавишу Enter. Обратить внимание, что программа выполняется быстрее, чем из среды TB. 2.4. Основные операторы ввода в TURBO BASIC
В данном пособии при описании формата операторов применены следующие правила: − имя оператора указывается заглавными буквами латинского алфавита, хотя при вводе с клавиатуры его можно набираться любым сочетанием прописных и строчных букв; − после имени оператора указываются его возможные параметры, причем, если этот параметр необязателен, то он указывается в квадратных скобках (однако, если параметр необходим, то он вводится без самих квадратных скобок); − после имени оператора должен стоять пробел за исключением случая, когда параметр начинается с кавычек; − в фигурных скобках через разделитель ⏐ указываются возможные варианты выполнения оператора. Операторы ввода предназначены для присвоения значения переменным, используемым в программах. 2.4.1. Оператор присваивания LET имеет следующий формат: [LET] a=b
где a − имя переменной (числовой, символьной или индексной), которой присваивается значение (оно должно находиться слева от знака =);
b − выражение, значение которого присваивается переменной a, причем тип выражения должен соответствовать типу переменной (для числовой переменной числовое выражение, а для символьной − символьное). Слово LET в программе можно не использовать: a=b+2*c 2.4.2. Оператор обмена SWAP имеет следующий формат: SWAP b1,b2
где b1, b2 − имена переменных (числовых, символьных или индексных), которые обмениваются значениями, причем они должны быть одного типа. При выполнении оператора значение переменной b1 присваивается переменной b2 , а значение b2 − переменной b1. 2.4.3. Оператор CLEAR "очищает" значения всех переменных, присваивая числовым переменным значение 0, а символьным − значение пустой стоки. 2.4.4. Оператор ручного ввода INPUT имеет следующий формат: INPUT [;] [подсказка] {; ⏐ ,} список
где "подсказка" − строка символов, используемая как подсказка пользователю; список − последовательность, разделенных запятыми числовых, символьных или индексных переменных. По оператору INPUT программа приостанавливается в ожидании ввода с клавиатуры, предварительно выдав на экран вопросительный знак, которому может предшествовать подсказка (если она указана). Запятая вместо точки с запятой после подсказки подавляет вывод на экран вопросительного знака. Точка с запятой после INPUT приведет к тому, что по нажатию клавиши Enter не произойдет переход к следующей строке экрана, т.е. курсор останется в той же строке. Вводимые данные разделяются (при вводе) запятыми, если их больше одного. Количество и тип данных должны соответствовать списку переменных оператора. Пример: INPUT "Введите значение а =";a s=a^2+2/a В этом примере вычисляется значение s арифметического выражения для значения переменной a , вводимого с клавиатуры.
Оператор INPUT целесообразно использовать для присвоения значений тем переменным, значения которых не известны заранее. Иначе пришлось бы каждый раз редактировать программу, для изменения значения переменной. 2.4.5. Оператор DATA создает в памяти таблицу констант, которые затем могут присваиваться переменным с помощью оператора READ, и имеет следующий формат: DATA
константа[,константа] . . .
где константа − это любая числовая или символьная константа. Числовые константы могут быть целые или вещественные, в десятичном представлении или в формате с плавающей точкой. Символьную константу необязательно заключать в кавычки, если только она не содержит запятых, двоеточий и значимых пробелов или в начале, или в конце. Символьные и числовые константы могут быть произвольно перемешаны. Например, DATA 22,"Пенза, ул. Красная", Москва, 22.33 В программе допустимо любое число операторов DATA, стоящих в любом месте. Все данные, объявляемые операторами DATA, последовательно объединяются в одну непрерывную таблицу. 2.4.6. Оператор READ имеет следующий формат: READ переменная [, переменная] . . .
где переменная − числовая, символьная или индексная переменная. Оператор READ используется только совместно с оператором DATA. Он читает данные, перечисленные в операторе DATA, и присваивает их значения переменным из указанного в нем списка. Типы переменных должны соответствовать типам данных в DATA. Иначе при выполнении программы выдается сообщение об ошибке номер 2. Несколько операторов READ могут читать данные из одного оператора DATA, выбирая их один за другим. Если количество переменных в операторах READ больше, чем количество данных в операторах DATA, то возникает сообщение об ошибке номер 4. В то же время, обязательно использоваться могут и не все данные из операторов DATA. Пример: DATA 1, 33.4, 66, 44 READ a,b,c В результате работы программы переменным присвоятся следующие значения: а=1, b=33.4, с=66.
Чтобы повторно прочитать данные из оператора DATA (снова вернуться к началу последовательности), применяют оператор RESTORE, имеющий следующий формат : RESTORE [метка]
где метка − идентификатора оператора DATA. Если метка не указана, то имеется в виду первый из операторов DATA в программе. После выполнения RESTORE оператор READ может снова читать данные из этого (и следующих) операторов DATA. Пример: DATA 21, 3.3,-44 :READ a,b REM В результате RESTORE :READ с REM а=21, b=3.3, с=21 2.5. Основные операторы вывода в TURBO BASIC
Операторы вывода TB предназначены для вывода данных на экран, принтер и в файл. 2.5.1. Оператор PRINT используется для вывода информации на экран монитора, и имеет следующий формат: {PRINT⏐?} [список выражений ]
где список выражений − список числовых и/или символьных выражений, разделенных запятыми, пробелами или точками с запятой. Символьные константы должны быть в кавычках. Список значений выражений выводится на экран; если этот список пустой и оператор не заканчивается точкой с запятой или запятой, то курсор переходит на следующую строку на экране. Оператор PRINT без параметров выводит на экран монитора пустую строку. Знаки пунктуации, разделяющие выражения в списке выражений или стоящие в конце оператора PRINT, используются для определения места в строке экрана, куда будут выводиться значения этих выражений. Запятая в качестве разделителя в списке приводит к переходу в начало новой зоны (строка экрана делится на зоны по 14 позиций). Точка с запятой или пробел (пробелы) в качестве разделителя в списке приводит к выводу очередного значения непосредственно за предыдущим через пробел. Если предыдущий оператор PRINT оканчивается пробелом, то последующий оператор PRINT выводит значения с начала следующей строки.
Пример: a= -5 REM В результате на экране выведутся значения: PRINT "1"; "2" "3", "4"", "5" REM 1 2 3 4 5 PRINT a ; : PRINT "y=" ; a+10 REM -5 y= 5 За выводом числа всегда следует пробел, положительному числу всегда предшествует пробел, а отрицательному − знак минуса. 2.5.2. Оператор PRINT USING служит для вывода данных на экран монитора в указанном формате и имеет формат: PRINT USING v$ ; список
где v$ − символьная константа или переменная, определяющая формат вывода; список − последовательность разделенных запятыми или точками с запятой числовых или символьных выражений, значения которых выводятся. Рассмотрим некоторые значения константы v$ для вывода чисел: # − представляет позицию десятичной цифры; содержит цифру или пробел (слева от цифр); . − определяет десятичную точку, справа от этой позиции # может представлять только цифру; + (в начале или конце строки формата) − указывает, что знак числа (+ или -) выводится в эту позицию; − (в начале или конце строки формата) − указывает, что знак отрицательного числа (или пробел) выводится в эту позицию; ^^^^ (за цифровыми позициями) − указывают на экспоненциальный формат и заполняются знаками E±nn (для числа с простой точностью), где nn − порядок числа . Пример: X= 15.44378 PRINT USING "###.##";x, :PRINT USING "+##.####";x, PRINT USING "-##.#";x, :PRINT USING "#.#^^^^";x x= -15.44378: PRINT USING "###.##";x, :PRINT USING "+##.####";x, PRINT USING "-##.#";x, :PRINT USING "+#.#^^^^";x PRINT USING "#.#";x В результате выполнения этой программы получим на экране 15.44 +15.4438 15.4 1.5Е+02
-15.44 -15.4438 -15.4 -1.5E+02 %-15.443799 Если вводимое число не соответствует формату, он расширяется влево цифровыми позициями и дополняется слева знаком %. Если такое случится, то необходимо отредактировать формат вывода и вновь запустить программу. 2.5.3. Оператор LPRINT (LPRINT USING) в отличие от PRINT (PRINT USING) выводит информацию не на экран, а на принтер. Как правило, на момент отладки программы используют оператор PRINT (PRINT USING), а затем его он заменяется на оператор LPRINT (LPRINT USING). 2.5.4. Функция TAB (n) используется только в операторах PRINT и LPRINT. Её действие состоит в переходе на позицию n (n − целое выражение со значением от 1 до 225) на устройстве вывода, если же текущая позиция больше n, то осуществляется переход на позицию n в следующей строке. Функцию TAB f(n)”*” часто используют в программах для упрощенного построения графиков функциональных зависимостей f(n). Где положения звездочки по горизонтали соответствуют значениям функции f(n) для текущих значений n. В отличии от привычного графика ось у расположена горизонтально слева направо, а ось Х вертикально сверху вниз. Составить программу, для вычисления и вывода на экран монитора 2 значений функции Y= 50/X и соответствующих ей значений аргумента в виде таблицы для х = 1, 2, ..., 8. Построить на экране монитора график изменения этой функции для тех же значений аргумента. 2.6. Разветвляющиеся программы в TURBO BASIC
Часто в программах в зависимости от выполнения некоторого логического условия необходимо организовать вычисление либо по одним, либо по другим формулам, т.е. вычислительный процесс должен идти по одной или по другой ветви. Подобные программы называются разветвляющимися. Пример. Составить программу для вычисления значения ступенчатой функции Z для любых значений X, a, b. Вывести результат в документ:
⎧0.5X 2 + 1, при X≤a ⎪ , при a < X < b Z = ⎨cos X ⎪tg 2 X X≥b , при ⎩
Здесь вычислительный процесс имеет три ветви. Схема этого алгоритма представлена на рис. 2.2.
Рис. 2.2 После присвоения значений переменным X, a и b в зависимости от истинности одного из условий, проверяемых в условном символе 3, значение функции Z будет вычисляться по одному из трех выражений, а затем произойдет переход в общую ветвь к символу печати 7. После составления схемы алгоритма можно переходить к написанию программы в соответствии со схемой. При этом в зависимости от используемых операторов программы будут несколько отличаться друг от друга. Ознакомиться с условными операторами языка TB, используемыми при составлении разветвляющихся программ: строчным оператором IF, IF-блоком и оператором SELECT. Составным элементом этих конструкций является условие, представляемое целым выражением. Равенство нулю выражения воспринимается как логическая ложь, неравенство − как логическая истина. Оператор безусловного перехода GOTO метка вызывает переход к оператору с указанной меткой. 2.6.1. Строчный оператор IF имеет следующий формат: IF x [ , ] THEN операторы [ ELSE
операторы ]
где x − целое выражение; операторы − оператор или последовательность разделенных двоеточием выполняемых операторов. Если значение x истинно (не равно 0), то выполняются операторы, следующие за THEN, после чего выполнение строчного IF прекращается и программа переходит к следующему оператору. Если x ложно, (равно 0),
то операторы за THEN пропускаются и выполняются операторы за ELSE, если они есть, затем программа переходит к следующему оператору. Оператор IF и все связанные с ним операторы, включая следующие за ELSE, должны быть в одной программной строке. Если же целесообразно разместить этот оператор в нескольких экранных строках, то в конце каждой экранной строки нужно поместить символ подчеркивания ( _ ). В этом случае следующая строка будет рассматриваться как продолжение предыдущей. Допускается вложенность операторов IF, ограниченная только одной строкой; при этом ELSE соответствует последнему не закрытому оператору THEN. Оператор IF a=b THEN IF b=c THEN PRINT "A=C" ELSE PRINT "A< > C" будет печатать "A < > C" при A= B и B< >C. Например, программа, реализующая алгоритм, приведенный на рис. 2.2., с помощью строчного оператора IF , будет иметь следующий вид: INPUT "Введите значения X, a, b "; X,a,b IF x<=a THEN z=0.5*x^2+1 ELSE IF x>=b THEN_ z=(tan(x))^2 ELSE z= cos(x) LPRINT Z END 2.6.2. Блочный оператор IF располагается в нескольких строках и имеет следующий формат: IF x [ , ] THEN . . . операторы [ELSEIF x [ , ] THEN . . . операторы ] . . . [ELSE . . . операторы ] END IF
где x − целое выражение. При выполнении этого блока сначала проверяется истинность выражения в операторе IF. Если оно ложно, то по порядку проверяется выражения в каждом из следующих за ним операторов ELSEIF (их может быть сколько угодно). Как только находится истинное выражение, выполняются
операторы, следующие за соответствующим оператором THEN, после чего выполнение блока IF прекращается и управление передается на оператор, следующий непосредственно за завершающим END IF. Если никакое из проверенных условий ELSEIF не справедливо, то выполняются операторы за ELSE, если они есть. После чего выполнение блока IF прекращается. В первой строке после ключевого слова THEN не должно быть больше ничего (так компилятор отличает IF-блок от сточного оператора IF). Кроме того, ничего не должно быть в строке вслед за словом ELSE. IF-блок может быть вложенным, т.е. любой из операторов, следующий за всяким THEN или ELSE, может содержать другой IF-блок. IF-блок должен завершаться ключевым словом END IF, с пробелом. Программа, реализующая алгоритм, приведенный на Рис. 2.2, с помощью IF-блока, будет иметь следующий вид: INPUT "Введите значение a,b,X "; a,b,x IF x<=a THEN Z=0.5*X^2+1 ELSEIF x>a AND x
(знак равенства при этом может быть упущен), неравенство, соотношение "больше чем" и "меньше чем", принадлежность диапазону ("от ... до ..."). Несколько сравнений в одном CASE (список сравнений) связаны между собой операцией логического "ИЛИ". Например, CASE
=b Z=(TAN(X))^2 CASE ELSE Z=COS(X) END SELECT LPRINT "Z=";Z : END 2.6.4. Составить три варианта программы (с использованием строчного IF, блочного IF и оператора SELECT) для определения среднего бала C при сдаче вступительных экзаменов в ВУЗ по результатам трех экзаменов. В зависимости от полученного значения C, приведенного в табл. 2.3, вывести на монитор соответствующую выписку из протокола приемной комиссии.
Таблица 2.3. Выписка из протокола приёмной комиссии
Значение С
− − − −
если С<9 если 9<= C <12 если 11< C=14 если C=15
Вы набрали Вы набрали Вы набрали Вы набрали
... баллов ... баллов ... баллов ... баллов
неудовлетворительно удовлетворительно хорошо отлично
2.6.5. Составить программу для заданного преподавателем варианта задания, приведенного в Табл. 2.4. В программе предусмотреть ввод с клавиатуры трех чисел, а также вывод на экран монитора и на принтер введенных значений и результата работы программы с точностью 2 знака после запятой с пояснительным текстом (например “Наименьшее из трех чисел равно 6.93”). Таблица 2.4. Программа должна вывести на экран монитора и на принтер наименьшее из трех чисел наибольшее из трех чисел числа в порядке возрастания числа в порядке убывания
В программе использовать оператор IF строчный IF блочный 1 2 4 5 7 8 10 11
SELECT
3 6 9 12
2.7. Циклические программы в TURBO BASIC.
Часто при составлении программ приходится повторять некоторую часть программы несколько раз. Например, вычислить и вывести на экран значения функции у=X2 для значения аргумента X, изменяющегося в интервале от 0 до 20 с шагом 2. Схема алгоритма такой программы в общем случае приведена на рис. 2.3. Первый и последний элементы схемы алгоритма обозначают начало и конец цикла. В элементе 1 задаются пределы изменения значений переменной цикла (0, 20) и шаг, с которым она изменяется (2). Тело цикла, в данном случае, составляют элементы 2 и 3, где вычисляются текущие значения Y, а затем выводятся на экран монитора. В элементе 4 к текущему значению переменной цикла прибавляется шаг, равный 2, и если полученное значение меньше или равно конечного значения переменной цикла (20), то цикл повторяется еще раз для второго значения X, то есть выпол-
няется тело цикла. Цикл повторяется до тех пор, пока текущее значение переменной цикла не станет больше 20. Обратите внимание на то, что при выходе из цикла значение X=22 и при необходимости это значение может быть использовано в дальнейшей программе. Иногда внутри одного цикла могут располагаться другие циклы, так называемые вложенные циклы. Однако циклы не могут пересекаться, т.е. все внутренние циклы должны быть закончены до того, как закончатся внешние.
Рис. 2.3 2.7.1. Оператор FOR/NEXT используется в программе с заданным числом повторений и имеет следующий формат: FOR переменная = x TO y [STEP z] . . . операторы NEXT [переменная [ ,переменная] . . . ]
где переменная − числовая переменная, используемая как счетчик повторов; x, y, z − числовые выражения, определяющие соответственно начальное, конечное значение и приращение счетчика. Конструкция выполняет операторы, следующие за FOR, пока в программе не встретится оператор NEXT. Тогда к текущему значению переменной цикла х прибавляется значение шага z (по умолчанию 1) и полученное значение сравнивается с конечным значением y. Если значение переменной больше y, выполняется оператор, следующий за NEXT, иначе управление снова передается к оператору, находящемуся за FOR. Например, программа, реализующая алгоритм, приведенный на рис.2.3, с помощью оператора FOR/NEXT имеет вид: FOR x=0 TO 20 STEP 2 Y=SIN(X) PRINT Y NEXT X Допускается использование вложенных циклов. Рассмотрим пример программы, вычисляющей и выводящей на экран монитора значения
функции
Α=
n
∏
x2 + k 2
при x, изменяющегося от 0 до 5 с шагом 0.5 и для
k =1
любого значения n: INPUT “Введите значение n”; n FOR x=0 TO 5 STEP 0.5 A=1 FOR k=1 TO n A=A*SQR(x^2+k^2) NEXT k PRINT A NEXT x
Обратите внимание, что вычисление произведения организуется в теле цикла путем последовательного перебора и умножения отдельных сомножителей A=A*f(x,k). При этом первое произведение получается путем умножения первого сомножителя на единицу (А=1). Если необходимо организовать вычисление суммы, Α
=
n
∑ f ( x , k ) , то в теле цикла необходи-
k =1
мо последовательно перебирать и складывать отдельные слагаемые по формуле A=A+f(x,k). При этом первая сумма получается путем сложения первого слагаемого с нулем, т.е. перед внутренним циклом необходимо присвоить А значение, равное нулю. Если несколько циклов имеют общий конечный оператор, можно указать для них один оператор NEXT, перечислив в нем переменные циклов в порядке, обратном порядку операторов FOR. 2.7.2. Циклы с неопределенным количеством повторений позволяет задавать конструкция WHILE/WEND, в которой указывается условие продолжения цикла: WHILE x ...[операторы] WEND
где x − числовое выражение. Цикл повторяется до тех пор, пока выражение x не станет равным нулю. При x=0 операторы до WEND включительно пропускаются, и программа выполняется дальше. Например, для алгоритма рис. 2.3 будет иметь следующий вид:
WHILE x<20 y=sin(x) PRINT y x=x+2 WEND
Циклы могут быть вложенными. Всякий оператор WEND относится к ближайшему оператору WHILE. 2.7.3. Наиболее общая форма организации циклов с помощью оператора DO/LOOP позволяет проверять условие окончания цикла в начале или в конце цикла. DO {WHILE | UNTIL} x ... ...[операторы] ... WEND или DO ... ...[операторы] ... LOOP {UNTIL | WHILE} x
где x − числовое выражение. Если условие продолжения цикла проверяется в конце цикла, то последним оператором этой конструкции должен быть оператор LOOP, если же условие продолжения цикла проверяется в конце цикла, то последним оператором этой конструкции должен быть оператор LOOP. При использовании ключевого слова WHILE цикл повторяется, пока выражение x истинно (не равно нулю) и завершается, когда оно равно нулю. При использовании ключевого слова UNTIL, наоборот, цикл завершается, когда x не равно нулю, и повторяется, если x равно нулю. Например, программы, реализующие алгоритм рис. 2.3, с помощью операторов DO/LOOP имеют следующий вид: DO WHILE x<20 y=sin(x) PRINT y x=x+2
LOOP
или DO UNTIL x>=20 y=sin(x) PRINT y x=x+2 LOOP
или DO y=sin(x) PRINT y x=x+2 LOOP UNTIL x>=20
или DO y=sin(x) PRINT y x=x+2 LOOP WHILE x<20
2.7.4. Для изменения естественного порядка последовательного выполнения операторов в программе служат оператор перехода GOTO, после которого указывается метка или номер строки. Оператор GOTO вызывает переход к оператору с указанной меткой или номером строки. Программа, реализующая алгоритм рис. 2.3, использующая для организации цикла операторы GOTO и IF THEN, имеет вид: x=0 NACH: IF x>20 TNEN END y=SIN(x) PRINT y x=x+2 GOTO NACH
2.8. Подпрограммы, функции и процедуры в TURBO BASIC
Программу на TB можно упростить, если использовать определяемые функции, подпрограммы и процедуры. Функция определяется как набор операторов, вычисляющих ее значение, которое может быть как числовым, так и символьным и обычно связано с параметрами, передаваемыми функции. Реализация выполняющих специальные функции (ввод данных, вывод графика и т.п.) или часто используемых частей программы в виде этих структур может существенно ее упростить. Подпрограмма представляет собой набор операторов, имеющий метку, переход к которой осуществляется с помощью оператора GOSUB. Использование подпрограмм − самый традиционный способ структурирования программы на части. Подпрограмма заканчивается оператором RETURN. Процедура − это вспомогательная программа, которая может быть вызвана по имени. Процедуры и определяемые пользователем функции − во многом похожие понятия. Основное их отличие заключается в том, что функция возвращает одно значение, поэтому ее имя (которое обязательно должно начинаться с символов FN) может появляться в выражениях, при вычислении которых и происходит вызов функции. Процедуру необходимо вызывать явно. Процедуры и функции в Турбо Бейсике представляют собой конструкции, свойственные только достаточно развитым языкам высокого уровня. Они допускают рекурсию (т.е. вызов самих себя), передачу параметров, доступ к локальным, статическим и глобальным переменным. На схеме алгоритма для обозначения подпрограмм, процедур и функций пользователя используется символ предопределенного процесса, изображенный на рис. 2.4. Сам предопределенный процесс должен быть описан в своей схеме алгоритма как отдельная программа, включая символы Рис. 2.4. начала и конца программы. 2.8.1. Вызов подпрограммы осуществляется с помощью оператора GOSUB метка, по которому происходит переход к оператору, перед которым находится метка. Подпрограмма выполняется, пока в ее тексте не встретится оператор RETURN, после чего происходит возврат к оператору, стоящему за GOSUB. Можно применять вложенные подпрограммы. Количество вложений ограничено только стековой памятью TB, в которой хра-
нятся адреса возврата из подпрограмм. Ниже приводится пример программы, для сравнения двух треугольников по площади. REM Присвоение значений сторонам 1 треугольника a=5 b=6 c=7 GOSUB triangle sl=s REM Присвоение значений сторонам 2 треугольника a=4 b=8 c=6 GOSUB triangle s2=s IF s2<sl THEN PRINT "Площадь треугольника 1_ больше, чем треугольника 2" ELSEIF s2>s1 THEN PRINT "Площадь треугольника 2_ больше, чем треугольника 1" ELSE PRINT “Площади треугольников равны” END IF END REM Подпрограмма для вычисления площади triangle: p=(a+b+c)/2 s=SQR(p*(p-a)*(p-b)*(p-c)) RETURN Обратите внимание, что перед подпрограммой, стоит оператор END, иначе бы в конце программы она выполнилась бы еще раз, даже без оператора GOSUB. 2.8.2. Ознакомиться с операторами TB, используемыми для определения функций пользователя. В общем виде формат определения функции имеет или строчный вариант: DEF FNимя [(список аргументов)] = выражение
или блочный вариант: DEF FNимя [(список аргументов)] операторы [EXIT DEF] FNимя=выражение] END DEF FNимя − имя присваиваемое определяемой функции (буква, за которой следует любое число букв или цифр); список аргументов − необязательная последовательность разделенных запятыми формальных параметров (не более 16), при вызове функции им присваивается значение соответствующих (по порядку в списке) параметров. Оба альтернативных способа позволяют определить в программе собственную функцию пользователя, которая затем может вызываться по ее имени, т.е. каждый раз, когда в каком-либо операторе будет использовано имя, присвоенное данной функции, будет вычисляться выражение с подстановкой в него значений аргументов, указанных при вызове. Имена аргументов в однострочном операторе DEF FN могут совпадать с именами переменных в программе, но это будут не одни и те же переменные. В выражении можно использовать переменные, не включенные в список аргументов. Аргументы могут использоваться только в выражении, определяющем функцию. Тип значения (числовое или символьное), которое получается при выполнении функции, определяется именем функции (по тем же правилам, что и имя переменной). Пример: IF FNdistance(2,3,4)<6 THEN PRINT "Точка внутри_ сферы радиуса 6" ... REM Вычисление расстояния от точки (x,y,z) REM до центра сферы DEF FNdistanсe(x,y,z)=SQR (x^2+y^2+z^2)
Положение в программе определения функции несущественно, в частности, она может находиться после тех операторов, в которых она используется. В отличие от подпрограмм, в тело функции "попасть случайно" нельзя, поскольку при выполнении программы строки, в которых располагается ее определение, считаются "невидимыми".
Войти в тело функции или выйти из него с помощью операторов GOTO, GOSUB, RETURN нельзя, хотя внутри тела эти операторы допустимы. Определения функций не могут быть вложенными, хотя в определении могут встречаться вызовы других или этих же функций (и процедур). В последнем случае имеем дело с рекурсивным вызовом. Обычно в многострочном определении функции имеется оператор присваивания, в котором в левой части стоит имя функции. Если такого оператора нет, то значение, возвращаемое функцией, не определено. Для выхода из тела функции до оператора END DEF применяется оператор EXIT DEF. Пример. Определим функцию, которая рекурсивно вычисляет значение факториала целого числа: REM Определение функции FNfact% DEF FNfact%(n%) IF n%=0 THEN FNfact%=1 EXIT DEF IF n%=1 THEN FNfact%=1_ ELSE FNfact%=n%*FNfact%(n%-1%) END DEF REM Использование ранее определенной функции FNfact% PRINT "факториал 5=";FNfact% (5%) 2.8.3. Процедуры − самое мощное средство для построения модульной программы − определяются с помощью оператора SUB и END SUB, которые служат, соответственно, началом и концом группы операторов, называемой процедурой: SUB имя [(список параметров)] [LOCAL список переменных] [STATIC список переменных] [SHARED список переменных] операторы [EXIT SUB] END SUB имя − уникальное имя процедуры, отвечающее тем же правилам, по которым образуются имена переменных; список параметров − последовательность, разделенных запятыми формальных параметров, которые служат только для определения процедуры, не имея никакого отношения к
другим переменным программы с тем же именем. Как и для функции, положение процедуры не существенно, кроме того, нельзя "случайно" попасть в процедуру непосредственно от предыдущего оператора, ни с помощью операторов GOTO, GOSUB или RETUN, хотя внутри процедуры эти операторы действуют. Определения процедур не могут быть вложенными, хотя внутри процедуры могут быть вызовы других процедур и функций. Все переменные в процедуре по умолчанию являются локальными. Локальные переменные являются динамическими: место под них выделяется лишь при выполнении процедуры, после же выполнения процедуры они автоматически пропадают. Однако можно объявить или с помощью оператора SHARED глобальные переменные (переменные, которые берут свои значения из предыдущих программных строк), или с помощью оператора STATIC статические переменные (переменные, для которых важно, чтобы они не изменились при повторных вызовах). Определение процедуры должно заканчиваться оператором END SUB, который возвращает управление в программу, передавая его к оператору, следующему за вызовом процедуры. Для выхода из процедуры в произвольном месте используется оператор EXIT SUB. Для вызова процедуры используется оператор CALL, имеющий формат: CALL имя ([список параметров]) имя − это имя процедуры, определенной с помощью оператора SUB; список параметров − это последовательность разделенных запятыми переменных, выражений или констант, передаваемых процедуре, в качестве фактических параметров (по типу они должны соответствовать формальным параметрам в определении процедуры). 6
Ниже приведена, программа для вычисления суммы S= ∑ (a ii − b i ) 2 , i =1
⎧i , если i − четное ⎧i, если i − четное где a i = ⎨ 2 , ai = ⎨ 3 . i , если i нечетное − i , если i нечетное − ⎩ ⎩ FOR i=1 TO 6 CALL ab(i) s=s+(a-b)^2 NEXT PRINT "S="; s END 2
REM
Процедура вычисления a, b SUB ab(i) SHARED a,b IF i MOD 2 <>0 THEN a=i^2:b=i^3 ELSE a=i:b=i^2 END SUB Обратите внимание, что оператор END необязателен в программе, т.к. в процедуру ab можно попасть лишь по оператору CALL ab(i). 2.8.4. Составить три программы для вычисления и вывода на экран монитора значений функции из таблицы 2.5 для x, изменяющегося от -20 до 20 с шагом 2. Таблица 2.5 № ва№ ваФункция Функция рианта рианта
1
2
⎧ 0 .5 X 3 + 1 , X ≤ − 10 ⎪ 2 , − 10 < X < 1 Z = ⎨ ( X + 1) ⎪ X + 10 , X ≥ 10 ⎩
, X ≤ −π ⎧ sin X ⎪ Z = ⎨( X + 13) , − π < X < π ⎪ (x 3 + 2x) , X ≥π ⎩ 10
3
Α = ∑ 4 1000 n + x 4
4
Α=∏
n =1
cos X 2k k =1 n
5
Α=
6
Α=
n
∑ (X 4
+ 4k )
k =1
n
∏ ex k =1
+ kx
7
8
⎧ X ≤ −1 ⎪ X 4 − 12 , ⎪ Z = ⎨ ( 2 X + 1) 3 , − 1 < X < 1 ⎪ x + 11 , X ≥1 ⎪ x ⎩
sin 3X , X ≤ −π ⎧ ⎪ Z = ⎨(cos X + 1) , − π < X < π ⎪ 2x , X≥π ⎩ n
∏ x + 3k
9
Α=
10
Α = ∏ ( xk + 2 ) 3
11
Α=
∑
12
Α=
∑
k =1
n
k =1
xn n =1 n 10
15
x+k
k =5
Номер варианта задается преподавателем. В первой программе для организации цикла использовать оператор FOR/NEXT, во второй − WHILE/WEND, а в третьей − DO/LOOP. Вывести полученные результаты на экран монитора и на принтер: в первой программе в строку с точностью 2 знака после запятой; во второй программе − в столбец с точностью 1 знак
после запятой; в третьей − по зонам в экспоненциальном формате. Для вычисления значений функций использовать функцию пользователя. 2.8.5. Составить программу для вычисления и вывода на экран монитора наибольшего и наименьшего значений функции (Табл. 2.6) и значения аргумента, при котором оно получено. Для определения наибольшего значения использовать подпрограммы, а для определения наименьшего значения − процедуры. Таблица 2.6. № ваДиапазон изменения Х Шаг изменения Х Функция рианта y=-sin(Xi/2) 1 2 20÷40 2 3 4 5 6
2
y=13X y=cos(4x) 1 Y= X+4 Х + 44 Y= X − 23 2
y=(3x +43)
÷7
1
4÷24
2
(-1)÷5
0.5
(-10)÷10
2
11÷19
1
Для определения, наибольшего значения, функции и соответствующего ей значения аргумента воспользуйтесь следующим алгоритмом: − присвоить переменной YMAX значение, заведомо меньшее значения функции Y для заданного диапазона изменения X; − организовать цикл по переменной X ; − организовать переход в подпрограмму для нахождения наибольшего из двух значения Y, сохранить это значение в переменной YMAX, а соответствующее ему значение X в переменной XMAX; − после завершения цикла ввести на экран полученные значения в следующем виде: YMAX=число при XMAX=число. 2.9. Использование массивов в TURBO BASIC
Помимо числовых и символьных переменных в TB используются еще и индексные переменные или массивы. Массив − это последовательность данных одинакового типа, имеющих общее имя. Элемент массива является отдельной переменной. Он идентифицируется путем указания в
скобках после имени массива номера (индекса) элемента. Массив перед использованием необходимо объявить с помощью оператора DIM. После объявления все элементы числового массива принимают значение, равное 0, а символьного массива − значение пустой строки (“ ”). При объявлении массива указывается номер (индекс) его последнего элемента или диапазон значений индекса. Это число может быть заранее неизвестно. Тогда оно задается в виде переменной или выражения целого типа. Важно только чтобы к моменту выполнения оператора объявления массива, значение этой переменной или выражения было известно. Если указывается номер последнего элемента, то номер первого или принимается по умолчанию равным 0, или устанавливается предшествующим объявлению оператором OPTION BASE. Например, если бы оператору DIM a(42) предшествовал оператор OPTION BASE 1, то объявленный массив содержал бы элементы от a(1) до a(42). У массива, заданного в виде диапазона DIM a(22:44), имеются элементы от a(22) до a(44). Массивы могут быть двумерными, т.е. представлять матрицу. В этом случае в операторе объявления определяется количество элементов по каждой размерности. Например, DIM a(5,6) определяет матрицу, содержащую пять строк и шесть столбцов. Для работы с массивами удобно использовать циклические программы. Например, программа, присваивающая элементам двумерной матрицы A(2,3) (три строки и четыре столбца) значения из оператора DATA, имеет вид: DATA 1,2,3,4,5,6,7,8,9,10,11,12 DIM a(2,3) FOR i=0 TO 2 FOR j=0 TO 3 READ A(i,j) NEXT j, i Для вывода на экран полученной матрицы A(i,j) (в виде матрицы), необходимо использовать два оператора NEXT, так как между ними должен помещаться пустой оператор PRINT, переводящий курсор в начало текущей строки. FOR i=0 TO 2 FOR j=0 TO 3 PRINT A(i,j), NEXT j PRINT
NEXT i REM Результат выполнения программы: REM 1 2 3 REM 4 5 6 REM 7 8 9 REM 10 11 12 2.10. Организация работы с дисковой памятью в TURBO BASIC
Для организации работы с дисковой памятью используется понятие файла. Файл − это набор данных на диске, который можно создать, к которому можно осуществить доступ для чтения или для записи данных, и который, наконец, можно уничтожить. Всякий файл должен иметь имя, которое состоит из двух частей, разделенных точкой: имя файла.расширение. Имя файла − это последовательность символов, которая содержит до 8 произвольных символов (букв, цифр, знаков (, ), {, }, @, #, $, %, ^, &, !, -, _, /, ~). Расширение содержит до 3 произвольных символов. В имени и в расширении файла не могут использоваться пробелы. Для однозначной идентификации файлов необходимо полностью указать спецификацию файла − имя диска, путь и имя файла. Если файл находится на диске и в каталоге по умолчанию, то достаточно указать лишь его имя. В TB различают последовательные, прямые и двоичные файлы. Прямые файлы представляют собой последовательность записей, к которым можно обращаться в произвольном порядке. Двоичные файлы − это просто последовательность байтов, в которых хранится информация. В данной работе рассматриваются лишь последовательные файлы, которые представляют собой последовательность записей (строк символов), разделенных между собой символами “возврата каретки” или “перевода строки” (RC / LF). Каждая запись формируется операцией вывода в файл. Преимущество последовательных файлов − это возможность работы с ними с помощью обычных текстовых редакторов. Основным ограничением при работе с ними является только лишь последовательный доступ к данным. При открытии файла можно прочитать первую запись, затем вторую и т.д. При этом, после чтения первой записи повторить эту операцию уже нельзя, не закрыв и не открыв заново файл, а для того чтобы прочитать, скажем 10000-ю запись, необходимо прочитать все предыдущие. Таким образом, последовательные файлы удобны при обработке из программы, только если обрабатываются все или почти все записи файла. Общая схема работы с файлом следующая:
− файл открывается (оператором OPEN) с указанием режима работы с ним (INPUT − для ввода, APPEND − для вывода путем добавления, OUTPUT − для вывода в начало с уничтожением содержимого файла, если он уже существовал); − осуществляется последовательный доступ к файлу: если этот файл для чтения, то используется оператор INPUT # , если же этот файл для вывода, то оператор PRINT # или PRINT USING #; − файл закрывается с помощью оператора CLOSE. Файл может быть несколько раз открыт для чтения, что позволяет обращаться к различным местам файла. Оператор OPEN для открытия последовательных файлов имеет следующий формат: OPEN “спецификация файла” FOR режим
AS #номер файла
режим − это одно из ключевых слов INPUT, OUTPUT или APPEND; номер файла − произвольное число, рассматриваемое как номер файла. Оператор CLOSE для закрытия последовательных файлов имеет следующий формат: CLOSE [ [ #]номер файла [, [#]номер файла]] номер файла − номер файла, объявленный в операторе OPEN. Оператор закрывает файл, разрывая связь между файлом на диске и его номером. Если аргумент в операторе CLOSE отсутствует, то закрываются все открытые файлы. Оператор INPUT # для чтения записи из последовательного файла имеет следующий формат: INPUT # номер файла, список переменных номер файла − произвольное число, рассматриваемое как номер файла; список переменных − последовательность разделенных запятыми числовых или символьных переменных. Данные в читаемой записи должны соответствовать типам переменных. Оператор PRINT # для вывода записи в последовательный файла имеет следующий формат: PRINT # номер файла, [USING v$;] список выражений[;] номер файла − произвольное число, рассматриваемое как номер файла; список выражений − последовательность разделенных запятыми
или точками с запятой числовых или символьных выражений, значения которых выводятся. Оператор PRINT # выводит запись в последовательный файл подобно тому, как это делает оператор PRINT при выводе на экран. Конструкция USING позволяет управлять форматом выводимых значений. 2.11. Примеры программ обработки массивов
2.11.1. Набрать программу для формирования и вывода на экран матрицы размерности 9 на 9, значения элементов которой взяты из файла DANNIE.DAT, находящегося на диске D в каталоге TBAS, начиная с 10 записи. OPTION BASE 1 : DIM a(9,9) OPEN “D:\TBAS\DANNIE.DAT” FOR INPUT AS #1 FOR j=0 TO 9 INPUT #1, i NEXT j FOR i=0 TO 9 FOR j=0 TO 9 INPUT #1, A(i, j ) PRINT USING “####.#”;A(i, j); NEXT j PRINT NEXT i 2.11.2. Добавить в первую программу строки, реализующие алгоритм преобразования матрицы A(i, j) в матрицу B(i, j), путем замены строк и столбцов местами. Вывести в файл с именем REZULT.DAT в текущем каталоге значения элементов преобразованной матрицы. DIM B(9,9) : OPEN “REZULT.DAT” FOR OUTPUT AS #2 FOR i=1 TO 9 FOR j=1 TO 9 B(i, j)=A(j, i) PRINT #2, USING “####.#”; B(i, j); NEXT j PRINT #2 NEXT i CLOSE #1, #2
2.11.3. Дописать в программу строки для определения и вывода на экран монитора суммы элементов матрицы A(i, j) по строкам: FOR i=1 TO 9 s=0 FOR j=1 TO 9 S=S+A(i, j) NEXT j PRINT “S=“; PRINT USING “####.#”; S NEXT i 2.11.4. Самостоятельно добавить в программу строки для вычисления и вывода на экран произведения элементов матрицы B(i,j) по столбцам. 2.11.5. Дописать в программу строки для перестановки строк матрицы B(i,j) по убыванию значений первых элементов её строк. Вывести на экран полученную матрицу: FOR i=1 TO 9 MAX=B(i,1) ‘Нахождение наибольшего первого элемента в строках ‘матрицы и номера этой строки imax FOR k=i TO 9 IF B(k,1)>=MAX THEN MAX=B(k,1) imax=k NEXT k FOR j=1 TO 9 ‘Вывод на экран текущей строки imax PRINT USING “####.#”;B(imax,j); ‘Исключение этой строки из дальнейшего анализа SWAP B(imax,j),B(i,j) NEXT j PRINT NEXT i 2.11.6. Добавить в программу строки для перестановки столбцов матрицы A(i,j) по возрастанию значений первых элементов её столбцов.
2.11.7. Дописать в программу строки для вычисления и вывода на экран монитора суммы элементов двух главных диагоналей матрицы B(i,j). 2.11.8. Добавить в программу строки для вычисления и вывода на экран монитора среднего квадратического значения элементов матрицы B(i,j) по строкам. 3. ОБЪЕКТНО–ОРИЕНТИРОВАННЫЙ МИРОВАНИЯ
МЕТОД
ПРОГРАМ-
Visual Basic for Application (VBA) – это объектно-ориентированный язык программирования высокого уровня, являющийся одним из диалектов очень популярного языка программирования Visual Basic. Его достоинством является возможность совместного использования с другими приложениями (Microsoft Word, Excel, Access, Project) и языками программирования, что позволяет создавать полностью автоматизированные системы за время меньшее, чем при помощи традиционных языков программирования. При этом VBA сохранил традиционную для Basic простоту в использовании. 1.1. Объект
В языке VBA применен объектно-ориентированный метод программирования. Объекты VBA – это удобный способ хранения данных и кода в программе. Вместо написания текста программы, манипулирующей данными (переменными), находящимися где-то, эти данные и программный код, обслуживающий их, заключаются в единый объект. В результате для того, чтобы, например, отобразить эти данные необходимо иметь только доступ к объекту, послать ему соответствующее сообщение, а объект сам сделает всю необходимую работу. При внедрении объекта в приложение он сам заботится о себе; ему нужно указать только место отображения на экране. Помещая, например, на рабочий лист Excel кнопку Visual Basic, нет необходимости сообщать рабочему листу, как эта кнопка должна работать. При нажатии на кнопку ее встроенный программный код сама позаботится обо всем. Таким образом, объект объединяет в одно целое (инкапсулирует) свойства объектов и возможные над ним операции (методы). Объекты, инкапсулирующие одинаковый перечень свойств и методов, объединяются в классы. При этом каждый отдельный объект является экземпляром класса, а экземпляры класса могут иметь отличные значения свойств.
Объекты VBA – это кнопки, элементы меню, документы, фрагменты документа, символы, интервалы ячеек рабочего листа и даже сам рабочий лист. Почти все то, что можно увидеть на экране работающего приложения, является объектом. В таблице 3.1. приведены примеры классов объектов в приложениях Microsoft Office Word и Excel. Таблица 3.1 ПрилоКласс Свойства Методы жение объектов Word Documents Name (имя) Open (открытие) (документ) FileName (местополо- Close (закрыть) жение) Save (сохранение) Add (создает новый объ- и др. ект в семействе) и др. Excel Workbooks ActiveSheet (актив- Open (открытие) ный лист книги) (книга) Close (закрыть) Name (имя) Save (сохранение) Path (полное имя пап- и др. ки, где находится книга) Add (создает новый объект в семействе) и др. Объекты Document объединяются в класс объектов Documents(). Один из документов класса Documents с именем Проба.doc – Documents (”Проба.doc”). Объекты в приложениях образуют некоторую иерархию, на вершине которой находится приложение (Applicacion). Иерархия объектов в приложениях Microsoft Office Word и Excel приведена в таблице 3.2. Таблица 3.2. Word Excel активное приложение активное приложение (Applicacion) (Applicacion) документ (Documents) книга (Workbook) фрагмент документа (Selection) лист (Worksheet) символ (Character) диапазон ячеек (Range)
Чтобы получить доступ к объекту в языке VBA, необходимо составить ссылку на него, начав с самого общего наружного объекта, за которым должна следовать точка и следующий вложенный в него объект, и так далее до тех пор, пока не будет достигнут нужный объект. Например, чтобы в программе Word ссылка на документ ЛР1.doc выглядит следующим образом: Application.Documents (”ЛР1.doc”). Однако делать каждый раз ссылку на текущий объект необязательно, если этот объект активный. Например, если приложение Word активно, достаточно сделать относительную ссылку на сам документ: Documents (”ЛР1.doc”). Таким образом, почти всегда можно не включать в описание объектов ссылку на приложение и на рабочую книгу или документ. Однако при этом необходимо точно знать, какой объект активен в момент появления оператора с пропущенной спецификацией объекта. Пропуск спецификации объекта делает процедуры более простыми для восприятия, кроме того, это позволяет применить этот же программный код к другому рабочему листу или документу, не меняя имя рабочего листа или документа в ссылках. В дополнение к именованным листам или рабочим книгам можно использовать такие объекты, как: ActiveWorkbook (активная рабочая книга), ActiveDocument (активный документ), ActiveWindow (активное окно) для того, чтобы иметь возможность ссылаться на активные объекты, не указывая их имен. 1.2. Методы объекта
Для того чтобы объект выполнил какую-либо операцию необходимо задать метод. Многие методы имеют аргументы, задающие параметры выполняемых действий. Синтаксис команды применения метода объекта: Объект.Метод
арг1:=значение,
арг2:=значение
Например, операция открытия в приложении Word документа Проба.doc, находящегося на диске H: в папке ФИО содержит не только название метода, но и указание пути к открываемому файлу Documents().Open FileName:=(“H:\ФИО\Проба.doc”)
Для открытия нового документа в Word используется следующий программный код Documents.Add DocumentType:=wdNewBlankDocument
Для вывода на печать двух первых страниц документа Проба.doc необходимо задать для метода PrintOut значения аргументов Range
(задает формат диапазона печати), From и To (задают номер начальной и конечной страниц печати): Documents(“Проба.doc").PrintOut _ Range:=wdPrintFromTo,From:=”1”, To:=”2”
Обратите внимание, что в последнем выражении строка кода не поместилась в одной экранной строке, поэтому она перенесена на следующую экранную строку с помощью символа подчеркивания (_) с предшествующим символом пробела. Сохранение документа Проба.doc на диске реализует метод Save: Documents(“Проба.doc").Save 1.3. Свойства объекта
Для изменения состояния объекта необходимо задать новые значения его свойств. Синтаксис команды изменения свойств: Объект.Свойство = ЗначениеСвойства
Для установки во фрагменте текста (объект Selection) для восьмого символа (объект Characters(8)) начертание полужирный (свойство Bold), которое имеет два значения True или False (установлено или не установлено), введем следующий код: Selection.Characters(8).Italic = True
Объект может иметь множество свойств. С помощью инструкции With можно задавать значения сразу нескольким свойствам объекта: With Объект .Свойство1=ЗначениеСвойства1 .Свойство2=ЗначениеСвойства2 … End With Заметьте, что строки, находящиеся между With и End With немного сдвинуты влево. И хотя для самого VBA это не важно, однако это упрощает чтение программы. Поэтому, чем больше становится программа, тем чаще необходимо включать в нее комментарии и отступы. Чтобы увеличить отступы в одной или нескольких строках кода, отметьте эти строки и нажмите клавишу Tab, а для уменьшения отступов – сочетание клавиш Shift+Tab.
4. ИНТЕГРИРОВАННАЯ СРЕДА ПРОЕКТИРОВАНИЯ VBA (IDE VBA)
Редактор Visual Basic в интерпретации Microsoft называется Интегрированной Средой Проектирования (IDE). В IDE собраны все средства и инструменты, необходимые программисту для разработки и создания приложений (написание и редактирование программ; проектирование диалоговых окон и других элементов приложений, облегчающих взаимодействие с пользователем; запуск программ; тестирование и отладка программ; отслеживание работы всех элементов каждой конкретной программы; контроль за взаимодействием различных VBA-программ). Самый простой способ научиться работать с Visual Basic – записать свой макрос, в результате чего автоматически генерируется программный код на языке VBA, а затем, запустив отладку программы, проанализировать все команды, входящие в состав макроса. Для записи макроса, который, например, переформатирует выделенный фрагмент текста в среде WORD в полужирное начертание красного цвета, необходимо выбрать в меню Сервис→Макрос→Начать запись. В появившемся окне Запись макроса задать содержательное имя макроса, например Полужирный_красный, и нажать клавишу ОК. При этом откроется соответствующая панель записи макроса и изменится изображение курсора. С этого момента все выполняемые действия будут автоматически сохраняться в макросе. В данном случае необходимо щелкнуть на кнопках Цвет шрифта (Красный) и Полужирный. Для завершения записи макроса необходимо щелкнуть на клавише Остановить запись. Затем выбрать созданный макрос в окне Макросы (Сервис→Макрос→ Макросы) и нажать кнопку Отладка. В результате откроется окно редактора Visual Basic (рис. 4.1), в котором уже находится листинг записанного макроса. Другой способ запустить Visual Basic – нажать комбинацию клавиш (Alt+F11) или выбрать в меню Сервис→Макрос→Редактор Visual Basic. Самое большое окно в Visual Basic – окно редактирования кода (1), которое служит в качестве редактора для ввода кода процедур приложения. Код внутри модуля организован в отдельные разделы для каждого объекта, программируемого в модуле. С помощью кнопок, расположенных слева от горизонтальной прокрутки, можно переключать два режима переключения кода: просмотр отдельной процедуры и просмотр всего модуля. Над окном редактирования кода располагается стандартная панель инструментов (2), которую можно отобразить на экране выбором команды View→Toolbars→Standard.
4
3
2
6
8
1
9
7 10 5
Рис. 4.1
Щелчок по кнопке (3) на стандартной панели инструментов либо выбор команды View→Project Explorer открывают окно проектов Project (4), в котором отображается структура проекта в виде дерева. В Visual Basic проект может состоять из нескольких форм, каждая из которых связана с модулями форм соответствующими кодами. Кроме того, в проекте могут присутствовать стандартные модули и модули классов. Для удаления какого-либо файла из проекта необходимо щелкнуть по нему правой клавишей мыши и выбрать в появившемся контекстном меню команду Remove. При этом появится диалоговое окно Microsoft Visual Basic с вопросом, экспортировать ли код перед удалением модуля. Щелкните на кнопке Да, чтобы переместить код модуля в файл с расширением .frm. Щелкните на кнопке Нет, чтобы удалить модуль без копирования кода, либо отмените команду, щелкнув по кнопке Отмена. Окно свойств Properties (5) предназначено для установки свойств форм и элементов управления. Окно отображается на экране либо выбором
команды View→Properties Window, либо нажатием кнопки (6) на стандартной панели инструментов. Список разделен на две колонки. В левой колонке находятся имена свойств, а в правой – их значения. Установленные по умолчанию значения могут быть изменены. Свойством объекта является качественная или количественная характеристика этого объекта (размеры, цвет, шрифт и др.). Для некоторых свойств объектов предусмотрена возможность выбора из раскрывающегося списка значений. Ряд свойств объектов можно задавать и программно. При необходимости может быть отрыто еще одно важное окно – окно просмотра характеристик объектов Object Browser (7) либо нажатием кнопки (8) на стандартной панели инструментов, либо выбором команды View→Object Browser. В левой колонке окна производится выбор объекта или класса объектов. В правой колонке появляется перечень свойств, методов и событий выбранного объекта или класса объектов. Выбрав элемент списка можно получить о нем краткую информацию, которая появляется в нижней части окна. Для каждого класса объектов существует определенный набор свойств, методов и событий, при этом экземпляры класса обладают конкретными значениями свойств. В таблице 4.1 приведены некоторые свойства, методы и события для трех классов объектов. Таблица 4.1. Класс объектов Form (Форма)
Свойства Name Caption Font Height Width
(Имя) (Надпись) (Шрифт) (Высота) (Ширина)
CommandButton Name (Имя) (Командная Caption (Надпись) кнопка) Font (Шрифт) Height (Высота) Width (Ширина) TextBox Name (Имя) (Текстовое поле) Text (Символы) Font (Шрифт) Height (Высота) Width (Ширина)
Методы События Print (Печать) Load Line (Рисова- (Загрузка) ние линий)
Move (Перемещение)
Click (Щелчок)
Move (Перемещение)
Click (Щелчок)
Расположение всех вышеперечисленных окон на рабочем столе IDE VBA, а также их размеры, можно изменять с помощью мыши или команд меню View (Просмотр). В окне редактирования кода можно использовать команды редактирования Вырезать , Копировать и Вставить , которые выбираются либо на стандартной панели инструментов, либо в контекстном меню, либо на панели инструментов Edit (9), переключаемой из меню View→Toolbars→Edit, или используются стандартные комбинации клавиш Ctrl+X , Ctrl+C , Ctrl+V, соответственно. При написании программного кода целесообразно его снабжать комментариями – это неисполняемые строки, начинающиеся со знака апострофа (‘). Кроме того, во время отладки программы апостроф часто используют для временного отключения некоторых программных строк. Апостроф можно ставить вручную, а если надо добавить или удалить сразу несколько комментариев, то удобнее воспользоваться кнопками CommenBlock (Закомментировать блок) и UncommenBlock (Раскомментировать блок) панели инструментов Edit. При написании кода редактор автоматически предлагает пользователю список компонентов, логически завершающих вводимую пользователем инструкцию. Например, набирая код Selection. после ввода точки на экране отобразится список компонентов, которые завершают данную конструкцию. Двойной щелчок на выбранном компоненте вставляет его имя в код программы. Для сохранения одного отдельного модуля, с которым вы работаете в настоящий момент, достаточно нажать клавиши Ctrl+S или щелкнуть по кнопке стандартной панели инструментов, или выбрать команду File →Save Normal. Чтобы сохранить сразу все изменения в текущем проекте, включая все связанные с ним модули, необходимо вернуться в активное приложение (Word или Excel) и щелкнуть по кнопке стандартной панели инструментов. Для сохранения листинга программы в отдельном файле с расширением .bas необходимо нажать клавиши Ctrl+E или выполнить команду File→Export File. А чтобы загрузить в IDE VBA программу из файла необходимо нажать клавиши Ctrl+М или выполнить команду File→Import File.
Для запуска на исполнение созданного макроса необходимо нажать клавишу F5 или кнопку (10) на стандартной панели инструментов. Практические задания 1) Изучить расположение и назначение окон на рабочем столе. Включить в отчет о выполнении лабораторной работы описание всех окон IDE VBA. 2) Вернуться в Word и записать новый макрос, предназначенный для заданного преподавателем форматирования выделенного фрагмента текста с помощью кнопок на панели инструментов, проверить его работу, а затем распечатайте полученный макрос и проанализировать все команды, входящие в состав макроса. Поместить в отчет текст макроса с описанием назначения всех его команд в виде комментария. 3) Сохранить изменения в макросе. 4) Записать макрос, выполняющий то же форматирование, что и предыдущий, но с использованием диалоговых окон. Распечатать полученный макрос. Посмотреть разницу между полученными программными кодами и результатами выполнения того и другого макроса, сделать выводы. Удалить ненужные строки из второго макроса, пометив их как комментарии. 5) Сохранить листинг программы в отдельном файле с расширением .bas в своей папке. 6) Продемонстрировать преподавателю работу двух ваших макросов из среды Word и из IDE VBA . 3.
ФОРМА И ЭЛЕМЕНТЫ УПРАВЛЕНИЯ VBA
Основным объектом в Visual Basic является форма, представляющая собой окно приложения, в котором можно разместить различные элементы управления. Форма может быть добавлена в проект выбором команды Insert→UserForm или с помощью кнопки на стандартной панели инструментов. В результате в центре экрана появляется сама форма, которая добавляется в проект с именем по умолчанию Form1. Следующая форма будет иметь номер 2 и т.д. Размеры формы можно менять, перетаскивая мышкой ее правую или нижнюю границу. Как и любой объект в Visual Basic форма обладает свойствами, методами и событиями. Наиболее часто используемые свойства форм приведены в ПРИЛОЖЕНИИ 1. Первоначально форма пуста, в дальнейшем, в процессе создания графического интерфейса приложения, в ней размещаются элементы управления. Используя эти элементы не трудно создавать любой пользова-
тельский интерфейс в среде Windows. Пиктограммы элементов управления помещаются на Панели элементов управления, которая либо появляется одновременно с появлением формы, либо может быть вызвана с помощью команды View→Toolbox→Edit или с помощью кнопки на стандартной панели инструментов. Список основных элементов управления приведен в ПРИЛОЖЕНИИ 2. Все кнопки панели инструментов, за исключением первой, служат для создания элементов управления. Первая кнопка называется Указатель (Point), щелкнув по нему, можно выбрать уже созданный в форме элемент управления, изменить его размер или переместить. Данный режим конструирования формы включается автоматически после размещения элементов управления в форме. Для размещения элементов управления в форме необходимо, выбрав щелчком мыши элемент, поместить его в нужное место на форму проектируемого приложения. После этого элемент управления можно перемещать, изменять его размеры, копировать в буфер обмена и вставлять из буфера обмена. Для установки свойств элементов управления вручную при его конструировании необходимо его выделить и нажать кнопку Properties. Все элементы управления формы образуют семейство Controls. Общие методы и инструкции форм приведены в ПРИЛОЖЕНИИ 3. С формой связан программный модуль, содержащий событийные и общие процедуры. У каждого элемента управления есть целый набор событий, связанных с теми или иными действиями. Некоторые общие для форм и элементов управления события приведены в ПРИЛОЖЕНИИ 3. Для вывода программного модуля на экран можно воспользоваться контекстным меню, выбрав там команду View→Code или просто произведя двойной щелчок клавишей указания мыши, а для возвращения в окно форм необходимо выбрать в контекстном меню команду Hide. Кроме того, любое из открытых в данном проекте окон может быть переключено в главном меню Windows. 4.
ОРГАНИЗАЦИЯ ПРОЕКТА В СРЕДЕ VBA
В Visual Basic проект может состоять из нескольких форм, связанных с соответствующими кодами. Кроме того, в проекте могут присутствовать стандартные модули и модули классов. Макрокоманды, записанные в Word, могут быть доступными любому из ваших документов или шаблонов, которые были открыты в момент записи. После записи макроса он размещается в определенной части документа или шаблона, которая называется модулем. По умолчанию все новые макрокоманды в документах и шаблонах хранятся в модуле с именем
NewMacros. Модуль может содержать любое количество подмодулей, единственное ограничение состоит в том, что его суммарный объем не должен превышать 4000 строк кода. Программа на языке VBA состоит из одного или нескольких модулей. Обычно модуль начинается с опций, которые управляют описанием переменных, способом управления строк и т.д., например ' Опции VBA Option Explicit Инструкция Option Explicit используется для принудительного объявления всех переменных в области General Declarations (Общее описание) модуля, которая располагается в верхней части модуля. Эта инструкция исключает возможность случайного создания новых переменных. Использование этой инструкции полезно при отладке программы, т.к. если допущена ошибка в имени переменной, то будет выдано сообщение об ошибке. Затем в модуле располагается область объявления переменных и констант уровня модуля или проекта, которые могут быть использованы во всех процедурах либо модуля, либо проекта, например 'Переменные уровня модуля Dim bytA As Byte Dim strA1 As String Private i As Integer Private Среднее As Double Далее располагается код процедуры или функции, составляющий саму программу. Процедура представляет собой поименованную часть кода, выполняющую определенные действия. Процедура может иметь параметры, которые в результате выполнения последовательности инструкций могут менять свои значения. Процедура имеет следующий синтаксис: [Public⏐Private⏐Friend][Static]Sub name[(arglist)] [statements] [Exit Sub] [statements] End Sub Public – указывает, что процедура доступна для всех других процедур во всех модулях. Private – указывает, что процедура доступна для других процедур только того модуля в котором она объявлена.
Friend – используется только в модулях классов. Позволяет вызывать процедуру из другого модуля проекта. Static – указывает, что локальные переменные процедуры сохраняются в промежутках времени между вызовами этой процедуры. arglist – список аргументов, разделенных запятой, значения которых передаются в процедуру или возвращаются из процедуры при ее вызове. statements – любая группа инструкций, выполняемых в процедуре Sub. Exit Sub – инструкция, которая приводит к немедленному выходу из процедуры Sub. В состав проекта VB могут входить несколько форм, с каждой из которых связан свой программный модуль. Каждый программный модуль может включать в себя процедуры двух типов: событийные и общие. Общая процедура представляет собой подпрограмму, которая начинает выполняться после ее вызова из другой процедуры. Выполнение общих процедур не связывается с какими-либо событиями, они вызываются на выполнение с помощью оператора Call и имеют следующий формат: Call ИмяПроцедуры (СписокПараметров)
Список входных параметров представляет собой набор переменных, значение которых устанавливаются до начала выполнения процедуры. Событийная процедура представляет собой подпрограмму, которая начинает выполняться после реализации определенного события. В рассмотренной в следующем разделе программе Калькулятор содержатся лишь событийные процедуры, большинство из которых обрабатывает событие (Click), произошедшее при щелчке левой клавиши мыши на соответствующем элементе управления. Кроме процедуры Sub в VBA используются и процедура Function, которая имеет следующий формат: [Public⏐Private⏐Friend][Static] Function name[(arglist)] statements [name=expression] [Exit Function] statements [name=expression] End Function
Инструкция Exit Function приводит к немедленному выходу из процедуры Function. Если требуется использовать возвращаемое Function значение, в отличие от процедуры Sub процедура Function может применяться в правой части выражения, как и любая другая встроенная функция переменная= name() В свою очередь, процедуре Function может присваиваться значение какого-либо выражения name()=expression name – имя процедуры Function, expression – любое выражение возвращающее значение того же типа, что и процедура Function. Для вызова процедуре Function может использоваться так же, как и для процедуры Sub инструкция Call, когда интересует не возвращаемое процедурой значение, а осуществляемое ей действие. В VBA возможно создание рекурсивных процедур Function и Sub, т.е. процедур вызывающих самих себя. 5.
ПРИМЕР СОЗДАНИЯ ПРИЛОЖЕНИЯ
Зайти в среду Visual Basic и создать приложение Калькулятор, который должен выполнять четыре арифметические действия. Создание приложения можно условно разделить на три этапа: – создание графического интерфейса будущего приложения; – задание значений свойствам объектов графического интерфейса; – создание программного кода. 5.1. Виртуальное программирование графического интерфейса
Вставить в проект форму и разместить на ней необходимые для функционирования приложения управляющие элементы: – три текстовых поля (объекты TextBox1, TextBox2, TextBox3, принадлежащие классу объектов TextBox): два поля для ввода числовых данных и одно для получения результатов вычислений; – три надписи (объекты Label1, Label2, Label3), разместив их сверху текстовых полей; – пять кнопок (объекты CommandButton1, CommandButton2, CommandButton3, CommandButton4, CommandButton5, принадлежащих классу объектов CommandButton): четыре для выполнения ариф-
метических операций (сложение, вычитание, умножение и деление) и одну для завершения работы приложения. Расположите управляющие элементы в форме, таким образом, как это показано на (Рис. 7.1.)
Рис. 7.1
5.2. Задание значений свойствам объектов графического интерфейса
Для изменения свойств объектов вызвать Окно свойств Properties. Последовательно выделяя сами объекты, задать для них значения свойств Name (Имя) и Caption (Надпись) в соответствии с таблицей 7.1. Таблица 7.1. Класс объектов 1 Форма (Form)
Свойство Значение по умолчанию Новое значение 2 Name Form1 Caption Form1
3
4 Form1 Калькулятор
1 Надпись (Label)
2 Name Caption Надпись (Labe2) Name Caption Надпись (Labe3) Name Caption Name Кнопка (CommandButton) Caption Name Кнопка (CommandButton) Caption Name Кнопка (CommandButton) Caption Name Кнопка (CommandButton) Caption Name Кнопка (CommandButton) Caption
3 Label1 Label1 Label2 Label2 Label3 Label3 Command1 Command1 Command2 Command2 Command3 Command3 Command4 Command4 Command5 Command5
Продолжение таблицы 1.7. 4 Label1 Первое число Label2 Второе число Label3 Результат CmdPlus + CmdMinus – CmdUmn * CmdDelen / CmdExit Выход
Для объектов TextBox изменить значения двух свойств Text и Font. Свойство Text задает последовательность символов, выводимых в поле. Первоначально текстовые поля должны быть пустыми. А свойство Font задает нужный шрифт, начертание и размер шрифта, размещаемого в текстовом поле. 5.3. Создание программного кода.
На этом этапе происходит кодирование событийных процедур в приложении. В рассмотренной программе Калькулятор содержатся лишь событийные процедуры, обрабатывающие событие (Click), произошедшее при щелчке левой клавиши мыши на соответствующем элементе управления. 1) Самая простая событийная процедура в данном приложении – процедура завершения программы. Эта процедура должна вызываться, если пользователь щелкнет по кнопке с надписью «Выход». В результате ее выполнения, окно приложения Калькулятор будет закрыто, а само приложение будет выгружено из памяти.
Для написания этой процедуры необходимо выполнить двойной щелчок по кнопке «Выход», в результате откроется окно редактора кода, в котором будет помещена заготовка для процедуры обработки события Click объекта CmdExit. Private Sub CmdExite_Click() End Sub
Внутри процедуры необходимо с клавиатуры добавить всего одну команду End. В результате получим полный код процедуры Private Sub CmdExite_Click() End End Sub
При написании сложных программ целесообразно проверять работоспособность созданной процедуры. Для этого надо нажать клавишу F5, или кнопку , или выбрать команду Run→Run Sub. При этом в текстовом редакторе Word загрузится приложение Калькулятор. Если щелкнуть мышью по кнопке «Выход», то в случае правильной работы процедуры, форма приложения Калькулятор будет закрыта, а Visual Basic вернется обратно в режим разработки (design). В случае ошибки Visual Basic создаст окно с предупреждение об ошибке, и будет предложено ее исправить. 2) Процедура сложения реализует сложение двух чисел. Эта процедура должна изменить свойство Text объекта TextBox3 так, чтобы оно явилось суммой числовых значений свойства Text объектов TextBox1 и TextBox2. Эта процедура должна вызываться, если пользователь щелкнет по кнопке с надписью «+». Для ее написания необходимо выполнить двойной щелчок по кнопке «+», в результате откроется окно редактора кода, в котором будет помещена заготовка для процедуры обработки события Click объекта CmdPlus. Private Sub CmdPlus_Click() End Sub
Внутри процедуры необходимо с клавиатуры добавить команду TextBox3.Text=Val(TextBox1.Text)+Val(TextBox2.Text)
Функция Val используется в процедуре для преобразования строковых значений, вводимых в текстовые поля, в десятичное число.
3) Процедура вычитания реализует вычитание двух чисел. Эта процедура должна изменить свойство Text объекта TextBox3 так, чтобы оно явилось разностью числовых значений свойства Text объектов TextBox1 и TextBox2. Эта процедура должна вызываться, если пользователь щелкнет по кнопке с надписью «-». Для написания этой процедуры выполнить двойной щелчок по кнопке «-», в результате откроется окно редактора кода, в котором будет помещена заготовка для процедуры обработки события Click объекта CmdMinus. Private Sub CmdMinus _Click() End Sub
Внутри процедуры необходимо с клавиатуры добавить команду TextBox3.Text=Val(TextBox1.Text)-Val(TextBox2.Text)
4) Создайте аналогично процедуры умножения и деления. На этом создание приложения Калькулятор завершено. Посмотрите в Окне проектов Project структуру созданного Вами проекта и включите ее в отчет о выполнении лабораторной работы. Сохраните свой проект полностью. 5) Сохраните свой проект с помощью команды File→Export File в своей папке под именем Калькулятор.frm. Посмотрите, какие файлы при этом появятся. 6) Вернитесь в Word и завершите работу приложения, сохранив файл под своей фамилией. Если при выходе появится диалоговое окно запросом «Общий шаблон Normal был изменен. Сохранить его?» – в ответ необходимо нажать клавишу Да для сохранения в созданной формы и проекта в шаблоне Normal. 7) Запустите файл Калькулятор.frm из Проводника – он должен открыться в среде Visual Basic как новый проект Project1.exe. Проверьте его работу. 8) По окончании тестирования и отладки проекта создать исполняемый файл в своей папке с расширением .exe используя команду File→Make Project1.exe. Это позволит использовать приложение в системе Windows без поддержки Visual Basic. Запустите этот файл из программы Проводник и проверьте его работу. 9) Добавить в созданное приложение новые управляющие элементы по указанию преподавателя.
8.
ДОПОЛНИТЕЛЬНАЯ РАБОТА НАД ПРОЕКТОМ
Добавим дополнительные возможности в программе Калькулятор. 1) Открыть файл под своей фамилией, созданный в предыдущем разделе, зайти в IDE VBA. Добавить в проект новую пользовательскую форму и задать для нее значения свойства Name – Form2, а свойства Caption – Калькулятор 1. Щелкнуть в окне проектов Form1 и, выделив с помощью мыши все элементы управления, размещенные в ней, скопировать их в буфер обмена. А затем щелкнуть в окне проектов Form2, вставить в нее элементы управления из буфера обмена и снять выделение. 2) Расширить форму Form2 и добавить на нее с панели Toolbox следующие элементы управления: Image (Рисунок), ListBox (Список), ComboBox (Комбинированное поле), TextBox4 (текстовое поле), две кнопки CommandButton, присвоив для них значения свойства Name – CmdData и CommandButton1, соответственно, а свойства Caption – Вариант и Среднее, соответственно. Разместить элементы в форме в соответствии с Рис. 8.1.
Рис. 8.1 3) Скопировать программный код, относящийся к форме Form1 в буфер обмена. Щелкнуть в окне проектов по форме Form2 и, выбрав в контекстном меню команду ViewCode, открыть окно кода, относящееся к Form2. Это окно содержит всего одну инструкцию ' Опции VBA Option Explicit
Вставить в окно кода для Form2 из буфера обмена следующие пять процедур, которые уже использовались в Form1: ' Процедура суммирования Private Sub CmdPlus_Click() TextBox3.Text=Val(TextBox1.Text)+Val(TextBox2.Text) End Sub ' Процедура вычитания Private Sub CmdMinus_Click() TextBox3.Text=Val(TextBox1.Text)-Val(TextBox2.Text) End Sub ' Процедура умножения Private Sub CmdUmn_Click() TextBox3.Text=Val(TextBox1.Text)*Val(TextBox2.Text) End Sub ' Процедура деления Private Sub CmdDelen_Click() TextBox3.Text=Val(TextBox1.Text)/Val(TextBox2.Text) End Sub ' Процедура выхода Private Sub CmdExit_Click() End End Sub 4) Для корректной работы программы необходимо в разделе описания переменных модуля объявить переменные, используемых в них: 'Переменные уровня модуля Dim bytA As Byte Dim strA1 As String Dim strA2 As String Private i As Integer Private j As Integer Private Среднее As Double Dim v As Integer 5) Два элемента управления ListBox (Список) и ComboBox (Комбинированное поле) будут использоваться в программе для формирования возможных вариантов исходных данных для работы калькулятора.
Первый из них применяется для хранения списка значений, из которых пользователь может выбрать одно или несколько значений. Второй сочетает в себе функциональные возможности списка ListBox и поля ввода TextBox. В отличие от ListBox ComboBox отражает только один элемент списка, не позволяет одновременно выделять несколько элементов списка. Дополнительно он может вводить значение через поле ввода, как это делает элемент управления TextBox. Для того чтобы значения в поле вводились автоматически при вызове программы Form2, включим в программу процедуру активизации формы Private Sub UserForm_Activate(), внутри которой поэлементно в цикле добавляются элементы в список с помощью метода AddItem. 'Процедура активизации формы Private Sub UserForm_Activate() 'Заполнение комбинированного списка, формирующего ‘номера вариантов ComboBox1.Clear For i=1 To 3 ComboBox1.AddItem i Next i 'Заполнения списка, формирующего список данных For i=1 To 6 ListBox1.AddItem i Next i End Sub 6) Процедура Private Sub CmdData_Click() активизируется при нажатии на клавишу Вариант и в зависимости от варианта, выбранного в списке или введенного в поле ввода элемента управления ComboBox, заполняет поля ввода TextBox1 и TextBox2 значениями из соответствующих полей Списка. ' Процедура присвоения данных из списка в зависимости от варианта Private Sub CmdData_Click() TextBox3.Value = " " v = Val(ComboBox1.Text) If v=1 Then TextBox1.Value = ListBox1.List(0)
TextBox2.Value = ListBox1.List(1) ElseIf v = 2 Then TextBox1.Value = ListBox1.List(2) TextBox2.Value = ListBox1.List(3) Else TextBox1.Value = ListBox1.List(4) TextBox2.Value = ListBox1.List(5) End If End Sub 7) Добавить в программный модуль процедуру Private Sub CommandButton1_Click() для обработки события по нажатию кнопки «Среднее». 'Процедура вычисления среднего Private Sub CommandButton1_Click() With ListBox1 Среднее = 0: j = 0 For i=0 To .ListCount-1 If .Selected(i) = True Then Среднее=Среднее+.List(i) j=j+1 End If Next i Среднее=Среднее/j TextBox4.Text=CStr(Среднее) End With End Sub
Для того чтобы иметь возможность выбирать несколько значений из списка ListBox, необходимо задать для свойства MultiSelect этого элемента требуемое значение. Однако это свойство не может задаваться программно, а устанавливается лишь в окне Properties и имеет три допустимые значения: – 0 (выбор только одного элемента); – 1 (разрешен выбор нескольких элементов либо щелчком, либо клавишей Пробел);
– 2 (разрешено использование клавиши Shift для выбора ряда последовательных элементов). Свойство Select предоставляет возможность проверить, выбран ли элемент с указанным индексом. 8) В VBA также имеется встроенное окно ввода InputBox, которое позволяет ввести данные в программу через текстовое поле на диалоговой панели. Соответствующая функция имеет следующий синтаксис: InputBox ( Приглашение$, Заголовок$, [ПоУмолчанию$] )
В процессе выполнения этой функции появляется диалоговая панель с текстовым полем. В строке заголовка панели будет печататься значение второго аргумента Заголовок$, на самой панели печатается значение аргумента Приглашение$, а в текстовом поле печатается значение аргумента ПоУмолчанию$ (если это значение отсутствует, то содержимое текстового окна также отсутствует). Введенная пользователем строка становится значением функции. Добавить в начале процедуры Private Sub UserForm_Activate() следующие строки: strA1 = InputBox("Введите первый операнд",_ "Присвоение значений операндам") strA2 = InputBox("Введите второй операнд", _ "Присвоение значений операндам ") TextBox1.Value = Val(strA1) TextBox2.Value = Val(strA2)
В результате при запуске процедуры на экране последовательно появляются два диалоговых окна с текстовыми полями, куда можно ввести значения. При нажатии на клавишу ОК в первых двух текстовые окнах калькулятора появятся введенные значения, а при нажатии клавиши Cancel – по умолчанию введутся нулевые значения. 9) С помощью функции MsgBox можно добавлять в проект панели сообщений. В простейшем случае функция MsgBox работает в режиме оператора и используется для вывода сообщений не на форме, а на специальной панели сообщений. Синтаксис функции в режиме оператора: MsgBox Сообщение$ [,ЧислоКод1+ЧислоКод2] [,Заголовок$]
В результате на экране появится панель сообщений со строкой Сообщение$, в строке заголовка будет выведено Заголовок$, а аргумент ЧислоКод1+ЧислоКод2 определяет внешний вид панели. С помощью одного числа, являющегося суммой чисел ЧислоКод1 и ЧислоКод2, можно одновременно установить определенную пиктограмму и определенную комбинацию кнопок, размещенных на панели сообщений. Значения чисел ЧислоКод1 и ЧислоКод2 приведены в таблицах 8.1 и 8.2. Таблица 8.1 Таблица 8.2. ЧислоКод1
Пиктограмма
16
Х
32
?
48 64
! i
ЧислоКод2 0 1 2 3 4 5
Набор кнопок ОК ОК, Отмена Стоп, Повтор, Пропустить Да, Нет, Отмена Да, нет Повтор, Отмена
Например число 36 можно рассматривать как сумму чисел 4 (код комбинации кнопок Да, Нет) и 32 (код пиктограммы «Вопрос»). Для вывода на панели сообщений с заголовком "MsgBox в режиме оператора" сообщения "Ввод закончен" достаточно добавить в процедуру Private Sub UserForm_Activate()строку: MsgBox "Ввод закончен",48,"MsgBox в режиме оператора"
В случае записи аргументов в скобках, функция MsgBox получает определенное значение, которое может быть присвоено какой-либо переменной. Синтаксис функции при этом следующий: MsgBox (Сообщение$ [, ЧислоКод1+ЧислоКод2 ] [, Заголовок$ ] ) 10) Добавить в форму элемент управления Image (Рисунок), который используется для отображения графических файлов в формате BMP, CUR, GIF, ICO,JPG и WMF в форме. Включить в процедуру Private Sub UserForm_Activate() строки bytA = MsgBox("Будете работать с калькулятором?", _ 36, "Калькулятор") If bytA = 6 Then
Image1.Picture = LoadPicture("Полное имя файла") Else TextBox1.Value = " " TextBox2.Value = " " End If
В результате на экране появится сообщение "Будете работать с калькулятором?" и, в случае нажатия на клавишу Да значение функции, равное 6, присваивается целочисленной переменной bytA, а в форму загрузится рисунок и в первых двух текстовые окнах калькулятора останутся введенные значения, при нажатии на клавишу Нет рисунок не загрузится, а в текстовые окна очистятся. Добавить рисунок в форму можно и в окне Properties элемента управления Image (Рисунок), Значение False свойства AutoSize, устанавливаемое в окне Properties, позволяет вписать рисунок в выбранное окно, значение True выводит ту часть рисунка, которая помещается в окне. 11) Для доступа к созданному проекту из среды Microsoft Word удобно поместить соответствующую кнопку на требуемой панели инструментов. Для этого необходимо создать пустой макрос Макрос1() и назначить ему кнопку на требуемой панели инструментов. Добавьте в макросе всего одну строку, отображающую форму Form1 на экране Sub Макрос1() Form1.Show End Sub
12) Для создания нового раздела меню выбрать из меню Сервис команду Настройка. На вкладке Команда выбрать категорию Новое меню и перетащить появившуюся команду Новое меню в строку меню. Выбрать категорию Макросы и перетащить требуемый макрос в раздел меню Новое меню. Закрыть окно. 13) Проверить работу макроса с панели инструментов и из меню. 7. РАЗРАБОТКА АВТОМАТИЗИРОВАННОГО ПРИЛОЖЕНИЯ С ПОМОЩЬЮ VBA и WORD
Использование VBA позволяет автоматизировать процесс обработки документов с помощью написания и использования собственных макрокоманд. При этом, перед тем, как начать создавать свое автоматизированное приложение, необходимо определить степень необходимой автоматизации и выработать определенный подход к дизайну элементов проекта. Если до-
кумент должен быть определенным образом отформатирован или иметь заданные параметры страницы, то это можно осуществить лишь средствами самого Word. Если же требования к вводимым данным весьма строги и абсолютно негибки, то приложение только выиграет от применения пользовательских форм, позволяющих вводить данные только строго определенного типа, а также из VBA-программы, которая расположит их в определенных частях документа. 7.1.
Шаблоны
После формулировки требований к приложению приступают к созданию шаблона, который определит требуемое форматирование, параметры страницы, а также содержит коды макрокоманд и необходимые пользовательские формы. Начав с обычного документа или документа, основанного на похожем шаблоне, вставить в новый шаблон необходимые рисунки, таблицы и другие элементы. Разработать шаблон для первого листа текстовой технической документации (Рис. 9.1) в текстовом редакторе MS Word. Для этого установите на закладке Параметры страницы следующие значения полей: левое – 2 см, правое – 0,5 см, верхнее и нижние – минимально возможное. Затем с помощью таблицы создать в MS Word шаблон рамки со штампом заданных размеров и вписать в соответствующие ячейки общий неизменный текст. Пометить ключевые области шаблона, установив закладки. Закладки дают возможность VBA-программе быстро и безошибочно переходить к данной части документа. Такой подход обеспечивает быстрое выполнение различных действий в выделенной области, например, ввод текста, применение различных команд форматирования или перемещение точки вставки или курсора в то место, где пользователь должен ввести текст. Для создания закладки в шаблоне необходимо выполните следующие действия: 1) Указать место для закладки, переместив сюда точку вставки. 2) В меню Вставка выбрать команду Закладка. 3) Ввести имя закладки в поле Имя закладки и щелкнуть на кнопке Добавить. Добавить в шаблон следующие закладки: сcOsn – указывает место, куда вводится основная надпись; ccRazd – указывает место, куда вводится название раздела; ccList – указывает место, куда вводится номер листа; ccListov – указывает место, куда вводится количество листов;
Body
ccOsn 7
10
23
Изм Лист № докум.
15
10
Подп.
Дата
120
5
Разраб.
15
17
18
Литера
Лист
Листов
Пров.
ccList Н. контр. Утв.
ccRazd
ccGrupa Рис. 9.1
ccListov
ccGrupa – указывает место, куда вводится номер группы; Body – указывает место, куда по завершению макроса будет помещена точка вставки. Именно здесь должен вводится текст отчета. Установить на месте всех закладок выравнивание по центру, размер шрифта на месте закладки ccOsn – 20, а для всех остальных закладок – 10. На этом разработка шаблона завершена. Для сохранения разработанного шаблона выберите из меню Файл команду Сохранить как. В поле Имя файла введите имя шаблона, ФИО_Лист1 а в раскрывающемся списке Тип файла установите Шаблон документа. Щелкните на кнопке ОК, чтобы завершить команду. В результате шаблон будет сохранен в файле с именем ФИО_Лист1.dot. 7.2.
Разработка пользовательского интерфейса
Для ввода текста в штамп удобно воспользоваться специальной пользовательской формой. Среда проектирования VBA предлагает вам очень удобный способ разработки собственных диалоговых окон, которые позволяют ввести текст в документ сразу в необходимом формате. Это дает возможность пользователю не заботиться о правильном положении текста в документе или, использовать переменные документа для сохранения текста. Используя различные списки, переключатели, кнопки и другие управляющие элементы пользовательских форм, можно оказывать некоторую информационную помощь пользователю. Можно написать свою программу так, что прежде чем допустить пользователя к следующему этапу работы, будет проверяться, например, правильность введенных данных и использованных параметров. Благодаря наличию хорошо разработанных пользовательских форм, ввод данных будет происходить гораздо быстрее. Однако прежде чем приступать к разработке форм, необходимо продумать саму форму, например, рассмотреть все виды информации, которые вам нужно получить от пользователя. Также необходимо определить, какие элементы управления процессом создания документа можно предоставить пользователю. Разработать пользовательскую форму MemoForm1 (Рис. 9.2) для заполнения штампа, задав следующие значения свойству Name для текстовых полей: txtOsn, txtListov, txtGrupa, а для комбинированного поля – txtRazd.
Рис. 9.2
7.3.
Написание VBA-программы
После разработки шаблона и формы приступают к написанию VBAпрограммы. Необходимо создать несколько процедур VBA, которые отображают и проверяют форму: – Макрос для отображения формы. В нашем шаблоне это будет процедура, которая запускается при создании нового документа. – Процедура отмены формы. Это обычная процедура для одной из командных кнопок формы. – Процедуры, которые будут обрабатывать события, происходящие при работе с формой. Эти процедуры состоят из команд инициализации формы, введения и проверки данных, обработки щелчков и т.д. Каждый проект содержит модуль документа с именем ThisDocument, для открытия которого необходимо, дважды щелкнуть на его значке. Для каждого документа обязательно задаются три процедуры. Document_New выполняется каждый раз при создании нового документа с заданным шаблоном. Document_0pen выполняется каждый раз, когда открывается документ с заданным шаблоном. Document_Close выполняется перед тем, как документ с заданным шаблоном будет закрыт. Создайте процедуру в модуле документа ThisDocument, которая будет выполняться при создании нового документа на основе шаблона Лист1.dot. Private Sub Document_New() 'Отображение формы на экране MemoForm1.Show 'Выбор закладки ccOsn ActiveDocument.Bookmarks("ccOsn").Select 'Перенос данных из соответствующего 'пользовательской формы в документ
окна
Selection.TypeText Text:=MemoForm1.txtOsn.Text ActiveDocument.Bookmarks("ccGrupa").Select Selection.TypeText Text:=MemoForm1.txtGrupa.Text ActiveDocument.Bookmarks("ccRazd").Select Selection.TypeText Text:=MemoForm1.CboRazd.Text ActiveDocument.Bookmarks("ccListov").Select Selection.TypeText Text:=MemoForm1.txtListov.Text 'Выбор закладки ccList и вставка поля PAGE ActiveDocument.Bookmarks("ccList").Select Selection.Fields.Add Range:=Selection.Range, Type:= _ wdFieldEmpty, Text:= "PAGE \* Arabic ", _ PreserveFormatting:=True 'Переход на закладку для начала ввода информации ActiveDocument.Bookmarks("Body").Select End Sub
Для ячейки таблицы «Лист» удобно использовать поле MS Word Page, которое вставляет номер текущей страницы. Для переключения между отображением результата кодов полей и отображением самих кодов нажмите комбинацию Alt+F9, чтобы включить отображение кодов полей нажмите Alt+F9 еще раз. Все время, пока форма находится на экране, должна работать определенная VBA-процедура, чтобы выполнять действия по обработке происходящих в форме событий. Процедуры, обрабатывающие данные события, генерируются в VBA автоматически во время создания формы и ее управляющих элементов. И тогда все, что вам остается сделать, – это написать код для всех действий, которые вы хотите связать с определенными событиями. Процедура Activate выполняется каждый раз при загрузке формы. Этой процедурой обычно пользуются для выполнения любых предварительных действий, которые должны произойти перед тем, как допустить пользователя к работе с формой. Метод AddItem поля со списком вызывается три раза для описания данных из раскрывающегося списка «Вид схемы». Свойство Text для текстовых полей устанавливает начальное, пустое значение. Private Sub UserForm_Activate() Me.CboRazd.Clear Me.CboRazd.AddItem "Схема структурная", 0
Me.CboRazd.AddItem "Схема электрическая функциональная",1 Me.CboRazd.AddItem "Схема электрическая принципиальная",2 Me.txtOsn.Text = "" Me.txtListov.Text = "" Me.txtGrupa.Text = "" End Sub
Написать в модуле формы следующий программный код, который выполняется при нажатии на клавишу Выход, расположенную в форме. Private Sub cmdExit_Click() Dim cmdExit As Integer cmdExit = True If Len(Me.txtOsn.Text)=0 Then cmdExit = False If Len(Me.CboRazd.Text)=0 Then cmdExit = False If Len(Me.txtListov.Text)=0 Then cmdExit = False If Len(Me.txtGrupa.Text)=0 Then cmdExit = False If cmdExit = True Then Me.Hide Else MsgBox "Введите информацию во все поля формы",_ 48, "Ошибка ввода данных" End If End Sub Процедура начинается с объявления целочисленной переменной cmdExit с начальным значением True. Далее функция Len проверяет длину введенных строк в полях формы. Если хотя бы одно из полей будет пустым, то на экран выводится сообщение, предупреждающее пользователя, что необходимо заполнить форму до конца. На этом процесс создания шаблона завершен. Сохраните измененный шаблон Лист1.dot. Выйдите из MS Word. Загрузив снова MS Word, создайте новый документ на основе своего шаблона Лист1.dot и проверьте его работу. Лист1.dot а в раскрывающемся списке Тип файла установите Шаблон документа. Щелкните на кнопке ОК, чтобы завершить команду.
10. MS Excel
АВТОМАТИЗАЦИЯ ПРОЕКТОВ С ПОМОЩЬЮ VBA и
При помощи MS Excel можно решить множество разнообразных задач. Использование средств VBA, позволяет дополнительно создавать максимально удобный и гибкий интерфейс, приспособленный для решения конкретной задачи, предусматривать средства защиты от несанкционированных действий, а также автоматизировать процесс создания электронных таблиц с помощью написания и использования собственных макрокоманд. 10.1. Создание макроса в среде MS Excel
Написать макрокоманду, создающую рабочую таблицу, в которой рассчитывается налог и итоговая цена товара. Рабочая таблица содержит ячейку ввода и две вычисляемые ячейки вывода. В ячейку ввода необходимо ввести стоимость товара, а в ячейках вывода будут отображены налог и цена. Для этого выполните следующие действия: 1) Открыть новую рабочую книгу в среде MS Excel. 2) Выбрать команду Сервис→Запись макроса; 3) В поле Имя макроса ввести Макрос1; 4) Щелкнуть в ячейке С6 и ввести Стоимость; 5) Щелкнуть в ячейке С7 и ввести Налог; 6) Щелкнуть в ячейке С8 и ввести Всего; 7) Щелкнуть в ячейке D6 и ввести 12,43; 8) Щелкнуть в ячейке D7 и ввести =D6*0,0825; 9) Щелкнуть в ячейке D8 и ввести =D6+D7; 10) Выделить ячейки D6:D8, выбрать команду Формат Ячейки. Выбрать Денежный формат «р.», 2 знака после запятой; 11) Щелкнуть в ячейке D7, выбрать команду Формат Ячейки→Граница. Щелкнуть в поле Сверху и затем – на кнопке ОК; 12) Остановить запись макроса. 13) Запустить макрос на исполнение, в результате в среде MS Excel создается таблица (Рис. 10.1), содержащая следующие ячейки. Стоимость 12,30р. Налог 10,15р. Всего 22,45р.
Рис. 10.1.
Текст только что записанного макроса имеет следующий вид: Sub Макрос1() Range("C6").Select ActiveCell.FormulaR1C1 = "Стоимость" Range("C7").Select ActiveCell.FormulaR1C1 = "Налог" Range("C8").Select ActiveCell.FormulaR1C1 = "Всего" Range("D6").Select ActiveCell.FormulaR1C1 = "12.43" Range("D7").Select ActiveCell.FormulaR1C1 = "=R[-1]C*0.825" Range("D8").Select ActiveCell.FormulaR1C1 = "=R[-2]C+R[-1]C" Range("D6:D8").Select Selection.NumberFormat = "#,##0.00$" Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Borders(xlEdgeLeft).LineStyle = xlNone Selection.Borders(xlEdgeTop).LineStyle = xlNone With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End Sub Если сопоставить текст программы с только что сделанными шагами, то можно увидеть, что каждый шаг записан в одной или двух строках кода программы (процедуры). В процедуре записано также много дополнительных строк: в них устанавливаются параметры, которые не задавались явно во время создания рабочего листа. Эти дополнительные строки появляются в момент щелчка на кнопке ОК в диалоговом окне, в котором устанавливаются какие-либо параметры. Хотя можно изменить только один параметр, но для каждого параметра диалогового окна в записываемом макросе появится соответствующая строка. Например, хотя в диалоговом окне Рамка устанавливалась только опцию Снизу, в процедуру
вставлено восемь строк кода, устанавливающих значения для всех остальных параметров. В большинстве случаев удаление этих лишних строк никак не повлияет на выполнение процедуры. За заголовком процедуры следует 12 операторов, которые последовательно выделяют каждую ячейку в интервале C6:D8 и вставляют в эти ячейки текст или формулу. Четыре последних оператора из них записывают в ячейки формулы. В них используется система адресации ячеек R1C1, а не прямая ссылка на эту ячейку. Система адресации R1C1 означает строку (Row) и столбец (Colomn), соответствующие активной ячейке. 10.2. Оптимизция макроса
При написании той же самой процедуры вручную программный код можно существенно сократить. Скопировать макрос через буфер обмена и отредактировать его следующим образом: Sub Макрос2() Range("C6")="Стоимость" Range("C7")="Налог" Range("C8")="Всего" Range("D6")= "12.43" Range("D7")= "=R[-1]C*0.825" Range("D8")="=R[-2]C+R[-1]C" Range("D6:D8") = "#,##0.00$" Range("D8").Select With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End Sub Проверить работу отредактированного макроса Макрос2. 10.3. Автоматизация создания электронных таблиц
Создать в MS Excel программу для построения графика функции y=xk. Результаты работы программы приведены на Рис. 10.2.
Рис. 10.2. 1) Объединить ячейки A1 и B1 и вписать в полученную ячейку слова «Исходные данные». 2) Выделить ячейки А3:В24, выбрать в контекстном меню команду Формат ячеек→Граница и задать внешние и внутренние границы для выбранных ячеек. 3) Заполнить ячейки, в соответствии с таблицей 10.1. Таблица 10.1. Ячейка
A2 B2
Значение x
y
D1
D2
D3
Степень(k) Min(x) Шаг изменения х
E1
E2
E3
2
-10
1
4) Добавить в программу с помощью панели Элементы управления три командные кнопки в режиме конструктора и через контекстное меню назначить им следующие значения свойств Name и Caption, указанные в таблице 10.2.
Таблица 10.2 Свойство Name Caption
Кнопка 1
Кнопка 2
Кнопка 3
CommandButton1 CommandButton2 Diagram Очистить Заполнить Построить таблицу таблицу диаграмму
5) Выполнить двойной щелчок на клавише CommandButton1, в результате откроется окно редактора кода, в котором будет помещена заготовка для процедуры обработки события Click объекта CommandButton1. Внутри процедуры необходимо дописать следующий код: Private Sub CommandButton1_Click() Range("A3:B24).ClearContents ActiveSheet.ChartObjects.Delete End Sub Записанная процедура очищает ячейки таблицы в диапазоне ячеек A3:B24 и удаляет диаграмму ChartObjects из рабочего листа. 6) Выполнить двойной щелчок на клавише CommandButton2, в результате откроется окно редактора кода, в котором будет помещена заготовка для процедуры обработки события Click объекта CommandButton2. Внутри процедуры необходимо дописать код, с помощью которого происходит заполнение соответствующих ячеек таблицы в диапазоне ячеек A3:B24. Private Sub CommandButton2_Click() X = Range("E2").Value k = Range("E1").Value For i = 3 To 24 Cells(i, 1).Value = X Cells(i, 2).Value = X^k X = X+Range("E3").Value Next i End Sub
7) Выполнить двойной щелчок на клавише Diagram и дописать следующий код, в результате откроется окно редактора кода, в котором будет помещена заготовка для процедуры обработки события Click объ-
екта Diagram. Внутри процедуры необходимо дописать код, с помощью которого происходит построение диаграммы. Private Sub Diagram_Click() Range("D12").Select ActiveSheet.ChartObjects.Delete Dim ch As ChartObject Set ch = ActiveSheet.ChartObjects.Add_ (215.5, 110.5, 333.25, 200.175) ch.Chart.ChartWizard Source:=Range("A3:B24"),_ gallery:=xlLine, Format:=2, PlotBy:=xlColumns,_ CategoryLabels:=1, SeriesLabels:=1, _ Title:="График функции y=x^" & Range("E1")_ Value, CategoryTitle:="x", ValueTitle:="y" End Sub
8) Отключить режим конструктора и поверить работу программы для различных значений параметров. 9) Оформить отчет, включив в него тексты всех программ с необходимыми коментариями. Пояснить за счет чего программа из п. 10.3. защищена от несанкционированных действий. 10) Разработать алгоритм решения задачи и реализовать этот алгоритм в среде VBA для варианта, заданного преподавателем из ПРИЛОЖЕНИЯ 4.
ПРИЛОЖЕНИЕ 1. Наиболее часто используемые свойства форм
Таблица П1.1. Свойства форм, задающие имя и внешний вид формы Свойство Описание 1 2 Name Возвращает или устанавливает имя пользовательской формы Caption Возвращает или устанавливает текст, отображаемый в строке заголовка формы Appearance Возвращает или устанавливает вид формы в период выполнения кода. Допустимые значения: • 0 (плоский); • 1 (объемный) BorderStyle Возвращает или устанавливает тип границы. Достижимо только на этапе конструирования. Допустимые значения: • VbBSNone или 0 (нет границы, причем заголовок формы не отображается); • VbFixedSingle или 1 (пользователь не может изменять размер окна); • VbSizable или 2 (используется по умолчанию, пользователь может изменять размер окна); • VbFixedDouble или 3 (рамка формы имеет двойную толщину); • VbFixedToolWindow или 4 (используется для вывода окна с кнопкой Close, заголовок окна отображается в уменьшенном шрифте, пользователь не может изменять размер окна); • VbSizableToolWindow или 5 (как в предыдущем случае, но пользователь может изменять размер окна). MaxButton, Логические свойства, доступные только для чтения, которые при значении равном True указывают на MinButton присутствие в форме кнопок Maximize и Minimize, соответственно.
1 ControlBox
BackColor, ForeColor
Icon
Moveable WindowState
Продолжение таблицы П1.1. 2 Логическое свойство, доступное только для чтения, которое при значении равном True указывают на присутствие в форме раскрывающегося меню, содержащее команды восстановления, перемещения, изменения размеров и закрытия формы. Возвращают и устанавливают цвет фона и текста формы. Цвета зашифровываются в шестнадцатеричной системе счисления. Для удобства работы с цветами часто вместо их шестнадцатеричного представления используются константы, встроенные в Visual Basic (табл. П1.2) Устанавливает или возвращает значок, отображаемый при минимизации окна формы. При программной установке данного свойства используется функция LoadPicture, в параметре которой приводится ссылка на полное имя файла, используемого в качестве значка. В Visual Basic имеется богатая коллекция стандартных значков, располагаемая в папке GraphicsMcons. В следующем примере в качестве значка отображается российский флаг: Icon = LoadPicture ("\Common\Graphics\Icons\Flags\_ Flgrus.ico") Логическое свойство, которое определяет, может ли пользователь передвигать форму. Возвращает или устанавливает вид формы во время выполнения кода. Допустимые значения: • VbNormal или 0 (нормальный); • VbMinimized или 1 (в виде значка);
FillColor
• VbMaximized или 2 (полноэкранный). Возвращает или устанавливает цвет заполнения графического изображения, созданного методами Line и Circle.
1 FillStyle
Продолжение таблицы П1.1. 2 • Возвращает или устанавливает тип заполнения изображения, созданного графическими методами Line и Circle. Допустимые значения: • VbFSSolid или 0 (сплошной); • VbFSTransparent или 1 (прозрачный); • VbHorizontalLine или 2 (горизонтальные линии); • VbVerticalLine или 3 (вертикальные линии); • VbUpwardDiagonal или 4 (диагональные направленные вверх линии); • VbDownwardDiagonal или 5 (диагональные направленные вниз линии); • VbCross или 6 (сетка);
DrawWidth DrawStyle
• VbDiagonalCross или 7 (диагональная сетка). Возвращает или устанавливает толщину линии для графических методов Line, Circle и Pset. Возвращает или устанавливает тип линии для графических методов Line и Circle. Допустимые значения: • VbSolid или 0 (сплошная линия, используется по умолчанию); • VbDash или 1 (штриховая); • VbDot или 2 (пунктирная); • VbDashDot или 3 (штрихпунктирная); • VbDashDotDot или 4 (штрихпунктирная с двумя точками); • VbInvisible или 5 (прозрачная); • VbInsideSolid или 6 (сплошная внутри).
1 DrawMode
Продолжение таблицы П1.1. 2 Задает происходящее при размещении одного шаблона поверх другого. Используется при создании анимации. Допустимые значения: VbBlackness, VbNotMergePen, VbMaskNotPen, VbNotCopyPen, VbMaskPenNot, Vblnvert, VbXorPen, VbNotMaskPen, VbMaskPen, VbNotXorPen, VbNop, VbMergeNotPen, VbCopyPen, VbMergePenNot, VbMergePen, VbWhiteness со значениями от 0 до 15. Таблица П1.2. Константы, задающие цвет
Константа VbBlack VbRed VbGreen VbYellow
Значение &HO &HFF
Цвет
Константа Черный VbBlue КрасVbMaный genta Зеленый VbCyan
&HFFO O &HFFFF Желтый
Вместо прямого указания шестнадцатеричного кода цвета, довольно часто цвет удобнее задавать, используя функции RGB и QBCoior. Функция RGB позволяет получить любой цвет, смешивая красную, зеленую и синюю компоненты различной интенсивности. Синтаксис: RGB (Red, Green, Blue)
VbWhite
Значение
Цвет
&HFFOOOO &HFFOOFF
Синий Розовый
&HFFFFOO
Голубой
&HFFFFFF
Белый Таблица П1.3.
Цвет
Red
Green
Blue
Черный Синий Зеленый Голубой Красный Розовый Желтый Белый
0 0 0 0 255 255 255 255
0 0 255 255 0 0 255 255
0 255 0 255 0 255 0 255
Параметры: Red – целое число из диапазона от 0 до 255, указывающее красную компоненту цвета; Green – целое число из диапазона от 0 до
255, указывающее зеленую компоненту цвета; Blue – целое число из диапазона от 0 до 255, указывающее синюю компоненту цвета. Функция QBCoior возвращает шестнадцать основных цветов в соответствии значению параметра. Синтаксис: QBCoior(color), где color – это целое число из диапазона от 0 до 15. Таблица П1.4. Соответствие между цветами и значением параметра функции QBCoior Число
Цвет
Число
Цвет
Число
Цвет
Число
0
Черный 4
Красный 8
Серый
12
1
Синий
Розовый 9
13
2
Зеленый 6
Желтый
10
3
Голубой 7
Белый
11
Светлосиний Светлозеленый Светлоголубой
5
14 15
Цвет Светлокрасный Светлорозовый Светложелтый Насыщенный белый
Таблица П1.5. Свойства, позволяющие выводить рисунки в форме и восстанавливать на ней графическое изображение, а также задающие тип и цвет заполнений Свойство Picture
AutoRe draw
ClipControls
Описание Определяет рисунок, отображаемый как фон формы. При программной установке данного свойства используется функция LoadPicture. Ее параметр задает полное имя растрового файла, используемого в качестве рисунка Логическое свойство, по умолчанию принимающее значение False. В этом случае, любое графическое изображение, созданное графическими методами, в форме теряется в том месте, где она хотя бы временно закрыта другим окном. Если свойство принимает значение True, то изображение восстанавливается, так как его образ в этом случае хранится в буфере обмена Логическое свойство, по умолчанию принимающее значение True. В этом случае, Windows определяет отсекаемую область для заднего фона формы перед событием Paint . Отсекаемая область окружает все неграфические элементы управления. Во время события Paint Windows снова прорисовывает задний план, не затрагивая неграфических элементов управления
Не используя элементов управления непосредственно в форме, можно выводить текст при помощи метода Print (Таб. П1.6). Таблица П1.6. Свойства, задающие параметры и координаты шрифта текста в форме Свойство
Описание
Font FontBold FontItalic FontUnder1ine FontStrikethru FontTransparent
Возвращает или устанавливает шрифт. Логические свойства, возвращающие или устанавливающие тип шрифта: полужирный, курсивный, подчеркнутый, перечеркнутый.
FontName FontSize CurrentX CurrentY
Left Тор Height Width
Логическое свойство, возвращающее или устанавливающее прозрачность области текста. При значении равном True текст выводится поверх графических объектов, созданных в форме графическими методами. При значении равном False символы текста обладают непрозрачным фоном Возвращают или устанавливают имя и размер шрифта. Возвращают или устанавливают координаты в форме, где при помощи метода Print будет выводиться текст или при помощи графических методов рисоваться рисунок. По умолчанию координаты измеряются в твипах и координата левого верхнего угла формы – (0, 0). В случае переопределения системы координат в форме, данные свойства задают координаты в заданной системе координат. Возвращают или устанавливают местоположение верхнего левого угла и формы. Возвращают или устанавливают высоту и ширину формы. Эти свойства включают в себя толщину границы формы. Кроме того, в Height входит и высота заголовка формы. Если надо работать с внутренними размерами формы, без учета границы толщины границы и высоты заголовка, то воспользуйтесь свойствами ScaleHeight и ScaleWidth.
Основной единицей измерения этих свойств является твип (twip): 1 дюйм – 2.54 см; 1 дюйм – 1440 твипов; 1 см – 567 твипов. Кроме твипов в Visual Basic в качестве единиц измерения используются также пункты (в одном дюйме 72 пункта), пиксели (наименьшая единица измерения разрешения монитора или принтера; число пикселей в дюйме зависит от разрешающей способности монитора или принтера). Таблица П1.7. Свойства, задающие единицы измерения и систему координат в форме Свойство
Описание
ScaleHeight ScaleWidth ScaleLeft ScaleTop ScaleMode
Устанавливают или возвращают координаты правого нижнего угла формы Устанавливают или возвращают координаты левого верхнего угла формы. По умолчанию приравнены нулю Устанавливает единицы измерения. Допустимые значения: • VbUser или 0 (определенная пользователем единица измерения) • VbTwips или 1 (твипы; используется по умолчанию) • VbPoints или 2 (пункты) • VbPixels или 3 (пиксели) • VbCharacters или 4 (символы) • VbInches или 5 (дюймы) • VbMillimeters или 6 (миллиметры) • VbCentimeters или 7 (сантиметры)
Таблица П1.8 Свойства, управляющие формой указателя мыши Свойство
Описание
1 2 Mouse- Устанавливает форму указателя мыши. Pointer
Продолжение табл. П1.8 1 2 Mouse- Если свойство MousePointer равно VbCustom, то оно позвоIcon ляет задать конкретный вид пользовательского курсора. При программной установке данного свойства используется функция LoadPicture. Ее параметр задает полное имя файла, используемого в качестве значка. Файлы пользовательских курсоров имеют расширение CUR. Большой список файлов пользовательских курсоров находится в папке Graphics\Cursors. В следующем примере устанавливается курсор в форме руки с поднятым вверх указательным пальцем. Mouselcon=LoadPicture("\Common\Graphics\Cursors\H_point.cur") MousePointer = VbCustom Таблица П1.9. Константы, задающие форму указателя мыши Константа VbDefault VbArrow VbCrosshair Vblbeara VblconPointer VbSizePointer VbSizeNESW VbSizeNS VbSizeNWSE VbSizeWE VbUpArrow VbHourgiass VbNoDrop VbArrowHourglass VbArrowQuestion VbSizeAll VbCustom
Значение 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 12 99
Указатель По умолчанию
Текущий значок для объекта
Крест из двухконечных стрелок Значок, указанный в свойстве MouseIcon
ПРИЛОЖЕНИЕ 2. Список элементов управления
Элементы управления TextBox – Поле ввода Label
– Надпись
CommandButton – Кнопка
Имя Text Label Command
ListBox – Список
List
ComboBox – Комбинированное поле
Combo
OptionButton – Переключатель
Option
CheckBox – Флажок
Check
Frame – Рамка
Frame
HScrollBar – Горизонтальная полоса прокрутки VScrollBar – Вертикальная полоса прокрутки Image – Рисунок
– Счетчик
HScroll VScroll Image
Кнопка
ПРИЛОЖЕНИЕ 3.
Таблица П3.1. Наиболее часто используемые методы формы Метод Show Hide Move PrintForm
Описание Отображает форму на экране Закрывает форму Изменяет местоположение и размер формы Печатает изображение формы
Таблица П3.2. Методы, позволяющие строить графические изображения в форме Метод
Описание
1
2 Очищает форму, закрашивая ее цветом фона, т. е. цветом заданным свойством BackColor. Выводит изображение в определенной области формы. Синтаксис: PaintPicture picture, xl, yl, widthl,_ height1, y2, width2, height2, opcode
CIs PaintPicture
• Picture – источник графического изображения, которое должно быть размещено в форме; • xl, yl– координаты левого верхнего угла, где будет располагаться рисунок; • widthl, height1 – ширина и высота рисунка;
Print
• х2, у2 и width2, height2 – задают координаты левого верхнего угла и ширину и высоту той части источника графического изображения, заданного параметром Picture, которая будет размещена в форме; • opcode – задает тип побитового смешивания размещаемого и уже, возможно, существующего изображения. Как правило, на форме размещается все изображение, заданное параметром Picture, поэтому параметры х2, у2 и width2, height2 обычно не используются. Отображает в форме строку текста. Синтаксис: Print Строка
Продолжение табл. П3.2 1 Scale
PSet
Point Circle
2 Устанавливает в форме систему координат. Синтаксис: Scale (xl, yl) - (х2, у2) , где (xl, yl) и (х2, у2) – новые координаты левого верхнего и правого нижнего угла формы. Для того чтобы вернуться в масштаб, используемый по умолчанию, надо применить метод Scale без параметров. Создает точку заданного цвета. Синтаксис: PSet [Step] (x, у), [color] • (х, у) – абсолютные координаты точки (когда ключевое слово step не используется) и относительные координаты точки (в противном случае); • color – задает цвет точки; если этот параметр опущен, то цвет устанавливается равный цвету заданным свойством ForeGround. Возвращает цвет в определенной точке. Синтаксис: Point(х, у) Рисует окружность, дугу или эллипс заданного цвета. Синтаксис: Circle [Step] (х, у), radius, [color,_ start, end, aspect] • (х, у) – абсолютные координаты центра (когда ключевое слово step не используется) и относительные координаты центра (в противном случае); • radius – радиус; • color– задает цвет точки; если этот параметр опущен, то цвет устанавливается равный цвету заданным свойством BackColor; • start и end – углы в радианах, задающие начало и конец дуги, если рисуется не окружность, а дуга; • aspect – задает в эллипсе отношение длины вертикальной оси к длине горизонтальной.
Продолжение табл. П3.2 1 Line
2 Рисует линию или прямоугольник заданного цвета. Синтаксис: Line [Step](xl,yl)–[Step](x2,y2),[color], [B[F]] • (xl, yl) и (х2, у2) – абсолютные координаты точек, которые соединяет линия (когда ключевое слово step не используется) и относительные координаты точки или точек (в противном случае). Если первая точка опущена, то линия рисуется от текущей точки ко второй точке; • color – задает цвет точки; если этот параметр опущен, то цвет устанавливается равный цвету заданным свойством BackColor; • В – вместо линии вычерчивается прямоугольник с противоположными углами в заданных точках; цвет и стиль закрашивания прямоугольника задается свойствами Filistyle и FillColor; • BF– прямоугольник закрашивается цветом заданным свойством BackColor, игнорируя установки свойств Filistyle и FillColor.
При работе с формами особое место занимают следующие три инструкции (Табл. П3.3), которые управляют процессами начала и завершения работы с формой. Таблица П3.3. Инструкция Описание Load Загружает форму или элемент управления в память.Синтаксис: Load object Unload Выгружает форму или элемент управления с экрана и из памяти. Синтаксис: Unload object End Завершает выполнение кода без генерации событий UnloadQueryUnload или Terminate. Поэтому завершение работы приложения по инструкции End игнорирует код, написанный в процедурах, обрабатывающих перечисленные события.
Таблица. П3.4 Некоторые общие для форм и элементов управления события Событие Описание Initilize Происходит во время конфигурирования формы, но до ее загрузки Load Происходит после инициализации формы, но до ее отображения на экран Unload Событие противоположное Load. Обычно используется для того, чтобы уточнить, действительно ли пользователь желает закрыть форму QueryUnload Событие, происходящее перед событием Unload. Также используется для того, чтобы создать запрос у пользователя, действительно ли он хочет закрыть окно Terminate Происходит при закрытии формы Click Происходят при щелчке и двойном щелчке в форме DbClick MouseDown Происходят при нажатии кнопки мыши и ее отпускании MouseUp KeyDown Происходят при нажатии и отпускании клавиши KeyUp Activate Происходят при активизации и деактивизации формы Deactivate Resize Происходит при изменении размеров формы. Обычно используется для переопределения размеров элементов управления при изменении размеров формы так, чтобы сохранить пропорцию их размеров и местоположение
ПРИЛОЖЕНИЕ 4. Варианты заданий к лабораторным работам
по курсу "Информатика" на тему ОСНОВЫ ПРОГРАММИРОВАНИЯ НА VBA Разработать алгоритм решения задачи и реализовать этот алгоритм в среде VBA. ВАРИАНТ 1 Найти минимальное значение радиуса шара R (изменяется от r1 до r2 с шагом k) и соответствующее значение радиуса основания r4, вырезанного из этого шара шарового сегмента, для которых объем шарового сегмента не меньше объема шара радиуса r3. Высота шарового сегмента h остается неизменной. Используя процедуру решить задачу для всех вариантов условий. r1
R2
k
r3
h
19,3 33,6 11,1 15,9 2,54
0,7 20,5 3,3 8,2 1,09
-0,1 -0,1 -0,1 -0,1 -0,01
0,9 13,7 3,3 7,2 0,6
0,3 12,6 2,4 7,6 0,37
ВАРИАНТ 2 Найти минимальное значение высоты усеченного прямого конуса h1 (изменяется от l до n с шагом m) и соответствующее значения высоты h2 и образующей прямого конуса s, для которых объем усеченного прямого конуса не меньше объема куба со стороной a. Радиус верхнего основания r1 и радиус нижнего основания r2 усеченного прямого конуса остаются неизменными. Используя процедуру решить задачу для всех вариантов условий. l
n
m
a
r1
r2
12,6 16,9 1,9 7,2 3,2
0,3 4,1 0,3 3,9 0,4
-0,1 -0,1 -0,01 -0,1 -0,1
2,7 22,3 1,1 9,9 3,3
1,2 12,8 0,36 5,2 2,4
3,9 18,5 0,98 11,3 6,2
ВАРИАНТ 3
Найти максимальное значение центрального угла нижнего основания шарового слоя α (изменяется от α1 до α2 с шагом γ) и соответствующее значения радиуса нижнего основания r1, радиуса верхнего основания r2 и высоты h шарового слоя, для которых объем шарового слоя не превосходит объема куба со стороной t. Радиус шара r, из которого вырезан шаровой слой и центральный угол верхнего основания шарового слоя β остаются неизменными. Используя процедуру решить задачу для всех вариантов условий.
α1
α2
γ
t
r
β
31 266 14 54 50
160 115 173 162 179
1 1 1 1 1
1,8 0,4 11,7 4,2 12,8
4,5 0,96 24,3 7,2 11,6
30 15 8 29 49
ВАРИАНТ 4
Найти минимальной значение высоты шарового сегмента h (изменяется от h1 до h2 с шагом k) и соответствующее ему значение радиуса основания r1, для которого площадь поверхности шарового сегмента не меньше площади поверхности прямоугольного параллелепипеда со сторонами a, b, c. Радиус шара r, из которого вырезан шаровой сегмент, остается неизменным. Используя процедуру решить задачу для всех вариантов условий.
h1
h2
k
a
b
c
r
12,3 7,4 1,2 18,1 5,5
0,7 2,2 0,2 7,3 0,9
-0,1 -0,1 -0,01 -0,1 -0,1
4,9 5,4 0,8 16,3 2,7
7,2 9,1 3,3 24,9 4,8
2,4 17,3 1,2 18,1 5,1
12,6 13,2 2,3 22,4 7,9
ВАРИАНТ 5
Найти максимальное значение стороны малого основания правильной усеченной пирамиды a1 (изменяется от l до n с шагом m) и соответствующие ему значения f1 и f2 (f1 – площадь верхнего, f2 – площадь нижнего основания правильной усеченной пирамиды), для которых объем правильной усеченной пирамиды не превышает объема куба со стороной b. a2 – сторона нижнего основания и h – высота правильной усеченной пирамиды остаются неизменными. Используя процедуру решить задачу для всех вариантов условий.
l
n
m
b
a2
h
0,8 2,6 0,1 2,2 0,7
6,1 10,3 1,1 7,9 2,6
0,1 0,1 0,01 0,1 0,1
6,8 16,2 0,91 9,6 6,3
6,2 13,1 1,3 9,5 3,9
5,1 14,9 0,37 7,2 11,1
ВАРИАНТ 6
Найти максимальное значение радиуса шара r (изменяется от r1 до r2 с шагом k) и соответствующее значение радиуса основания r4, вырезанного из этого шара шарового сегмента, для которых площадь поверхности шарового сегмента не превышает площади поверхности куба со стороной a. Высота шарового сегмента, h остается неизменной. Используя процедуру решить задачу для всех вариантов условий.
r1
r2
k
a
h
1,5 24,4 1,4 0,09 5,2
12,6 36,8 5,6 1,87 23,1
0,1 0,1 0,1 0,01 0,1
3,8 24,2 2,1 0,42 9,6
1,3 12,1 0,93 0,06 4,8
ВАРИАНТ 7
Найти минимальной значение высоты цилиндрической трубы h (изменяется от h1 до h2 с шагом m), для которого объем цилиндрической трубы не меньше объема шара радиуса h3. Внутренний радиус r1 и внешний радиус r2 цилиндрической трубы остаются неизменными. Используя процедуру решить задачу для всех вариантов условий. h1
h2
m
h3
r1
r2
12,4 0,95 8,2 11,8 0,98
0,2 0,07 3,1 2,4 0,06
-0,1 -0,01 -0,1 -0,1 -0,1
3,8 0,52 11,1 7,7 5,1
5,3 0,19 24,1 6,2 3,3
8,4 0,83 30,5 13,7 22,1
ВАРИАНТ 8
Найти максимальное значение большой высоты усеченного круглого цилиндра h2 (изменяется от l до k с шагом m), для которого площадь поверхности усеченного круглого цилиндра не превышает площади поверхности шара радиуса r1. Радиус основания усеченного круглого цилиндра r и его внешняя высота h1 остаются неизменными. Используя процедуру решить задачу для всех вариантов условий.
l
k
m
r1
r
h1
20,3 24,4 1,37 12,2 10,1
1,2 10,6 0,34 7,1 4,9
-0,1 -0,1 -0,01 -0,1 -0,1
2,4 12,9 0,52 8,5 19,3
1,8 13,6 0,39 8,3 24,7
0,9 8,1 0,2 6,6 3,2
ВАРИАНТ 9 Y Для каждой из точек, координаты которых заданы в последовательном файле coord.dat (нечетные записи - координаты x, четные – координаты y) опредеX лить принадлежит ли эта точка заштрихованной области. Подсчитать количество проверяемых точек в файле, коли- X2+Y2= чество точек принадлежащих заштрихованной области, вывести их координаты на печать. В случае обнаружения точек с одинаковыми координатами выдать сообщение о числе повторов каждой неоднократно встречаемой точки.
ВАРИАНТ 10
Для каждой из точек, координаты котоY рых заданы в последовательном файле coord.dat (нечетные записи – координаты x, четные – координаты y) опредеX лить принадлежит ли эта точка заштрихованной области. Подсчитать количество проверяемых точек в файле, коли- X2+Y2= чество точек принадлежащих заштрихованной области, вывести их координаты на печать. В случае обнаружения точек с одинаковыми координатами выдать сообщение о числе повторов каждой неоднократно встречаемой точки. ВАРИАНТ 11 Y Для каждой из точек, координаты которых заданы в последовательном файле coord.dat (нечетные записи – координаты x, четные – координаты y) определить X принадлежит ли эта точка заштрихованной области. Подсчитать количество проверяемых точек в файле, количество X2+Y2= точек принадлежащих заштрихованной области, вывести их координаты на печать. В случае обнаружения точек с одинаковыми координатами выдать сообщение о числе повторов каждой неоднократно встречаемой точки.
ВАРИАНТ 12 Y Для каждой из точек, координаты которых заданы в последовательном файле coord.dat (нечетные записи – координаты x, четные – координаты y) опX ределить принадлежит ли эта точка заштрихованной области. Подсчитать 2 2 количество проверяемых точек в фай- X +Y = X2+Y2= ле, количество точек принадлежащих заштрихованной области, вывести их координаты на печать. В случае обнаружения точек с одинаковыми координатами выдать сообщение о числе повторов каждой неоднократно встречаемой точки.
ВАРИАНТ 13 Y
Для каждой из точек, координаты которых заданы в последовательном файле coord.dat (нечетные записи – координаты x, четные – координаты y) X определить принадлежит ли эта точка заштрихованной области. Подсчитать количество проверяемых точек в фай2 ле, количество точек принадлежащих Y=2x +14x+4 заштрихованной области, вывести их координаты на печать. В случае обнаружения точек с одинаковыми координатами выдать сообщение о числе повторов каждой неоднократно встречаемой точки. ВАРИАНТ 14
Для каждой из точек, координаты которых Y заданы в последовательном файле coord.dat (нечетные записи – координаты x, четные – координаты y) определить принадлежит ли X эта точка заштрихованной области. Подсчитать количество проверяемых точек в файле, количество точек принадлежащих заштрихованной области, вывести их координаты Y=±√5x+8 на печать. В случае обнаружения точек с одинаковыми координатами выдать сообщение о числе повторов каждой неоднократно встречаемой точки.
ВАРИАНТ 15
Для каждой из точек, координаты которых заданы в последовательном файле coord.dat (нечетные записи – координаты x, четные – координаты y) определить принадлежит ли эта точка заштрихованной области. Подсчитать количество проверяемых точек в файле, количество точек принадлежащих заштрихованной области, вывести их координаты на печать. В случае обнаружения точек с одинаковыми координатами выдать сообщение о числе повторов каждой неоднократно встречаемой точки.
Y Y=-x X Y=x Y=±√2x+8
ВАРИАНТ 16
Для каждой из точек, координаты которых заданы в последовательном файле coord.dat (нечетные записи – координаты x, четные – координаты y) определить принадлежит ли эта точка заштрихованной области. Подсчитать количество проверяемых точек в файле, количество точек принадлежащих заштрихованной области , вывести их координаты на печать. В случае обнаружения точек с одинаковыми координатами выдать сообщение о числе повторов каждой неоднократно встречаемой точки.
Y Y=x2 - 9 X Y=x2+4
ВАРИАНТ 17
Найти максимальное значение радиуса шара r (изменяется от r1 до r2 с шагом k) и соответствующее значение радиуса основания r4 вырезанного из этого шара шарового сегмента, для которых площадь поверхности шарового сегмента не превышает площади поверхности куба со стороной a (изменяется от a1 до a2 с шагом m одновременно с r). Высота шарового сегмента h остается неизменной. Используя процедуру решить задачу для всех вариантов условий.
r1
r2
k
a1
a2
m
h
1,3 4,9 0,35 12,4 2,1
9,4 12,1 1,55 18,6 13,1
0,1 0,1 0,01 0,1 0,1
13,1 8,6
1,2 3,1 0,12 3,5 0,2
-0,1 -0,1 -0,01 -0,1 -0,1
0,3 2,5 0,2 11,2 1,4
ВАРИАНТ 18
Найти минимальное значение угла в вершине шарового сектора α (изменяется от α1 до α2 с шагом β) и соответствующее значение радиуса основания r1 и высоты h шарового сектора, для которых площадь поверхности шарового сектора не меньше площади поверхности прямоугольного параллелепипеда со сторонами t, b и c (сторона b изменяется от b1 до b2 с шагом k одновременно с углом α). Радиус шара r остается неизменным. Используя процедуру решить задачу для всех вариантов условий.
α1
α2
β
t
b1
b2
k
c
r
173 166 177 150 169
4 13 7 15 8
-1 -1 -1 -1 -1
3,6 1,3 5,2 8,8 2,4
0,3 0,1 0,7 1,1 0,4
14,8 2,1 13,3 33,1 12,2
0,1 0,1 0,1 0,1 0,1
2,4 6,9 4,4 2,9 3,7
12,1 8,2 9,9 22,6 7,7
ВАРИАНТ 19
Найти минимальное значение радиуса шара r (изменяется от r1 до r2 с шагом k) и соответствующее значение радиуса нижнего основания r4 и высоты h шарового слоя, для которых объем шарового слоя не меньше объема прямоугольного параллелепипеда со сторонами t, b и c (сторона c изменяется от c1 до c2 с шагом m одновременно с r). Центральный угол нижнего основания шарового слоя α и центральный угол верхнего основания шарового слоя β остаются неизменными. Используя процедуру решить задачу для всех вариантов условий. r1
r2
k
t
b
c1
c2
m
α
β
0,6 2,7 0,1 16,6 14,2
11,6 16,2 0,9 29,8 22,4
0,1 0,1 0,01 0,1 0,1
1,5 4,1 1,1 19,3 15,1
2,4 14,8 0,02 16,2 27,2
7,7 16,8 5,2 40,4 55,5
1,3 0,7 1,1 15,1 22,6
-0,1 -0,1 -0,1 -0,1 -0,1
177 169 162 155 179
105 22 25 5 33
ВАРИАНТ 20
Найти максимальное значение радиуса верхнего основания усеченного прямого конуса r1 (изменяется от l до n с шагом m) и соответствующее значение высоты h2 и образующей ob прямого конуса, для которых объем усеченного прямого конуса не превышает объема шара радиуса r3 ( изменяется от r4 до r5 с шагом k одновременно с r1). Радиус нижнего основания r2 и высота h1 усеченного прямого конуса остаются неизменными. Используя процедуру решить задачу для всех вариантов условий.
l
n
m
r4
r5
k
r2
h1
0,3 0,13 1,8 2,1 0,8
4,4 0,99 4,4 13,9 2,5
0,1 0,01 0,1 0,1 0,1
15,5 3,2 12,2 16,8 4,4
5,1 0,3 1,9 4,6 1,1
-0,1 -0,01 -0,1 -0,1 -0,1
4,6 1,02 5,5 16,0 2,6
3,6 0,66 20,2 6,3 1,6
ВАРИАНТ 21
Найти максимальное значение внешнего радиуса цилиндрической трубы r2 (изменяется от l до n с шагом m) для которого объем цилиндрической трубы не превышает объема куба со стороной a (изменяется от a1 до a2 с шагом k одновременно с r2). Внутренний радиус r1 и высота h цилиндрической трубы остаются неизменными. Используя процедуру решить задачу для всех вариантов условий.
l
n
m
a1
a2
k
r1
h
2,5 0,39 24,1 4,0 1,9
12,8 2,88 51,9 19,2 18,2
0,1 0,01 0,1 0,1 0,1
15,5 2,27 44,2 16,8 22,4
2,1 0,31 22,5 6,6 12,5
-0,1 -0,01 -0,1 -0,1 -0,1
2,2 0,33 19,6 2,9 1,1
3,9 0,61 14,2 8,2 26,2
ВАРИАНТ 22
Найти минимальное значение центрального угла нижнего основания шарового слоя α (изменяется от α1 до α2 с шагом γ) и соответствующее значение радиуса нижнего основания r1, радиуса верхнего основания r2 и высоты h шарового слоя, для которых площадь поверхности шарового слоя не меньше площади поверхности прямоугольного параллелепипеда со сторонами a, b и c (сторона a изменяется от t1 до t2 с шагом k одновременно с α). Радиус шара r, из которого вырезан шаровой слой, и центральный угол верхнего основания шарового слоя α остаются неизменными. Используя процедуру решить задачу для всех вариантов условий.
α1
α2
γ
t1
t2
k
b
c
r
β
160 175 168 178 170
25 13 33 20 34
-1 -1 -1 -1 -1
1,2 4,1 0,3 0,1 2,2
4,4 12,3 2,9 2,6 7,7
0,1 0,1 0,1 0,1 0,1
2,9 13,5 4,7 1,0 3,0
0,3 4,2 2,2 0,5 10,1
6,6 19,1 2,6 0,6 9,3
22 7 30 13 22
ВАРИАНТ 23
Найти минимальное значение радиуса шара r (изменяется от r1 до r2 с шагом k) и соответствующее значение радиуса основания r3 и высоты h шарового сектора, для которых объем шарового сектора, для которых объем шарового сектора не меньше объема куба со стороной t (t изменяется от t1 до t2 с шагом m одновременно с r). Угол α, в вершине сектора остается неизменным. Используя процедуру решить задачу для всех вариантов условий. r1
r2
k
t1
t2
m
α
3,9 1,1 15,8 8,3 9,6
0,1 0,1 3,5 0,8 1,8
-0,1 -0,01 -0,1 -0,1 -0,1
0,1 0,2 1,8 1,5 0,5
3,2 3,1 13,5 8,2 7,9
0,1 0,01 0,1 0,1 0,1
97 177 155 179 133
ВАРИАНТ 24
Найти максимальное значение большой высоты усеченного круглого цилиндра h2 (изменяется от l до k с шагом m), для которого объем усеченного круглого цилиндра не превышает объема прямоугольного параллелепипеда со сторонами a, b и c (сторона a изменяется от a1 до a2 с шагом n одновременно с h2). Радиус основания усеченного круглого цилиндра r, и его меньшая высота h1 остаются неизменными. Используя процедуру решить задачу для всех вариантов условий.
l
k
m
a1
a2
a
b
c
r
h1
1,3 0,2 4,1 2,0 4,1
26,1 3,9 16,2 8,1 15,8
0,1 0,1 0,1 0,1 0,1
31,2 10,1 22,9 17,3 33,6
14,3 0,2 4,6 5,2 13,2
-0,1 -0,1 -0,1 -0,1 -0,1
2,6 1,7 21,1 2,5 9,9
2,0 0,9 15,0 8,1 6,4
1,6 0,5 12,7 3,7 7,9
2,4 0,2 3,4 1,1 5,1
ПРИЛОЖЕНИЕ 5. Варианты заданий к курсовой работе
по курсу "Информатика" на тему ОСНОВЫ ПРОГРАММИРОВАНИЯ НА VBA Разработать алгоритм решения задачи и реализовать этот алгоритм в среде VBA. Предусмотреть запуск программы из среды Microsoft Word,вывод результатов работы программы в формы и панели сообщений. Оформить пояснительную записку в текстовом редакторе Microsoft Word, включив в нее распечатку результатов работы программы и схему алгоритма программы, созданные средствами любого графического редактора, а также листинг разработанной программы. ВАРИАНТ 1 Изобразить в Corel Draw комбинацию приборов для автомобиля любой марки и разместить их в форме. Разработать виртуальную модель стрелочных часов и разместить их в той же форме. Предусмотреть возможность установки времени и таймера с помощью соответствующих виртуальных рукояток подвода, расположенных в форме.
ВАРИАНТ 2 Изобразить в Corel Draw комбинацию приборов для автомобиля любой марки и разместить их в форме. Разработать виртуальную модель указателя температуры охлаждающей жидкости и разместить их в той же форме. Предусмотреть возможность задания дискретных значений температуры охлаждающей жидкости с помощью соответствующих элементов управления, расположенных в форме, и окна ввода. При достижении температуры охлаждающей жидкости значения 100 градусов должен включаться вентилятор системы охлаждения. При превышении температуры охлаждающей жидкости предельного значения стрелка должна переходить в красную зону шкалы, а в окне сообщений должно появляться сообщение о необходимости проверки работы вентилятора.
ВАРИАНТ 3 Изобразить в Corel Draw комбинацию приборов для автомобиля любой марки и разместить их в форме. Разработать виртуальную модель тахометра и поместить его в ту же форму. Дискретные значения частоты вращения коленчатого вала задавать с помощью виртуальной педали акселератора, расположенной в форме, и окна ввода. Предусмотреть вывод на экран соответствующего сообщения в окне сообщений в случае попадания стрелки в желтую зону шкалы, соответствующую режиму работы двигателя с высокой частотой вращения коленчатого вала, и в случае попадания стрелки в красную зону шкалы, соответствующую опасному для двигателя режиму.
ВАРИАНТ 4 Изобразить в Corel Draw комбинацию приборов для автомобиля любой марки и разместить их в форме. Разработать виртуальные модели суммирующего счетчика пройденного пути и суточного счетчика пройденного пути и поместить их в ту же форму. Предусмотреть возможность обнуление суточного счетчика пройденного пути с помощью соответствующих элементов управления, расположенных в форме, и окна ввода. Продемонстрировать работу программы для различных вариантов графиков движения и состояний суммирующего счетчика пройденного пути, хранящихся в таблицах Excel.
ВАРИАНТ 5 Изобразить в Corel Draw комбинацию приборов для автомобиля любой марки и разместить их в форме. Разработать виртуальную модель спидометра и поместить ее в ту же форму. Предусмотреть возможность задания дискретных значений скорости с помощью виртуальных моделей педали акселератора и рычага переключения передач, расположенных в форме, и окна ввода. Продемонстрировать работу программы для различных вариантов графиков движения, хранящихся в таблицах Excel.
ВАРИАНТ 6 Изобразить в Corel Draw комбинацию приборов для автомобиля любой марки и разместить их в форме. Разработать виртуальные модели кон-
трольной лампы резерва топлива и указателя уровня топлива и поместить их в ту же форму. Предусмотреть возможность задания значений уровня топлива путем изменения размера соответствующего графического объекта в среде MS Word методом потягивания мыши. Продемонстрировать работу программы для различных вариантов расхода топлива, хранящихся в таблицах Excel.
ВАРИАНТ 7 Изобразить в Corel Draw комбинацию приборов и необходимые виды для автомобиля любой марки и разместить их в форме. Разработать виртуальные модели контрольных ламп включения указателей поворота по левому и по правому бортам, а также включателя аварийного режима и поместить их в ту же форму. Предусмотреть возможность демонстрации работы этих ламп при переключении рычага переключателя указателя поворота и синхронное зажигание соответствующих фонарей указателей поворота. Продемонстрировать работу ламп и фонарей в аварийном режиме.
ВАРИАНТ 8 Изобразить в Corel Draw органы управления для автомобиля любой марки, предназначенные для управления работой очистителя ветрового стекла, ветровое стекло и щетки очистителя, разместив их в форме. Разработать виртуальную модель рычага переключателя очистителей и омывателей стекол, поместив ее в ту же форму. Продемонстрировать работу очистителей в трех режимах: прерывистый, с малой постоянной скоростью и с большой постоянной скоростью. ПРИМЕЧАНИЕ. Очиститель имеет три режима работы: 1 режим – прерывистый, осуществляется в положении II и III рычага переключателя очистителя и омывателя ветрового стекла; 2 режим – постоянный, с малой скоростью движения щеток, осуществляется в положении IV рычага переключателя очистителя и омывателя ветрового стекла; 3 режим – постоянный, с высокой скоростью движения щеток, осуществляется в положении V рычага переключателя очистителя и омывателя ветрового стекла.
ВАРИАНТ 9 Изобразить в Corel Draw блок управления электростеклоподъемников для автомобиля любой марки и разместить их в форме. Разработать виртуальные модели переключателей стеклоподъемников дверей, предусмотрев их блокировку в крайних нижнем и верхнем положениях стекол, и поместить их в ту же форму. Продемонстрировать работу электростеклоподъемников дверей с помощью соответствующих переключателей и в автоматическом режиме для различных вариантов, хранящихся в таблицах Excel.
ВАРИАНТ 10 Изобразить в Corel Draw блок управления наружными зеркалами и обогрева передних сидений для автомобиля любой марки и разместить их в форме. Разработать виртуальные модели клавиш управления приводом зеркала, рычага зеркала и сигнализатора положения рычажка, а также сигнализаторов включения обогрева и выключателей обогрева передних сидений, поместив их в ту же форму. Продемонстрировать синхронное поворачивание зеркала в соответствующую сторону при нажатии на клавиши управления приводом зеркала и постепенное нагревание передних сидений путем постепенного изменения их цвета, например, от синего к красному.
ВАРИАНТ 11 Изобразить в Corel Draw блок индикации бортовой системы контроля для автомобиля любой марки и разместить их в форме. Разработать виртуальные модели сигнализатора недостаточного уровня масла в картере двигателя, недостаточного уровня охлаждающей жидкости в расширительном бачке и недостаточного уровня омывающей жидкости в бачке, поместив их в ту же форму. Предусмотреть возможность задания значений уровня масла и жидкости путем изменения размера соответствующего графического объекта в среде Microsoft Word методом потягивания мыши. Продемонстрировать работу блока в следующих режимах: выключен, режим ожидания, предварительный контроль сигнализаторов и контроль параметров. ПРИМЕЧАНИЕ. Блок находится в режиме "Выключен", если ключ не вставлен в выключатель зажигания. В положении 0 ("Выключено") ключа в выключателе зажигания блок переходит в "Режим ожидания". Если при этом будет открыта дверь водителя, возникнет неисправность "За-
бытый ключ в выключателе зажигания" и звуковой сигнализатор блока в течении 5-10 с будет подавать прерывистый сигнал. Сигнал можно прервать или закрыв дверь, или вынув ключ, или повернув ключ в выключателе зажигания в положение 1 ("Зажигание"). В положении 1 ключа в выключателе зажигания блок переходит в режим "Предвыездной контроль сигнализаторов", при котором для проверки их исправности на 2-6 с включаются все световые и звуковой сигнализаторы, а затем через паузу в 1 с блок переходит в режим "Контроль параметров" и при наличии неисправности производит сигнализацию по следующему алгоритму: – световой сигнализатор того параметра, который вышел за пределы нормы, начинает мигать в течении 5-10 с, после чего переходит в режим постоянного свечения до устранения неисправности или возвращения ключа в выключателе зажигания в положение 0 ("Выключено"); – одновременно со световым сигнализатором на 5-10 с включается звуковой сигнализатор; – если при этом возникнет другая неисправность, то звуковая сигнализация и световая в режиме мигания начинают работать для последней неисправности, как более приоритетной, а световой сигнализатор предыдущей неисправности переходит в режим постоянного свечения.
ВАРИАНТ 12 Изобразить в Corel Draw блок индикации бортовой системы контроля для автомобиля любой марки и разместить их в форме. Разработать виртуальную модель сигнализатора неисправностей ламп стоп-сигнала и габаритных огней. Продемонстрировать работу блока в следующих режимах: выключен, режим ожидания, предварительный контроль сигнализаторов и контроль параметров. ПРИМЕЧАНИЕ. Блок находится в режиме "Выключен", если ключ не вставлен в выключатель зажигания. В положении 0 ("Выключено") ключа в выключателе зажигания блок переходит в "Режим ожидания". Если при этом будет открыта дверь водителя, возникнет неисправность "Забытый ключ в выключателе зажигания" и звуковой сигнализатор блока в течении 5-10 с будет подавать прерывистый сигнал. Сигнал можно прервать или закрыв дверь, или вынув ключ, или повернув ключ в выключателе зажигания в положение 1 ("Зажигание"). В положении 1 ключа в выключателе зажигания блок переходит в режим "Предвыездной контроль сигнализаторов", при котором для проверки их исправности на 2-6 с включаются все световые и звуковой сигнализаторы, а затем через паузу в 1 с
блок переходит в режим "Контроль параметров" и при наличии неисправности производит сигнализацию по следующему алгоритму: – световой сигнализатор того параметра, который вышел за пределы нормы, начинает мигать в течении 5-10 с, после чего переходит в режим постоянного свечения до устранения неисправности или возвращения ключа в выключателе зажигания в положение 0 ("Выключено"); – одновременно со световым сигнализатором на 5-10 с включается звуковой сигнализатор; – если при этом возникнет другая неисправность, то звуковая сигнализация и световая в режиме мигания начинают работать для последней неисправности, как более приоритетной, а световой сигнализатор предыдущей неисправности переходит в режим постоянного свечения.
ВАРИАНТ 13 Изобразить в Corel Draw блок индикации бортовой системы контроля для автомобиля любой марки и разместить их в форме. Разработать виртуальную модель сигнализатора износа накладок колодок передних тормозов. Продемонстрировать работу блока в следующих режимах: выключен, режим ожидания, предварительный контроль сигнализаторов и контроль параметров. ПРИМЕЧАНИЕ. Блок находится в режиме "Выключен", если ключ не вставлен в выключатель зажигания. В положении 0 ("Выключено") ключа в выключателе зажигания блок переходит в "Режим ожидания". Если при этом будет открыта дверь водителя, возникнет неисправность "Забытый ключ в выключателе зажигания" и звуковой сигнализатор блока в течении 5-10 с будет подавать прерывистый сигнал. Сигнал можно прервать или закрыв дверь, или вынув ключ, или повернув ключ в выключателе зажигания в положение 1 ("Зажигание"). В положении 1 ключа в выключателе зажигания блок переходит в режим "Предвыездной контроль сигнализаторов", при котором для проверки их исправности на 2-6 с включаются все световые и звуковой сигнализаторы, а затем через паузу в 1 с блок переходит в режим "Контроль параметров" и при наличии неисправности производит сигнализацию по следующему алгоритму: – световой сигнализатор того параметра, который вышел за пределы нормы, начинает мигать в течении 5-10 с, после чего переходит в режим постоянного свечения до устранения неисправности или возвращения ключа в выключателе зажигания в положение 0 ("Выключено");
– одновременно со световым сигнализатором на 5-10 с включается звуковой сигнализатор; – если при этом возникнет другая неисправность, то звуковая сигнализация и световая в режиме мигания начинают работать для последней неисправности, как более приоритетной, а световой сигнализатор предыдущей неисправности переходит в режим постоянного свечения.
ВАРИАНТ 14 Изобразить в Corel Draw блок индикации бортовой системы контроля для автомобиля любой марки и разместить их в форме. Разработать виртуальную модель незастегнутых ремней безопасности. Продемонстрировать работу блока в следующих режимах: выключен, режим ожидания, предварительный контроль сигнализаторов и контроль параметров. ПРИМЕЧАНИЕ. Блок находится в режиме "Выключен", если ключ не вставлен в выключатель зажигания. В положении 0 ("Выключено") ключа в выключателе зажигания блок переходит в "Режим ожидания". Если при этом будет открыта дверь водителя, возникнет неисправность "Забытый ключ в выключателе зажигания" и звуковой сигнализатор блока в течении 5-10 с будет подавать прерывистый сигнал. Сигнал можно прервать или закрыв дверь, или вынув ключ, или повернув ключ в выключателе зажигания в положение 1 ("Зажигание"). В положении 1 ключа в выключателе зажигания блок переходит в режим "Предвыездной контроль сигнализаторов", при котором для проверки их исправности на 2-6 с включаются все световые и звуковой сигнализаторы, а затем через паузу в 1 с блок переходит в режим "Контроль параметров" и при наличии неисправности производит сигнализацию по следующему алгоритму: – световой сигнализатор того параметра, который вышел за пределы нормы, начинает мигать в течении 5-10 с, после чего переходит в режим постоянного свечения до устранения неисправности или возвращения ключа в выключателе зажигания в положение 0 ("Выключено"); – одновременно со световым сигнализатором на 5-10 с включается звуковой сигнализатор; – если при этом возникнет другая неисправность, то звуковая сигнализация и световая в режиме мигания начинают работать для последней неисправности, как более приоритетной, а световой сигнализатор предыдущей неисправности переходит в режим постоянного свечения.
ВАРИАНТ 15 Изобразить в Corel Draw блок индикации бортовой системы контроля для автомобиля любой марки и разместить их в форме. Разработать виртуальную модель сигнализаторов незакрытой правой и левой дверей. Продемонстрировать работу блока в следующих режимах: выключен, режим ожидания, предварительный контроль сигнализаторов и контроль параметров. ПРИМЕЧАНИЕ. Блок находится в режиме "Выключен", если ключ не вставлен в выключатель зажигания. В положении 0 ("Выключено") ключа в выключателе зажигания блок переходит в "Режим ожидания". Если при этом будет открыта дверь водителя, возникнет неисправность "Забытый ключ в выключателе зажигания" и звуковой сигнализатор блока в течении 5-10 с будет подавать прерывистый сигнал. Сигнал можно прервать или закрыв дверь, или вынув ключ, или повернув ключ в выключателе зажигания в положение 1 ("Зажигание"). В положении 1 ключа в выключателе зажигания блок переходит в режим "Предвыездной контроль сигнализаторов", при котором для проверки их исправности на 2-6 с включаются все световые и звуковой сигнализаторы, а затем через паузу в 1 с блок переходит в режим "Контроль параметров" и при наличии неисправности производит сигнализацию по следующему алгоритму: – световой сигнализатор того параметра, который вышел за пределы нормы, начинает мигать в течении 5-10 с, после чего переходит в режим постоянного свечения до устранения неисправности или возвращения ключа в выключателе зажигания в положение 0 ("Выключено"); – одновременно со световым сигнализатором на 5-10 с включается звуковой сигнализатор; – если при этом возникнет другая неисправность, то звуковая сигнализация и световая в режиме мигания начинают работать для последней неисправности, как более приоритетной, а световой сигнализатор предыдущей неисправности переходит в режим постоянного свечения.
ВАРИАНТ 16 Изобразить в Corel Draw органы управления вентиляцией и отоплением салона и разместить их в форме. Разработать виртуальные модели ручек задатчика температуры и управлением электровентилятором, поместив их в ту же форму. Предусмотреть, чтобы в положении «А» ручки управления электровентилятором увеличенная скорость вентилятора при прогреве салона автоматически снижалась при достижении заданной тем-
пературы. Продемонстрировать работу вентиляции и отопления салона для различных положений управляющих ручек и для различных вариантов температурных режимов, хранящихся в таблицах Excel.
ВАРИАНТ 17 Изобразить в Corel Draw маршрутный компьютер для автомобиля любой марки и разместить их в форме. Разработать виртуальные модели кнопок выбора группы функций «время», сброса показаний, выбора и коррекции, поместив их в ту же форму. Предусмотреть, чтобы при последовательном нажатии на кнопку «время» цифровой дисплей поочередно высвечивал текущее время, будильник (если он установлен заранее) и общее время поездки. Продемонстрировать возможность сброса, установки и корректировки показаний дисплея. ПРИМЕЧАНИЕ. При нажатии на кнопку сброса показаний перед поездкой происходит сброс (обнуление) накопленных значений времени. Одиночное нажатие на кнопку выбора после вывода на дисплей функции, которую необходимо откорректировать, переводит маршрутный компьютер в режим «установка» и осуществляет выбор устанавливаемого разряда. При двойном нажатии на кнопку в течении 1 с происходит включение/выключение сигнализации этой функции и выход из режима коррекции. Кнопка коррекции осуществляет изменение значений в установленном разряде. При одиночном нажатии на кнопку значение увеличивается на единицу, при ее удерживании более 1 с увеличение происходит в мигающем режиме. При двойном нажатии на кнопку в течении 1 с с последующим удержанием происходит уменьшение в мигающем режиме значений в установленном разряде.
ВАРИАНТ 18 Изобразить в Corel Draw маршрутный компьютер для автомобиля любой марки и разместить их в форме. Разработать виртуальные модели кнопок выбора группы функций «топливо», сброса показаний, выбора и коррекции, поместив их в ту же форму. Предусмотреть, чтобы при последовательном нажатии на кнопку «топливо» цифровой дисплей поочередно высвечивал мгновенный расход топлива в л/100км (или в л/час, если мгновенная скорость автомобиля менее 10 км/ч), средний расход топлива в л/100км (или в л/час, если мгновенная скорость автомобиля менее 10 км/ч), суммарный расход топлива в литрах для различных вариантов расхода то-
плива, хранящихся в таблицах Excel. Продемонстрировать возможность сброса, установки и корректировки показаний дисплея. ПРИМЕЧАНИЕ. При нажатии на кнопку сброса показаний перед поездкой происходит сброс (обнуление) накопленных значений времени. Одиночное нажатие на кнопку выбора после вывода на дисплей функции, которую необходимо откорректировать, переводит маршрутный компьютер в режим «установка» и осуществляет выбор устанавливаемого разряда. При двойном нажатии на кнопку в течении 1 с происходит включение/выключение сигнализации этой функции и выход из режима коррекции. Кнопка коррекции осуществляет изменение значений в установленном разряде. При одиночном нажатии на кнопку значение увеличивается на единицу, при ее удерживании более 1 с увеличение происходит в мигающем режиме. При двойном нажатии на кнопку в течении 1 с с последующим удержанием происходит уменьшение в мигающем режиме значений в установленном разряде.
ВАРИАНТ 19 Изобразить в Corel Draw маршрутный компьютер для автомобиля любой марки и разместить их в форме. Разработать виртуальные модели кнопок выбора группы функций «путь», сброса показаний, выбора и коррекции, поместив их в ту же форму. Предусмотреть, чтобы при последовательном нажатии на кнопку «путь» цифровой дисплей поочередно высвечивал среднюю скорость поездки в км/ч, пробег на остатке топлива в км (при остатке топлива на 50 км пробега раздается звуковой сигнал), температуру вне автомобиля в градусах для различных вариантов параметров «путь», хранящихся в таблицах Excel. Продемонстрировать возможность сброса, установки и корректировки показаний дисплея. ПРИМЕЧАНИЕ. При нажатии на кнопку сброса показаний перед поездкой происходит сброс (обнуление) накопленных значений времени. Одиночное нажатие на кнопку выбора после вывода на дисплей функции, которую необходимо откорректировать, переводит маршрутный компьютер в режим «установка» и осуществляет выбор устанавливаемого разряда. При двойном нажатии на кнопку в течении 1 с происходит включение/выключение сигнализации этой функции и выход из режима коррекции. Кнопка коррекции осуществляет изменение значений в установленном разряде. При одиночном нажатии на кнопку значение увеличивается на единицу, при ее удерживании более 1 с увеличение происходит в мигающем режиме. При двойном нажатии на кнопку в течении 1 с с после-
дующим удержанием происходит уменьшение в мигающем режиме значений в установленном разряде.
ВАРИАНТ 20 Изобразить в Corel Draw автомобиль любой марки и разместить его в форме. Разработать виртуальные модели педалей и фонарей индикации тормоза и поместить их в ту же форму. Предусмотреть возможность демонстрации поступательного движения автомобиля и его торможения при нажатии на педаль тормоза. Продемонстрировать синхронное зажигание соответствующих фонарей тормоза.
ВАРИАНТ 21 Иммобилайзер – это противоугонная система, позволяющая заблокировать в режиме охраны пуск и работу двигателя путем размыкания нескольких электрических цепей. Изобразить в Corel Draw для автомобиля любой марки ключ зажигания, а также фрагмент панели приборов, содержащий светодиод, индикатор состояния, кодовый ключ, и разместить их в форме. Предусмотреть возможность демонстрации работы противоугонной системы в режиме снятия иммобилайзера с охраны. ПРИМЕЧАНИЕ. Иммобилайзер в режиме охраны блокирует запуск двигателя. В этом режиме светодиод состояния иммобилайзера мигает с частотой 1 раз в 2,5 с. Для снятия иммобилайзера с охраны необходимо предварительно войти в режим "чтение". Режим "чтение" продолжается 1,5 минуты и активируется при открывании или закрывании двери, а также при включении и выключении зажигания. Причем, с момента выключения зажигания длительность этого режима составляет всего 10 секунд. В режиме "чтение" светодиод мигает с частотой 2 раза в секунду. В режиме "чтение" поднесите к индикатору состояния "свой" рабочий кодовый ключ и дождитесь отключения светодиода. При считывании кода ключа светодиод кратковременно загорается постоянным светом, а зуммер выдает двойной звуковой сигнал. Отключение светодиода означает снятие иммобилайзера с охраны и обеспечивает возможность для запуска двигателя. Если при снятии с охраны ключ зажигания находился в положение "зажигание", то для запуска двигателя его необходимо предварительно перевести в положение "выключено" и только затем включить стартер.
ВАРИАНТ 22 Иммобилайзер – это противоугонная система, позволяющая заблокировать в режиме охраны пуск и работу двигателя путем размыкания нескольких электрических цепей. Изобразить в Corel Draw для автомобиля любой марки ключ зажигания, а также фрагмент панели приборов, содержащий светодиод, индикатор состояния, кодовый ключ, и разместить их в форме. Предусмотреть возможность демонстрации работы противоугонной системы в режиме установки иммобилайзера на охрану. ПРИМЕЧАНИЕ. Иммобилайзер устанавливается на охрану автоматически после выключения зажигания, но время установки зависит от ситуации и действия водителя. Если двери автомобиля не открывались, то иммобилайзер встает на охрану через 4,5 минуты после выключения зажигания. Если дверь открывалась, то установка на охрану происходит через 30 секунд с момента закрывания двери. Независимо от времени установки, за 15 с до постановки иммобилайзера на охрану зуммер начинает выдавать звуковой сигнал с нарастающей частотой, предупреждая водителя об этом событии. При этом светодиод горит мерцающим светом.
ВАРИАНТ 23 Иммобилайзер – это противоугонная система, позволяющая заблокировать в режиме охраны пуск и работу двигателя путем размыкания нескольких электрических цепей. Изобразить в Corel Draw для автомобиля любой марки ключ зажигания, а также фрагмент панели приборов, содержащий светодиод, индикатор состояния, кодовый ключ, и разместить их в форме. Предусмотреть возможность демонстрации работы противоугонной системы в режиме технического обслуживания. ПРИМЕЧАНИЕ. Дополнительная функция противоугонной системы – режим технического обслуживания. Данный режим характеризуется тем, что иммобилайзер, не препятствует запуску двигателя и может быть полезен при передаче управления другому лицу без передачи ему кодовых ключей или при обслуживании автомобиля, когда функция автоматической установки на охрану мешает проведению работ. Вход и выход из режима технического обслуживания производится при помощи "красного" кодового ключа. В режиме технического обслуживания светодиод иммобилайзера горит все время, пока ключ зажигания находится в положении "зажигание". Для активирования режима технического обслуживания необходимо: – перевести иммобилайзер в режим "чтение" поворотом ключа в выключателе зажигания в положение "зажигание";
– поднести "свои" красный ключ к индикатору состояния и, удерживая его, выключить зажигание. После загорания светодиода и подачи зуммером короткого звукового сигнала отвести кодовый ключ от индикатора состояния. Приблизительно, через 3-5 с после выключения зажигания светодиод замигает с частотой 10 раз в секунду прерываясь через каждую секунду; – поднести вновь красный ключ к индикатору состояния. При этом светодиод перейдет в режим постоянного свечения и зуммер подаст одиночный звуковой сигнал. После этого отвести кодовый ключ. – не позднее 10 с после загорания светодиода постоянным светом, на 1-3 с включить зажигание, а затем выключить его. Если обмен с контроллером прошел успешно то через 1-5 с после выключения зажигания светодиод гаснет, зуммер подает короткий звуковой сигнал и иммобилайзер переходит в режим технического обслуживания. Если любой этап этой процедуры будет выполнен неверно или будет превышено время ожидания, то иммобилайзер вернется в обычный режим. При таком ошибочном выходе светодиод в течение двух секунд будет мигать с частотой 2 раза в секунду. Если иммобилайзер находится в режиме технического обслуживания то при включении зажигания режим "чтение" прерывается, светодиод загорается постоянным светом и иммобилайзер разрешает контроллеру запуск двигателя без использования рабочего кодового ключа.
ВАРИАНТ 24 Иммобилайзер – это противоугонная система, позволяющая заблокировать в режиме охраны пуск и работу двигателя путем размыкания нескольких электрических цепей. Изобразить в Corel Draw для автомобиля любой марки ключ зажигания, а также фрагмент панели приборов, содержащий светодиод, индикатор состояния, кодовый ключ, и разместить их в форме. Предусмотреть возможность демонстрации работы противоугонной системы в режиме выхода из технического обслуживания и обучения рабочих ключей. ПРИМЕЧАНИЕ. При переходе в режим технического обслуживания происходит стирание кодов рабочих ключей из памяти иммобилайзера. Поэтому при выходе из режима технического обслуживания необходимо обучить иммобилайзер всем ключам, которые будут использоваться при эксплуатации автомобиля. Иммобилайзер способен воспринимать коды двух рабочих ключей. Для обучения рабочих ключей и выхода из режима
технического обслуживания необходимо выполнить следующую процедуру: – при включенном зажигании поднести к индикатору состояния "свой" красный кодовый ключ и, удерживая его, выключить зажигание. Светодиод будет продолжать гореть постоянным светом. – после подачи зуммером короткого звукового сигнала отвести кодовый ключ от индикатора состояния. Примерно, через 3-5 с после выключения зажигания светодиод замигает с частотой 10 раз в секунду, сигнализируя о включении режима "обучение". – в течении 10 с приступить к обучению рабочих кодовых ключей. Для этого необходимо поднести их по очереди к индикатору состояния и дожидаться подачи зуммером короткого звукового сигнала. После обучения первого ключа режим обучения продлевается еще на 10 с, позволяя обучить следующий кодовый ключ. Если за 10 с не будет поднесен обучаемый ключ, то иммобилайзер выйдет из режима обучения, оставшись в режиме технического обслуживая.
ВАРИАНТ 25 Иммобилайзер – это противоугонная система, позволяющая заблокировать в режиме охраны пуск и работу двигателя путем размыкания нескольких электрических цепей. Изобразить в Corel Draw для автомобиля любой марки ключ зажигания, а также фрагмент панели приборов, содержащий светодиод, индикатор состояния, кодовый ключ, и разместить их в форме. Предусмотреть возможность демонстрации работы противоугонной системы в режиме альтернативного запуска двигателя. ПРИМЕЧАНИЕ. Для запуска двигателя при неисправности иммобилайзера или утере рабочего кодового ключа необходимо выполнить следующие действия: – включить зажигание. При этом лампа "CHECK ENGINE" загорится постоянным светом и будет гореть 4 минуты; – через четыре минуты лампа гаснет на 1 минуту. В течении минутного интервала времени нажатиями до упора на педаль акселератора введите запомненное число. Каждое нажатие на педаль увеличивает число на единицу и сопровождается загоранием лампы "CHECK ENGINE". По истечении минуты, отведенной на ввод числа, лампа "CHECK ENGINE" вновь загорается постоянным светом; – выполнить вторую операцию пять раз подряд, каждый раз вводя те числовые значения в последовательности, которые Вы запрограммировали.
В том случае, если педаль акселератора не нажимается или вводится неправильное число, процедура альтернативного запуска прерывается и контроллер остается заблокированным. На это указывает мигающий свет лампы "CHECK ENGINE" с частотой три раза в 2 с. – по истечении минуты, отведенной на ввод шестого числа, необходимо, не выключая зажигания, запустить двигатель. После остановки двигателя через 15 с контроллер вновь блокируется. Двигатель можно запустить повторно, если с момента выключения зажигания прошло менее 15 с. Если с момента выключения зажигания прошло более 15 с, то запуск двигателя становится невозможным. В этом случае необходимо заново запрограммировать и затем выполнить процедуру альтернативного запуска двигателя.
ВАРИАНТ 26 Изобразить в Corel Draw комбинацию приборов для автомобиля любой марки и разместить их в форме. Разработать виртуальные модели переключателя и индикатора обогревателя заднего стекла и поместить их в ту же форму. Предусмотреть загорание контрольной лампы индикатора оранжевым цветом при включении обогревателя и учесть, что обогрев заднего стекла возможно включить лишь при включенном зажигании. Продемонстрировать работу обогревателя заднего стекла. ВАРИАНТ 27 Изобразить в Corel Draw автомобиль любой марки и разместить его в форме. Разработать виртуальные модели педалей и фонарей индикации тормоза и поместить их в ту же форму. Предусмотреть управление интенсивностью торможения с помощью педали тормоза: в зависимости от нажатия на педаль тормоза должна меняться частота мигания фонарей индикации тормоза. Продемонстрировать работу фонарей индикации тормоза для различных вариантов тормозного пути, хранящихся в таблицах Excel.
ВАРИАНТ 28 Изобразить в Corel Draw комбинацию приборов и вид автомобиля сбоку для автомобиля любой марки и разместить их в форме. Разработать виртуальную модель ручки управления гидрокорректора фар, а также сами
фары и поместить их в ту же форму. Предусмотреть возможность поворота ручки управления гидрокорректора фар на 90 градусов и синхронное поворачивание фар в диапазоне ± 10 градусов относительно горизонтальной оси. Продемонстрировать работу гидрокорректора фар для различных вариантов загрузки автомобиля, хранящихся в таблицах Excel.
Библиографический список
a. Программирование и алгоритмические языки. Н.А. Криницкий, Г.А. Маросов, Г.Д. Фролов, под редакцией А.А. Дроздицина. Главная редакция физико-математической литературы из-во "Наука", М.: 1975. b. Регеда В.В. Основы преобразования и обмена информацией: Учеб. пособие. – Пенза: Изд-во Пенз. гос.техн. ун-та, 1996.– 114 с. c. Карри Корнел. Программирование в среде Visual Basic 5 / Пер. с анлг. Ю.В. Клемец- Мн.: ООО "Попури", 1998. d. Visual Basic 4 (серия "без проблем") / Пер. с анлг. – М.: БИНОМ, 1996. e. Гарнаев А. Visual Basic 6.0. Разработка приложений. – СПб.: БХВ – Санкт-Петербург, 2000. f. Браун К. Введение в Visual Basic для программистов: Пер с англ. – М.: Мир,1993 g. Герасименко В.А. Защита информации в автоматизированных системах обработки данных. В 2-х кн.: Кн.1.– М.: Энергоатомиздат, 1994. 312 с. h. Гарнаев А. Использование MS Excel и VBA в экономике и финансах. – СПб: Издательство БХВ, 1999. i. Гарнаев А. EXCEL, VBA, INTERNET в экономике и финансах. – СПб: Издательство БХВ-Петербург, 2002.
СОДЕРЖАНИЕ ВЕДЕНИЕ 5. ЯЗЫКИ ПРОГРАММИРОВАНИЯ 1.4. Уровни и поколения языков программирования 1.5. Технологии программирования 1.6. Обзор языков программирования высокого уровня 6. TURBO BASIC 2.5. Основные элементы языка программирования TURBO BASIC 2.6. Среда программирования TURBO BASIC 2.7. Линейное программирование в TURBO BASIC 2.8. Основные операторы ввода в TURBO BASIC 2.6. Основные операторы вывода в TURBO BASIC 2.7. Разветвляющиеся программы в TURBO BASIC 2.8. Циклические программы в TURBO BASIC. 2.9. Подпрограммы, функции и процедуры в TURBO BASIC 2.12. Использование массивов в TURBO BASIC 2.13. Организация работы с дисковой памятью в TURBO BASIC 2.14. Примеры программ обработки массивов 7. ОБЪЕКТНО–ОРИЕНТИРОВАННЫЙ МЕТОД ПРОГРАММИРОВАНИЯ 1.4. Объект