Элементы языка QBASICАлгоритм решения практически
любой задачи можно трансформировать в компьютерную программу. Такую
программу в общем случае можно рассматривать как последовательность
некоторых слов и специальных символов. Слова и символы образуют более
сложные конструкции, которые должны формироваться по определенным
правилам. В отличие от естественных, в языках программирования эти правила
должны соблюдаться более строго: даже забытая запятая может привести к
тому, что программа либо будет работать не корректно, либо вовсе не сможет
выполняться. Набор правил для написания программ называется синтаксисом
языка программирования.
Ключевые словаНекоторые слова, используемые в
программах, имеют особый смысл и поэтому называются ключевыми (или
зарезервированными) . Интерпретация или компиляция ключевого слова всегда
вызывает вполне определенное действие компьютера. Например, ключевое
слово PRINT задает вывод информации на экран.
Синтаксические соглашенияИмеются различные способы
описания синтаксиса языковых конструкций. По понятным причинам для
описания элементов языка QBASIC мы будем пользоваться той же формой
описания синтаксиса, что и в Help-системе QBASIC. Следующая таблица
дает представление о применяемых обозначениях.
КомментарииВключенные в программу
комментарии QBASIC просто игнорирует. Использование комментариев
позволяет включать в программу любой текст, не нарушая ее семантики.
Комментарии используются для объяснения тех или иных действий в программе.
Если Вы вернетесь к своей программе через несколько недель (месяцев или
даже лет), они помогут Вам быстрее в ней освоится. В QBASIC начало
комментария обозначается знаком ' (одинарная кавычка). Остаток строки
нельзя переносить в начало следующей строки, содержащей
оператор.
Арифметические выражения.Арифметическое выражение — это
комбинация чисел, арифметических констант и некоторых функций, которые
связаны между собой знаками арифметических операций. Числа — простейшая
форма арифметических выражений. Число состоит из цифр "О...9" и
специальных знаков "- + . D". Обратите внимание, что вместо запятой ",",
отделяющей целую часть от дробной, используется точка ".".
Сложные арифметические выражения
можно получить, если связать в программе числа друг с другом, например,
для вычислений. Символы, с помощью которых числа вступают друг с другом в
некоторые отношения, называют знаками операций. Эти знаки имеют следующие
значения:
Новое представление оператора
PRINT дает возможность работать с арифметическими
выражениями.
Строковые выраженияСтроковое выражение — это
комбинация текстов, текстовых констант, текстовых переменных и
определенных функций, которые связаны операцией "+". Простейшая строка —
это текст, заключенный в кавычки ("), состоящий из произвольных комбинаций
букв, цифр и специальных знаков. Тексты используются, например, чтобы
выводить на экран заглавия, комментарии или примечания.
Объединяя отдельные тексты оператором "+", можно получать более длинные строковые выражения. Эта операция называется конкатенацией.
Типы данныхКак правило, любой программе
необходимы данные, которые каким-то образом обрабатываются программой. Эти
данные могут быть совершенно различными. Так, в простейшем случае
различают два типа данных: числовые и строковые. В QBASIC разные
типы данных должны иметь четкие различия и признаки.
Стандартные типы данных.В QBASIC можно объявить
следующие стандартные типы данных:
Константы и переменные.Константы.Константы определяют в начале
программы. После определения они могут использоваться во всей
программе.
Переменные.Так же, как и константы,
переменные определяют в самом начале программы. В отличие от констант,
значения переменных могут меняться в процессе выполнения программы.
Объявление переменных выглядит
так:
Примеры:
Присвоение значений переменным.Присвоить некоторое значение
переменной можно следующим образом:
Следует следить за тем, чтобы при вычислениях не было переполнения значения переменной. Конструкции, в которых переменная находится слева и справа от знака равенства, применяются очень часто. Интерпретация такого выражения достаточно проста. Сначала вычисляется значение выражения, стоящего справа от знака равенства с учетом текущих значений переменных, и только после этого происходит присвоение значение переменной, расположенной слева от знака равенства. Ввод/вывод.В этой главе Вы познакомитесь с
операторами и функциями, которые реализуют вывод на экран и ввод с
клавиатуры.
Вывод на экран.Оператор PRINT позволяет
выводить данные на экран. Синтаксис оператора PRINT:
Очистка экрана.Оператор CLS очищает экран
и используется без параметров. Следующий оператор вывода начинает
размещение данных в левом верхнем углу экрана (первая строка, первый
столбец).
Пример: 'В данной программе демонстрируется очистка экрана CLS 'Экран очищен PRINT "Вывод в левый верхний угол, "; PRINT "остальное поле экрана свободно" 'Конец программы Ввод с клавиатуры.Описанный далее оператор
INPUT дает возможность вводить данные во время выполнения программы,
после чего эти данные обрабатываются программой. Появление на экране
вопросительного знака означает запрос ввода. Ввод данных завершается
нажатием клавиши
,
и введенное значение сохраняется в заданной переменной.
Пример 2: Применение точки с запятой приводит к тому, что
после вывода текста на экране появляется знак вопроса, вывод которого
можно отменить, если точку с запятой заменить запятой. Предложение
INPUT будет выглядеть так:
Форматированный вывод на экран.Следующий оператор служит для
форматированного вывода данных на экран. Он очень похож на оператор
PRINT.
Пример 1: Позиционирование курсора.Для перемещения курсора в
требуемую позицию экрана, как правило, применяют оператор LOCATE.
Это очень удобно, например, для создания сложных форм вывода на
экран.
'Вывод в десятую
строку после CLS Вывод пробелов.Функция SPC в сочетании с
оператором PRINT может выводить на экран пробелы. Это полезно,
например, при оформлении вывода информации на экран.
Пример: Функция табуляции.Функция TAB так же, как
функция SPC, применяется в операторе PRINT. Позволяет начать
вывод данных текущей строки с определенной позиции.
Остановка программы.В основном любой алгоритм должен
как-то заканчиваться, поэтому отсутствие необходимости использовать
оператор END в последних версиях QBASICа, считается
отрицательным его качеством. Но он всё же существует, и вставлять его в
конец программы всё же стоит (потом пригодится). Также если хотите
прервать вашу программу в любом её месте то надо использовать
оператор
Управляющие операторы.Рассматриваемые до сих пор
программы были линейными, т.е. выполнялись последовательно оператор за
оператором с начала до конца программы. В таких программах невозможно
влиять на последовательность выполнения операторов, когда, например,
происходит повторение фрагментов программы или выполнение ряда действий
зависит от определенных условий.
В этой главе Вы познакомитесь
с операторами, которые позволяют управлять ходом выполнения программы.
Группу таких операторов часто объединяют понятием "Управляющие
операторы".
Оператор безусловного перехода.Оператор GOTO позволяет
изменить последовательность выполнения шагов программы, но его применение
нежелательно, так как увеличивается время выполнения, снижается
наглядность и понимаемость программы. В предыдущих версиях BASICa
не было возможности отказаться от применения GOTO, так как
практически не существовало других языковых элементов для управления
программой.
'Оператор GOTO CLS PRINT "Хелло, " GOTO weiter PRINT "Здесь проявляется GOTO"; Welter: ‘Метка перехода PRINT "Долли!" 'Конец программы Если указать в операторе
GOTO метку, не объявленную в программе, то при запуске программы,
появится соответствующее сообщение об ошибке. Если одну метку объявить в
программе дважды, тоже появится сообщение об ошибке.
'Зациклившаяся
программа (прервать нажатием клавиш "CTRL" +
"Pause") Пример 3: 'Как не надо
писать программы Условия .Результат сравнения может
принимать только два значения: "истина", когда высказы- вание справедливо,
или "ложь" — в противном случае. Говорят также, что истинность таких
выражений либо "true" (t)(-1), либо "false" (f)(0).
Конструкция логических выражений
в QBASIC довольно проста. В качестве сравниваемых значений
(сравниваемых операндов) могут участвовать строки, числа, константы,
переменные, арифметические и строковые выражения. Используют следующие
операции сравнения:
Схематически условие можно представить следующим
образом: Итак, Строка_1 больше (меньше)
Строки_2, если при посимвольном сравнении строк код первого несовпадающего
символа из Строки_1 больше (меньше) кода соответствующего символа из
Строки_2. Также в QВasic можно использовать переменные типа Boolean, т.е. переменные которым можно присвоить какое-то логическое выражение, и значение этой переменной будет зависеть от истинности или ложности определяющего выражения. Если значение выражения ложно, то переменной будет присвоено значение 0, а если истинно, то -1. Пример В результате на
экране вы увидите: Также в логических выражениях
можно использовать логические операции AND(и), OR(или), NOT(не),
XOR(исключающее или, либо). Приведём таблицу истинности и приоритет
операций.
Приоритет
Пример Оператор условного перехода в программе.Этот оператор позволяет изменять
порядок выполнения операторов в программе в зависимости от определенных
условий. Синтаксис оператора:
Если отсутствует ELSE-ветвь и условие в операторе IF ложно, то работа программы всегда продолжается с оператора, следующего за END IF. В отличие от ELSE ключевое слово THEN пропускать нельзя. В прежних версиях BASIC часто незаменимой была конструкция условного перехода, т.е. комбинация операторов IF и GOTO. Цикл WHILE.С помощью конструкции WHILE …
WEND можно реализовать выполнение ряда операторов до тех пор, пока
выполняется определенное условие. Последовательность операторов,
выполнение которых повторяется циклически, называется циклом.
Следите за тем, чтобы действия
внутри цикла влияли на WHILE-условие. В данном примере показано,
что произойдет, если эту рекомендацию не выполнить.
Цикл DO.Конструкция DO...LOOP
очень похожа на WHILE...WEND. Здесь также имеется
последовательность операторов, повторное выполнение которых зависит от
некоторых условий.
В первом варианте цикл выполняется
по крайней мере один раз, так как проверка условия находится в конце
цикла. А во втором варианте цикл может вообще не выполняться, если
соответствующее условие с самого начала не позволяет входить в него. Этот
вариант очень похож на цикл WHILE...WEND. Как видно из
синтаксического описания, DO...LOOP может работать без проверки
условий. В этом случае из бесконечного цикла можно выйти с помощью
оператора EXIT DO. Операторы между FOR и NEXT повторяются до тех пор, пока управляющая переменная цикла не превысит конечное значение. После каждого прохождения цикла переменная цикла изменяется на величину шага. Если шаг — положительное число, то начальное значение переменной цикла должно быть меньше конечного значения, иначе цикл ни разу не выполнится, и, наоборот, если шаг отрицательный, то начальное значение переменной цикла должно быть больше конечного, иначе опять-таки цикл ни разу не отработает. В остальных случаях количество прохождений цикла с шагом — это ближайшее большее целое от выражения: "( конечное значение — начальное значение+1) / шаг", если шаг положительный, и "(конечное значение—начальное значение-1) / шаг", если шаг отрицательный. Оператор выбора SELECT CASE.SELECT CASE предназначен
для выполнения одного из альтернативных действий, перечисленных в нем.
Выбор определяется значением управляющей переменной. Начнем с
представления синтаксиса:
CASE-сравнение в простейшем случае состоит только из одного выражения (например, из чисел или из переменных). Однако можно включать списки выражений (выражение_1, выражение_2,.„) или даже целые области (выражение_1 ТО выражение_2). Далее значение переменной можно оценивать с помощью операторов сравнения, как в случае с условиями. Для этого после CASE применяется ключевое слово IS, за которым следует операция отношения и выражение.
Пример 2: Третья CASE-ветвь никогда не будет выполнена, так как число, которое меньше 5, всегда меньше 10, а значит, после первой CASE-ветви выполнение оператора SELECT завершится. Логические операции.В программах часто возникает
необходимость описывать более сложные логические выражения, чем мы
рассматривали. Рассмотрим пример:
Предположим входные данные должны вводится только тогда, когда zahll % больше нуля, и одновременно zahl1% меньше нуля. Как проверить одно из условий, Вы уже знаете. Рассмотрим способ, позволяющий объединить оба условия. Логическое И (AND) .AND (И) коньюктивно
объединяет логические условия:
Только тогда, когда zahl1% > 0 и zahl2%< 0, значение всего логического выражения станет истинно, а значит, выполнение цикла закончится. Логическое ИЛИ (OR) .OR (ИЛИ) дизъюнктивно
объединяет логические условия:
Пример: В этом примере выход из LOOP-цикла не произойдет только в том случае, если значение каждого из вводимых чисел будет меньше или равно нулю. Логическое отрицание (NOT).NOT инвертирует (меняет
на противоположное) значение логического выражения, т.е. то, что было "ложь",
становится "истиной" и наоборот:
Пример: Обработка строкВ этой главе рассмотрим функции,
которые осуществляют обработку строк. В QBASIC функция состоит из
имени и аргументов, которые заключаются в круглые скобки и располагаются
всегда за именем функции. Значения функций обработки строк могут быть или
типа STRING, или принадлежать к группе арифметических типов данных.
Функции, наряду с переменными и константами, применяют в качестве
составляющих оператора или используют при составлении выражений или
логических условий. Естественно, зна- чение функции должно быть совместимо
с остальными составляющими оператора, например, в арифметическое выражение
нельзя встраивать функцию, значение которой является строковым
выражением.
Определение длины строки.Функция LEN выдает длину
строки, т.е. количество символов в строковом выражении.
Получение символов кода ASCII.Функция CHR$ преобразует
ASCII-код в соответствующий символ (ASCII=American Standard Code for
Information Interchange — Американский стандартный код для обмена
информацией). Аргумент функции — число типа INTEGER в диапазоне от 0 до
255.
Соответствие кодов ASCII
определенным символам дано в ASCII-таб-лице, размещенной в справочнике
(Help) OBASIC и приведенной ниже. Также можно воспользоваться следующей
программой:
Получение ASCII-кода символа.Функция ASC — обратная по
отношению к функции CHR$. Аргумент функции ASC — символ, а
значение функции — соответствующий этому символу ASCII-код. Пример: PRINT ASC ("А") Выделение левых крайних символов строки.Функция LEFT$ выделяет
крайние слева символы строки. Вызов функции:
Пример: PRINT LEFT$ ("Хелло, QBASIC", 5) Выделение правых крайних символов строки.Функция RIGHT$ выделяет
крайние справа символы строки. Вызов функции:
Пример: PRINT RIGHTS ("Хелло, OBASIC, 5) Выбор подстроки.Функция MID$ копирует из
строки любой ее фрагмент.
Получение строчных символов.Функция LCASE$ возвращает
заданную строку в виде строчных букв. Пользуясь этой функцией, следует
принять во внимание, что аргументы для LCASE$ расположены в
подмножестве символов, коды которых лежат в диапазоне от 32 до 127.
Следующие 128 символов (от 128 до 256) предназначены для кодирования
символов национальных алфавитов, псевдографики, математических и
др. Пример: ‘LCASE$ PRINT LCASE$ ("HUT OF BROWN NOW SIT DOWN") Получение заглавных символов.Функция UCASE$
противоположна функции LCASE$ и возвращает заданную строку в виде
заглавных букв. Следует принимать во внимание тот факт, что аргументом для
UCASE$ могут быть лишь символы, коды которых расположены в
диапазоне от 32 до 127.
Пример: ‘UCASE$ PRINT UCASE$ ("hut of brown now sit down") Устранение ведущих пробелов.Функция LTRIM$ устраняет в
строке ведущие пробелы. Возвращенное значение сдвинуто влево.
Пример: 'LTRIM$ DIM wort$, lwort$ wort$ = " Сдвиг влево" Iwort$= LTRIM$(wort$) PRINT wort$ PRINT LEN(wort$) PRINT PRINT Iwort$ PRINT LEN(lwort$) Устранение последних пробелов .Функция RTRIM$ убирает
в строке последние пробелы. Пример : ‘RTRIM$ DIM wort1$, wort2$ wort1$= "левый wort2$=" и правый" PRINT wort1$+wort2$ PRINT PTRIM$(wort1$)+wort2$ Создание строки из пробелов.Функция SPACE$ создает
строку из пробелов. Аргумент функции — длина этой
строки.
Пример: DIM leer$ leer$-SPACES$(45) PRINT LEN(leer$) Преобразование строки в число.Функция VAL преобразует
число из строкового представления в числовое. Предполагается, что
преобразуемая строка содержит допустимые для представления чисел символы.
Если нецифровой знак встречается первым в строке, то преобразование
невозможно и значение функции равно нулю.
Пример: PRINT VAL("234.23) PRINT VAL("Hallo") PRINT VAL("43D12) Математические вычисления.С простыми математическими
вычислениями Вы уже познакомились в главе "Элементы языка QBASIC".
В этой главе рассмотрим функции, которые позволяют проводить сложные
математические расчеты. Без этих функций такие расчеты либо не возможны,
либо требуют для реализации значительных затрат.
Абсолютное значение числа.Функция ABS возвращает
абсолютное значение заданного арифметического выражения.
Пример: 'Функция ABS DIM wert% wert% = 45 PRINT ABS(wert%) PRINT ABS(-1 * wert%) Тригонометрические функции.В QBASIC определены
следующие тригонометрические функции:
Угол следует задавать в радианах.
Функция, обратная тангенсу — ATN, возвращает значение угла,
выраженное в радианах. Для преобразования значения угла из градусной меры
в радианную, и наоборот, можно воспользоваться формулами: Функция вычисления экспоненты.Функция ЕХР вычисляет
значения функции е в степени х, где е=2,71 — основание натурального
логарифма. Результат имеет вещественный тип SINGLE.
Пример: 'Функция :f(x)-- 3*ex+ 2*eзx DIMx! CLS INPUT "Задать аргумент функции ",х! PRINT "f(";x;")-"; PRINT -3 * EXP(x!) + 2 * EXP(3 * xl) 'Конец программы Вычисление натурального логарифма.Функция LOG вычисляет
значение натурального логарифма, т.е. логарифма с основанием е. Результат
имеет вещественный тип SINGLE.
Пример: 'Функция LOG DIMx! CLS INPUT "Задать аргумент функции ",х! PRINT "ln(";x!;")-"; LOG(x!) 'проверка PRINT "так как е^"; LOG(x!); "-х- "; EXP(LOG(x!)) Преобразование к типу INTEGER.Функция INT возвращает
наибольшее целое, не превосходящее значение ее
аргумента.
PRINT INT(2.234) PRINT INT(-2.234) 'Ближайшее меньшее целое число для -2.234 равно -3 Функцию INT удобно использовать для
коммерческих округлений. Чтобы разобраться в работе этой программы, составим такую же таблицу значений переменных, как в главе "От задачи — к программе":
Выделение целой части числа.Функция FIX возвращает
целую часть арифметического значения аргумента. Результат имеет
целочисленный тип (INTEGER). Пример: PRINT FIX(2.334) PRINT FIX(-2.334) Извлечение квадратного корня.Функция SQR возвращает
корень квадратный заданного аргумента. Результат — вещественное число типа
SINGLE. Помните, что аргумент обязательно должен быть неотрицательным
числом. Пример: PRINT SQR(4) PRINT SQR(1OO) PRINT SQR(234.234) 'Следующая команда с ошибкой PRINT SQR(-4) Для других дробных степеней в
QBASIC нет стандартных функций. В главе "Функции
и процедуры, определенные пользователем" Вы познакомитесь с тем, как
можно самостоятельно создавать такие функции в QBASIC.
Определение знака числа (функция сигнатуры).Функция SGN (Signum)
возвращает значения -1,0,1, если аргумент соответственно меньше, равен или
больше нуля. Пример: 'Функция SGN PRINT SGN(-23.3454) PRINT SGN(0) PRINT SGN(23.32) Преобразование числа в строку.Функция STR$ преобразует
числовое значение в цифровую строку и является функцией, обратной
VAL. DIM zeichen$ ZeichenS= "Это "+ STR$(10.234) PRINT zeichenS Массивы в QBASIC.Под массивом понимают объединение
переменных одного типа в единую структуру. Обращение к отдельным элементам
в массиве осуществляется по индексу. Допустим, в программе необходимо 20
переменных для запоминания стоимостей каких-то товаров artprl,..artpr20.
Переменные можно объявить следующим образом:
Пример: DIM artlkel$(1 T0 20) DIM prels%(5 TO 10) DIM alter%(18 T0 65) '20 строковых элементов 1...20 '6 Integer-элементов 5...10 '48 Integer-элементов 18...65В программе для выбора элемента из массива используется индекс. Пример: PRINT preis%(5) 'Выбор элемента массива с индексом 5При программировании вышеописанного примера отчетливо видны преимущества применения массивов. Пример: 'Упражнение с использованием массива DIM artpr!(1 TO 20) 'массив цен DIM 1% 'индекс-переменная CLS 'Ввод цен для 20 наименований товаров FOR i%-1 T0 20 PRINT "Ввести стоимость "; 1%; "-го товара"; 'Ввод в элемемент массива с индексом 1% INPUT "",artpr(l%) NEXT I % 'Вывод 20 наименований CLS 'Вывод в строку 'суммы, количества, среднего значения, Max, Min До сих пор мы рассматривали
одномерные массивы. Но в QBASIC массив может иметь несколько
индексов. Например, использование второго индекса позволяет обрабатывать
двумерные таблицы. Трехмерный массив можно представить как куб. Можно
описать массивы с четырьмя, пятью и более индексами. Максимально
допустимое число индексов для одного массива — 255.
Пример: 'Использование трехмерных массивов DIM zahl%(1 TO 10, 4 ТО 16, 6 ТО 30) zahl%(1,5,23)=13 PRINTzahl%(1,523) Функции и процедуры, определенные пользователем.Собственные функции.В предшествующих главах Вы
познакомились с некоторыми встроенными функциями QBASIC (например,
MID$ или SQR). Теперь рассмотрим составление собственных
функций.
Вернемся к математической функции
INT. INT — имя функции. Этим именем определяются некоторые
программные действия, невидимые программисту, и которые инициализируются
автоматически с появлением в программе имени функции. Иначе говоря,
функцию можно понимать как группу операторов в программе, объединенных под
именем функции. С помощью заключенного в круглые скобки аргумента (сравни
INT (3.34)) в подпрограмму, инициируемую именем функции, передаются
конкретные данные. Над этими данными производятся некоторые
преобразования, и результат, как правило, возвращается в основную
программу.
Чтобы вызвать из программы
собственную функцию, нужно указать ее имя. Последний символ имени функции
определяет тип возвращаемого значения.
Покажем создание функции извлечения
корня, упомянутой в главе "Математические
вычисления", функция должна извлекать из числа корень любой степени.
Начнем с главной программы: Составим шаблон функции: FUNCTION wurzel! (argument!, wurz%) wurzell = argument! ^ (1 / wurz%) END FUNCTIONРассмотрим синтаксис определения функции в программе более детально: FUNCTION Имя_функции (Параметр_1 [, Параметр_2]...) [STATIC] [Оператор]... Имя_функции = Выражение END FUNCTION Имя_функции - Имя функции; последний символ обязательно определяет тип возвращаемого значения (%,&,!, #или $). Параметр - Параметр, который передается функции при вызове. STATIC - Если в теле функции объявляются локальные переменные, то они сохраняют свои значения в промежутке между вызовами функции. Выражение- Возвращаемое значение Смысл опции STATIC разъясним на небольшом примере. Составим главную программу для вызова функции zlen: 'Главная программа PRINT "Длина 'test' "; zlen%("test") PRINT "Длина 'test' "; zlen%("test") Функцию zlen объявим следующим образом: FUNCTION zlen%(text$) DIMi% i%-i%+LEN(text$) zlen%-i% END FUNCTIONПосле запуска программы дважды получим на экране сообщение "Длина 'тест' 4". Изменим заголовок функции: FUNCTION zlen% (text$) STATIC После первого запуска программы получаем сначала значение длины 4, затем 8. Так как при объявлении функции используется ключевое слово STATIC, то значение локальной переменной i% сохраняется после окончания выполнения функции. Поэтому при последующих вызовах к значению переменной i% добавляется число 4, и при втором обращении к функции возвращаемое значение уже не 4, а 8. Собственные процедуры.В процедурах, как и в функциях,
под одним именем процедуры объединяются логически самостоятельные
фрагменты программы. Для начала рассмотрим пример:
'Программа, иллюстрирующая
понятие процедуры PRINT "A" PRINT "В" PRINT "B1" PRINT "B2" PRINT "С" PRINT "В" PRINT "B1" PRINT "B2" PRINT "erf" PRINT "B" PRINT "B1" PRINT "B2" PRINT "ugh" 'Конец программы Программа носит чисто
иллюстративный характер, однако полезна для внесения ясности в
представление о процедурах. Можно заметить, что некоторые фрагменты
программы часто повторяются.
Такие повторения необоснованно
удлиняют программу и затрудняют работу с ней. Процедуры позволяют
объединять под одним именем повторяющиеся фрагменты программы. Процедуру,
как и функцию, можно вызвать из главной программы.
SUB beispiel END SUBВнесите туда операторы, которые повторяются в главной программе. SUB beispiel PRINT "В" PRINT "B1" PRINT "B2" END SUBТеперь достаточно из главной программы вызвать процедуру там, где это требуется. Таким образом, получаем новый вариант программы в таком виде: beispiel PRINT "C" beispiel PRINT "erf" beispiel PRINT "ugh" Другие операторы.Обработка даты компьютера.С помощью функции DATE$
можно определить текущую системную дату или изменить ее. Пример: DIM datS PRINT DATE$ dat$ = DATE$ DATE$="17-02-1992" PRINT "Предшествующая дата: "; datS: 'последующая дата: ";DATES Обработка компьютерного времени.С помощью функции ТIМЕ$
можно определить текущее системное время или изменить
его.
Пример: DIMtlmS PRINT TIME$ Tim$=TIME$ TIME$-"12:12:00"" PRINT "Предшествующее время:"; tlm$;последующее время: ";TIME$ Обмен значениями.Оператор SWAP позволяет
выполнить обмен значениями между двумя переменными одного
типа.
Пример: 'Программа для демонстрации SWAP DIMa%,b%,aS,bS а%=1 b%=4 a$= "А" b$="B" SWAPa%,b% SWAP aS, bS PRINT "a%-"; a%, "b%-"; b%, "aS-"; aS, "bS"; bS Опрос клавиатуры.С помощью функции INKEY$ во время выполнения
программы можно узнать, какая клавиша была только что нажата. Эта функция
возвращает строковое значение, которое может быть
пустой строкой (") либо состоять из одного или двух символов. Если
значение функции — пустая строка, то это означает, что никакие клавиши
не нажимались; если возвращается один символ, то это символ, только что
набранный на клавиатуре.
Пример 1:
'INKEY$ для программных прерываний CLS PRINT "Для продолжения нажать любую клавишу" DO WHILE INKEY$-"" LOOP PRINT "Спасибо!" 'Конец программы Пример 2: Из этого примера видно, что специальные клавиши отличаются тем, что их коды состоят из двух символов. Установка цветов экрана.Используя оператор COLOR,
можно изменять цвет изображения и фон. Оператор COLOR имеет
следующий формат:
Стандартное значение установки
цвета — COLOR 7,0. Если к коду цвета фона прибавить число 16, то
получим мерцающее изображение. Работа с файлами.Введение и основные функции.Большинство программ работает
с данными, которые можно вводить с клавиатуры и выводить на экран,
или с
данными, хранящимися в каких-либо файлах на дискетах или жестких
дисках.
Рассмотрим некоторые основные
понятия. Прежде всего следует выяснить, что собственно понимают под
словом "файл". Это понятие можно определить так: файл — это область
на носителе информации, где хранятся некоторые данные. Правда это определение
слишком
обобщенное, так как, следуя такому определению, файлами можно назвать и
такие вещи как:
Нас будут интересовать лишь такие
файлы, хранящиеся на носителях, которые можно обрабатывать программами
QBASIC. Вернемся к картотеке.
В картотечном ящике, как правило,
находится некоторое количество карточек, в противном случае — картотека
пуста. Если к картотеке применить понятие файла, то может возникнуть
ситуация, когда файл окажется пустым. Однако файл существует, в нем
только
нет информации. Отдельные карточки картотеки называются записями. Так же,
как карточки в ящике картотеки, записи в файле расположены
последовательно: есть первая запись файла и последняя. На отдельной
карточке картотеки или в отдельной записи может храниться всевозможная
информация (например, фамилия, адрес, возраст,...). Эта информация
называется полем данных. Объединение отдельных полей составляет логическое
целое — запись или предложение файла. Прежде чем создавать или
обрабатывать файлы в программе, следует позаботится о том, чтобы нужная
информация запоминалась в предложении файла.
В этой главе попробуем создать
небольшой адресный справочник, в котором будут следующие поля
данных:
Д Имя (30
позиций)
Д Фамилия
(30 позиций)
Д Улица (30
позиций)
Д Почтовый
индекс (6 позиций)
Д Местность
(30 позиций)
Д Телефон
(16 позиций)
Д Заглавие
(30 позиций)
Далее необходимо вывести содержимое созданного файла на экран. Это значит, что данные последовательно читаются, и отдельные поля при необходимости появляются на экране. Для распознавания конца файла используется функция EOF. Функция
EOF Отдельные записи файла считываются
одним из вариантов команды INPUT. Ранее было рассмотрено считывание данных
с клавиатуры и запоминание полученной информации в переменных. Для того
чтобы читать данные из файла, следует применять оператор INPUT в таком
виде: Работа с адресами в справочнике.В данном разделе работу с
адресами в справочнике дополним несколькими важными функциями. Прежде
всего должны быть разработаны удобные формы представления справочных
данных на экране. Не следует обходить вниманием этот раздел, даже если Вас
отпугнут несколько пространные примеры. Интенсивная проработка этого
раздела несомненно даст Вам ценный материал для собственной практики
программирования. У Вас появится возможность повторить основные операции
QBASIC. Программа управления адресами должна выполнять
Д следующие действия: Д искать
адрес изменять адрес
Ну что теперь мы имеем рамочку в центре экрана и внутри написано ОК. Далее... Во первых нам нужен обработчик клавиш для передвижения по меню, а во вторых требуется составить алгоритм прорисовки экрана после каждого нового перехода от одного пункта к другому. Попробуйте составить программу самостоятельно Обработка ошибок.Рассмотрим следующий
пример:
'Программа, при выполнении которой возможна
ошибка DIM a! INPUT "Введите, пожалуйста, число ",а! PRINT 5000 / а! 'Конец программы Эта программа работает до тех пор, пока в качестве входной информации не будет введен нуль. При вводе "нуля" диагностируется ошибка (Run-time error), так как операция деления на нуль недопустима. Такая ситуация должна быть предупреждена программистом введением контроля над вводимым числом. 'Ошибка нейтрализована DIM a! DO INPUT "Введите, пожалуйста, число ",а1 UNTIL a!<>0 PRINT 5000 / а! 'Конец программыОднако имеется целый ряд ситуаций, приводящих к ошибкам, которые нельзя устранить, используя контроль вводимых данных. Рассмотрим следующий пример: 'Программа с возможной ошибкой принтера LPRINT "Druckausgabe 1" LPRINT "Druckausgabe 2" LPRINT "Druckausgabe 3" 'Конец программыВызовите программу, не включив принтер. Вы получите сообщение об ошибке (Run- time error). To же самое произойдет, если Вы выключите принтер (или установите его в режим "OFFLINE") в то время, когда программа пытается передавать ему данные. Рассмотрим методы, которые позволяют программе реагировать на такие ошибки. Оператор ON ERROR GOTO Определяет подпрограмму обработки ошибок и имеет формат: ON ERROR GOTO Метка Если в процессе выполнения программы произошла ошибка, то оператор ON ERROR GOTO передаст управление на определенную метку. При этом стандартный метод обработки ошибок выполнения QBASIC блокируется. Подпрограмма обработки ошибок всегда должна завершаться оператором RESUME NEXT. Точное значение этого оператора будет объяснено ниже. 'Программа с ошибкой деления ON ERROR GOTO FehlerHandler PRINT "Вывод проведенных вычислений" 'строка-провокатор PRINT 1000/0 END 'здесь основная программа кончается 'Конец программы 'начало собственной программы обработки ошибок FehlerHandler: PRINT "Найдена ошибка" PRINT RESUME NEXT При обнаружении ошибки выполнение основной
программы не прекращается и программа выполняется до конца, в отличие от
стандартного метода обработки ошибок. Обходится только строка, в которой
была обнаружена некорректность. Более эффективно обработать ошибку можно,
если знать причину ее появления. Необходимая информация об ошибке хранится
в следующих переменных: В справочно-информационной системе (Help) QBASICa имеется список всех возможных ошибок выполнения (Run-time error). В приведенной ниже таблице собраны наиболее часто встречающиеся сообщения об ошибках и их коды:
*) RESUME *) RESUME Метка_перехода *) RESUME NEXT RESUME NEXT продолжает программу со строки, следующей за предложением, в котором обнаружена ошибка. С помощью оператора RESUME Метка_перехода можно перейти в любую точку программы, a RESUME без дополнений вызывает повторное выполнение ошибочного фрагмента. Для оценки кода ошибки выполнения лучше всего использовать оператор SELECT...CASE . 'обработка ошибок ON ERROR GOTO FehlerHandler PRINT "Вывод вычислений" PRINT 1000 / О" LPRINT "Вывод на печать" OPEN "GIBTESNI.CHT" FOR INPUT AS #1 END 'здесь основная программа кончается' 'начало собственной программы обработки ошибок FehlerHandler: PRINT"—————————————" PRINT "Найдена ошибка " SELECT CASE ERR CASE ERR=11 'деление на ноль PRINT "при программировании можно усложнить RESUME NEXT CASE ERR=27 'конец бумаги PRINT "Вставьте бумагу" PRINT "Нажмите любую клавишу" DO WHILE INKKEY$="" LOOP RESUME CASEERR=25 AND MID$(ERDEV$,1,3)-"LPT" 'ошибка принтера PRINT "Подготовьте принтер" PRINT "Нажмите любую клавишу" DO WHILE INKEY$="" LOOP RESUME CASE ELSE CLS PRINT "Код ошибки :" ; err PRINT "Придется прервать программу" END SELECT Приведенная подпрограмма реагирует на ошибку, вызванную делением на нуль, обходом ошибочной строки (RESUME NEXT). При этом выдается сообщение об ошибке. Если обнаружена ошибка принтера, выдается рекомендация по ее устранению. Если прозойдет ошибка, код которой не анализируется ветвями CASE ERR, то становится активной ветвь CASE ELSE, программа выводит код ошибки и прерывает работу. В предложенном примере это произойдет при попытке открыть несуществующий файл "GIBTESNI.CHT". Графические возможности BasicaПри программировании на
BASICе вы можете задействовать графику, благодаря чему можете наглядно
смодулировать некоторые процессы (напимер движение). BASIC иммет
обычные процедуры, гафического режима, присущие большинству я зыков
программирования. Опишем их.
Переход в графический режим экранаДля того, чтобы начать работать с
графикой, сначала надо перейти в графисеский режим. Для этого существует
оператор SCREEN, его синтаксис:
Параметры некоторых режимов(для VGA мониторов).Операторы, реализующие графикуОператор PSET
организовывает прорисовку точки на экране.
Оператор CIRCLE организовывает прорисовку
окружности на экране. Оператор LINE организовывает прорисовку
линии или закрашенного/незакрашенного прямоугольника на экране.
Оператор PAINT заполняет какую-то область
экрана заданным цветом Оператор POINT возаращает цвет точки по
координатам |