Министерство образования и науки Российской Федерации ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
В.В. Регеда, О.Н. Регеда
...
23 downloads
1719 Views
1MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство образования и науки Российской Федерации ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
В.В. Регеда, О.Н. Регеда
ОСНОВЫ ПРОГРАММИРОВАНИЯ НА 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=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 xa AND x