Языки Бейсик
.pdfГлава XII. Бейсик-HELP |
201 |
Записывает данные на экран или в последовательный файл.
Формат записи:
WRITE [[#]номер_файла%,] выражение
ãäå |
|
номер_файла% |
номер открытого последовательного файла. Если номер фай- |
|
ла опущен, WRITE выводит данные на экран. |
Выражение |
одна или несколько переменных или выражений, разделен- |
|
ных запятыми, значения которых записываются на экран или |
|
â ôàéë. |
WRITE вставляет запятые между объектами и заключает в кавычки строки в той последовательности, в которой они написаны. WRITE записывает значе- ния в файл в той форме, которая может быть считана оператором INPUT.
Пример:
CLS
OPEN “LIST” FOR OUTPUT AS #1 DO
INPUT “ ÈÌß : “, Name$
INPUT “ ВОЗРАСТ: “, Age$ WRITE #1, Name$, Age$ INPUT “Добавить еще”; R$
LOOP WHILE UCASE$(R$) = “Ä” CLOSE #1
'Печать файла на экране. OPEN “LIST” FOR INPUT AS #1
CLS
PRINT “Записи в файле:”: PRINT DO WHILE NOT EOF(1)
INPUT #1, Rec1$, Rec2$ 'Считывает записи из файла PRINT Rec1$, Rec2$ 'Печатает записи на экране LOOP
CLOSE #1
KILL “LIST”
См. также INPUT, LINE INPUT, OPEN, PRINT, LPRINT
XOR XNACK-булева операция
Знаки булевых операций выполняют манипуляции битами, булевы операции или проверку многократных отношений. Они возвращают значение “истина” (не-ноль) или “ложь” (ноль), которое используется при принятии решения.
результат = выражение1 булева_операция выражение2
ãäå
булева_операция любая из следующих булевых операций: NOT Отрицание
AND Конъюнкция
202 |
Языки Бейсик |
OR Дизъюнкция (включающее “или”)
XOR Исключающее “или”
EQV Эквивалентность
IMP Импликация
Каждая операция возвращает результат, как это приведено в следующей таблице истинности.
И — “истина” (не-ноль); Л — ложь (ноль).
Выраже- |
Выраже- |
NOT |
AND |
OR |
XOR |
EQV |
IMP |
|
íèå1 |
íèå2 |
|||||||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
È |
È |
Ë |
È |
È |
Ë |
È |
È |
|
|
|
|
|
|
|
|
|
|
È |
Ë |
Ë |
Ë |
È |
È |
Ë |
Ë |
|
|
|
|
|
|
|
|
|
|
Ë |
È |
È |
Ë |
È |
È |
Ë |
È |
|
|
|
|
|
|
|
|
|
|
Ë |
Ë |
È |
Ë |
Ë |
Ë |
È |
È |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Булевы операции выполняются после арифметических и операций отношений, в восходящем порядке.
Перед выполнением булевых операций выражения переводятся в целые или длинные целые.
Если выражение равно 0 или — 1, то в результате булева операция возвращает 0 или — 1. Поскольку булевы операции выполняют поразрядные вычисления, использование значений, отличных от 0 для “ложь” и — 1 для “истина”, может привести к неожиданным результатам.
Глава XIII. Примеры программ |
203 |
Глава XIII. Примеры программ
13.1. Программа сортировки чисел
'Сортировка чисел программист В.Алиев
CLS |
'Очистим экран |
DIM a(100) |
'Определяем массив как variant |
DIM b$ |
'Определяем переменную для ввода |
|
'с клавиатуры чисел |
|
'как символьную |
k% = 1 |
'Вводим целочисленную переменую |
|
'для индекса |
g0: INPUT “Введите очередное число или +++ “; b$ 'Вводим с
|
|
'клавиатуры число |
IF b$ = |
“+++” THEN GOTO g1 'Проверка на конец ввода |
|
a(k%) = |
VAL(b$) |
'Если не конец ввода, |
|
|
'то преобразуем в число и |
|
|
'и пересылаем в массив |
k% = k% |
+ 1 |
'Переходим на следующий элемент |
|
|
'массива |
GOTO g0 |
|
'Идем на ввод очередного числа |
g1: kolchs% = k% — 1 |
'Запоминаем количество введенных |
|
|
|
'чисел |
PRINT “введено “; kolchs%; “ чисел” 'Выводим на экран
'количество введенных чисел 'Приступаем к сортировке чисел в массиве
FOR i = 1 TO kolchs% — 1 'Устанавливаем цикл на число
'введенных чисел
IF a(i) <= a(i + 1) THEN GOTO g2 'Сравниваем два рядом стоящих
|
'элемента массива |
SWAP a(i), a(i + 1) |
'Если последовательность |
|
'нарушена, то меняем их местами |
IF i > 1 THEN i = i — 2 |
'Проверяем, не первый ли |
|
'это элемент массива? |
|
'Если не первый, то делаем шаг |
|
'назад, |
|
'чтобы сравнить с предыдущим. |
g2: NEXT i |
'Проверяем, закончился ли |
|
'массив введенных чисел? |
'печать отсортированных чисел |
|
FOR i = 1 TO kolchs% |
|
PRINT a(i) |
|
NEXT |
|
END |
|
13.2. Программа сортировки символьных констант
'Сортировка |
Символьных констант программист В.Алиев |
|
CLS |
|
'Очистим экран |
DIM |
a$(100) |
'Определяем массив как символьный |
204 Языки Бейсик
DIM b$ 'Определяем переменную для ввода 'с клавиатуры символов 'как символьную
k% = 1 'Вводим целочисленную переменную 'для индекса
g0: INPUT “Введите очередную константу или +++ “; b$ 'Вводим с
|
'клавиатуры символьную константу |
IF b$ = “+++” THEN GOTO g1 |
'Проверка на конец ввода |
a$(k%) = b$ |
'Если не конец ввода, |
|
'то пересылаем в массив |
k% = k% + 1 |
'Переходим на следующий элемент |
|
'массива |
GOTO g0 |
'Идем на ввод очередной константы |
g1: kolchs% = k% — 1 |
'Запоминаем количество введенных |
|
'констант |
PRINT “введено “; kolchs%; |
“ констант” 'Выводим на экран |
|
'количество введенных констант |
'Приступаем к сортировке констант в массиве |
|
FOR i = 1 TO kolchs% — 1 |
'Устанавливаем цикл на число |
|
'введенных констант |
IF a$(i) <= a$(i + 1) THEN |
GOTO g2 'Сравниваем два рядом |
|
'стоящих элемента массива |
SWAP a$(i), a$(i + 1) |
'Если последовательность нарушена, |
|
'то меняем их местами |
IF i > 1 THEN i = i — 2 |
'Проверяем, не первый ли |
|
'это элемент массива? |
|
'Если не первый, то делаем шаг назад, |
|
'чтобы сравнить с предыдущим |
g2: NEXT i |
'Проверяем, закончился ли |
|
'массив введенных констант? |
|
'Печать отсортированных констант |
FOR i = 1 TO kolchs% |
|
PRINT a$(i) |
|
NEXT |
|
END |
|
13.3. Программа построения графиков
'ПОСТРОЕНИЕ графиков |
|
CLS |
|
SCREEN 12 |
'установка режима экрана |
|
'построение осей координат |
LINE (320, 0)-(320, 480) |
'îñü Õ |
LINE (0, 240)-(640, 240) |
'îñü Ó |
WINDOW (50, — 50)-(-50, 50) 'Установка масштаба экрана дисплея |
|
FOR |
x = — 10 |
TO |
10 STEP .01 'устанавливаем интервал вычислений |
||
y = |
SQR(100 — x |
^ 2) |
'вычисляем функцию |
||
PSET |
(x, y), |
4 |
|
'высвечиваем точку |
|
NEXT |
x |
|
|
|
|
END |
|
|
|
|
|
Глава XIII. Примеры программ |
205 |
13.4. Программа построения окружностей
'Программа построения окружностей и их фрагментов CONST pi = 3.141593
SCREEN 2
CIRCLE (320, 100), 200, , — pi, — pi / 2 CIRCLE STEP(-100, — 42), 100
CIRCLE STEP(0, 0), 100, , , , 5 / 25
LOCATE 25, 1: PRINT “нажмите любую клавишу”
DO
LOOP WHILE INKEY$ = ““
13.5.Программа построения модели солнечной системы. Планеты земной группы
'Модель солнечной системы. Планеты земной группы С.Н. Гольцов DECLARE SUB Planety (x!, y!, rad!)
DECLARE SUB Orbita (x!, y!)
DECLARE SUB Sol (x!, y!, rad!)
DIM SHARED Mer(550), Ven(550), Zem(1550), Mar(1550), Jup(1550) 'kf — коэффициент масштаба (1.5 — для планет земной группы
'T — масштаб времени
CLS : kf = 1.5: x = 320 * kf: y = 240 * kf: rad = 10: d = 0: T =
1
SCREEN 12: WINDOW (0, 0)-(640 * kf, 480 * kf)
CALL Planety(x, y, rad): CALL Sol(x, y, rad)
COLOR 14: LOCATE 3, 1:
PRINT “Солнечная система”: PRINT “Планеты земной группы”
DO
x1 = x — rad * 4 — COS(d1) * .387 * 200 'Двигаем Меркурий y1 = y — rad * 4 + SIN(d1) * .387 * 200
PUT (x1, y1), Mer, PSET d1 = d1 + T / (.24 * 30)
IF d1 > 6.28 THEN Mergod = Mergod + 1
LOCATE 15, 33: PRINT Mergod
x2 = x — rad * 4 — COS(d2) * .723 * 200 'Двигаем Венеру y2 = y — rad * 4 + SIN(d2) * .723 * 200
PUT (x2, y2), Ven, PSET d2 = d2 + T / (.62 * 30)
IF d2 > 6.28 THEN Vengod = Vengod + 1 LOCATE 15, 28: PRINT Vengod
x3 = x — rad * 4 — COS(d3) * 1 * 200 'Двигаем Землю y3 = y — rad * 4 + SIN(d3) * 1 * 200
PUT (x3, y3), Zem, PSET d3 = d3 + T / (1 * 30)
IF d3 > 6.28 THEN Zemgod = Zemgod + 1 LOCATE 15, 23: PRINT Zemgod
x4 = x — rad * 4 — COS(d4) * 1.524 * 200 'Двигаем Марс y4 = y — rad * 4 + SIN(d4) * 1.524 * 200
206 Языки Бейсик
PUT (x4, y4), Mar, PSET d4 = d4 + T / (1.88 * 30)
IF d4 > 6.28 THEN Margod = Margod + 1 LOCATE 15, 14: PRINT Margod
CALL Orbita(x, y)
IF d1 >= 6.28 THEN d1 = 0
IF d2 >= 6.28 THEN d2 = 0
IF d3 >= 6.28 THEN d3 = 0
IF d4 >= 6.28 THEN d4 = 0
LOOP UNTIL INKEY$ = “ “
END
SUB Orbita (x, y)
CIRCLE (x, y), 75, 8 'Орбита Меркурия
CIRCLE (x, y), 140, 8'Орбита Венеpы
CIRCLE (x, y), 200, 8'Орбита Земли
CIRCLE (x, y), 1.524 * 200, 8'Орбита Маpса
END SUB
SUB Planety (x, y, rad) 'pисую и запоминаю планеты CLS
CIRCLE (x, y), rad * .382, 7 'Рисуем МЕРКУРИЙ PAINT (x, y), 7, 7
GET (x — rad * 4, y — rad * 4)-(x + rad * 4, y + rad * 4),
Mer(0) CLS
CIRCLE (x, y), rad * .95, 13 'Рисуем Венеру PAINT (x, y), 13, 13
GET (x — rad * 4, y — rad * 4)-(x + rad * 4, y + rad * 4), Ven(0)
CLS
CIRCLE (x, y), rad, 11 ' Рисуем Землю PAINT (x, y), 3, 11
GET (x — rad * 4, y — rad * 4)-(x + rad * 4, y + rad * 4),
Zem(0) CLS
CIRCLE (x, y), rad * .531, 12' Рисуем Марс PAINT (x, y), 12, 12
GET (x — rad * 4, y — rad * 4)-(x + rad * 4, y + rad * 4), Mar(0)
CLS
END SUB
SUB Sol (x, y, rad)
CIRCLE (x, y), rad + 6, 4 ' Рисуем СОЛНЦЕ
PAINT (x, y), 14, 4
CIRCLE (x, y), rad + 4, 4
CIRCLE (x, y), rad + 2, 4
END SUB
Глава XIII. Примеры программ |
207 |
13.6. Программа построения модели солнечной системы. Внутренние планеты солнечной системы
'Внутренние планеты солнечной системы. Программист С.Н. Гольцов
DECLARE SUB Zem ()
DECLARE SUB osi (x!, y!) x = 100
y = x / 4 * 3 SCREEN 12
DIM Mer(150), Ven(150), Ter(150)
'рисую Землю и запоминаю ее в массив Ter Zem
GET (1, 1)-(36, 30), Ter CLS
'Рисую Меркурий и запоминаю его в массив Mer
CIRCLE (18, 15), 9 * .3, 7 PAINT (18, 15), 13, 7
GET (1, 1)-(36, 30), Mer CLS
'Рисую Венеру и запоминаю ее в массив Ven CIRCLE (18, 15), 9 * .9, 5
PAINT (18, 15), 5, 5
GET (1, 1)-(36, 30), Ven CLS
RANDOMIZE TIMER
WINDOW SCREEN (-x, y)-(x, — y) CALL osi(x, y)
COLOR 11: LOCATE 2, 20
PRINT “ВНУТРЕННИЕ ПЛАНЕТЫ СОЛНЕЧНОЙ СИСТЕМЫ И ЗЕМЛЯ” COLOR 14: LOCATE 15, 34: PRINT “СОЛНЦЕ”
COLOR 3: LOCATE 5, 3: PRINT “¥ Планета год (з.с.)” COLOR 7: LOCATE 6, 3: PRINT “1. Меркурий 88”
LOCATE 7, 3: PRINT “2. Венера 224.7”
LOCATE 8, 3: PRINT “3. Земля 365.257” FOR i = 1 TO 1000
zx = RND * 200 — 100: zy = RND * 200 — 100 PSET (zx, zy), RND * 15
NEXT i
'Это СОЛНЦЕ
CIRCLE (6, 5), 9 * .9, 12 CIRCLE (6, 5), 9, 12 CIRCLE (6, 5), 9 * 1.1, 12 PAINT (6, 5), 14, 12
DO
xMer = SIN(p * 6) * 80 * .3: yMer = COS(p * 6) * 60 * .3 xVen = SIN(p * 1.5) * 80 * .7: yVen = COS(p * 1.5) * 60 * .7 xTer = SIN(p) * 80: yTer = COS(p) * 60
PUT (xMer, yMer), Mer, XOR
PUT (xVen, yVen), Ven, XOR
PUT (xTer, yTer), Ter, XOR
208 |
Языки Бейсик |
PUT (xMer, yMer), Mer, XOR
PUT (xVen, yVen), Ven, XOR
PUT (xTer, yTer), Ter, XOR
p = p + .005
IF p = 6.28 THEN p = 0 LOOP UNTIL INKEY$ = “ “
'данные для рисунка Земли DATA 0,0,0,0,1,1,1,1,1,0,0,0 DATA 0,0,0,1,1,1,1,1,1,1,0,0 DATA 0,0,0,9,9,0,0,0,0,9,9,9
DATA 0,0,0,9,9,9,9,9,9,9,9,0 DATA 0,0,0,9,9,9,9,9,9,9,9,0 DATA 0,0,0,9,0,9,9,9,9,9,0,0 DATA 0,9,9,0,0,0,9,9,9,9,0,0
DATA 0,9,9,9,9,9,9,0,0,9,9,0
DATA 0,0,9,9,9,9,0,0,0,0,9,0 DATA 0,0,9,9,9,0,0,0,9,0,0,0 DATA 0,0,9,9,9,0,0,0,9,9,9,0
DATA 0,0,0,9,0,0,0,0,0,9,9,0 DATA 0,0,1,1,1,1,1,1,1,1,1,0 DATA 0,0,0,1,1,1,1,1,1,1,0,0
SUB osi (x, y)
LINE (x, y)-(-x, — y), , B
END SUB
SUB Zem 'рисуем Землю
CIRCLE (17, 15), 9, 11
PAINT (18, 15), 9, 11
FOR y = 9 TO 22: FOR x = 11 TO 22: READ k IF k = 9 THEN PSET (x, y), 10
IF k = 1 THEN PSET (x, y), 15 NEXT x, y
END SUB
13.7. Программа построения модели солнечной системы
'Программа построения модели солнечной системы. С.Н. Гольцов DECLARE SUB Planety ()
DECLARE SUB Orbita (x!, y!) DECLARE SUB sol (x!, y!, rad!)
DIM SHARED mer(550), Ven(550), Zem(1550), Mar(1550), Jup(1550) 'kf — коэффициент масштаба (1.5 — для планет земной группы : '5 — c Юпитером
'25 — вся солнечная система
CLS : kf = 5: x = 320 * kf: y = 240 * kf: rad = 10 SCREEN 12: WINDOW (0, 0)-(640 * kf, 480 * kf) GOSUB Planety
d = 0
Глава XIII. Примеры программ |
209 |
|||||||
DO |
|
|
|
|
|
|
|
|
x1 |
= |
x |
— |
rad * |
4 |
— |
COS(d1) * .387 * 200 'Двигаем Меркурий |
|
y1 |
= |
y |
— |
rad * |
4 |
+ |
SIN(d1) * .387 * 200 |
|
PUT (x1, |
y1), mer, |
PSET |
|
|||||
d1 |
= |
d1 + 1 / (.24 |
* 30) |
|
||||
x2 |
= |
x |
— |
rad * |
4 |
— |
COS(d2) * .723 * 200 'Двигаем Венеру |
|
y2 |
= |
y |
— |
rad * |
4 |
+ |
SIN(d2) * .723 * 200 |
|
PUT (x2, |
y2), Ven, |
PSET |
|
|||||
d2 |
= |
d2 + 1 / (.62 |
* 30) |
|
||||
x3 |
= |
x |
— |
rad * |
4 |
— |
COS(d3) * 1 * 200 'Двигаем Землю |
|
y3 |
= |
y |
— |
rad * |
4 |
+ |
SIN(d3) * 1 * 200 |
|
PUT (x3, |
y3), Zem, |
PSET |
|
|||||
d3 |
= |
d3 + 1 / (1 * |
30) |
|
||||
x4 |
= |
x |
— |
rad * |
4 |
— |
COS(d4) * 1.524 * 200 'Двигаем Марс |
|
y4 |
= |
y |
— |
rad * |
4 |
+ |
SIN(d4) * 1.524 * 200 |
|
PUT (x4, |
y4), Mar, |
PSET |
|
|||||
d4 |
= |
d4 + 1 / (1.88 * 30) |
|
|||||
x5 |
= |
x |
— |
rad * |
14 — COS(d5) * 5.203 * 200 'Двигаем Юпитер |
|
||
y5 |
= |
y |
— |
rad * |
14 + SIN(d5) * 5.203 * 200 |
|
||
PUT (x5, |
y5), Jup, |
PSET |
|
|||||
d5 |
= |
d5 + 1 / (11.86 * 30) |
|
|||||
CALL |
sol(x, y, |
rad) |
|
|
||||
CALL |
Orbita(x, |
y) |
|
|
|
|||
a$ = |
INKEY$ |
|
|
|
|
|||
IF a$ = “ “ THEN EXIT DO |
|
|||||||
LOOP |
|
|
|
|
|
|
|
|
END |
|
|
|
|
|
|
|
|
Planety: |
|
|
|
|
|
|||
'рисую |
è |
запоминаю |
планеты |
|
||||
CLS |
|
|
|
|
|
|
|
|
CIRCLE |
(x, y), |
rad |
* .382, 7 'Рисуем МЕРКУРИЙ |
|
||||
PAINT (x, y), 7, |
7 |
|
|
|||||
GET (x |
— |
rad * |
4, y — rad * 4)-(x + rad * 4, y + rad * 4), |
|
||||
mer(0) |
|
|
|
|
|
|
||
CLS |
|
|
|
|
|
|
|
|
CIRCLE |
(x, y), |
rad |
* .95, 13 'Рисуем Венеру |
|
||||
PAINT (x, y), 13, 13 |
|
|||||||
GET (x |
— |
rad * |
4, y — rad * 4)-(x + rad * 4, y + rad * 4), |
|
||||
Ven(0) |
|
|
|
|
|
|
||
CIRCLE |
(x, y), |
rad, 11 ' Рисуем Землю |
|
|||||
PAINT (x, y), 3, |
11 |
|
|
|||||
GET (x |
— |
rad * |
4, y — rad * 4)-(x + rad * 4, y + rad * 4), |
|
||||
Zem(0) |
|
|
|
|
|
|
||
CLS |
|
|
|
|
|
|
|
|
CIRCLE |
(x, y), |
rad |
* .531, 12' Рисуем Марс |
|
||||
PAINT (x, y), 12, 12 |
|
|||||||
GET (x |
— |
rad * |
4, y — rad * 4)-(x + rad * 4, y + rad * 4), |
|
||||
Mar(0) |
|
|
|
|
|
|
||
CLS |
|
|
|
|
|
|
|
|
CIRCLE |
(x, y), |
rad |
* 11.2, 8' Рисуем Юпитер |
|
||||
PAINT (x, y), 6, |
8 |
|
|
|||||
210 |
|
|
|
Языки Бейсик |
' Рисуем Юпитеp |
|
|
||
CIRCLE |
(x + rad * 11.2 / 5, y — rad * 11.2 / 5), rad * 11.2 / 5, |
|||
4, , , |
.4 |
|
|
|
PAINT (x + |
rad |
* 11.2 / 5, y — rad * 11.2 / 5), 4, 4 |
||
GET (x |
— rad * |
14, y — rad * 14)-(x + rad * 14, y + rad * 14), |
||
Jup(0) |
|
|
|
|
CLS |
|
|
|
|
RETURN |
|
|
|
|
SUB Orbita |
(x, |
y) |
|
|
CIRCLE |
(x, |
y), |
75, 8 'Орбита Меркурия |
|
CIRCLE |
(x, |
y), |
140, 8 'Орбита Венеры |
|
CIRCLE |
(x, |
y), |
200, 8 'Орбита Земли |
|
CIRCLE |
(x, |
y), |
1.524 * 200, 8 'Орбита Марса |
|
CIRCLE |
(x, |
y), |
5.203 * 200, 7 'Орбита Юпитера |
|
CIRCLE |
(x, |
y), |
9.539 * 200, 7 'Орбита Сатурна |
|
CIRCLE |
(x, |
y), |
19.182 * 200, 7 'Орбита Урана |
|
CIRCLE |
(x, |
y), |
30.058 * 200, 7 'Орбита Нептуна |
|
CIRCLE |
(x, |
y + |
(39.439 * 200) / 4), 39.439 * 200, 14, , , 1.1 |
|
'Орбита Плутона |
|
|
||
END SUB |
|
|
|
|
SUB sol (x, y, |
rad) |
|||
CIRCLE |
(x, |
y), |
rad + 6, 4 ' Рисуем СОЛНЦЕ |
|
PAINT (x, y), 14, 4 |
||||
CIRCLE |
(x, |
y), |
rad + 4, 4 |
|
CIRCLE |
(x, |
y), |
rad + 2, 4 |
|
END SUB |
|
|
|
|
13.8. Программа поиска корней многочлена |
||||
'программа |
поиска корней многочлена |
|||
'на числовом отрезке |
||||
CLS |
|
|
|
|
DIM min AS |
DOUBLE 'начало интервала поиска корня |
|||
DIM max AS |
DOUBLE 'конец интервала поиска корня |
|||
DIM x AS DOUBLE |
|
'переменная |
||
DIM y1 |
AS DOUBLE |
'функция |
||
'DIM y2 AS |
DOUBLE 'функция |
|||
DIM h AS DOUBLE |
|
'точность вычислений |
||
DIM x1 |
AS DOUBLE |
'корень |
||
'определяем функцию пользователя
DEF fny (x) = x ^ 3 — 5 * x ^ 2 — 3 * x + 8 PRINT “вычисление корня многочлена”
SCREEN 9
VIEW (340, 10)-(620, 200), 6, 7 'правое верхнее окно
WINDOW (-14, — 9)-(14, 9) 'определяем Декартову систему координат LINE (-14, 0)-(14, 0), 3 'чертим ось Х
LINE (0, — 9)-(0, 9), 3 'чертим ось У
FOR i = — 13 TO 13 'цикл чертим координаты по оси Х LINE (i, — .5)-(i, .5), 4
NEXT i
'чертим функцию
