Описание языка Turbo Basic для студентов всех специальностей
1 - процедура не обязана возвращать значение, она не имеет типа;
2 - вызывается оператором CALL, а не из выражения.
Отдельные переменные, используемые в процедуре (или подпрог-
рамме-функции), могут быть объявлены локальными, т.е. действующи-
ми только в данной подпрограмме (оператор LOCAL), общими, т.е.
действующими как в подпрограмме, так и в основной программе (опе-
ратор SHARED) и статическими, т.е. действующими в данной подпрог-
рамме как LOCAL, но сохраняющими полученные значения до следующе-
го обращения (оператор STATIC). По умолчанию в подпрограмме-функ-
ции переменная является SHARED, а в процедуре STATIC.
DEF FNF1
LOCAL i, S
FOR i =1 to 10
S = S + i
NEXT i
FNF1 = S
END DEF
После выхода из подпрограммы-функции переменные i и S теряют свои
значения (при входе в подпрограмму всегда S = 0). Эти же имена
могут использоваться в программе для обозначения других величин.
DEF FNF2
LOCAL i
SHARED S
FOR i = 1 to 10
S = S + i
NEXT i
- 15 -
FNF2 = S
END DEF
В этом случае S сохраняет значение после выхода из подпрограммы и
имеет один и тот же смысл во всех частях программы.
DEF FNF3
LOCAL i
STATIC S
FOR i = 1 to 10
S = S + i
NEXT i
FNF3 = S
END DEF
В этом случае S сохраняет значение после выхода из подпрограммы
до следующего обращения к ней, т.е. после первого обращения зна-
чение функции FNF3 будет 55, после второго - 110 и т.д. (S нельзя
изменять в основной программе).
- 16 -
2. ЦВЕТ И ГРАФИКА
В графическом режиме экран рассматривается как решетка, точ-
ки в узлах которой могут быть включены (белым или другим возмож-
ным цветом) или выключены. Точка идентифицируется координатами x,
y; x - номер позиции по горизонтали (от 0 до 319 или до 639 в за-
висимости от режима), y - номер позиции по вертикали (от 0 до 199
или до 349 в зависимости от режима). Точка с координатами 0,0 на-
ходится в верхнем левом углу экрана.
Графический режим устанавливается (или отменяется) _операто-
_ром SCREEN ..
SCREEN i[,j]
i = 0, j = 0 черно-белый текстовый режим
i = 0, j = 1 цветной текстовый режим
i = 1, j = 0 цветная графика при средней разрешающей способнос-
ти (320 позиций по горизонтали, 200 по вертикали)
i = 1, j = 1 черно-белая графика при средней разрешающей спосо-
бности
i = 2 черно-белая графика при высокой разрешающей спосо-
бности (640 позиций по горизонтали, 350 по верти-
кали)
После выполнения оператора SCREEN точка устанавливается в
середину экрана.
_Оператор COLOR . 2 0устанавливает цвет фона экрана и палитру (из
трех цветов) для окрашивания точек (для текстового режима - еще и
цвет рамки).
Существует две палитры цветов: 0 и 1, следующего состава:
_Палитра 0 . _Палитра 1
1 - зеленый 1 - голубой
2 - красный 2 - сиреневый
3 - желтый 3 - белый
Для фона можно выбрать один из 16 цветов (0 - черный, 1 - синий,
2 - зеленый, 3 - бирюзовый, 4 - красный, 5 - лиловый, 6 - корич-
невый, 7 - белый, 8 - серый, 9 - голубой, 10 - ярко-зеленый, 11 -
ярко-бирюзовый, 12 - ярко-красный, 13 - ярко-лиловый, 14 - жел-
тый, 15 - ярко-белый)
Оператор COLOR 2 0имеет вид
COLOR 2 0i, 2 0j[,k]
- 17 -
где i - цвет фона, j - номер палитры, k - цвет рамки.
Например, операторы
SCREEN 1,0
COLOR 9,0
устанавливают цветной графический режим при средней разрешающей
способности; цвет фона - голубой; последующие операторы должны
использовать цвета из 0-й палитры.
В графическом режиме (для получения на экране неподвижных
изображений) могут использоваться следующие операторы:
PSET 2 0(PRESET) - включает (или выключает) точку; LINE 2 0- чер-
тит линию; CIRCLE 2 0- чертит окружность или ее часть; PAINT 2 0- зак-
рашивает указанную часть экрана.
Более сложные операторы для получения движущихся изображений
(DRAW, GET, PUT) рассматриваются в п.4.
Оператор
PSET (x, y)
включает точку с координатами x,y.
Оператор
PSET STEP (x, y)
включает точку, отстоящую на x позиций по горизонтали и на y по-
зиций по вертикали от текущей точки. Например, если в предыдущем
положении точка имеет координаты (60, 75), то оператор
PSET (10, 20) определяет точку с координатами (10, 20), а
оператор
PSET STEP (10, 20) определяет точку с координатами (70, 95).
Операторы
PSET (x, y), 0
или
PRESET 2 0(x, y)
стирают точку (x, y) с экрана.
Оператор LINE 2 0позволяет начертить отрезок прямой, указав его
начало (x1, y1), конец (x2, y2) и цвет k
LINE 2 0[(x1, y1)] 2 0- 2 0(x2, y2), 2 0k
Если начальная точка отсутствует, то линия будет прочерчена, на-
чиная с точки, в которой остановился предыдущий оператор.
С помощью оператора LINE 2 0можно также чертить и закрашивать
прямоугольники
LINE (x1, y1) - (x2, y2), 2 0[k], 2 0B[F]
Точки (x1, y1) и (x2, y2) трактуются при этом как левая нижняя и
- 18 -
правая верхняя вершины прямоугольника. Если цвет k отсутствует,
то прямоугольник будет начерчен 3-м цветом палитры. При наличии
параметра F площадь внутри прямоугольника будет закрашена. Напри-
мер, оператор
LINE (80, 175) - (100, 25), 2, BF закрашивает красным цветом
прямоугольник, расположенный между 80-ой и 100-ой позициями по
горизонтали и 175-ой и 25-ой позициями по вертикали.
_Оператор CIRCLE . 2 0позволяет строить окружности, дуги, секторы
и эллипсы.
Оператор CIRCLE 2 0(x, 2 0y), 2 0r, k
чертит окружность радиуса r с центром в точке (x, y) цветом k.
После вычерчивания окружности последней использованной точкой
считается ее центр.
Оператор CIRCLE (x, y), r, k, ALPHA1,ALPHA2
вычерчивает дугу, имеющую начало под углом ALPHA1 и конец - под
углом ALPHA2.
Например, оператор (при PI = 3.1416)
CIRCLE (160, 100), 80, 2, PI/2, PI строит дугу от PI/2 до PI ок-
ружности радиуса 80 с центром в точке (160, 100) вторым цветом
палитры.
Если использовать знак " - " перед начальной и конечной точ-
ками дуги, то будет нарисован сектор, т.е. конечные точки дуги
будут соединены с центром. Например,
CIRCLE (160, 100), 80, 2, - PI/2, - PI
Можно изобразить сплюснутую (или наоборот вытянутую) окруж-
ность, добавив в оператор CIRCLE еще один параметр. Если значение
этого параметра меньше 1, то окружность будет сплюснута по верти-
кали, если больше 1, то - по горизонтали. Например,
CIRCLE (160, 100), 80, 2, , , 3/4
Все параметры оператора CIRCLE задаются в определенном порядке и
разделяются запятыми. Обязательными являются только параметры,
указывающие положение центра и радиус окружности. Остальные пара-
метры необязательны, однако, запятые должны быть оставлены, если
пропущены параметры в середине списка.
_Оператор PAINT . 2 0позволяет закрашивать большие области экрана.
Для закрашивания необходимо указать произвольную точку внутри
закрашиваемой области (x, y), цвет, которым нужно закрасить об-
ласть (k1) и цвет границы, которую нельзя пересекать при закраши-
вании (k2), k1 и k2 могут совпадать. Оператор PAINT имеет вид
- 19 -
PAINT (x, y), k1, k2
Например, оператор
PAINT (160, 100), 2, 2
закрасит окружность нарисованную последним оператором CIRCLE,
красным цветом, как и цвет окружности, использованный в операторе
CIRCLE.
- 20 -
3. ФАЙЛЫ. РАБОТА В БЕЙСИКЕ С ФАЙЛАМИ ПОСЛЕДОВАТЕЛЬНОГО
И ПРЯМОГО ДОСТУПА
Если необходимо использовать набор данных или программу мно-
гократно, то необходимо сохранить их на внешнем устройстве памяти
(например, диске или дискете). Для этого создается файл. Файл
должен иметь имя. Имя состоит из двух частей: собственно имя и
расширение
1имя 0. 1расширение
Имя может содержать до 8 символов, расширение 1- 0до трех.
Могут использоваться следующие символы
A - z 0 - 9 ( ) { } @ # $ 1 0% ^ & ! - _ / ' ~
Полное имя файла в MS DOS содержит весь путь по дереву от
корневой директории к нужному файлу. Например,
C:STLABwork.bas,
где C - имя диска, ST - имя директории на диске, LAB - имя подди-
ректории директории ST, work.bas - имя программы на Бейсике.
Далее речь пойдет только о файлах данных.
3.1. Файлы последовательного доступа
Последовательный файл состоит из записей, доступ к которым
осуществляется последовательно, т.е. n-я запись следует за (n -
1)-ой как при формировании файла, так и при считывании из него.
Создание последовательного файла включает следующие шаги:
открытие файла (оператор OPEN), вывод данных в файл (операторы
PRINT#, WRITE#, или PRINT# USING) и закрытие файла (оператор
CLOSE).
Считывание из последовательного файла включает следующие ша-
ги: открытие файла, ввод данных из файла (операторы INPUT#,
INPUT$, LINE INPUT#), закрытие файла.
_Оператор OPEN . 2 0подготавливает файл для чтения из файла
(INPUT) или записи в файл (OUTPUT, если создается новый файл,
APPEND, если добавляются записи в уже существующий файл).
INPUT
OPEN 1имя файла 0FOR OUTPUT 1 0 AS # 1номер файла
APPEND
_Оператор CLOSE .закрывает файл, т.е. делает невозможным чте-
- 21 -
ние или запись.
CLOSE [# 1номер файла 0]
Оператор CLOSE без параметров закрывает все открытые файлы.
Единицей информации, которая передается при записи в файл
или чтении из файла 1, 0является запись (логическая запись) 2. 0Запись
делится на поля. Каждое поле связано с одним элементом данных.
0Могут быть созданы два типа последовательных файлов:
1) с разделителями полей, когда каждое поле автоматически
отделяется специальным символом (например, запятой). Для создания
такого файла используется оператор WRITE#, для чтения из него -
оператор INPUT#.
Данные в файле хранятся в таком виде, как если бы они наби-
рались на клавиатуре при выполнении оператора INPUT, т.е. разде-
лены запятыми и каждая запись заканчивается переводом строки.
_Оператор INPUT# . 2 0имеет вид
INPUT # 1номер файла 0, 2 1список переменных
где переменные в списке по типу должны соответствовать данным в
файле.
2) поля не разделены 1, 0и каждая запись точно такая же, как
если бы эти данные отображались на экране или печатались на прин-
тере. Для создания такого файла используется оператор PRINT#, для
чтения из него - операторы INPUT$ или LINE INPUT#. _Оператор
_INPUT$ . передает из файла сразу всю строку (запись) указанной дли-
ны n в символьную переменную, например, ST$
ST$ 2 = 0INPUT$ (n, # 1номер файла 0)
_Оператор LINE INPUT# . 2 0передает в указанную переменную ST$ всю
строку независимо от ее длины
LINE INPUT # 1номер файла 0, 2 0ST$
Пример (с разделителями полей):
OPEN "SEQU.DAT" FOR OUTPUT AS #1
ST$ = " ИВАНОВ "
INT% = 1972
FLOT! = 75.3
'теперь записываем строку в файл
WRITE #1, ST$, INT%, FLOT!
ST$ = " ПЕТРОВ "
INT% = 1975
FLOT! = 62.5
'записываем другую строку в файл
- 22 -
WRITE #1, INT%, ST$, FLOT!
CLOSE #1
END
Созданный файл будет следующим
" ИВАНОВ ", 1972, 75.3
1975, " ПЕТРОВ ", 62.5
Следующая программа читает из этого файла:
OPEN "SEQU.DAT" FOR INPUT AS #1
ST$ = " "
INT% = 0
FLOT! = 0
'теперь читаем строку текста из файла
INPUT #1, ST$, INT%, FLOT!
PRINT ST$, INT%, FLOT!
ST$ = " "