Смекни!
smekni.com

Описание языка Turbo Basic для студентов всех специальностей (стр. 3 из 5)

С помощью оператора 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:\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 . 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$ = " "

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


- 23 -

Следующая программа читает из этого файла:

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 2 0или RSET); пересылка содержимого буфера в файл

(оператор PUT), при этом если номер записи в операторе PUT 2 0не

указан явно, буфер помещается на место текущей записи, при откры-

тии файла указатель текущей записи равен 1, после каждой операции

ввода или вывода указатель сдвигается на следующую запись; закры-

тие файла (оператор CLOSE).

Записи передаются в виде строк символов. Поэтому необходимо

использовать соответствующие функции преобразования данных в

строку символов и обратно.

Ниже перечислены функции и осуществляемые ими преобразова-

ния.

MKI$ (MKL$) - целое (длинное целое) в 2-х (4-х) байтовую

строку;

MKS$ (MKD$) - вещественное (вещественное двойной точности) в

4-х (8-ми) байтовую строку.

CVI(CVL) - 2-х (4-х) байтовую строку в целое (длинное це-

лое);

CVS(CVD) - 4-x (8-ми) байтовую строку в вещественное (ве-

щественное двойной точности).

Считывание из файла прямого доступа включает также пять ша-

гов: открытие файла; разметка буфера; передача записи из файла в

буфер (оператор GET); обработка данных буфера (переменные буфера


- 24 -

доступны из программы); закрытие файла.

Если вывод в файл и ввод из файла осуществляются в одной

программе, то открытие и закрытие файла осуществляется один раз

перед началом и после окончания всех операций с файлом.

_Оператор OPEN . 2 0имеет вид

OPEN 2 1имя файла 2 0AS # 1номер файла 2 0LEN 2 0= 1длина записи

(отсутствие указания режима ввода или вывода означает, что файл

прямого доступа).

_Оператор FIELD . 2 0имеет вид

FIELD # 2 1номер файла 0, 2 0n1 2 0AS 2 1имя1 0 [ 2, 0n2 2 0AS 2 1имя2 0, 2 0...] 2 0,

где n1, n2, ... - длина поля в байтах под переменные 1имя1 0, 1имя2 0,

... ( 1имя1 0, 1имя2 0, - символьные переменные ).

_Операторы . _LSET, RSET . 2 0имеют вид

LSET 2 1имя 2 0= 2 1символьное выражение

RSET 2 1имя 2 0= 2 1символьное выражение

Оператор LSET (RSET) заполняет одно поле записи в буфере

(оператор LSET - с начала, RSET - с конца, оставшиеся позиции за-

полняются пробелами).

_Оператор PUT . имеет вид

PUT 2 0# 2 1номер файла 2 0[ 2, 1номер записи 0]

Этот оператор передает содержимое буфера в файл на место за-

писи с указанным номером (или текущей, если номер не указан).

_Оператор GET . 2 0имеет вид

GET 2 0# 2 1номер файла 2 0[, 2 1номер записи 2и 0]

Этот оператор передает содержимое записи с указанным но-

мером в буфер (если номера нет, передается текущая запись).

В качестве примера приводится программа, которая формирует

файл прямого доступа из записей следующей структуры:

N п/п Фамилия Год рождения

В программе переменные обозначены n%, nam$, dat%; для соответс-

твующих полей буфера используются обозначения np$ (2 байта), nm$

(10 байт), dt$ (6 байт).