Файл: Технологии программирования. Основы программирования на языке QBasic.pdf
Добавлен: 29.06.2023
Просмотров: 107
Скачиваний: 2
DIM I AS DOUBLE, si AS STRING * 500, sgl AS SINGLE
Бейсик не требует обязательного описания всех используемых в программе переменных. Если интерпретатор встречает переменную, которая не была до этого описана в операторе DIM, то он автоматически отводит ей место в памяти в зависимости от ее названия. По умолчанию считается, что не описанная ранее переменная имеет тип SINGLE.
Однако сохранить в переменной с названием, например, Х1, строку “текст” не удастся. Чтобы указать интерпретатору, что переменная имеет тип, отличный от SINGLE, к ней в конец надо приписать специальный символ, характеризующий ее тип.
Вот таблица символов, характеризующих тип переменной.
Тип переменной |
Символ, приписываемый в конец названия переменной |
INTEGER |
% |
SINGLE |
1 |
STRING (строка с переменной длиной) |
$ |
LONG |
& |
DOUBLE |
# |
Например:
i%
LognVar&
sgl d#
str$
Если некоторая переменная была описана в операторе DIM (например: DIM X AS STRING), то в дальнейшем к ней можно обращаться как с указанием символа, характеризующего тип (Х$), так и без него (X).
Если же переменная была произвольно введена в программу, а ее тип указан с помощью соответствующего символа, то обращаться к такой переменной можно, только обязательно записывая в конце символ ее типа (Х$). Обращение к переменной X (без $) будет расценено интерпретатором как обращение к другой переменной типа SINGLE.
Числа в других системах счисления
Если вы не знакомы со словами «шестнадцатеричная система счисления», то можете пропустить этот параграф — никакого влияния на ваше обучение программированию он не окажет. А если знакомы, то наверняка знаете, что помимо десятичной и шестнадцатеричной можно применять и другие системы счисления с любым основанием. В компьютерной области часто применяются еще две системы: двоичная и восьмеричная.
В Бейсике есть средства поддержки работы с числами, записанными в восьмеричной и шестнадцатеричной системах счисления. Чтобы их отличать от обычных десятичных чисел, в их начале указывается либо &Н (основание системы счисления — 16) либо &0 (О — не ноль, а буква; основание системы счисления — 8).
Например:
PRINT &HF ' печатается 15
PRINT &Н10 ' печатается 16
PRINT &О10 ' печатается 8
Плохой способ задания типов переменных
Как уже говорилось, переменные в программе можно использовать сразу, не описывая их с помощью оператора DIM. По умолчанию все неописанные переменные имеют тип SINGLE. Кроме того, можно задавать типы, которые будут соответствовать переменным в зависимости от их названия, по первой букве. Для этого в Бейсике имеется целый набор операторов. Каждый из них задает диапазон (или диапазоны) букв, которые будут определять тип переменных, начинающихся с этих букв.
Оператор |
Какой тип задается |
Оператор |
Какой тип задается |
DEFINT |
INTEGER |
DEFDBL |
DOUBLE |
DEFLNG |
LONG |
DEFSTR |
STRING |
DEFSNG |
SINGLE |
Например, при использовании приведенного далее оператора переменная Ys будет автоматически считаться переменной строкового типа.
DEFSTR a-h, x-z ' заданы два диапазона: abcdefgh и xyz
3.2 Нумерация операторов
Каждый оператор Бейсика может иметь свой номер. Так повелось еще с самых первых версий этого языка, когда требование нумерации каждой строки программы было обязательным. В QBasic строки можно не нумеровать, но такая возможность может быть полезной, например, при использовании старых, с номерами операторов, текстов программ.
Номер ставится слева от оператора и отделяется от него одним или несколькими пробелами. Номер должен быть неотрицательным числом (возможно, с точкой). Разрешается использовать числа, следующие друг за другом в произвольной последовательности. На порядке выполнения операторов нумерация не сказывается. В частности, вышеприведенную программу из трех строк можно переписать так:
0 DIM str$
2.0 Str$ = "всем привет"
300 PRINT Stir $
или так:
12 DIM Str$
30.0 Str$ = "всем привет"
0 PRINT Str$
3.3 Комментарии
Программу очень полезно сопровождать комментариями, чтобы в дальнейшем сразу понимать, что происходит в различных ее частях. Комментировать нужно не оператор Бейсика, а выполняемое им действие. Например, оператор
Speed# = 60
правильно снабдить не очевидными словами «в переменную Speed# записывается число 60», а осмысленным текстом: «значение скорости делаем равным 60 км/час».
Комментарий может содержать любой текст. Он начинается с символа 1 (одиночная кавычка). Все символы, следующие за такой кавычкой до конца текущей строки, интерпретатором просто пропускаются.
Speed# = 60 ' Значение скорости делаем равным 60 км/ч Комментарий можно начинать и с первой позиции:
вся эта строка - комментарий
Кроме того, при записи операторов Бейсика в тех местах, где допускаются пробелы, их можно использовать в неограниченном количестве, как правило, с целью повышения удобочитаемости исходного текста программы. Например:
10 Speed# = 60 ' пробелы хороши в меру
3.4 Арифметические операторы
Просто записывать в переменные числовые или текстовые значения, конечно, удобно, но этого недостаточно. Практически в любой программе не обойтись без различных вычислений: подсчета символов в строке, текущего курса доллара, определения размеров окна и т. д. Для выполнения арифметических вычислений в операторах Бейсика используются уже знакомые по работе с окном Immediate символы + (сложить), - (вычесть), * (умножить), / (делить) и Л (возвести в степень). Кроме того, символ \ (обратная косая черта) применяется для целого деления, в результате которого получается целое число. Например, значением выражения 1000 / 3 будет число 333.3333333333333, а значением выражения 1000 \ 3 — число 333.
При таком делении для чисел типов INTEGER и LONG дробная часть частного просто отбрасывается, в то время как при обычном делении происходит округление дробного результата.
В результате выполнения оператора Y% = 5/3 переменная Y% получит значение 2 (округление в большую сторону), а при использовании оператора Y% = 5 \ 3 это значение окажется равным 1.
3.5 Сцепление строк
Оператор сложения + определен не только для чисел, но и для строк. С его помощью можно сцепить (сложить) вместе несколько строк. Например, значением выражения
"Это" + " строка!" станет строка:
"Это строка!"
Можно сцепить несколько строк:
"123" + "456" + "7890"
Результирующим значением станет строка “1234567890”.
3.6 Выражения
Выполнять арифметические действия над числами и сцепление строк тоже полезно. Однако и этого недостаточно для создания даже небольшой программы. Складывать и умножать заранее известные числа можно и с помощью калькулятора, а вот Бейсик позволяет производить вычисления с переменными, значения которых к моменту выполнения соответствующего оператора разработчику неизвестны. Это — базовая, фундаментальная возможность всех языков программирования.
В правой части оператора присваивания можно записывать не только число, но и произвольное выражение, допустимое правилами записи Бейсика. В нем могут использоваться:
• знаки арифметических действий, определяющие действия над числами и переменными;
• круглые скобки, задающие последовательность выполнения действий;
• числа, над которыми выполняются действия;
• переменные, над значениями которых выполняются арифметические действия;
• стандартные функции Бейсика (вроде SQR()).
Примеры арифметических выражений:
1 + 1
2*3 - 5 2 * (3-5)
Y% ^ 2 - 10.5
(X# * 2 + Y# * 3.14) / 52
(SQR(Y&) - Dist%) * 1.1Е+2
Порядок вычисления значения выражения определяется приоритетом арифметических операций. В первую очередь выполняется возведение в степень, потом умножение и деление, в заключение — сложение и вычитание. Если в выражении имеются скобки, то сначала вычисляется значение подвыражений в этих скобках. Например, значение выражения 4 Л2 * 3 равно 48 (4 в степени 2 равно 16, а 16, умноженное на 3, даст 48), а значение выражения 4 л (2 * 3) равно 4096 (сначала вычисляется выражение в скобках — 2*3 будет 6, а затем 4 возводится в степень 6).
Действия могут выполняться не только над числами и переменными числового типа, но и над строками и переменными строкового типа. Для них определен только один оператор сложения или сцепления. Например:
"текст" + S$
"Ошибка в файле " + FileName$ + ".doc"
"2 + 2 будет " + STR$(2 + 2)
В последнем случае STR$() — стандартная функция Бейсика, которая преобразовывает значение выражения 2+2 (равное 4) в строку («4»).
Теперь можно составить программу, которая будет вычислять сумму трех идущих подряд чисел, начиная с произвольного числа:
DIM X AS INTEGER, SUM AS INTEGER X% = 9 7 произвольное начальное число SUM% = X% + (X% + 1) + (X% + 2)
PRINT SUM%
3.7 Константы
Представьте, что вы пишете большое приложение, выполняющее сложные математические расчеты, в ходе которых неоднократно приходится прибегать к использованию одного и того же числа, несущего определенную смысловую нагрузку (например, числа 0,001, задающего точность вычислений). После того как программа разработана и проверена на контрольных примерах, вполне может возникнуть желание использовать ее в более широких целях. При этом, в частности, наверняка потребуется изменить величину точности вычислений с более высокой на более низкую или наоборот. Но тогда придется искать все операторы, где встречается это число, и каждый раз менять его на новое значение вручную. При этом легко и ошибиться, введя или не дописав лишний ноль.
Есть хороший способ — всем числовым или строковым константам, которые встречаются в программе более одного раза, дать имена, как переменным. Для этого предназначен оператор
CONST {имя-константы} = (выражение)
Например, вместо числа 0,001 можно использовать константу POROG (имена констант для удобства отличия их от переменных записывают, как правило, большими буквами):
CONST POROG = 0.001
Размещаются операторы описания констант обычно в самом начале программы.
Использовать константы полезно еще и в случае, если программа готовится для работы на нескольких языках (например, русском и английском). Тогда все строковые сообщения лучше хранить в двух видах (одно из них как комментарии), и когда потребуется быстро перевести приложение на новый язык, достаточно будет добавить описание констант на этом языке, а старые описания «закомментировать», добавив апостроф в начало каждой строки.
' Программа содержит сообщения на разных языках ' Текущий язык — французский ' Русский язык:
' CONST HELLO = "привет"
' Английский язык:
' CONST HELLO = "hello"
' Французский язык:
CONST HELLO = "salut"
3.8 Задание начальных значений в программе
Константы удобно применять, если с их помощью надо описать относительно небольшое число значений. А когда требуется обработать тысячу значений, заранее подготовленных (перечисленных через запятую) и набранных в редакторе? Их можно включить в программу с помощью оператора DATA, который подготавливает эти данные для автоматического присваивания их переменным.
DATA 10, 100, 3, 99
Чтобы эти данные оказались в переменных, надо использовать оператор READ {список-переменных}
READ xl, х2
Интерпретатор поймет, что надо взять очередные два значения (так как указано две переменные) из оператора DATA (сначала будут взяты числа 10 и 100), и присвоить их переменным х1 и х2. При следующем обращении к оператору READ будут использованы следующие значения. Например, оператор READ х3 считает в переменную х3 значение 3 и т. д.
В любой момент можно перейти к присваиванию значений из оператора DATA с самого начала, использовав оператор RESTORE. То есть, если в дальнейшем выполнить операторы:
RESTORE READ x2
то переменная x2 получит первое значение 10.
3.9 Вывод информации на экран
Чтобы вывести информацию на экран, используется оператор PRINT. О нем уже немного рассказывалось в разделе, посвященном работе с окном Immediate.