Реферат: Все о Turbo Basic
После выполнения подпрограммы возврат осуществляется к оператору, следующему за ON/GOSUB.
1.8. Подпрограммы, функции и процедуры
Подпрограмма - помеченная последовательность операторов, заканчивающаяся оператором RETURN. Выполняется, когда достигнут GOSUB.
....
GOSUB aa
....
END aa: операторы RETURN
Оператор RETURN осуществляет возврат к оператору, непосредственно следующему за GOSUB.
Функция может быть определена одной строкой (оператор-функция) или несколькими строками (подпрограмма-функция).
DEF FN имя [(список параметров)] = выражение
(это определение оператора-функции).
Здесь список параметров может включать не более 16 параметров. DEF FN имя [(список параметров)]
описание переменных
операторы
[EXIT DEF]
....
[FN имя = выражение]
END DEF
(это определение подпрограммы-функции).
Обращение к функции записывается там, где нужно получить ее значение. При этом параметры заменяются их фактическими значениями. Например,
DEF FNF (x,y) = x * x + y * y a = 3 : b = 4
P = FNF (a,b) или
P = FNF (3,4)
Функция возвращает одно значение, тип которого определяется именем функции. Определение функции может располагаться в любом месте
программы (обычно в начале или в конце). Например,
F = FNa (1.5)
PRINT F
DEF FNa (x)
FNa = x*x
END DEF
END или
F = FNa (1.5) PRINT F
END
DEF FNa (x) FNa = x*x
END DEF
В результате будет напечатано 2.25.
Список параметров оператора-функции может включать только имена переменных.
Процедура - это последовательность строк программы, расположенная между операторами SUB и END SUB и выполняемая при обращении к ней при помощи оператора CALL.
SUB имя [(список параметров)] описание переменных операторы
[EXIT SUB]
END SUB
Имя может содержать до 31 символа. Список параметров (не более
16) может включать имена переменных и массивов. Для массивов в скобках указывается размерность. Например, 1 - для одномерного массива, 2 - для двухмерного и т.д.
В обращении к процедуре за именем фактического массива следуют пустые скобки. Например,
SUB SUM (x (1), n, S)
S = 0
FOR I=1 to n
S = S + x (I)
NEXT I
END SUB
DIM A (3)
A (1) = 1 : A (2) = 2 : A (3) = 4
CALL SUM ( A (), 3, S)
S = S/3
PRINT S
END
Эта программа вычисляет среднее значение элементов массива A, процедура SUM суммирует элементы массива.
Основные отличия процедуры от подпрограммы-функции :
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
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 нельзя изменять в основной программе).
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 устанавливает цвет фона экрана и палитру (из
трех цветов) для окрашивания точек (для текстового режима - еще и
цвет рамки).
Существует две палитры цветов: 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 имеет вид
COLOR i, j[,k]
где i - цвет фона, j - номер палитры, k - цвет рамки.
Например, операторы
SCREEN 1,0
COLOR 9,0
устанавливают цветной графический режим при средней разрешающей способности; цвет фона - голубой; последующие операторы должны использовать цвета из 0-й палитры.
В графическом режиме (для получения на экране неподвижных изображений) могут использоваться следующие операторы:
PSET (PRESET) - включает (или выключает) точку; LINE - чертит линию; CIRCLE - чертит окружность или ее часть; PAINT - закрашивает указанную часть экрана.
Более сложные операторы для получения движущихся изображений (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 (x, y)
стирают точку (x, y) с экрана.
Оператор LINE позволяет начертить отрезок прямой, указав его начало (x1, y1), конец (x2, y2) и цвет k
LINE [(x1, y1)] - (x2, y2), k
Если начальная точка отсутствует, то линия будет прочерчена, начиная с точки, в которой остановился предыдущий оператор.
С помощью оператора LINE можно также чертить и закрашивать прямоугольники
LINE (x1, y1) - (x2, y2), [k], B[F]
Точки (x1, y1) и (x2, y2) трактуются при этом как левая нижняя и правая верхняя вершины прямоугольника. Если цвет k отсутствует, то прямоугольник будет начерчен 3-м цветом палитры. При наличии параметра F площадь внутри прямоугольника будет закрашена. Например, оператор
LINE (80, 175) - (100, 25), 2, BF закрашивает красным цветом прямоугольник, расположенный между 80-ой и 100-ой позициями по горизонтали и 175-ой и 25-ой позициями по вертикали.
Оператор CIRCLE позволяет строить окружности, дуги, секторы и эллипсы.
Оператор CIRCLE (x, y), r, 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 позволяет закрашивать большие области экрана. Для закрашивания необходимо указать произвольную точку внутри закрашиваемой области (x, y), цвет, которым нужно закрасить область (k1) и цвет границы, которую нельзя пересекать при закрашивании (k2), k1 и k2 могут совпадать. Оператор PAINT имеет вид
PAINT (x, y), k1, k2
Например, оператор
PAINT (160, 100), 2, 2
закрасит окружность нарисованную последним оператором CIRCLE,
красным цветом, как и цвет окружности, использованный в операторе
CIRCLE.
3. ФАЙЛЫ. РАБОТА В БЕЙСИКЕ С ФАЙЛАМИ ПОСЛЕДОВАТЕЛЬНОГО
И ПРЯМОГО ДОСТУПА
Если необходимо использовать набор данных или программу многократно, то необходимо сохранить их на внешнем устройстве памяти (например, диске или дискете). Для этого создается файл. Файл должен иметь имя. Имя состоит из двух частей: собственно имя и расширение
имя.расширение
Имя может содержать до 8 символов, расширение - до трех.
Могут использоваться следующие символы
A - z 0 - 9 ( ) @ # $ % ^ & ! - _ / ' ~
Полное имя файла в MS DOS содержит весь путь по дереву от корневой директории к нужному файлу. Например,
C:\ST\LAB\work.bas,
где C - имя диска, ST - имя директории на диске, LAB - имя поддиректории директории ST, work.bas - имя программы на Бейсике.
Далее речь пойдет только о файлах данных.
3.1. Файлы последовательного доступа
Последовательный файл состоит из записей, доступ к которым осуществляется последовательно, т.е. n-я запись следует за (n -
1)-ой как при формировании файла, так и при считывании из него.
Создание последовательного файла включает следующие шаги: открытие файла (оператор OPEN), вывод данных в файл (операторы PRINT#, WRITE#, или PRINT# USING) и закрытие файла (оператор CLOSE).
Считывание из последовательного файла включает следующие шаги: открытие файла, ввод данных из файла (операторы INPUT#, INPUT$, LINE INPUT#), закрытие файла.
Оператор OPEN подготавливает файл для чтения из файла
(INPUT) или записи в файл (OUTPUT, если создается новый файл,
APPEND, если добавляются записи в уже существующий файл).
INPUT
OPEN имя файла FOR OUTPUT AS #номер файла
APPEND
Оператор CLOSE закрывает файл, т.е. делает невозможным чтение или запись.
CLOSE [#номер файла]
Оператор CLOSE без параметров закрывает все открытые файлы. Единицей информации, которая передается при записи в файл
или чтении из файла, является запись (логическая запись). Запись
делится на поля. Каждое поле связано с одним элементом данных. Могут быть созданы два типа последовательных файлов:
1) с разделителями полей, когда каждое поле автоматически отделяется специальным символом (например, запятой). Для создания такого файла используется оператор WRITE#, для чтения из него - оператор INPUT#.
Данные в файле хранятся в таком виде, как если бы они набирались на клавиатуре при выполнении оператора INPUT, т.е. разделены запятыми и каждая запись заканчивается переводом строки. Оператор INPUT# имеет вид
INPUT #номер файла, список переменных
где переменные в списке по типу должны соответствовать данным в
файле.
2) поля не разделены, и каждая запись точно такая же, как
если бы эти данные отображались на экране или печатались на принтере. Для создания такого файла используется оператор PRINT#, для чтения из него - операторы INPUT$ или LINE INPUT#. Оператор INPUT$ передает из файла сразу всю строку (запись) указанной длины n в символьную переменную, например, ST$
ST$ = INPUT$ (n, #номер файла)
Оператор LINE INPUT# передает в указанную переменную ST$ всю строку независимо от ее длины
LINE INPUT #номер файла, ST$
Пример (с разделителями полей):
OPEN "SEQU.DAT" FOR OUTPUT AS #1
ST$ = " ИВАНОВ "
INT% = 1972
FLOT! = 75.3
'теперь записываем строку в файл
WRITE #1, ST$, INT%, FLOT!
ST$ = " ПЕТРОВ "
INT% = 1975
FLOT! = 62.5
'записываем другую строку в файл
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$ = " "
INT% = 0
FLOT! = 0
'читаем другую строку
INPUT #1, INT%, ST$, FLOT!
PRINT INT%, ST$, FLOT!
CLOSE #1
END
Пример (без разделителей полей):
OPEN "SEQUEN.DAT" FOR OUTPUT AS #1
ST$ = " ИВАНОВ "
INT% = 1972
FlOT! = 73.1
'записываем строку текста в файл
PRINT #1, ST$, INT%, FLOT!
ST$ = " ПЕТРОВ "
INT% = 1975
FLOT! = 64.3
'запишем другую строку, используя оператор
PRINT #1, USING "+####$#.##^^^^"; INT%, ST$, FLOT!
CLOSE #1
END
Содержание созданного файла будет таким:
ИВАНОВ 1972 73.1
1975 ПЕТРОВ 6.43Е+01
Следующая программа читает из этого файла:
OPEN "SEQUEN.DAT" FOR INPUT AS #1
ST$ = " "
ST$ = INPUT$ (80,#1)
PRINT ST$
LINE INPUT #1, ST$
PRINT ST$
CLOSE #1
END
3.2. Файлы прямого доступа
Файл прямого доступа состоит из записей, доступ к которым возможен в произвольном порядке по номеру записи.
Создание файла прямого доступа включает следующие шаги: открытие файла (оператор OPEN); задание структуры записи файла, или разметка буфера (оператор FIELD); передача записи в буфер (операторы LSET или RSET); пересылка содержимого буфера в файл (оператор PUT), при этом если номер записи в операторе PUT не указан явно, буфер помещается на место текущей записи, при открытии файла указатель текущей записи равен 1, после каждой операции ввода или вывода указатель сдвигается на следующую запись; закрытие файла (оператор CLOSE).
Записи передаются в виде строк символов. Поэтому необходимо использовать соответствующие функции преобразования данных в строку символов и обратно.
Ниже перечислены функции и осуществляемые ими преобразования.
MKI$ (MKL$) - целое (длинное целое) в 2-х (4-х) байтовую строку;