|
программирование на языке бейсик
|
|
Список операторов языка Бейсик.
Ниже
приведен список основных операторов языка Бейсик. Синтаксис операторов
можно узнать из справочной системы Бейсик. Однако, часто нужно
просмотреть синтаксис оператора на примере, чтобы понять его
возможности. Поэтому в данном разделе для основных операторов приведены
примеры, которые довольно исчерпывающе дают представление об их работе.
Цифры и символы в двойных скобках показывают выводимый на экран
результат работы операторов.
ABS – возвращает абсолютное значение числа.
Примеры. 1. PRINT ABS(4) ((4)) 2. i%=-4; PRINT ABS(i%) ((4)) 3. PRINT ABS(0) ((0))
AND - операция логического сложения.
Примеры. 1. PRINT AND(0,0) ((0)) 2. PRINT AND(0,1) ((0)) 3. PRINT AND(1,0) ((0)) 4. PRINT AND(1,1) ((1))
ASC - возвращает код ASCII первого символа в их последовательности.
Примеры. 1. PRINT ASC (“а”) ((97)) 2. PRINT ASC (“Москва”)
((140)) В данном примере выводится код первого символа, а именно
символа «М». Отметим, что символы «а» латинское и «а» на кириллице
имеют разные коды, соответственно - 97 и 160.
ATN - возвращает значение арктангенса, где аргумент задан в радианах.
Примеры. 1. PRINT ATN(3.141592) ((-6.278329E-07)) в данном примере в силу неточности задания числа пи, выводится не значение 0, а числа, которое довольно близко к нему 2. PRINT ATN(0) ((0))
BEEP - выдача звукового сигнала.
Пример. BEEP
- сигнал, который производит данный оператор не может быть изменен по
тональности. Этот сигнал воспроизводится динамиком, который находится в
системном блоке, а не при помощи звуковой платы.
BLOAD - копирует данные в область оперативной памяти из файла, в который записывались данные при помощи команды BSAVE.
BSAVE - копирует содержимое области памяти в файл.
CALL - вызов подпрограммы. Отличие от вызова при помощи GOSUB заключается в том, что основная программа и подпрограмма не имеют общих переменных.
Пример.
DECLARE SUB m1 ()
i1% = 1: PRINT i1%
|
CALL m1 PRINT " after ", i1% | SUB m1 i1% = 2 : PRINT "sub ", i1% END SUB |
Как видно, в основной программе переменной i1% присваивается значение 1, а в подпрограмме переменной i1% присвоено значение 2. При выходе из подпрограммы в переменной оказывается значение 1. Это происходит потому, что переменные i1% в основной программе и в подпрограмме - разные и занимают разные области в оперативной памяти.
CALL ABSOLUTE - передача управления машинным командам.
CDBL - перевод вычисленного выражения в двойную точность.
Пример. PRINT 7/11, CDBL (7/11)
CHAIN - вызов другой программы.
Примеры. 1. CHAIN “PRIM1” 2. a$=”C:\BASIC\prim1.bas”: CHAIN a$
Как
видно из примеров, можно указать непосредственно имя программы, которая
находится в той же директории, что и вызванная (Пример 1), а можно
через переменную (а$). Кроме того, можно указать полный путь в случае, когда программа находится в другой директории, нежели текущая (Пример 2).
CHDIR - установка текущей директории.
Примеры. 1. CHDIR “C:\BASIC\PROGR” 2. a$=”C:\BASIC\PROGR”: CHDIR a$
Данный
оператор устанавливает новую текущую директорию. В дальнейшем из нее
будут искаться файлы в случае, когда не указан явный путь к ним,
например, в операторе OPEN. Как видно из примеров, можно указать путь непосредственно в операторе (Пример 1), а можно через переменную (а$) (Пример 2).
CHR$ – возврат символа по коду.
Примеры. i1$=CHR$(67) 2. i1%=67: i1$ = CHR$(i1%)
В результате выполнения примеров, в переменной i1$
будет находиться символ «С» латинское, код которого равен 67. Как видно
из примеров, можно указать непосредственно в операторе код символа
(Пример 1), а можно через переменную (i1$) (Пример 2).
CINT - позволяет округлить число одинарной точности до целого.
Примеры. 1. i1 = 12.346: PRINT i1, CINT(i1) ((12.345 12))
2. i1 = 12.346: i2 = i1 * 100: i2 = CINT(i2): i2 = i2 / 100: PRINT i1, i2 ((12.346 12.35))
Во
втором примере показана возможность округления не до целого, а до
второй цифры после запятой. Округление производится по следующему
правилу: Если число после запятой меньше или равно 0.5, то дробная
часть отсекается, если дробная часть больше 0.5, например, 0.500001, то
к целой части прибавляется 1.
CIRCLE - прорисовка окружности или сектора в графическом режиме.
Примеры. 1. SCREEN 9: CLEAR : CIRCLE (75, 100), 50
2. SCREEN 9: CLEAR : CIRCLE (75, 100), 50, 2, 0, 3.14
3. SCREEN 9: CLEAR : CIRCLE (75, 100), 50, , 0, 3.14, 1.1
4. SCREEN 9: CLEAR : CIRCLE (75, 100), 50, , -1, -3.14, 1.1
5. SCREEN 11: CLEAR : PSET (50, 100): CIRCLE STEP(25, 25), 50
В первом примере выводится окружность белого цвета на черном фоне, так как цвет не указан. В режиме «SCREEN 9» окружность будет выведена овалом. Для того, чтобы был выведен круг, следует воспользоваться режимом «SCREEN 11».
Во втором примере выводится зеленым цветом полукруг в диапазоне от 0
радиан до 3.14 радиан. Третий пример позволяет сжать/растянуть
окружность. При этом четвертый параметр дает коэффициент сжатия
изображения относительно осей Х и У. Четвертый пример позволяет вывести
сектор окружности, при этом концы ее соединены с центром окружности,
так как параметры сектора даны в отрицательных значениях. Если указать
параметры как «1, -3.14», то будет выведен один радиус к дуге со значением «-3.14», а если установить «-1, 3.14»,
то будет показан только радиус ко второй части дуги. Пятый пример
позволяет вывести окружность, используя относительные координаты. В
первых четырех примерах присутствовали абсолютные координаты, при
котором центр окружности имеет координаты (75, 100). В четвертом
примере, оператор PSET
устанавливает координаты текущей точки как (50, 100), а затем переводит
относительно данной точки в координаты (50+25, 100+25) = (75, 125).
Аналогично, как и в предыдущих примерах вместо точных значений
параметров окружности, можно установить переменные, например, «SCREEN
9: CLEAR : i1! = 75: i2! = 100: i3! = 50: i1% = 2: i4! = 1.1: i5! =
3.14: i6! = 1: CIRCLE (i1!, i2!), i3!, i1%, i4!, i5!, i6!».
CLEAR – закрытие всех файлов, очистка всех переменных и массивов, а также очистка стека.
Пример. CLEAR
CLNG - позволяет округлить число двойной точности до целого.
Примеры. 1. i1 = 12.346: PRINT i1, CLNG(i1) ((12.345 12))
2. i1 = 12.346: i2 = i1 * 100: i2 = CLNG(i2): i2 = i2 / 100: PRINT i1, i2 ((12.346 12.35))
Во
втором примере показана возможность округления не до целого, а до
второй цифры после запятой. Округление производится по следующему
правилу: Если число после запятой меньше или равно 0.5, то дробная
часть отсекается, если дробная часть больше 0.5, например, 0.500001, то
к целой части прибавляется 1
CLOSE – закрывает открытые файлы.
Примеры. 1. OPEN “Rab.txt” FOR INPUT AS #1 : CLOSE #1
2. OPEN “Rab.txt” FOR INPUT AS #1 : CLOSE
Несмотря на кажущуюся одинаковость, данные примеры немного по разному работают. В первом примере открывается файл «Rab.txt»
и следующей командой он закрывается. Во втором примере закрываются все
открытые файлы, то есть, если до этих операторов был открыт другой
файл, то и он закроется, в то время, как в первом примере он останется
открытым.
CLS
– очистка экрана от текста и графики. При работе с программой можно
задать зону работы с графикой и текстом при помощи операторов VIEW (зона для графики) и VIEW PRINT (зона для текста). Если эти зоны не заданы, то происходит очистка всего экрана при любых параметрах оператора CLS. Если области заданы, то CLS без параметров - весь экран, CLS 0 - очистка графической и текстовой зоны, CLS 1 - очистка зоны для графики, CLS 2 - очистка зоны для текста. Перед использованием данного оператора с параметрами проверьте их действие на примерах.
Пример. CLS
COLOR - установка цвета, где цвет представлен числом, значение которого представлено ниже.
|
0 - черный | 4 - красный | 8 - серый | 12 - ярко - красный | 1 - синий | 5 - сиреневый | 9 - ярко - синий | 13 - ярко - сиреневый | 2 - зеленый | 6 - коричневый | 10 - ярко - зеленый | 14 - желтый | 3 - бирюзовый | 7 - белый | 11 - ярко - бирюзовый | 15 - ярко - белый |
Примеры. 1. COLOR 3 2. COLOR 3, 7
В
первом примере устанавливается цвет, которым будут окрашены выводимые
далее фигуры (окружности, шрифт, прямоугольники и так далее). Во втором
примере указывается не только цвет выводимого фона, которым окрашен
экран, но и на котором будут выводиться символы и графика, по
умолчанию. Если цвет не задавать, то экран будет окрашен черным цветом
(фон указывается для экранов 7-10). Аналогично, как и в предыдущих
примерах вместо числа в примерах можно указывать переменную, которая
содержит номер цвета.
СОМ - включает, выключает, приостанавливает коммуникационный порт (СОМ1 или СОМ2). На практике практически не используется, если потребуется, то см. справочную систему Qbasic.
COMMON - определяет общие (глобальные) переменные для основной программы и для подпрограмм и функций.
Примеры. |
1. DECLARE SUB iii () COMMON SHARED ii% ii% = 1 PRINT ii% CALL iii PRINT ii% | SUB iii ii% = 3 PRINT " sub ", ii% END SUB
| 2. DECLARE SUB iii () COMMON ii% ii% = 1 PRINT ii% CALL iii PRINT ii% | SUB iii ii% = 3 PRINT " sub ", ii% END SUB
|
3. COMMON i5 AS STRING: i5 = " page ": PRINT i5
В первом примере переменная ii%
является общей для основной программы и подпрограммы, поэтому при
выходе из подпрограммы в ней остается то значение, которое было
присвоено ей в подпрограмме. Во втором примере данная переменная не
является общей и поэтому ей присваивается значение в основной программе
(1). В третьем примере переменная i5 определена как символьная. В этом операторе можно определить переменные как INTEGER, LONG, SINGLE, DOUBLE, STRING или пользовательский тип данных.
CONST - определяет константы, которые будут использоваться в программе.
Пример. CONST Pi2 = 3.14159265 * 2
COS - значение косинуса. Аргумент задается в радианах.
Примеры. 1. PRINT COS(3) 2. i1% = 180 / 3.1415: PRINT COS(i1%)
В
первом примере вычисляется значение косинуса, причем аргумент задан в
радианах. Для того, чтобы вычислить значение, данное в градусах, нужно
перевести его в радианы, а затем вычислить значение синуса, как это
показано во втором примере.
CSNG - перевод вычисленного выражения из двойной точности в одинарную.
Пример. ii# = 7 / 11: PRINT CSNG(ii#), ii#
CSRLIN – возврат значения текущей позиции строки курсора. Для получения значения столбца используйте функцию POS.
Пример. i1% = CSRLIN
В переменную i1% заносится текущее положение строки курсора.
CVI, CVL, CVS, CVD - преобразование чисел из формата, упакованного при помощи функций MKI$, MKL$, MKS$, MKD$.
Пример.
ii% = 12.345678#: ii& = 12.345678#: ii! = 12.345678#: ii# = 12.345678#
i1$ = MKI$(ii%): i2$ = MKL$(ii&): i3$ = MKS$(ii!): i4$ = MKD$(ii#)
PRINT ii$, CVI(i1$), CVL(i2$), CVS(i3$), CVD(i4$)
Функции MKI$, MKL$, MKS$, MKD$
предназначены для хранения в упакованном виде значений переменных с
длинами чисел 2, 4, 4, 8. Данные функции используются обычно для
хранения чисел в файлах, что позволяет занимать там меньше места.
Функция MKI$ предназначена для переменных, в названии которых находится символ «%», MKL$ - для «&», MKS$ - «!», MKD$ - «#». Для того, чтобы распаковать значения, используются функции: CVI, CVL, CVS, CVD.
CVSMBF, CVDMBF - преобразование чисел из формата, упакованного при помощи функций MKSMBF$, MKDMBF$.
Пример.
ii! = 12.345678#: ii# = 12.345678#
i1$ = MKS$(ii%): i2$ = MKD$(ii&)
PRINT ii$, CVSMBF(i1$), CVDMBF(i2$)
Функции MKSMBF$, MKDMBF$
предназначены для хранения в упакованном виде в двоичном формате
компании Microsoft значений переменных с длиной числа 4. Данные функции
используются обычно для хранения чисел в файлах, что позволяет занимать
там меньше места. Функция MKSMBF$ предназначена для переменных, в названии которых находится символ «!» (вещественные числа простой точности), MKDMBF$ - «#» (вещественные числа двойной точности). Для того, чтобы распаковать значения используются функции: CVSMBF, CVDMBF.
DATA - определяет данные в программе, которые в дальнейшем можно прочитать при помощи оператора READ.
Пример. DATA 1,2,3 : FOR i1% = 1 TO 3: READ i2%: PRINT i2%,: NEXT i1% ((1 2 3))
DATE$ - функция, возвращающая значение даты.
Пример. PRINT DATE$
DECLARE - определяет подпрограммы и функции в программе.
Примеры. 1. DECLARE FUNCTION strok (i1%) 2. DECLARE SUB strok1 ()
В первом примере определяется функция, которая имеет один аргумент - параметр i1%,
а во втором примере это подпрограмма, не имеющая аргументов, которые
передаются. Переменные, которые передаются другим подпрограммам или
функциям могут быть описаны, как «i1% AS INTEGER», где после ключевого слова AS могут находиться ключевые слова: INTEGER, LONG, SINGLE, DOUBLE, STRING.
Пример. |
DEF FNaa1 (ii1%) = ii1% * 3 DEF fnaa2 (ii2%) ii3% = ii2% * 2 fnaa2 = ii3% END DEF | i1% = 5 i2% = FNaa1(i1%) PRINT i2%, i2% = fnaa2(i1%) PRINT i2%, i1% |
В данном примере определены две функции FNAA1 и FNAA2,
причем как видно на примере данные названия можно набрать как большими,
так и маленькими символами. Обе функции определены в самом начале
программы, а вызываются дальше, в основном тексте. Первая функция
записана в одной строчке, в то время, как вторая в несколько. При
написании функции в несколько строчек в конце определения функции
находится оператор «END DEF». Для того, чтобы возвратить значение функции, нужно это указать специальной строчкой («fnaa2 = ii3%»), в которой находится название функции и переменная, где находится возвращаемое значение.
DEF SEG - устанавливает текущий сегмент
DEFINT, DEFLNG, DEFSNG, DEFDBL, DEFSTR - определение типа данных для переменных и функций, где DEFINT определяет целое, DEFLNG - длинное целое, DEFSNG - вещественное число простой точности, DEFDBL - вещественное число двойной точности и DEFSTR - символьные переменные.
Примеры. 1. DEFDBL А 2. DEFSTR А-С, Е
По
умолчанию все переменные представлены как вещественные числа одинарной
точности. В первом примере все переменные, имена которых начинаются на
символ «А», будут иметь
размерность вещественного числа двойной точности. Однако, переменные,
которые оканчиваются на символы: «%», «&», «!», «#», или «$» все
равно вне зависимости от вышеуказанных операторов (DEFINT, DEFLNG, DEFSNG, DEFDBL и DEFSTR) будут иметь те представления, которые в них заложены. Так, переменная «аstr%» будет целым, «аstr!» - вещественным простой точности, а «аstr»
- вещественное число двойной точности согласно оператора, приведенного
в первом примере. Если бы данного оператора не было, то переменная «аstr» была бы вещественным числом простой точности. Отметим, что переменные: «аstr%», «аstr!» и «аstr» являются разными и содержат различные значения. Во втором примере все переменные, которые начинаются на символы «a», «b», «c» и «е» определяются как символьные. Отметим, что переменные «аstr», «Astr» и «ASTr» являются одной и той же переменной, так как не имеет значения, какими символами написаны их имена: большими или маленькими.
DIM - определяет размерность массива.
Примеры. 1. DIM a1(10) 2. DIM SHARED a1(10)
В примерах определен массив «а1»,
в котором имеется 11 элементов: а1(0), а1(1), а1(2) … а1(10), так как
индексация элементов массива начинается с нуля, а не с единицы. В
первом примере данный массив определен в теле основной программы и при
использовании в подпрограмме или функции массива с таким же именем, он
будет отличаться. Во втором примере данный массив будет как
разделяемый, то есть при использовании массива с таким же именем в
подпрограмме или функции. Массив в основной программе и массив в
подпрограмме (функции) будет один и тот же.
DO… LOOP - позволяет организовать цикл.
Примеры.
|
1. i1% = 1 DO UNTIL i1% > 10 i1% = i1% + 1 LOOP PRINT i1% | 2. i1% = 1 DO WHILE i1% < 11 i1% = i1% + 1 LOOP PRINT i1%
| 3. i1% = 1 DO i1% = i1% + 1 IF i1% = 11 THEN EXIT DO LOOP PRINT i1% |
Во всех трех примерах выполняется цикл десять раз до тех пор, пока в переменной i1% не будет достигнуто значение 11. Цикл выполняется от оператора «DO» до оператора «LOOP». Последний оператор распечатает значение переменной i1% как 11. В первом примере цикл выполняется до тех пор, пока не выполняется условие «i1% > 10»,
то есть пока значение в переменной будет меньше 11. Когда это значение
будет достигнуто, произойдет выход из цикла. Во втором примере цикл
продолжается, пока выполняется условие «i1% < 11».
Как только значение в переменной достигнет 11, произойдет выход из
цикла. В третьем примере цикл выполняется до тех пор, пока не будет
выполнено условие в операторе «IF i1% = 11 THEN EXIT DO». Как только оно будет выполнено, то будет выполнен оператор «EXIT DO», по которому произойдет выход из цикла. Во всех трех примерах оператор «PRINT i1%» выведет значение 11.
DRAW - позволяет выводить графику при помощи специальных команд, список которых приведен ниже:
Dn - перемещение курсора на n позиций ниже.
Fn - перемещение курсора по диагонали на n позиций ниже и правее.
Gn - перемещение курсора по диагонали на n позиций ниже и левее.
Un - перемещение курсора на n позиций выше.
En - перемещение курсора по диагонали на n позиций выше и правее.
Hn - перемещение курсора по диагонали на n позиций выше и левее.
Ln - перемещение курсора на n позиций налево.
Rn - перемещение курсора на n позиций правее.
Mx,y
- перемещение курсора на позиции относительно текущего положения
курсора: выше (-х), ниже (+х), левее (-у) или ниже (+у). Если знак «+»
или «-» не указать, то считается, что указаны абсолютные координаты (х,
у), то есть произойдет перемещение не относительно предыдущего
положения курсора, а непосредственно к точке с координатами экрана.
B - передвижение курсора без прорисовки.
N - передвижение курсора с возвратом на исходную позицию.
An - поворот системы координат на n * 90 градусов, где n может быть 0, 1, 2 и 3.
Cn - установка цвета, где n - устанавливает номер цвета.
Pn1,n2 - установка заполнения цветом; n1 – цвета заполнения, n2 - цвет границы, до которой устанавливается заполнение цветом.
Sm - установка шага в ¼ пиксела, при котором происходит переход на n шагов. Если m=4, то при n=5 произойдет переход на 5 пикселов, если m=1, то при n=5 произойдет переход на 1 пиксел. По умолчанию m=4.
TAn - поворачивает систему координат на n градусов (от -360 до 360).
Х - используется, если далее данные находятся в символьной переменной.
Параметр n в указанных выше командах можно не указывать, в таком случае он принимается равным 1. Цвет может быть:
|
0 - черный | 4 - красный | 8 - серый | 12 - ярко - красный | 1 - синий | 5 - пурпурный | 9 - ярко - синий | 13 - ярко - пурпурный | 2 - зеленый | 6 - коричневый | 10 - ярко - зеленый | 14 - желтый | 3 - голубой | 7 - белый | 11 - ярко - голубой | 15 - ярко - белый |
Пример. SCREEN 9: CLS
Tr$ = "C7 E10 F10 L20 C3 BR10 BU5 P2,7"
DRAW "BM50,50 X" + VARPTR$(Tr$)
DRAW "BM80,50 X" + VARPTR$(Tr$)
DRAW "BM110,50 X" + VARPTR$(Tr$)
Первая строка устанавливает вид экрана и его очистку. Во второй строке в переменную Tr$ заносится прорисовка треугольника. В третьей строке производится с помощью оператора DRAW установка курсора с координатами (50,50) без прорисовки линии, по которой курсор перемещался. Далее находится символ «Х»,
который обозначает, что за ним будут исполняться команды из переменной.
Далее в переменную вводится значение цвета линии - белый (С7), перемещение курсора вверх и вправо на 10 пикселов (Е10), вниз и вправо (F10), влево на 20 пикселов (L20), установка цвета - голубой (C3), перемещение курсора вправо на 10 пикселов без прорисовки пути курсора (BR10), наверх на 5 пикселов без прорисовки, попадая внутрь треугольника (BU5), закрашивание зеленым цветом и границы белым цветом, а точнее внутренности треугольника зеленым цветом до его границы (P2,7). В четвертой строке происходит установка курсора с координатами (80,50) и прорисовка треугольника, как было описано выше. В пятой строке производится установка курсора с координатами (110,50) и прорисовка треугольника, как описано выше.
$DYNAMIC
- определение массивов, которые находятся за этим оператором как
динамические. Для динамических массивов можно освобождать память,
которые они занимают при помощи команды ERASE. Данный оператор используется для программ, которые занимают много оперативной памяти.
Пример.
|
В данном примере во второй строке определяется массив m1%,
в котором находится десять элементов и он определяется как
динамический. В дальнейшем память, используемая данным массивом, можно
освободить при помощи оператора ERASE (см. описание оператора ERASE).
END, END DEF, END FUNCTION, END IF, END SELECT, END SUB, END TYPE - конец блока, программы и так далее, а именно: END - конец программы с закрытием всех файлов, END DEF - конец функции, END FUNCTION - конец функции, END IF - конец условия IF, END SELECT - конец блока CASE, END SUB - конец подпрограммы, END TYPE - конец определения пользовательских данных. Примеры с использованием данных операторов см. в описании соответствующих блоков.
ENVIRON - работает с переменными окружения системы ДОС. Эти переменные можно встретить в файле Autoexec.bat.
EOF
- признак, который принимает два значения: True (или 1), если достигнут
конец файла и False (или 0), если конец файла не достигнут.
Пример.
|
f1$ = "Rab.txt" OPEN f1$ FOR OUTPUT AS #1 FOR i% = 1 TO 10 PRINT #1, i% NEXT i% CLOSE #1 | OPEN f1$ FOR INPUT AS #1 DO UNTIL (EOF(1)) INPUT #1, i1% PRINT i1%, LOOP
|
В данном примере организуется файл под именем «Rab.txt»,
в который заносятся десять последовательных чисел от 1 до 10, а затем
из данного файла они считываются до тех пор, пока не будет обнаружен
конец файла (DO UNTIL (EOF(1))). Единица в данной записи обозначает номер файла, который нужно проверять на признак конца файла.
ERASE
- очистка массива или освобождение динамической памяти. Под очисткой
массива подразумевается установка в каждом из элементов массива нулевых
значений. Если массив был определен как динамический, то происходит
освобождение памяти, выделенной под него.
Пример.
|
'$DYNAMIC DIM mm1%(10) mm1%(5) = 6 | PRINT " До команды Erase: "; mm1%(5) ERASE mm1% PRINT " После выполнения Erase: "; mm1%(5) |
В данном примере во второй строке определяется массив m1%,
в котором находится десять элементов. Оператор на первой строке
свидетельствует о том, что данный массив будет динамическим. Далее, в
пятый элемент массива заносится значение «6», оно выводится на экран дисплея. Команда ERASE освобождает память, которая была выделена под массив m1%. Поэтому в следующем операторе не будет выведено значение пятого элемента массива m1%, так как такого элемента не существует и на экране появится сообщение об этом.
Если убрать оператор на первой строке ('$DYNAMIC), то на экран будет выведено значение пятого элемента массива m1%, а именно 0, так как команда ERASE
для динамических массивов обнуляет все элементы массива, а для
символьных массивов делает элементы массива нулевой длины, то есть
отсутствие символов.
ERDEV - возвращает код ошибки устройства, которое возникает в устройстве при появлении серьезной ошибки.
Пример.
ON ERROR GOTO err1
10 CHDIR "e:\"
20 a$ = "c:\ncc": CHDIR a$
30 y = 0
40 x = 5 / y
50 PRINT "y ="; y; " x = "; x
60 ERROR 41
err1: PRINT "Ошибка - "; ERR; " на линии - "; ERL
SELECT CASE ERR
CASE 71: PRINT " Устройство - "; ERDEV$; " код ошибки - "; ERDEV
RESUME NEXT
CASE 76: PRINT "Не найдена директория - "; a$: RESUME NEXT
CASE 11: INPUT " Какое значение должно быть делимым - "; y: RESUME
CASE ELSE: PRINT " Другие ошибки. Номер - "; ERR: END
Первая
строка данного примера содержит оператор, который определяет, что при
возникновении ошибки должна выполняться подпрограмма «err1».
Далее находится текст основной программы, в которых присутствуют номера
строк от 10 до 60. В строке с номером 10 происходит установка корневой
директории на CD-ROM устройстве. Так как в момент выполнения программы
там не находилось компакт-диска, то программа выдает ошибку под номером
71. При этом начинает работать подпрограмма «err1» для обработки ошибки. В этой подпрограмме вначале печатается возникший код ошибки и номер строки («PRINT "Ошибка - "; ERR; " на линии - "; ERL»),
то есть для данного случая: ошибка под номером 71 на строке с номером
10. Далее происходит обработка ошибки, при этом на экран выдается имя
устройства, где была ошибка (Е:) и код ошибки (20). Этот код не совпадает с кодами ошибок языка Бейсик и является разным для разных устройств. По команде «RESUME NEXT» происходит переход выполнения программы на следующую строчку, в данном случае на строчку с номером 20.
В строке 20 производится установка новой директории, а так как ее не существует, то вызывается подпрограмма «err1». В подпрограмме происходит обработка данной ошибки при помощи оператора: «CASE 76: PRINT "Не найдена директория - "; a$: RESUME NEXT».
В строке под номером 40 возникает ошибка деления на ноль, поэтому также вызывается подпрограмма «err1», в которой происходит запрос на новое делимое и по команде «RESUME» происходит повторное выполнение оператора на строке 40 («CASE 11: INPUT " Какое значение должно быть делимым - "; y: RESUME»).
В строке 60 имеется ошибка пользователя под номером 41, которая также вызывает подпрограмму «err1». Так как в подпрограмме нет отдельной обработки по операторам «CASE», то выполняется оператор печати номера ошибки («CASE ELSE: PRINT " Другие ошибки. Номер - "; ERR:»). В данной строке нет оператора «RESUME», при этом программа прекращает выполнение своей работы.
Ниже приведены коды ошибок языка Бейсик, которые могут встретиться при работе с программами:
|
1- имеется NEXT без FOR 2- синтаксическая ошибка 3- имеется RETURN без GOSUB 4- считывание DATA, которое закончилось 5- неверный вызов функции 6- переполнение 7- выход за пределы памяти 8- метка не определена 9- индекс вне диапазона 10 - двойное определение 11 - деление на ноль 12 - неверно в прямом доступе 13 - тип смешан неверно 14 - выход за пределы строки 16 - символьная строка слишком сложная 17 - недопустимое продолжение 18 - функция не определена 19 - нет оператора RESUME 20 - RESUME без ошибки 24 - время устройства исчерпано 25 - неверное устройство 26 - оператор FOR без NEXT 27 - бумага кончилась 29 - оператор WHILE без WEND 30 - оператор WEND без WHILE 33 - двойное определение метки 35 - подпрограмма не определена 37 - неверное количество аргументов | 38 - массив не определен 40 - требуется переменная 50 - переполнение FIELD 51 - внутренняя ошибка 52 - неверный файл или его номер 53 - файл не найден 54 - неверный режим для файла 55 - файл уже открыт 56 - FIELD уже действует 57 - ошибка ввода/вывода 58 - файл уже существует 59 - неверная длина записи 61 - диск полон 62 - ввод данных при достижении конца файла 63 - неверный номер записи 64 - неверное имя файла 67 - слишком много файлов 68 - устройство недоступно 69 - переполнение буфера 70 - доступ запрещен 71 - диск не готов 72 - ошибка в компакт-диске 73 - недоступный параметр 74 - диск переименован 75 - ошибка доступа к файлу/пути 76 - путь не найден |
ERDEV$ - возвращает имя устройства, которое использовалось последним при работе программы (пример см. в функции ERDEV).
ERR - переменная, содержащая код ошибки, который возникает при работе программы (пример см. в функции ERDEV).
ERL
- возвращает код строки, в которой встретилась ошибка, если линии
пронумерованы. Если не пронумерованы, то возвращает значение ноль
(пример см. в функции ERDEV).
ERROR – признак, имеется ли ошибка в программе (пример см. в функции ERDEV).
EXIT DEF, EXIT DO, EXIT FOR, EXIT FUNCTION, EXIT SUB - выход из блока, программы и так далее, а именно: EXIT DEF - выход из функции, EXIT FUNCTION - выход из функции, EXIT IF - выход из блока IF, EXIT SELECT - выход из блока CASE, EXIT SUB - выход из подпрограммы. Пример применения оператора «EXIT DO» см. в описании «DO… LOOP».
EXP - возвращает значение экспоненты. Обратная операция к логарифму.
Пример. PRINT EXP(1), EXP(2)
FIELD - определяет поля для файла произвольного доступа.
Пример.
OPEN "FILE1.DAT" FOR RANDOM AS #1 LEN = 10
FIELD #1, 5 AS s1$, 5 AS s2$
LSET s1$ = "--1--"
RSET s2$ = "--2--"
PUT #1, 1
CLOSE #1
OPEN "FILE1.DAT" FOR RANDOM AS #1 LEN = 10
FIELD #1, 5 AS s3$, 5 AS s4$
GET #1, 1
PRINT "*" + s3$ + "*", "*" + s4$ + "*"
CLOSE #1
В данном примере в первой строке открывается файл с произвольным доступом под именем «FILE1.DAT».
Файлом с произвольным методом доступа называется файл, в котором в
любой момент времени можно обратиться к любой записи по ее номеру.
Также в первой строке указывается длина каждой записи в файле - 10
байт. Далее находится оператор «FIELD»,
в котором определяются поля для каждой записи, в данном примере два
поля по 5 байт. В каждое поле заносится значение при помощи операторов LSET и RSET, причем оператором LSET происходит заполнение левых позиций поля, а в правой незаполненной части будут пробелы, а RSET производит заполнение правой части поля. После этого заполненные поля заносятся в запись в файле под номером 1 («PUT #1, 1»).
Далее этот файл закрывается, открывается, считывается запись под
номером 1 и выводится на экран дисплея. На самом деле не обязательно
закрывать и открывать файл заново, а сделано для того, чтобы показать,
что эти значения взяты из этого файла.
FILEATTR - выдает информацию о типе открытого файла. Выданное значение может быть: 1 - последовательный для ввода данных (INPUT), 2 - последовательный для вывода данных (OUTPUT), 4 - произвольного доступа (RANDOM), 8 - последовательный для добавления данных (APPEND), 32 - двоичный (BINARY).
Пример.
OPEN "FILE1.DAT" FOR RANDOM AS #1 LEN = 20
FIELD #1, 10 AS s1$, 10 AS s2$
PRINT FILEATTR(1, 1) ((4))
Результат данного примера будет значение 4, которое обозначает файл произвольного доступа.
FILES - вывод имен всех файлов в директории.
Примеры. 1. FILES 2. FILES “*.doc” 3. FILES “C:\*.*”
В
первом примере на экран выводится список всех файлов, имеющихся в
текущей директории. В начале этого списка приведен полный путь к этой
директории, далее список файлов и в конце находится общее
неиспользованное пространство на диске. Во втором примере на экран
выводится список всех файлов текущей директории, имеющих расширение «.doc». В третьем примере выводится список файлов, которые находятся в корневой директории диска С:.
FIX - перевод вещественного числа в целое, при котором происходит не округление, а отсечение целой части числа.
Пример. PRINT FIX(23.19), FIX(23.99) ((12 12))
FOR - организация цикла, в котором по заданным правилам меняется переменная.
Примеры. 1. FOR i1% = 1 TO 5: PRINT i1%,: NEXT i1% ((1 2 3 4 5))
2. FOR i1% = 0 TO -5 STEP -1: PRINT i1%,: NEXT i1% ((0 -1 -2 -3 -4 -5))
3. FOR i1 = 1 TO 1.5 STEP 0.1: PRINT i1%,: NEXT i1% ((1 1.1 1.2 1.3 1.4 1.5))
FRE - выводит на экран количество имеющейся памяти.
Примеры. 1. PRINT FRE(“”) ((30788)) 2. PRINT FRE(-1) ((160100))) 3. PRINT FRE(-2) ((1052)) 4. i1%=-1: PRINT FRE(i1%)
Оперативная
память выделяется частями (кусками) для определенных целей задачи.
Часть из нее выделяется под массивы, часть под стек. Поэтому при
различных параметрах для функции FRE
выдаются разные значения. В первом примере выделяется размер памяти для
строковых данных, во втором - для числового массива, а в третьем - для
стека. В четвертом примере показано использование переменной i1% для вывода свободного пространства для численного массива.
FREEFILE - выводит следующий свободный номер файла.
Пример. OPEN "Rab.txt" FOR INPUT AS #1
PRINT "Следующий номер файла - "; FREEFILE
В примере на экран будет выведено значение «2», так как открыт только один файл с номером #1.
FUNCTION - определение функции.
Пример.
|
DECLARE FUNCTION aa! (t%) DECLARE FUNCTION aa1! (t1%) COLOR 0, 7 i1% = 1 i2% = aa(i1%) PRINT i1%, i2%, i3% = aa1(i1%): i3% = aa1(i1%) PRINT i1% | FUNCTION aa (t%) t% = t% * 5 aa = t% + 1 END FUNCTION
FUNCTION aa1 (t1%) STATIC t1% = t2% + t1%: t1% = t1% + 4 t2% = 2 END FUNCTION |
((5 6 15))
В данном примере определены две функции - аа и аа1.
Для того, чтобы установить новую функцию, необходимо после набора или
во время набора текста основной программы воспользоваться режимом Edit New FUNCTION.
При этом произойдет запрос на имя новой функции, как это показано на
рисунке. В окне будет находиться имя переменной или оператора, на
котором в момент вызова данного режима находился курсор. Лучше вызывать
данный режим после набора имени функции, которая находится в тексте
основной программы, при этом ее имя будет показано в этом окне. После
ввода имени функции и нажатия на клавишу Enter, появится окно с двумя операторами, между которыми следует набрать описание функции. При этом следует иметь в виду следующее.
В операторе FUNCTION после набора имени находится список параметров, которые передаются функции. Например, «FUNCTION aa (t%)», где передаваемые величины содержат один параметр - переменную t%. Имя данной переменной может не совпадать с именем переменной, которая передается функции. Например, вызов функции в виде «i2% = aa(i1%)» показывает, что передается переменная i1%, которая при выполнении функции совмещается с переменной t%. Далее в тексте функции должна находиться строка типа: «aa = t% + 1», в которой имени функции присваивается некоторое значение. Эта строка свидетельствует о том, что функция возвращает значение «t% + 1». Заканчивается определение функции ключевыми словами «END FUNCTION». После набора определения функции можно перейти к тексту основной программы, нажав на клавишу F2. При этом покажется окно (см. рис. 2), в котором находится имя основной программы (Prim28.bas) и имеющиеся подпрограммы (аа и аа1). Нажав на имя основной программы, мы перейдем в его поле. Кнопка Delete позволяет удалить выделенную подпрограмму.
Ключевое слово «STATIC»
в определении функции означает, что переменные, которые обозначены в
функции, сохраняют свои значения после выхода из функции и в
последующем при входе в нее. Если данное слово убрать, то результатом
работы программы будет: ((5 6 13)). Таким образом, если присутствует ключевое слово «STATIC», то в переменной t2% после первого выполнения функции аа1 сохраняется значение 2, а при втором вызове функции оно добавится к значению переменной t1%. Если данного ключевого слова нет, то в переменной t2% значение 2 не сохранится и в переменной будет находиться значение 0.
После
запуска программы на выполнение, в основной программе появятся строчки,
которые свидетельствуют о том, что в программе имеются функции: «DECLARE FUNCTION aa! (t%)» и «DECLARE FUNCTION aa1! (t1%)». Восклицательный знак в них означает о типе переменной, в которую возвращаются значения. Так, в строке «i2% = aa(i1%)», «aa(i1%)» будет вещественным числом простой точности.
Параметры в функции можно определить и другим способом: «FUNCTION aa (t AS LONG)».
В этом случае вид аргумента функции будет целым числом двойной
точности. Можно также использовать следующие ключевые слова,
определяющие вид переменной: INTEGER, LONG, SINGLE, DOUBLE, STRING.
GET - 1. считывает значения из файла произвольного доступа. Пример использования данного оператора см. в описании FIELD.
GET - 2. сохраняет область на экране в памяти, которая потом может быть выведена на экран при помощи оператора PUT.
Пример.
|
SCREEN 9 DIM a%(400) CLS CIRCLE (30, 30), 10 GET (20, 20)-(40, 40), a% | FOR i1% = 1 TO 10 FOR i3 = 1 TO 500 i4 = SIN(i3 / 100) NEXT i3 PUT (i1% * 8 + 20, i1% * 8 + 20), a% NEXT i1% |
В первой строке определяется вид экрана, который работает в графическом режиме. Во второй строке определен массив а%, где будут находиться значения области экрана, выведенной при помощи оператора GET. Далее экран очищается и на него выводится окружность. На пятой строчке находится оператор GET, при помощи которого область на экране в виде прямоугольника с координатами от (20,20) до (40,40) заносится в массив а%. После этого в цикле выводятся данные из массива а% в разные области экрана, в данном примере по диагонали. Внутренний цикл по переменной i3 введен для того, чтобы была задержка по времени при выводе окружностей.
GOSUB - вызов подпрограммы.
Пример.
|
i1% = 1 GOSUB aa PRINT i1%, i2%, GOSUB aa ff1: PRINT i1%, i2% END | aa: i2% = 5 i1% = i1% + i2% RETURN
|
((6 5 11 5))
В данном примере описана подпрограмма аа,
которая вызывается из текста основной программы два раза. Переменные,
которые имеются в программе и подпрограмме, общие, то есть принимают
одни и те же значения. В конце основной программы для того, чтобы
определить ее окончание, находится оператор «END».
Если
строки программы перенумерованы, то вместо метки «аа» можно установить
номер строки, где находится подпрограмма. После окончания работы
подпрограммы управление передается на следующий оператор после вызова
подпрограммы, в данном примере - на операторы «PRINT». Можно указать и другую строчку, на которую нужно передать управление, например, «RETURN ff1», где ff1
- метка строчки, куда передается управление. В этом случае при первом
вызове подпрограммы, после выполнения подпрограммы, управление будет
передано на строчку «ff1: PRINT i1%, i2%», а второго вызова подпрограммы не будет и на экране выведено: ((6 5)).
GOTO - передача управления в определенное место программы.
Пример.
INPUT "Введите значение - ", i1%
IF i1% = 0 THEN GOTO m1
PRINT i1%
m1: END
В
приведенном примере оператор на первой строке запрашивает значение,
которое должно быть введено с клавиатуры. После его ввода происходит
проверка и, если оно равно нулю, то выполняется переход управления на
конец программы по метке m1.
Место, куда происходит передача управления, определяется именем метки и
двоеточием за ним. Если строки программы перенумерованы, то передачу
управления можно провести по номеру строки, например, «GOTO 60» - переход к строчке с номером 60.
HEX$ - производит перевод из десятичного значения в шестнадцатеричное.
Пример. a% = 59: PRINT a$, HEX$(a%) ((3В))
IF - условный оператор.
Примеры.
|
1. INPUT "Введите значение - ", i1% IF i1% <= 0 THEN i1% = 1 PRINT i1%
2. INPUT "Введите значение - ", i1% IF i1% <= 0 THEN i1% = 1 END IF PRINT i1%
| 3. INPUT "Введите значение - ", i1% IF i1% <= 0 THEN i1% = 1 ELSE i1%=i1%*2 END IF PRINT i1%
4. INPUT "Введите значение - ", i1% IF i1% <= 0 THEN i1% = 1 ELSEIF i1% = 3 THEN i1% = i1% * 2 ELSE i1% = i1% + 1 END IF PRINT i1% |
В первом примере, если введенное значение переменной i1% не положительное (меньше или равно нулю), то в переменную i1% заносится
значение 1. Во втором примере происходят те же действия, что и в
первом, но с другим синтаксисом команды. В третьем примере также, если
значение переменной i1% не
положительно, то значение становится равным 1, а если положительное, то
умножается на 2. В четвертом примере, если значение переменной не
положительное. то переменная принимает значение 1. В противном случае
(когда значение положительно), а если оно равно 3 (i1% = 3), тогда значение увеличивается в два раза (i1% = i1% * 2). Если значение переменной i1% положительно и не равно 3, то оно увеличивается на единицу (i1% = i1% + 1).
INKEY$ - проверяет, были ли нажаты клавиши на клавиатуре.
Пример. DO: LOOP UNTIL INKEY$ = "a"
В данном примере организуется цикл до тех пор, пока не будет введен символ «а».
INP - чтение байта из заданного порта.
INPUT - считывает данные с клавиатуры.
Примеры. 1. INPUT i1% 2. INPUT "Введите значение - ", i1%
В
первом примере считывается одно значение, которое будет присвоено
переменной i1%. После ввода численного значения нужно нажать на клавишу
Enter. Символьные значения можно вводить непосредственно или
окружив кавычками. Во втором примере перед вводом значений на экране
появится сообщение: «Введите значение -».
INPUT$ - возвращает определенное количество символов, введенных из клавиатуры или считывает данные из файла.
Примеры. 1. i1$=INPUT$(4) 2. OPEN "Rab.txt" FOR INPUT AS #1: PRINT INPUT$(5, 1)
В
первом примере, когда будет выполняться строка с этим оператором, то
программа будет ждать ввода 4 символов с клавиатуры, которые после их
ввода поместит в переменную i1$. Во втором примере происходит считывание 5 символов (INPUT$(5, 1)) из файла под именем Rab.txt и вывод этой информации на экран дисплея.
INSTR - возвращает номер позиции найденного текста в символьной переменной.
Пример. a$ = "Первая программа": PRINT " позиция - "; INSTR(1, a$, "программа")
В данном примере ищется, на какой позиции находится текст «программа» в символьной переменной а$.
INT - возвращает максимальное значение числа, которое меньше или равно заданному.
Пример. PRINT INT(-8.65), INT(9.3) ((-9 9))
IOCTL - передача управляющей строки на внешнее устройство.
IOCTL$ - выдает информацию о статусе внешнего устройства.
KEY - 1. присвоение значений функциональным клавишам.
Примеры. 1. KEY 1,”33” 2. KEY LIST 3. KEY ON 4. KEY OFF
В первом примере происходит назначение функциональной клавише F1 значения «33». Для функциональных клавиш F11 и F12
используются значения 31 и 32. Данные клавиши используются во время
выполнения программы. Во втором примере на экран выводится список
назначений функциональным клавишам. В третьем примере во время
выполнения программы на экране будут выводиться назначения
функциональным клавишам. В четвертом примере исключается вывод значений
функциональным клавишам.
KEY - 2. выполнение подпрограмм при нажатии на определенную клавишу на клавиатуре (фактически организация работы «горячих» клавиш).
KILL - удаление файла.
Примеры. 1. KILL “Rab.txt” 2. a$=”C:\Basic\Rab.txt”: KILL a$
В
первом примере в операторе указано имя файла, который нужно удалить.
Данный файл находится в текущей директории. Во втором примере указан
файл, который следует удалить, причем путь указан полный, начиная с
логического устройства.
LBOUND - выдает номер первого элемента массива.
Пример. DIM a1%(10), a2%(3 TO 7, 5 TO 8)
PRINT LBOUND(a1%, 1), LBOUND(a2%, 1) ((0 3))
В данном примере определено два массива: а1% и а2%. Массив а1% имеет одиннадцать элементов: а1%(0), а1%(1), а1%(2)…а1%(10), поэтому минимальный номер, который выводится для этого массива, равен нулю. Массив а2%
имеет двойную размерность, первая от 3 до 7, вторая от 5 до 8. На экран
выводится минимальный номер по первой размерности, который равен 3.
LCASE$ - переводит символы с больших (строчных) в маленькие (прописные).
Пример. a$ = "THE city Москва"
PRINT a$,: PRINT LCASE$(a$); " оператор LCASE"
((THE city Москва the city Москва оператор LCASE))
Как
видно из примера, программа переводит большие (строчные) символы в
маленькие (прописные), однако, к сожалению, только для английских
символов. Символ «М» как был строчным, так им и остался.
LEFT$ - возвращает символы, находящиеся слева в символьной переменной.
Пример. a$ = "Моя первая программа"
PRINT LEFT$(a$, 3) ((Моя))
LEN - возвращает длину символьной переменной.
Пример. a$ = "Моя первая программа"
PRINT LEN(a$) ((20))
LET - присвоение значения переменной.
Примеры. 1. LET i1% = 1 2. i1% = 1
В первом примере переменной i1% присваивается значение 1. Оператор «LET» не является обязательным параметром, что показано во втором примере, который производит то же действие, что и в первом.
LINE - прорисовка линии и прямоугольника на экране.
Пример. SCREEN 9
LINE (2, 2)-(20, 20)
LINE (21, 21)-(40, 40), 2, B
LINE (42, 42)-(60, 60), , BF
LINE STEP(2, 2)-STEP(20, 15), , B
LINE (90, 90)-(110, 110), , , &HAAAA
Оператор
на второй строке выводит на экран линию, с координатами концов отрезка:
(2,2) и (20,20). Причем, так как цвет не указан, то он будет выведен по
умолчанию белым цветом. Следующий оператор выводит квадрат, который
имеет противоположные углы с координатами: (21, 21) и (40, 40). Второй
параметр определяет красный цвет (2), а символ «В» - то, что нужно вывести прямоугольник, а не прямую линию.
Оператор на четвертой строчке выводит прямоугольник с координатами: (42, 42) и (60, 60), а символ «BF»
свидетельствует о том, что нужно вывести прямоугольник. Причем его
внутренность должна быть закрашена тем же цветом и его границы, то есть
белым цветом, который используется по умолчанию.
Следующий оператор имеет ключевое слово «STEP»,
который определяет, что координаты взяты не абсолютные, а
относительные. То есть эти координаты прибавляются к текущему положению
курсора, которые определяются на предыдущей строчке. В результате
первая координата равна: (60,60) + (2,2) = (62,62), а вторая
относительно первой равна: (62,62)+(20,15)=(82,77). Символ «В» также определяет, что должен выводиться прямоугольник.
На
последней строчке устанавливается линия с координатами: (90, 90) и
(110, 110), причем линия будет не непрерывной, а иметь узор по шаблону «АААА». Символ «А» в шестнадцатеричном представлении равен «1100b»
в двоичном представлении, поэтому будут выводиться две точки (11) -
потом два пиксела оставляют предыдущий цвет (00), далее повторяется
последовательность, так как следующий символ также «А» и так далее.
LINE INPUT - считывает строчку из файла или с клавиатуры.
Пример. LINE INPUT " Введите первый текст - ", a1$
LINE INPUT ; " Введите второй текст - ", a2$
OPEN "rab.txt" FOR OUTPUT AS #1
PRINT #1, 1, 2, 3, " пять ": CLOSE
OPEN "rab.txt" FOR INPUT AS #1
LINE INPUT #1, a3$
PRINT a1$: PRINT a2$: PRINT a3$: CLOSE
Оператор в первой строчке позволяет ввести символы из клавиатуры. Перед вводом на экране появится сообщение: «Введите первый текст - », затем вводится текст с клавиатуры (один), после чего нажимается клавиша Enter. Всего можно ввести до 255 символов. К сожалению, не вводится символ «р» кириллицы.
Оператор на второй строчке выводит на экран сообщение: «Введите второй текст -» и ждет ввода символов. После их ввода и нажатия на клавишу Enter, введенные символы, как и в предыдущем операторе, выводятся на экран. Точка с запятой после ключевых слов «LINE INPUT» обозначают, что следующий текст после этого оператора будет выводиться на этой же строке (два). Так, символы «один», которые выводятся оператором «PRINT» на последней строчке программы, находятся на той же строчке, что и предыдущий ввод.
Далее открывается файл под именем «rab.txt», в него заносятся символы «1», «2», «3», и «пять». Потом файл закрывается (CLOSE), открывается для вывода, вводится из файла значение в переменную «а3$» и выводится на экран.
|
О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О
|
|
Информация
данного сайта предназначена для бесплатного изучения персонального
компьютера. Можно копировать, передавать материалы другим лицам.
Запрещается
использовать материалы для получения личной финансовой выгоды, а также
размещать на сайтах в интернете.
|