Языки Бейсик
.pdfГлава III. Данные |
21 |
Если размерность массива не определена, то есть массив не определен в операторе DIM, (что также допускается в Бейсике), то по умолчанию определяется массив в десять элементов.
Если не определено дополнительно, то минимальное значение индекса массива равно нулю.
Пример 3.8.1.1.1.
DIM a$(2,2) 'определение символьного массива
'из четырех элементов a$(0,0)=“сегодня “: a$(0,1)=“в школе “ a$(1,0)=“4 “: a$(1,1)=“урока”
PRINT a$(0,0);a$(0,1);a$(1,0);a(1,1) Результат сегодня в школе 4 урока
Оператор DIM описывает либо статические, либо динамические массивы. Если область хранения массива не была описана в операторах STATIC, DYNAMIC или COMMON, массивы, размер которых был задан в числах, являются статиче- скими, а массивы, размер которых был задан в переменных — динамическими.
Область хранения статического массива выделяется при запуске программы и остается постоянной. Область хранения динамического массива выделяется при работе программы.
3.8.2. Оператор REDIM
Оператор REDIM описывает или изменяет размер динамического массива, стирая все предыдущие значения.
Формат оператора REDIM:
REDIM [SHARED] переменная(индекс) [AS тип]
[,переменная(индекс) [AS тип]]...
ãäå |
|
SHARED |
Указывает, что переменные используются совместно всеми про- |
|
цедурами SUB или FUNCTION в модуле. |
Переменная Имя переменной массива. |
|
Индекс |
Размеры массива в следующем виде: |
|
[íèç TO] âåðõ [,[íèç TO] âåðõ]... |
ãäå |
|
Íèç |
Нижняя граница индекса массива. По умолчанию нижняя грани- |
|
ца равна нулю. |
Âåðõ |
Верхняя граница. |
AS òèï |
Описывает тип данных массива или переменной (INTEGER, |
|
LONG, SINGLE, DOUBLE, STRING или тип данных, описан- |
|
ный пользователем). |
Оператор REDIM всегда описывает динамические массивы.
22 |
Языки Бейсик |
Пример |
|
' $DYNAMIC |
|
DIM A(49, 49) |
|
REDIM A(19, 14) |
|
3.8.3.Оператор ERASE
Оператор ERASE заново инициализирует элементы массива или освобождает область хранения динамического массива.
Формат оператора ERASE:
ERASE имя_массива [,имя_массива]...
ãäå
имя_массива Имя массива.
Для статических массивов, ERASE устанавливает каждый элемент числового массива в ноль, а каждый элемент строкового массива в строку нулевой длины.
Для динамических массивов, ERASE освобождает память, используемую массивом. Вам придется заново описать размеры массива в REDIM или DIM прежде, чем использовать его.
Пример
DIM a%(0) a%(0) = 6
PRINT “Äî : “; a%(0)
ERASE a%
PRINT “После: “; a%(0)
3.8.4. Оператор OPTION BASE
Оператор OPTION BASE (оптимальная база) устанавливает минимальное значение индексов в массиве. В процессе использования массивов в программе сталкиваешься с неудобством, связанное с тем, что размерность массива не совпадает с максимальным значением индексов массивов. Например, массив с размерностью (100) имеет сто элементов, но максимальное значение индекса равно 99, а минимальное нуль. В то же время стало уже привычным нумеровать какие либо элементы с 1 до 100. Оператор OPTION BASE устанавливает иное минимальное значение индексов в массиве.
Формат оператора OPTION BASE:
OPTION BASE n
где n равно 0 или 1 и устанавливает нижнюю границу всех массивов в данной программе.
3.8.5. Тип данных, определенный пользователем
Пользовательский тип данных (в Коболе и PL/1 он назывался структурой) позволяет организовывать данные таким образом, что сразу к нескольким дан-
Глава III. Данные |
23 |
ным можно обращаться, как к одному; формировать запись файла из нескольких переменных таким образом, чтобы работать в программе с этими переменными, возложив всю работу по позиционированию данных в записи на систему. Этот тип данных хорошо зарекомендовал себя в программировании экономических задач, и нет никаких оснований отказываться от такого удобного типа данных, пусть даже он и называется теперь пользовательским, хотя автору и кажется название “структура” более соответствующим сути.
Оператор TYPE
Оператор TYPE определяет тип данных, содержащий один или несколько элементов.
Формат Оператора TYPE:
TYPE тип-пользов
Имя-элемента AS тип
[имя-элемента AS тип]
....
....
....
END TYPE
ãäå
Тип-пользов — имя определяемого типа данных. Имя может быть длиной до 40 символов и должно начинаться с буквы. Допустимые символы: A-Z, 0-9 и точка (.).
Имя-элемента— элемент типа данных, определенного пользователем.
Тип — тип элемента (INTEGER, LONG, SINGLE, DOUBLE, STRING или тип данных, определенный пользователем).
В приведенном ниже примере определен тип пользователя Card, состоящий из двух переменных: символьной Suit и целочисленной Value. Далее массив Deck, состоящий из 52 элементов, определяется как тип Card, и в дальнейшем каждый элемент массива имеет по два подэлемента-Deck(i).Suit и Deck(i).Value.
Пример
TYPE Card
Suit AS STRING * 9
Value AS INTEGER
END TYPE
DIM Deck(1 TO 52) AS Card
Deck(1).Suit = “Êëóá”
Deck(1).Value = 2
PRINT Deck(1).Suit, Deck(1).Value
24 |
Языки Бейсик |
Глава IV. Ввод информации
Ввод-вывод информации обеспечивается достаточно большим набором программных средств. В этой главе мы ограничимся рассмотрением простейших вариантов работы операторов ввода-вывода PRINT и INPUT, которые позволяют вводить информацию с клавиатуры и выводить информацию на экран монитора.
4.1. Ввод данных с клавиатуры во время выполнения программы
Эта необходимость возникает в тех случаях, когда исходные данные на этапе написания программы неизвестны и определяются только во время диалога, либо часто изменяются. Для этих целей используются операторы INPUT, LINE INPUT и функции INPUT$, INKEY$.
4.1.1. Оператор INPUT
Оператор INPUT (ВВОД) позволяет присвоить значение переменным с клавиатуры во время выполнения программы.
Формат записи оператора INPUT:
INPUT[;][“приглашение”]{,;}[список_переменных]
ãäå |
|
“Приглашение” |
— символьная константа, которая выводится на экран |
|
для пояснения того, что будет вводиться; |
Список_переменных — составляется из переменных, которым с клавиатуры должны быть присвоены определенные значения. Переменные в списке разделяются запятыми или точ- кой с запятой.
Когда в программе встречается оператор INPUT, выполнение программы приостанавливается, так как она ждет ввода с клавиатуры значения переменных, перечисленных в списке переменных оператора INPUT. На экране появляется текст приглашения, если он был указан в операторе, и знак вопроса, если после приглашения стоит точка с запятой. Если приглашение отсутствует, то на экран выводится знак вопроса. При вводе значений должно соблюдаться позиционное соответствие между переменными, указанными в списке переменных и значениями переменных, вводимых с клавиатуры. Данные вводятся в виде констант, разделенных запятыми. Тип вводимых данных должен соответствовать типу переменных в списке переменных, иначе выдается сообщение “Redo from start”-(повторите ввод) и необходимо повторить ввод.
Значения переменных вводятся с места, определенного мигающим курсором. Курсор можно сдвинуть на несколько позиций вправо клавишей ПРОБЕЛ, но эти пробелы в значение переменной не попадут. Позиция курсора устанавливается сразу после текста приглашения, если после него стоит запятая, или по-
Глава IV. Ввод информации |
25 |
сле текста приглашения, знака вопроса и пробела, если после текста приглашения стоит точка с запятой.
Значение вводимых переменных не должно превышать 253 символов. Оператор INPUT заканчивает свою работу при нажатии клавиши ВВОДА(Enter). Если количество введенных переменных равно количеству переменных в операторе INPUT, то после нажатия клавиши ВВОД программа продолжает свою работу с оператора, следующего за оператором INPUT.
Пример 4.1.1.1
INPUT “Введите значения X,Y,Z”;x,y,z$ print x;y;z$
End
Результат
Введите значения X,Y,Z? 2.45,-278.0007,Ввод 2.45 — 278.0007 Ввод
Если в операторе INPUT после приглашения поставить запятую, то знака вопроса и пробела не появится.
Пример 4.1.1.2
INPUT “Введите значения X,Y,Z”,x%,y%,z$ print x%;y%;z$
end
Результат
Введите значения X,Y,Z2.45,-278.0007,Ввод
2 — 278 Ââîä
Если количество введенных значений меньше или больше, чем указано в операторе INPUT, то после ввода данных на следующей строке экрана дисплея появится сообщение
Redo from start(повторите ввод)
Если в операторе INPUT указана только одна переменная, и данные не вводятся, а сразу нажата клавиша ВВОД, то числовой переменной будет присвоено нулевое значение, а символьной — пробел.
Значение символьной переменной, если она не содержит первых пробелов и запятых, можно вводить без двойных кавычек.
4.1.2. Оператор LINE INPUT
Оператор LINE INPUT (ввод строки) позволяет ввести с клавиатуры строку символов длиной до 254 символов, включающую любые( в том числе и управляющие) знаки во время выполнения программы.
Формат записи оператора LINE INPUT:
LINE INPUT[;][“приглашение”]{,;}символьная_переменная
ãäå
26 |
Языки Бейсик |
“Приглашение” |
— символьная константа, которая выводится на эк- |
|
ран для пояснения того, что будет вводиться; |
Символьная_переменная |
— имя символьной переменной, которой с клавиа- |
|
туры должно быть присвоено определенное зна- |
|
чение. |
Когда в программе встречается оператор LINE INPUT, выполнение программы приостанавливается, так как она ждет ввода с клавиатуры значения переменной, указанной в операторе LINE INPUT. На экране появляется текст приглашения, если он был указан в операторе.
Значение переменной вводится с места, определенного мигающим курсором. Курсор можно сдвинуть на несколько позиций вправо клавишей ПРОБЕЛ, но эти пробелы в значение переменной не попадут. Позиция курсора устанавливается сразу после текста приглашения, если оно есть, или с начала новой строки, если оно отсутствует. Заканчивается ввод нажатием клавиши ВВОД. После этого выполнение программы продолжается с оператора, следующего за оператором LINE INPUT.
4.1.3. Функция INPUT$(n)
Функция INPUT$(n) позволяет ввести с клавиатуры символьную информацию, которая при ее вводе не отображается на экране дисплея.
Формат записи функции INPUT$(n):
INPUT$(n)
ãäå
n — числовое выражение, которое определяет число символов, вводимых с клавиатуры.
Эту функцию удобно использовать при вводе пароля или при организации пауз при выполнении программы. Когда встречается функция INPUT$, то выполнение программы приостанавливается. Вводить можно все символы(функция реагирует на все клавиши клавиатуры, кроме TAB, Caps Lock, Shift, Ctrl, Alt).
Пример 4.1.3.1
PRINT “введите пароль”
'пароль должен быть из трех символов a1: FOR i = 1 TO 3
c$ = INPUT$(1)
PRINT “*”; 'печать * вместо введенного символа parol$ = parol$ + c$
NEXT i
'сравнение введенных символов с установленным паролем IF parol$ <> “zxc” THEN DO
PRINT “пароль неверен.попробуйте еще раз” parol$ = ““
GOTO a1: LOOP
ELSE PRINT “есть доступ” END IF
Глава IV. Ввод информации |
27 |
Пример 4.1.3.2
print “для продолжения нажмите любую клавишу” с$=INPUT$(1)
Прекратить выполнение функции INPUT$(n) можно одновременным нажатием клавиш CTRL и Page Down.
4.1.4. Функция INKEY$
Функция INKEY$ позволяет программным путем остановить выполнение программы до тех пор, пока не будет нажата какая-либо клавиша. Нажатая клавиша на экране не отображается. Функция INKEY$ анализирует некоторую переменную, которой перед обращением к этой функции всегда присваивается значение пробела, а во время обращения этой переменной присваивается код нажатой клавиши.
Пример 4.1.4.1
PRINT “Для продолжения нажмите любую клавишу”
DO
LOOP while INKEY$=““
èëè
print “для продолжения нажмите клавишу “п” do while inkey$<>“п”
loop
28 |
Языки Бейсик |
Глава V. Вывод данных на экран монитора
Помимо приведенных в главе 3.3 операторов PRINT и CLS используются еще несколько операторов вывода данных на экран дисплея.
5.1. Оператор LOCATE
Оператор LOCATE устанавливает курсор в нужное место на экране дисплея и позволяет управлять параметрами самого курсора.
Формат записи оператора LOCATE:
LOCATE [номер_строки][,[номер_колонки]][{,0,1}]
[,[начало_курсора][,конец_курсора]]
ãäå
Номер_строки — задает место, куда помещается курсор. Значение Номер_колонки — числового выражения, задающее номер_строки, находит-
ся в пределах от 1 до 25; значение числового выражения, задающего номер_колонки задается в пределах от 1 до 40 или 80 в зависимости от установленной длины строки экрана дисплея.
Если третий позиционный параметр равен 0, то курсор будет невидим на экране во время выполнения программы; 1-видим. По умолчанию этот параметр равен 1.
Параметры – начало_курсора (верхняя линия) и конец_курсора (нижняя линия) задают количество линий сканирующего луча, которые формируют толщину курсора. Значения этих параметров лежат в пределах от 0 до 31. Линии нумеруются сверху вниз от 0 до 13 для алфавитно-цифрового и от 0 до 7 для графического дисплеев.
В результате выполнения оператора LOCATE курсор будет установлен в указанную строку и колонку с заданной видимостью и толщиной. Толщиной курсора можно управлять только в текстовом режиме. Если какой-то операнд опущен, то будет использоваться значение, которое установлено по умолча- нию или предыдущим оператором LOCATE.
5.2. Работа с графической информацией
Программные средства языка Бейсик позволяют работать не только с текстовой, но и с графической информацией.
Элементарным изобразительным средством графического экрана является черно-белая или цветная точка разной степени свечения. Координаты точки определяются прямоугольной системой координат и разрешающей способностью экрана дисплея. Разрешающая способность экрана задается оператором SCREEN.
Глава V. Вывод данных на экран монитора |
29 |
5.2.1. Оператор SCREEN
Оператор SCREEN устанавливает режим и параметры работы экрана дисплея.
Формат записи оператора SCREEN:
SCREEN {1,2}[,[cl][,[активная_страница][,отобр_стр]]]
ãäå
первый операнд, равный 1, устанавливает графический режим с разрешающей способностью 320 точек по горизонтали и 200 точек по вертикали. Число 2 устанавливает графический режим с разрешающей способностью 640х200. Изображение на экране может быть черно-белым или цветным в зависимости от операнда cl. Если cl=0, то изображение цветное
При разрешающей способности 320х200 горизонтальная строка содержит 320 точек, которые нумеруются слева направо от х=0 до х=319 и вертикально можно расположить 200 точек, которые нумеруются сверху вниз от у=0 до у=199.
Местоположение каждой точки задается ее координатами. Существуют два способа задания координаты точки: абсолютная и относительная.
Абсолютная форма задания координаты точки имеет вид (х,у). Координата точки, которая находится в левом верхнем углу экрана, равна (0,0); координаты точки в правом верхнем углу экрана при SCREEN 1 равны (319,0) и (639,0) при SCREEN 2; координата точки в нижнем левом углу при любом SCREEN равна (0,199).
Относительная форма предполагает задание координат очередной точки относительно последней выведенной точки, осуществляемое с помощью оператора STEP (х1,у1), где х1 и у1 — значения, которые прибавляются к координатам последней выведенной точки.
5.2.2. Оператор PSET
Оператор PSET (Point SET-установить точку) позволяет изобразить точку в указанной позиции экрана дисплея заданного цвета.
Формат записи оператора PSET:
PSET (õ,ó) [,öâåò]
ãäå
х и у — координаты точек в абсолютной или относительной форме; цвет — целое число от 1 до 31, которое определяет цвет и насыщенность точки:
0-черный |
1-голубой |
2-зеленый |
|
|
|
3-бирюзовый |
4-красный |
5-малиновый |
|
|
|
6-коричневый |
7-белый |
8-серый |
|
|
|
9-светло-голубой |
10-светло-зеленый |
11-светло-бирюзовый |
|
|
|
12-светло-красный |
13-светло-малиновый |
14-желтый |
|
|
|
|
|
|
30 |
Языки Бейсик |
|
|
|
|
15-белый насыщенный |
16 и выше-вариации белого |
|
|
|
|
|
|
|
5.2.3. Оператор PRESET
Оператор PRESET (Point RESET-изменить яркость точки) позволяет изобразить точку в указанной позиции экрана дисплея заданного цвета.
Формат записи оператора PRESET:
PRESET (õ,ó) [,öâåò]
ãäå
õ è ó — координаты точек в абсолютной или относительной форме; öâåò — целое число от 1 до 31, которое определяет цвет и насыщенность точки:
Операторы PSET и PRESET отличаются тем, что в первом операторе цвет соответствует цвету переднего плана, а во втором операторе параметр цвет соответствует цвету фона, то есть, если в операторе PRESET цвет не указан, то он гасит точку, изображенную на этом месте оператором PSET.
В случае ошибочного задания координат эти операторы не выполняются. Сообщения об ошибке не выдаются.
5.2.4. Оператор LINE
Оператор LINE позволяет начертить отрезок (линию) или прямоугольник.
Формат записи оператора LINE:
LINE [(x1,y1)]-(x2,y2)[,[öâåò][,B[F]][,маска]]]
ãäå (õ1,ó1) è (õ2,ó2) — координаты начала и конца отрезка, заданные в абсолютной или относительной форме. Если параметры В и F опущены, то в результате выполнения оператора LINE начальная и конечная точки соединяются прямой линией. Если операнд (х1,у1) отсутствует, то в каче- стве начальной точки используются координаты точки, которая последней участвовала в обработке. После выполнения оператора LINE система запоминает координаты точки (х2,у2).
—параметр öâåò определяет цвет линии, если до этого оператором SCREEN был установлен соответствующий режим экрана.
—если указан параметр Â, то система строит прямоугольник. В этом случае параметры (õ1,ó1) è (õ2,ó2) задают координаты противоположных вершин прямоугольника.
—Параметр F окрашивает внутреннюю область прямоугольника в указанный цвет. В этом случае параметр цвет на цвет линии не действует.
Пример 5.2.4(1) Построение прямоугольника.
'Построение прямоугольника с помощью четырех линий
CLS |
'очистка экрана |
SCREEN 12 |
'установка параметров экрана |
