ЭЛЕМЕНТЫ И ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА "BASIC" (часть 1) Для того,чтобы ЭВМ могла "понимать" алгоритмический язык она должна содержать в своей памяти т р а н с л я т о р, т.е. своего рода перевод- чик-программу, обеспечивающую преобразование программ, составленных на алгоритмических языках, в коды машины. Одним из трансляторов языка "BASIC" (точнее одной из многих его версий) является qwbasic. В основе любого языка,будь он разговорный, лежат простые элементы: буквы, цифры, знаки препинания,символы, из которых формируются слова, предложения, математические выражения и т.д.. ЭЛЕМЕНТЫ ЯЗЫКА 1.Цифры: 0-9 (в отличие от буквы О ноль записывается 0); 2.Буквы: латинского алфавита от A до Z(прописные или строчные- при наборе не имеет значения), русского алфавита от А до Я (только для опе- раторов PRINT,REM,INPUT (о них ниже)); 3.Знаки арифметических операций: + - сложение - - вычитание * - умножение / - деление ^ - возведение в степень Приоритет операций аналогичен математическому; 4.Знаки логических операций: = - равно < - меньше > - больше <=- меньше или равно >=- больше или равно <>или><- не равно 5.Знаки препинания: . - точка , - запятая ; - точка с запятой : - двоеточие 6.Специальные знаки: ( )," ",#,$,& 7.Служебные знаки: _ - пробел <кс>-конец строки <нс>-номер строки Эти знаки при написании программы не пишутся, а используются с кла- виатуры ЭВМ. С помощью этих основных элементов и конструируются программы на языке "BASIC". ЗАПИСЬ ДАННЫХ Данные, которые вводятся в программу, могут быть постоянными(кон- станты) и переменными (величина которой может меняться в процессе выпол- нения программы). Константа представляет собой число со знаком "+" или "-".Положи- тельный знак может опускаться.Различают константы целого и действитель- ного (вещественного) типов. Значения "целых" чисел представлены целыми числами: 1,26,30,78. Вещественные числа (т.е. с плавающей запятой) могут представляться в основной (естественной) форме - в виде десятичной дроби, или в экспо- тенциальной форме.Десятичные знаки на языке "BASIC" разделяются не запя- той, а точкой. Пример:157.45;25.4;.05;-28.456;-1.567 Как видно ноль впереди точки опускается, незначащие цифры после точки также опускаются. Целое число может также быть представлено в вещественной форме. Пример:55.;1.;105. Количество знаков целого числа определено разрешающей способностью ЭВМ (16-и и 32 разрядные). Экспотенциальная форма- запись числа с десятичным множителем. Пример:13.45;.0545- основная форма 1.345*10^1;5.45*10^-2 -экспотенциальная форма Однако при записи программы вместо цифры 10 используется буква E (экспотенциальная форма).Показатель степени называется порядком числа (может быть как положительным, так и отрицательным).Тогда последнюю за- пись можно представить в виде: 1.345E1;5.45E-2 Порядок числа должен находиться в интервале -980 до +980. В общем случае конструкция числа имеет вид: ┌──────┬───────┬─┬─┬─┬─┬─┬─┬─┬─┬──────┬─┬─┬─┬─┐ │ Знак │ Точка │1│2│3│4│5│6│7│E│ Знак │1│2│3│4│ └──────┴───────┴─┴─┴─┴─┴─┴─┴─┴─┴──────┴─┴─┴─┴─┘ Примечание: знак минуса в порядке иногда заменяется пробелом. Переменная обозначается на языке "BASIC" одной или несколькими бук- вами латинского алфавита или буквами с последующими за ними цифрами.Все- го переменная может содержать до 38 знаков, причем первый знак должен быть обязательно буквой. Пример:N,H,Q,J6,O8,D7,K0,DBF,MIN35,TO6P Таким образом в одной программе количество одновременно использу- емых переменных практически неограничено. Это простые переменные.Следует также отличать индексные переменные. И н д е к с н ы е переменные являются элементами массивов (попросту таблиц).Различают одно-(векторы) и двухмерные (матрицы) массивы.Имя мас- сива записывается буквой и заключенного в скобки индекса, который может быть величиной целой или переменной. Пример:D(5);F(3);A(J);K(2,7);P(I,6);A(I,J);PS(4)GH5(M,N) Наибольшее значение индекса массива -255 (Imax=255;Jmax=255). Переменные могут быть как обычной точности, так и двойной. Перемен- ные обычной точности обозначаются как указывалось выше и содержат не бо- лее 12 значащих цифр, большие значения представляются в экспотенциальной форме, при чем лишние знаки отбрасываются. Переменные двойной точности обозначаются в конце обозачения знаком "#". Правило распространяется на все виды переменных.Оператор CINT(X) не работает с этими переменными. Пример:A#,SD#,A#(I,8) Кроме цифровых данных ЭВМ успешно оперирует и с символьными данны- ми. Символьное данное- это знак или набор знаков международного кодифи- катора (в том числе буквы и цифры) в любой последовательности, заключен- ные в кавычки.Символьные данные используются при решении задач невычис- лительного характера. Пример:"Значение функции","Ввести параметр X","Таблица N1", "--//--//--","──┼───┼───┼────","╔════════════════╗", "####.###","%█▀░&~}{¤ў" Символьные данные могут быть также постоянными,т.е. сохраняющимися при отработке всей программы, и переменными. Выше приведены примеры символьных постоянных и их обозначение. Символьная переменная обозначается как и обычная переменная именем (буква или буква с цифрой) с добавлением в конце имени знака $.Допуска- ется использование символьных массивов. Пример:D$;X1$;U$(2,6);HF$ Количество символов в строке не должно превышать 255. Обработка символьных переменных, их задание и операции над ними в этой части не рассматриваются. СТАНДАРТНЫЕ МАТЕМАТИЧЕСКИЕ ФУНКЦИИ Для выполнения математических операций "BASIC" содержит десять фун- кций, соответсвенно обозначаемых: SIN(X) - синус x COS(X) - косинус x TAN(X) - тангенс x ATN(X) - арктангенс x SQR(X) - корень квадратный из x LOG(X) - натуральный логарифм x EXP(X) - показательная x(e^x) ABS(X) - абсолютное значение x INT(X) - целочисленная функция x (округление до целого числа не превышающего x) RND(X) - случайное число между 0 и 1 SGN(X) - сигнум x (функция дает следующие результаты: =1 если x>0 =0 если x=0 =-1 если x<0 Аргументы тригонометрических функций должны быть представлены в р а д и а н а х. В различных версиях "BASIC" могут быть представлены дополнительные функции. DEG(X) - перевод в градусы (180*x/3,14159) RAD(X) - перевод в радианы (3,14159*x/180) ASN(X) - арксинус x ACS(X) - арккосинус x CINT(X)- выделение целой части EXT(X) - показательная x(10^x) и ряд других функций Для версии qwbasic отсутствующие выражения тригонометрических фун- кций определяются по формулам: Ctg(x)=1/TAN(X) котангенс x Arcsin(x)=ATN(X/SQR(1-X^2)) арксинус x Arccos(x)=3.14159/2-ATN(X/SQR(1-X^2)) арккосинус x Точность вычисления функций до E-8.Аргументом X может быть как пос- тоянная так и переменная величина. ФУНКЦИИ, ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ Часто встречающиеся функции в программе можно описать, оформив ее как стандартную.Для этого ей присваивается имя из 3-х букв,первые из ко- торых FN, а третья любая из латинского алфавита. Пример:DEF FNA(X)=3.14159*X/180 где DEF-оператор функции.Он может располагаться в любом месте программы и будет вычислен только при обращении к нему. ПРИМЕРЫ ЗАПИСИ ВЫРАЖЕНИЙ НА ЯЗЫКЕ "BASIC" ВЕРСИИ qw ┌ a+x 2+x ┐ 1) │──── +──── │*(a+b) ((A+X)/(1-X)+(2+X)/(2-X))*(A+B) └ 1-x 2-x ┘ 2*a*x¤-x*(3+4*b) 2) ──────────────── (2*A*X^2-X*(3+4*B))/(3*B+A) 3*b+a ┌ ┌ x+3 ┐ 3 ┐ 3) │ tg¤│──── │-───── │*2*z¤ (TAN^2(X+3)/2*A)-3/(-SIN(Y)))*2*Z^2 └ └ 2*a ┘ -Siny ┘ ┌────── │ Sinb 4) ln│───── LOG(SQR(SIN(B)/X)) √ x Как видно скобки, как и в математике, нарушают естественный ход вы- полнения действий. ОПЕРАТОРЫ Оператор представляет собой сокращенное (ключевое) слово и указыва- ет на то, какую операцию должна выполнить ЭВМ.Каждому ключевому слову предопределен однозначно конкретный вид действий над данными. Различают выполняемые операторыи и невыполняемые.К первым относятся операторы присвоения, ввода и вывода данных, безусловного и условного переходов, цикла. Вторые описывают размещение, формирование и восстанов- ление данных, оформление комментариев. О с н о в н ы е о п е р а т о р ы:  LET  (пусть) - оператор присвоения формат <нс> LET <выражение или число> <кс> Ключевое слово LET можно опускать Примеры: 10 X=2 15 Y=.052:Z=Y+3.14*X 20 U1=X+TAN(B)/(1+X):U2=U1-Z:K=Y*U1 последовательно выражения(данные) записываются через двоеточие Если же в программе несколько переменных, то вместо оператора LET удобнее использовать два других, работающих тендемом.  DATA  (данное) - оператор ввода  READ  (читать) - оператор ввода формат <нс> DATA <набор значений через запятую> <кс> <нс> READ <набор переменных через запятую> <кс> Примеры:1) 30 DATA 1.2,4,25.4,.732,-5E-2 40 READ A,B,C,D,E Оператор READ последовательно связывает обозначенные переменные с константами в операторе DATA,т.е. после выполнения 40 строки переменные примут значения A=1,2;B=4;C=25,4;D=0,732;E=-0,05 2) 10 DATA 3,5,7 20 DATA -8,6,-.1 30 READ A,B,C,D,K,L В результате переменные примут значения A=3;B=5;C=7;D=-8;K=6;L=-0.1 3) 10 DATA 3,5,7,-8,6,-1 20 READ A,B ................... 50 READ C,D,K,L Результат тот же Таким образом количество операторов содержащих данные и переменные может быть различно. Оператор DATA записывается в строке т о л ь к о о д и н и может располагаться в любой части программы кроме конечной строки, а также раздробленно. 4) 10 DATA -3,82 5) 10 T=2:READ A,B,C 20 READ N 20 DATA 4,8,-12 30 DATA 14 .............. 60 DATA -17,30 .............. В примере одна переменная, а значений, задаваемых оператором DATA- пять, тем не менее переменной N последовательно будут даваться эти зна- чения. Почему? Это сейчас не видно, т.к. пропущен ряд операторов, о ко- торых речь пойдет ниже. Оператор DATA может образовывать целые блоки данных.Как видно опе- ратор READ может встречаться в строке и с другими операторами. Возможны и более сложные варианты присвоения данных.  PRINT  - оператор, служащий для вывода результатов вычислений, пояснений, текстов, заголовков и т.д. на экран. формат <нс> PRINT <список,выражение><кс> Примеры: 1) 20 X=-2*A:K=3*A ................ 50 PRINT X,K,A 2) 40 PRINT X+A/2 3) 80 PRINT "Cумма" 90 PRINT A или 80 PRINT "Сумма",A или 80 PRINT "Сумма Xi=",A Элементы списка могут отделяться друг от друга запятой или точкой с запятой.Запись результатов при этом будет получаться различной. При записи в программе PRINT X1,X2,X3 строка результатов разделяет- ся на зоны (части), каждая из которых содержит одинаковое число знаков. Количество зон зависит от типа ЭВМ.К прмеру имеется пять зон по 14 пози- ций в каждой (14*5=70 - число символов, размещаемых на строке экра- на).Первые позиции зон начнутся с 1,15,29,43,57 колонок и отводятся для вывода знака числа, у положительных чисел они останутся свободными. Пусть в примере 1 A=2, тогда X=-4 и K=6 Запись на дисплее будет выглядеть так -4 6 2 12 16 30 Если в том же примере добавить в программу одну запятую, т.е. 50 PRINT X,,K,A то запись на дисплее будет уже такой -4 6 2 12 30 44 т.е. одна зона пропускается Если же программу записать так (разделить на две строки) 50 PRINT X,,K, 60 PRINT A то запись будет аналогична предыдущей, т.е. запятая после K в 50 строке объединяет и 60-ю строку. Для более компактного вывода результатов на дисплей разделителем в строке должна быть точка с запятой.При этом каждое последующее значение результата выводится через два пробела. 50 PRINT X;K;A -4 6 2 12 5 8 Рассмотрим 3 пример 1 вариант записи на дисплее при A=28 Сумма 28 2 вариант Сумма 28 3 вариант Сумма Xi= 28 При постановке точки с запятой 2 вариант Сумма28 3 вариант Сумма Xi=28 Как видно любой текст, заключенный в кавычки выводится на печать один к одному, а запятая и точка с запятой играют туже роль. А что делать, если требуется напечатать заголовок по центру? Напри- мер: Оглавление Сделаем расчет: число символов включая пробелы в тексте 10, симво- лов на экране 80, разницу делим на 2 и получаем 35, т.е. перед заголов- ком должно напечататься 35 пробелов. 1 способ: PRINT " Оглавление" 2 способ: PRINT " "," "," Оглавление" во втором случае используется принцип запятой (деление на зоны). Однако запись результатов в той и другой форме не всегда удовлетво- ряет, т.к. в первом случае запись некомпактна, во втором- для записи блока результатов могут строиться ступенчатые ряды, т.к. разрядность ре- зультатов не одинакова; в том и другом случае могут появиться числа, за- писанные в экспотенциальной форме, числа не округляются, а записываются с разрядностью позволяемой ЭВМ. Чтобы нам привести результаты в требуемый порядок (в том числе и округлить до требуемого знака) используется следующие операторы, идущие за оператором PRINT.  WRITE  - структура оператора аналогична PRINT, но выводимые на экран значения отделяются запятыми,а символьные - заключаются в кавычки.  LPRINT  - оператор служащий для вывода результатов вычислений, символьных строк на печатающее устройство. Все указания по использованию оператора PRINT верны и для него.  WIDTH  - оператор служащий для установки длины выводной строки на указанном устройстве формат <нс> WIDTH <устройство>,N "LPT1:" - АЦПУ (принтер) N - длина строки  USINQ  (использование) - оператор управления Примеры:1) 90 PRINT USINQ"##.##";A пусть A=12,487 A=0,943 A=127,003 запись 12.49 0.94 ***** 2) 70 PRINT"X="USINQ"##.####";A A=0,258 A=-1,45868 A=21,73 X=0.258 X=-1.4587 X=21.73 Количество знаков # определяет число значащих цифр до десятичной запятой и после нее.Знаки * в печати говорят о том, что указанных раря- дов не хватает для записи результата.При этом нужно увеличить количество знаков #.Этот же знак учитывает и знак минус.Как видно рузультаты вычис- лений округляются (можно и до целого). Если же требуется напечатать в результате знак + (плюс), то исполь- зуется запись PRINT USINQ"+##.##" Этим же способом задается шаблон. Пример: 10 L=3:B=4.2 20 X=L+B 30 PRINT USINQ40,L,B,X 40: ##.# #.# ## печать 3 4.2 7 40 - показывает,что шаблон создается в 40 строке : - указывает на наличие шаблона Знаки # начинаются соответственно с 10,20 и 30 позиций, печать бу- дет аналогична. Для записи чисел в экспотенциальной форме указывается шаблон вида ##.## Текстовые выражения можно также печатать с помощью шаблона.К шабло- ну можно обращаться не один раз.  AT(x,y)  - функция предназначена для вывода данных с произволь- ной позиции экрана. Пример: 60 PRINT AT(25,10);A x - номер колонки экрана xє31 н - номер строки экрана yє23 если x>31, то место колонки будет на той же строке в 1 колонке аналогично и при y>23  TAB(x)  (табулятор) - оператор управления позволяет выполнить табуляцию (построить колонки аналогично AT) Пример: 10 PRINT TAB(8);"x";TAB(120;"y" Здесь создана "шапка" таблицы, далее используя следующую строку можно записать данные или результаты. Оператор PRINT, введенный без списка означает, что при выводе стро- ка останется пустой.  INPUT  (ввести) - оператор ввода данных с клавиатуры во время выполнения (по ходу) программы, т.е. ввод по запросу. формат <нс> INPUT <переменные> <кс> Оператор может записываться в любом месте программы.При его выпол- нении приостанавливается выполнение программы и на экране возникает знак вопроса(?).После него нужно последовательно набрать на клавиатуре значе- ния переменных(если их несколько). В оператор наряду с переменными можно записать и текстовый материал в кавычках, обычно это текст указывающий название или обозначение пере- менных. Пример: 10 INPUT "Введите x";X 20 INPUT "Введите t";T  LINE INPUT  - оператор ввода символьных переменных.В отличие от предыдущего вводимая переменная не заключается в кавычки и может содер- жать символ ",".  REM  (от REMARK-коментарий) - оператор вставки (коментария) формат <нс> REM <выражение> <кс> Пример: 10 REM Расчет контрольных точек Коментарии не печатаются, а служат для облегчения работы с програм- мами (например удобство поиска отдельных блоков решения).  END  (конец) - конец программы Пример: 140 END  STOP  (стоп) - останов программы.Может быть установлен в любой ее части, обычно после логического завершения отдельного ее блока реше- ний, а также при отладке.После просмотра для продолжения отработки прог- раммы следует нажать клавишу CONTINUE (F5).  GOTO  (перейти к ...) - оператор безусловного перехода формат <нс> GOTO n <кс> n - номер строки, к которой осуществляется переход. Может использоваться совместно с оператором IF вместо THEN. В стро- ке должен быть последним. Пример: 40 F1=X^0.3:GOTO 120 .................... 120 PRINT F1  IF ...THEN ... (если ... то ...) - оператор условного перехода формат <нс> IF THEN <к> <кс> где A и B - арифметические выражения Ё логическая операция (=,>,< и др.) к - номер строки для перехода при невыполнении условия или оператор языка. Примеры: 1) 60 IF A<>0 THEN 150 2) 95 IF X<=D THEN Y=2 100 Y=6 3) 50 IF 2.5*X-.5>C/D THEN 20 4) 65 IF YC=0 THEN A=458.67:GOTO 120 Работа оператора заключается в следующем: если выполняется условие отношения, то осуществляется переход по указанному номеру строки или вы- полняется записанный оператор. При невыполнении условия выполняется опе- ратор, стоящий за условным.(Пример 2)  IF ...OR ... THEN ... (если ... или ..то ...);  IF ...AND ... THEN ... (если ... и ..то ...) - операторы много- условного перехода. Количество условий ограничено длиной строки програм- мы равной 255. Пример: 1) 30 IF к>4 OR Z<0 THEN 60 2) 40 IF A=0 AND B=0 AND C<1 THEN 120  IF ...THEN ... ELSE ... (если ... то ... в противном случае ...) также операто условия. Если условие выполняется, то выполняется последо- вательность операторов 1, в противном случае пследовательность операто- ров 2.После выполнения операторов любой последовательности осуществлятся переход к следующей строке программы. Пример: 80 IF X>0 THEN S=S1+X:K1=K-1 ELSE S=S2+Y:K1=K+4  ON K GOTO n1,n2,n3...ni  или  ON K GOSUB n1,n2,n3...ni  - операторы выбора формат <нс> ON <выражение> GOTO <ряд меток> Работа оператора заключается в передаче управления одной из меток, указанной в выражении.Выражение может быть как арифметическим, так и пе- ременной.Если в выражении нет ни одной из указанных меток, то осуществ- ляется переход к следующему за ним оператору. При указании GOSUB осуществляется переход к подпрограмме с указан- ным номером. Пример: ON K+1 GOTO 20,70,90  SWAP  - оператор смены формат <нс> SWAP X,Y <кс> Оператор позволяет поменять местами значения переменных. Пример: 10 X=1:Y=8 20 SWAP X,Y 30 PRINT "Результат "X;Y Результат 8 1  FOR и NEXT  - операторы, используемые для организации циклов вы- числений. FOR(для) - оператор начала цикла формат <нс> FOR <выражение> TO <выражение> STEP <выражение> <кс> где 1 - выражение, определяющее начальное значение переменной 2 - выражение, определяющее конечное значение переменной 3 - выражение, определяющее шаг изменения переменной TO(до) - оператор исполнения STEP - шаг может задаваться целым, вещественным числами, а также выражением.Если шаг равен единице, то STEP можно не указывать. Оператор всегда записывается в начале строки. NEXT - оператор обозначающий конец цикла. Оператор изменяет значение счетчика и отсылает программу на начало цикла. формат <нс> NEXT <выражение> <кс> Если в строке имеются другие операторы, то NEXT должен быть послед- ним. Вычисления в цикле продолжаются до тех пор, пока значение управля- ющей переменной при положительном шаге не превысит конечное, а при отри- цательном не станет меньше конечного. После этого управление передается оператору со следующим за NEXT номером. Пример: 10 PRINT "X","Y" 20 FOR X=.3 TO 1.8 STEP .25 30 Y=X^2/(X^2+2.05*X+3.701) 40 PRINT X,Y 50 NEXT X 60 END Здесь в 10 строке создается шапка таблицы результатов, в 20 присва- ивается переменной X первое значение равное 0,3.В 30 строке определяется значение Y и в 40 зачеия переменных выводятся на экран. 50 строка пере- дает управление 20 строке, где переменная X увеличивается на 0,25 с каж- дым последующим обращением. Таким образом в результате будет записана таблица с 6 строками.(0,3-1,8)-область действия управляющей переменной. Операторы организации циклов могут внутри циклов образовывать внут- ренние циклы (вложения).  DIM  - оператор служит для резервирования места в памяти под массивы. Массивы бывают одномерными и двухмерными. формат <нс> DIM <имя массива><индекс массива> <кс> Примеры: 1) 10 DIM A(15) 2) 40 DIM B(4,5),K(20) 1 - одномерный массив переменной A из 15 элементов 2 - двухмерный массив переменной B из 20 элементов (матрица из 4 строк и 5 столбцов) и одномерный массив переменной K из 20 элементов. Нулевые индексы исключены. Максимальное значеие индекса элемента массива - 255.Индексы могут быть и переменными.имя массива должно состоять из одной буквы.Начальное значение каждой ячейки должно быть равно 0. Сопоставим 2 программы обнуления. Примеры: 1) 10 DIM P(6) 2) 10 DIM P(6) 20 P(1)=0 20 FOR ф=1 TO 6 30 P(2)=0 30 P(A)=0 40 P(3)=0 40 NEXT A 50 P(4)=0 60 P(5)=0 70 P(6)=0 Преимущество записи программы даже при небольшом значении индекса налицо. 3) 10 DATA 2.8,-9,5.2,1.89,16 20 DIM A(5) 30 FOR V=1 TO 5 40 READ A(V) 50 NEXT V 60 PRINT A(1),A(2),A(3),A(4),A(5) Если массив большой, то перечисление переменных в PRINT также тру- доемко, поэтому записать нужно так 60 FOR K=1 TO 5 70 PRINT A(K), 80 NEXT K Запятая в конце строки 70 подавляет нормальный возврат каретки(кур- сора), а это значит, что все пять чисел будут выведены в одну строку. В ходе разработки программы возникает необходимость несколько раз выполнять какую-либо ее часть. Такие части, представляющие группы опера- ций, обычно выделяют и именуют подпрограммой. Записывают ее только один раз и в большинстве случаев в конце программы после оператора END. От- сылка на подпрограмму осуществляется командой нижеследующего оператора.  GOSUB  - оператор отсылки на подпрограмму формат <нс> GOSUB n <кс> где n - номер строки оператора подпрограммы  RETURN  - оператор выхода из подпрограммы Этот оператор используется только с оператором GOSUB. После выпол- нения подпрограммы он переводит выполнение программы к строке следующей за GOSUB. Пример: 10 FOR X=0 TO 3 20 GOSUB 80 30 NEXT X 40 FOR X=6 TO 12 STEP 2 50 GOSUB 80 60 NEXT X 70 END 80 Z=SQR(2*X) 90 PRINT X,Z 100 RETURN В некоторых случаях подпрограмма имеет больший размер чем основная, однако при нескольких обращениях к одной и той же последовательности преимущества очевидны.  LOCATE M,N  - перемещение курсора в заданную позицию m - строка;n - столбец Отсчет идет от последнего положения курсора. Для приобретения первых навыков работы с программами на языке BASIC приведенных командных операторов достаточно. Итак Вы набрали на клавиатуре программу и ввели тем самым ее в опе- ративное запоминающее устройство (ОЗУ).Но если теперь выключить ПЭВМ, то набранная программа исчезнет из ее памяти.Поэтому, чтобы этого избежать целесообразно сначала записать ее на внешнее запоминающее устройство (ВЗУ):дискету, жесткий диск (винчестер) или магнитную ленту. Рассмотрим ряд команд, позволяющих сохранить записанную информацию и работать с готовыми программами. Заметим, что перед этими командами номер строки не ставится. Обычно эти команды как наиболее употребляемые при работе с готовыми программами выносятся в меню пользователя, хотя их можно набирать на клавиатуре.На- помним, что <кс> равнозначно нажатию клавиши ENTER.  SAVE  F4 (сохранить) - текст записывается на ВЗУ формат SAVE <имя> <кс> где - имя ВЗУ,т.е. адрес устройства куда записывается программа Например: a: - диск A;c:/foton в последнем указан маршрут следования к месту хранения Если этот адрес не указывать, то запись будет производится в теку- щий каталог (подкаталог). <имя> - имя сохраняемого файла на ВЗУ <имя> - название записываемого файла (на усмотрение пользователя). При этом нужно только помнить общее правило присвоения имени, т.е. его размер не должен превышать 8 символов. Созданный файл записывается с расширением .bas автоматически, если не задавать другого.Первое удобнее, т.к. дается возможность визуально определить принадлежность к язы- ку.Просмотр такого файла в режиме View ничего недаст, т.к. текст отком- пилирован, т.е. автоматически переведен на машинный язык интерпритатором BASIC.  LOAD  F3 (загрузить) - вызов программы из ВЗУ в ОЗУ формат LOAD" <имя> <кс> После загрузки программа хранится в ОЗУ, но текста ее невидно.В принципе работу по программе можно начинать, достаточно нажать еще кла- вишу RUN(F2).  SPAIN  - вызов и автоматический запуск программы из ВЗУ в ОЗУ Формат <нс> SPAIN" <имя> <кс> В отличие от предыдущего оператора запуск программы производить не нужно.  RUN  F2 (прогон) - запуск программы Программа начнет работать от начала до конца если вней не предус- мотрены необходимые остановы по операторам INPUT,STOP. Но а если мы не знаем, что за программу мы вызвали, то естественно есть необходимость посмотреть ее текст.Вероятно в первой строке по опе- раторам PRINT или REM будет записано сообщение с названием программы.  LIST  F1 (перечень,список) - выводит на экран всю программу,часть ее или даже строку формат LIST (n1-n2) <кс> где n1 - номер строки, с которой необходимо вывести программу n2 - номер конечной строки вывода Если номера неуказывать, то вся программа будет выведена на экран (точнее при большом ее размере промелькнет и покажет только хвост).Оста- новить на какое-то время можно нажав клавишу PAUSE.Если же требуется ре- дактировать программу, то нужно вызвать ее часть. Например: LIST 10-100,LIST 50-200 и т.д. Для вызова конкретного номера строки необходимо набрать LIST 40, LIST 150. Еще одно назначение клавиши: в процессе редактирования программы необязательно записывать номера строк в возрастающей последовательности, можно записать необходимый номер (только без повторения) в самом конце, можно и удалить любую строку, т.е. на экране получится беспорядок.Стоит нажать клавишу LIST и программа автоматически приводится в порядок, т.е. строго по возрастающим номерам строк, при этом исключенные строки не высвечиваются.  EDIT  (редактирование) формат EDIT n <кс> где n - номер вызываемой строки После вызова строки с ней можно делать любые операции:замену симво- лов,вставку символов и выражений.Напомним возможности клавиш INSERT (от inserion-вставка),DELETE (удаление)- удаление символов, BACKSPACE - уда- ление выражений перед курсором. Можно производить запись новых данных и операторов (не нарушая формата и правил записи последовательных операто- ров). Вызвать для редактирования стрку можно и оператором LIST (см. выше). Можно встать на строку и производить редактирование. Можно изменить номер строки, но при условии, что она будет един- ственной в прграмме.Но делать это следует осторожно, т.к. с этим номером могут быть связана работа операторов GOTO,GOSUB,IF...TO...THEN. Прежде чем нажать клавишу ENTER следует убедиться, что такой связи нет, а если есть, то соответственно внести изменения. В конце редактиро- вания в любом из указанных способов обязательно необходимо нажать INTER. Таким образом программа отредактирована и можно прочитать ее в но- вой редакции нажав клавишу LIST, а также отработать ее нажав RUN. Однако запись программы в этом случае может быть нарушена (нумера- ция строк не имеет кратного числа).К примеру 5,6,10,13,20,30,31,46,80... Что делать? Можно конечно оставить так, но непривычно. Засесть за клави- атуру и вручную произвести перенумерацию - не реально, т.к. во-первых долго, во-вторых можно запутаться в изменениях строк в операторах GOTO, GOSUB,IF...TO...THEN.Для этой цели BASIC имеет свою команду.  RENUM  (перенумерация) формат RENUM n1,n2,n3 <кс> где n1 - номер первой строки n2 - номер второй строки n3 - шаг нумерации Например: RENUM 5,10,5 Новая запись будет 5,10,15,20,25,30,35..... Если номера строк в операторе не указывать, то все значения строк будут кратны 10. Следует отметить, что командой RENUME перенумеровываются все номе- ра, в том числе и в операторах GOTO,GOSUB,IF...TO...THEN.  AUTO  - автоматический нумератор строк формат AUTO n1,n2 <кс> где n1 - номер первой строки n2 - шаг нумерации Этот режим удобен при наборе больших программ, т.к. при нажатии клавиши ENTER в следующей строке формируется новый номер и оставляется после него пробел.Кстати пробел оставляется после ввода всех операторов вводимых функциональными клавишами или набором из двух. Если номера не указывать, то нумерация будет вестись кратно 10. Для окончания режима AUTO необходимо одновременно нажать клавиши Ctrl+C. и первичной отработке программы могут возникать ошибки, характер которых определить трудно. На ряд ошибок: синтаксических, нарушениях формата операторов и др. указывает сама машина. Она выводит на экран строку-инвалида и указывает даже место ошибки. В этом случае строку мож- но отредактировать, переписать (нажав ENTER) и снова проверить работос- пособность программы.Однако ошибки математических действий здесь увидеть нельзя. Где допущена ошибка: в алгоритме,формуле или вданном? В самой программе определить это невозможно. Напрашивается самый простой вариант:запустить программу с исходными данными, результаты по которым с уверенностью 100% можно назвать пра- вильными,т.е. выполнить так называемую тестовую программу.Если сделать это как обычно, то можно определить только ошибки в формулах и то не всегда.Где же вкралась ошибка?Для определения используется операторы BASIC.  TRACE  F7 (дословно трасса) - вход в режим трассировки,т.е. по- шагового прохода программы На экран терминала последоавательно выводятся результаты выполнения операторов.Для удобства наблюдения вывод информации можно замедлить ко- мандой SELECK Pk (где k=0,1,2...9 - масштаб замедления, обычно равен 4-6) При необходимости результаты трассировки можно отпечатать на АЦПУ командой F6 и далее F1. Для нахождения ошибки необходимо построчно проанализировать резуль- таты работы операторов.  TRACE OFF  F8 - выход из режима трассировки  CLS  - очистить экран При выполнении операнда экран станет чистым для дальнейшей работы. При этом в ОЗУ программа сохраняется.  SYSTEM  - выход из BASIC (часть 2) РАБОТА С СИМВОЛЬНЫМИ ДАННЫМИ Символьные переменные образуются добавлением в конце переменной символа "$". Количество символов в строке не должно превышать 255. Способы задания: 1) A1$="Расход" 2) INPUT A$ 3) READ-DATA 10 READ X$ 20 DATA "Расход" Над символьными переменными производится операция сочленения Пример: 10 A$="Рас":B$="ход" 20 F$=A$+B$ 30 PRINT Расход ФУНКЦИИ  LIST IMPUT V$  - ввод одного значения символьной переменной.  ASC(X$)  - перевод двоичного кода аргумента в десятичное чис- ло. Аргумент должен иметь только один символ, в противном случае в учет берется только первое. Пример: 10 X$="А" 20 Y=ASC(X$) 30 PRINT Y 160  LEN(X$)  - нахождение длины символьной переменной включая про- белы. Пример: 10 X$="Итог дня" 20 Y=LEN(X$) 30 PRINT Y 8  STR$(X)  - преобразует значение аргумента из числовой формы в символьную. Пример: 10 X=10 20 Y$=STR$(X) 30 PRINT Y$ "10"  VAL(X$)  - определяет числовое значение аргумента. Пример: 10 X$="Вес 10 кг" 20 K=VAL(X$) 30 PRINT K 10  CHR$(K)  - преобразует аргумент, представленный в коде ASCII в символ. Пример: 10 K=206 20 C$=CHR$(K) 30 PRINT C$ ╬  STRING(M,N)  - позволяет получить m одинаковых символов, код ASCII которого равен n. Пример: 10 STRING(5,205) ═════  SPACE$(N)  - позволяет получить строку из n пробелов  LEFT$(X$,N)  - выделяет из символьной строки n леаых символов.  RIGHT$(X$,N)  - выделяет из символьной строки n правых симво- лов. Пример: 10 X$="Год рождения 1972" 20 A$=RIGHT$(X$,4) 30 PRINT A$ "1972" 40 C$=LEFT$(X$,3)+"-"+RIGHT$(X$,4) 50 PRINT C$ "Год-1972"  MID$(X$,N,M)  - выделяет из строки m последовательных символов начиная с позиции n. Пример: 60 D$=MID$(X$,8,5) 70 PRINT D$ "рождения"  INKEY$  - используется для ввода одного символа с клавиатуры (присваивает значение нажатой клавише). Пример: B$=INKEY$  TRM$(X$)  - удаляет конечные пробелы Пример: 10 X$="Введение " 20 X$=TRM$(X$) 30 PRINT X$ "Введение"  DATE$  - запрос текущей даты (02-22-1994)  TIME$  - запрос текущего времени (19:42) Пример: 10 A$=DATE$ 20 PRINT A$ 02-22-1994  SOUND M,N  - музыкальный(шумовой) модуль m - частота сигнала (от 37 до 32767 гц) n - длительность, маш.ед (1ед=55мс)