Двойной точности". Пример: 80 FIELD 1,2 AS Z$, 30 AS B$ 85 GET 1 90 A%=CVI(Z$) 17. Работа с символьными строками на языке Бейсик. Помимо матаматических (числовых) функций в языке бейсик имеется целый ряд инструкций и функций, которые можно использовать для обработки и переработки символьных строк. 17.1. Функция CHR$. Функция CHR преобразует значение какого-либо целочисленного выражения в соответствующие символы ASCII. Формат: /<переменная типа символьной строки>=/ CHR$(<аргумент>) <аргумент> может быть целым выражением, целой переменной или целой константой. Он может принимать значения между 0 и 127 включительно. Функция имеет тип "символьная строка". Пример: 10 PRINT CHR(65) RUN A OK 17.2. Функция ASC Функция ASC поставляет десятичное значение, соответствующее коду ASCII первого символа передаваемого выражения из символьных строк. Формат: /=/ASC (<аргумент>) <аргумент> может быть выражением из символьных строк, переменной типа символьной строки или константой типа символьной строки. Пример: 10 а="BASIC" 20 PRINT ASC(A$) RUN 66 OK 17.3. Функция STR$. Функция STR$ преобразует значение какого-либо числового выражения в символьную строку. Формат: /<переменная типа символьной строки>=/ STR$(<аргумент>) <аргумент> может быть числовым выражением, которое может принимать каждый из допустимых числовых типов. Функция имеет тип "символьная строка". Пример: 40 А%=40 50 PRINT STR$(A%);A% RUN 40 40 OK 17.4. Функция VAL Функция VAL поставляет числовое значение какого-либо представления числового значения в виде символьной строки. Формат: /<числовая переменная>=/ VAL(<аргумент>) <аргумент> может быть выражением из символьных строк, переменной типа символьной строки или константой типа символьной строки. Если аргумент представляет собой представление числового выражения в виде символьной строки, то происходит преобразование в числовое представление в машинном формате. Если <аргумент> не является представлением числового значения в виде символьной строки, то функция принимает нулевое значение. Функция имеет числовой тип. Пример: 30 PRINT VAL("-3.4") RUN -3.4 OK 10 PRINT VAL("ABC") RUN 0 OK 17.5. Функция HEX$ Функция HEX$ преобразует какое-либо десятичное значение в шестнадцатеричное число и передает его в виде символьной строки. Формат: /<переменная типа символьной строки>=/ HEX$(<аргумент>) <аргумент> может быть целым выражением,целой переменной или целой константой. Функция имеет тип "символьная строка". Пример: 30 X%=62 40 PRINT HEX$(X%) RUN 3E OK 17.6. Функция OCT$. Функция OCT$ преобразует какое-либо десятичное число в восьмеричное число и передает его в виде символьной строки. Формат: /<переменная в виде символьной строки>=OCT$(<аргумент>). <Аргумент> может быть целым выражением, целой переменной или целой константой. Функция имеет тип "символьная строка". Пример: 50 PRINT OCT$(40) RUN 50 OK 17.7. Функция RIGHT$. Функция RIGHT$ формирует подстройку из символов какой-либо символьной строки, начиная справа. Формат: /<переменная типа символьной строки>=/RIGHT$ (<аргумент>,<количество>). <Аргумент> может быть выражением из символьных строк, переменной типа симвлоьной строки или константой типа символьной строки. <Количество> символов значения <аргумент>, начиная справа, образуют новую символьную строку. <Количество> может быть целым выражением, целой переменной или целой константой, его значение должно лежать между 0 и 255 включительно. Функция имеет тип "символьная строка". Пример: 10 A$="STRING" 20 Z$=RIGHT$(A$,3) 30 PRINT Z$ RUN ING OK 17.8. Функция LEFT$. Функция LEFT$ формирует подстроку из символов какой-либо символьной строки, начиная слева. Формат: /<переменная типа символьной строки>=/ LEFT$(<аргумент>,<количество>). <Аргумент> может быть выражением из символьных строк, переменной типа символьной строки или константой типа символьной строки. Первые символы <количество> значения <аргумент>, начиная слева, составляют первую строку. <Количество> может быть целым выражением, целой переменной или целой константой, его значение должно лежать между 0 и 255 включительно. Функция имеет тип "символьная строка". Пример: 10 A$="STRING" 20 Z$=LEFT$(A$,3) 30 PRINT Z$ RUN STR OK 17.9. Функция SPACE$. Функция SPACE$ позволяет сформировать какую-либо символьную строку, состоящую из пробелов. Формат: /<переменная типа символьной строки">=/ SPACE$(<аргумент>). <Аргумент> может быть целым выражением, целой переменной или целой константой, который может принимать значения между 0 и 255 включительно. Функция имеет тип "символьная строка". Пример: 10 FOR I%=1 TO 4 20 Z$=SPACE$(I%) 30 PRINT Z$;I% 40 NEXT RUN 1 2 3 4 OK 17.10. Функция STRING$. Функция STRING$ формирует строку из какого-либо предварительно заданного символа, который добавляется раз. Формат: /<переменная типа символьной строки>=/ STRING$(<количество>, <символ>). Размножаемый <символ> может быть задан либо как числовое значение в коде ASCII, либо как символ. Кодовое значение может быть описано как числовое выражение, числовая переменная или числовая константа, причем значение должно лежать между 0 и 127 включительно. <Символ> является первым символом значения символьной строки или константы типа символьной строки. Параметр <количество> указывает количество повторений символов в формируемой символьной строке. <Количество> может быть целым выражением, целой переменной или целой константой, его значение может лежать между 0 и 255 включительно. Функция имеет тип "символьная строка". Пример: 10 G$=STRING$(10,42) 20 PRINT G$ RUN ********** OK 17.11. Функция INSTR. Функция INSTR осуществляет поиск в какой-либо предварительно заданной символьной строке другую заданную символьную строку и определяет, с какой позиции вторая символьная строка содержится в качестве подстройки в первой символьной строке. Формат: /=/ INSTR(<стартовая позиция>, <аргумент>,<поисковое выражение>) Параметр <стартовая позиция> задает номер первого символа в <аргумент>, начиная с которого начинается поиск поиского выражения. <Стартовая позиция> может быть целым выражением<целой переменной или целой константой, ее значение должно лежать между 1 и 255 включительно. Если этот параметр не задан, то поиск начинается с первого символа. Параметр <аргумент> и <поисковое выражение> могут быть выражением из символьных строк, переменной типа символьной строки или константой типа символьной строки. Функция принимает значение 0, если поисковое выражение не было найдено, в противном случае передается номер первого символа <поискового выражения> в <аргументе>. Функция имеет тип INTEGER. Пример: 50 A$="MATHEMATIK" 60 B$="MA" 70 PRINT INSTR(A$,B$) 80 PRINT INSTR(3,A$,B$) RUN 1 6 OK 17.12. Функция MID$ для формирования подстрок символов. Функция MID$ выбирает подстроку символов из какой-либо символьной строки. Формат: /<переменная типа символьной строки>=/ MID$(<аргумент>,<позиция>,<длина>). И<аргумент> может быть выражением из символьных строк, переменной типа символьной строки или константой типа символьной строки, из его значения выбирается подстрока символов. Значение <позиция> определяет символ в <аргументе>, начиная с которого должна формироваться строка. Данное значение должно лежать между 0 и 255 включительно. Параметр <длина> определяет длину выбираемой подстройки символов. Он также должен лежать между 0 и 255 включительно. Если этот параметр не задан, то в подстроку символов переносятся все символы до конца символьной строки <аргумент>. Параметры <позиция> и <длина> могут быть целыми выражениями, целыми переменными или целыми константами. Функция имеет тип "символьная строка". Примечание: Если у символьной строки <аргумент> справа от указанного параметром <позиция> меньше символов, чем определено параметром <длина> или параметр <длина> не задан, то в подстройку символов переносятся все символы. Если указанное параметром <позиция> место находится вне заданной символьной строки, то формируется пустая символьная строка. Пример: 10 P$=MID$("символьная строка",8,4) 20 PRINT P$ 30 P$=MID$("символьная строка",8) 40 PRINT P$ 50 P$=MID$("символьная строка",13) 60 PRINT "<";P$;">" RUN KETT KETTE OK 17.13. Инструкция MID$ для замещения подстрок символов в символьной строке. Функция, оперирующая с символьными строками, MID$ используется в левой стороне оперетора присваивания, позволяет размещать какую-либо символьную строку в любой другой символьной строке, начиная с предварительно заданной позиции символа. Формат: MID$(<символьная строка 1>,<позиция>/,<длина>/)= <символьная строка 2> <символьная строка 1> может быть переменной типа символьной строки или константой типа символьной строки. В ней производится замена символов символами <символьной строки 2>, начиная с <позиции>. При этом параметр <длина> определяет максимальное количество заменяемых символов. Параметры <позиция> и <длина> могут быть целыми выражениями, целыми переменными или целыми константами, их значения могут лежать между 1 и 255. Если задан параметр <длина>, то заносится столько символов <символьной строки 2>, сколько позволяет длина символьной строки 1, если <символьная строка 2> содержит столько символов, в противном случае только столько символов, сколько позволяет <символьная строка 2>. Если задан параметр <позиция>, то лежащий вне <символьной строки 1>, то происходит сообщение об ошибке. Примечание: Максиммально замещаются столько символов, чтобы не изменялась длина <символьной строки 1>. Пример: 10 SI="DAS IST ELNE ZEICHENKETTE" 20 MID$(SI$,9,4)="LENE" 30 PRINT SI$ RUN DAS IST LENE ZEICHENKETTE OK 17.14. Функция LEN. Функция LEN указывает длину, т.е. количество символов какой-либо символьной строки. Формат: // LEN(<аргумент>) <аргумент> может быть любым выражением из символьных строк, переменной типа символьной строки или константой типа символьной строки. Функция имеет тип INTEGER. Пример: 30 A="BASIC" 40 PRINT LEN(A$) RUN 5 OK 18. Стандартные числовые функции в языке Бейсик. Общий формат этих функций имеет вид: [<числовая переменная>=]<ключевое слово>(<аргумент>) В качестве <аргумента> может задаваться выражение, переменная или константа. В общем случае функция указывается справа от знака присвоения, или она является составной частью выражения или она содержится в списке операторов вывода. Если <аргумент> функции должен иметь целый тип, а задается <аргумент> вещественного типа, то перед обработкой производится округление. При использовании функций в условиях Бейсик-интерпретатора, возвращаемые значения имеют целый тип или вещественный обычной точности. 18.1. Функция ABS Функция ABS возвращает абсолютную величину заданного числового аргумента. Формат: [<числовая переменная>=] ABS (<аргумент>) <аргумент> может быть числовым выражением, числовой переменной и числовой константой, имеющей тип целый, вещественный обычной точности и вещественный удвоенной точности. Значение функции имеет тип целый или вещественный обычной точности. Пример: 10 PRINT ABS(8*(-3)) RUN 24 OK 18.2. Функция FIX Функция FIX определяет целую часть значенияя заданного числового аргумента обычной точности. Формат: [<целая переменная>=] FIX (<аргумент>) <аргумент> может быть числовым выражением, числовой переменной или числовой константой, принимающей значения обычной точности. Значение функции имеет целый тип. Примечание: Функция реализует вычисление выражения SGN(X)*TNT(ABS(X)) Пример: 10 A!=-57.85: B!=5: C!=-5.8 20 PRINT FIX(A!);FIX(B!);FIX(C!) RUN -57 5 -5 OK 18.3. Функция INT Функция INT выполняет (математическое) округление. Формат: [<целая переменная>=] INT (<аргумент>) <аргумент> может быть числовым выражением, числовой переменной или числовой константой, принимающей значения обычной точности. Значение функции имеет целый тип. Пример: 10 Z!=88.88 20 PRINT INT(Z!) 30 PRINT INT(-Z!) RUN 88 -89 OK 18.4. Функция SGN Функция SGN определяет знак величины заданного числового выражения обычной точности. Формат: [<целая переменная>=] SGN (<аргумент>) <аргумент> может быть числовым выражением, числовой переменной или числовой константой, принимающей значения обычной точности. Значение функции имеет целый тип и принимает следующие значения: =+1, если величина аргумента больше нуля; = 0, если величина аргумента равна нулю; =-1, если величина аргумента меньше нуля. Пример: 10 INPUT "EINGABEWERT";X% 20 ON SGN(X)+2 GOTO 40,60,80 30 GOTO 100 40 PRINT "EINGABEWERT NEGATIV" 50 GOTO 10 60 PRINT "EINGABEWERT NULL" 70 GOTO10 80 PRINT "EINGABEWERT POSITIV" 90 GOTO 10 100 END 18.5. Функция SQR Функция SQR определяет значение квадратного корня из заданного числового выражения обычной точности. Формат: [<числовая переменная>=] SQR(<аргумент>) <аргумент> может быть числовой переменной, числовым выражением или числовой константой. Величина аргумента не может быть отрицательной. Значение функции имеет тип вещественный обычной точности. Пример: 10 FOR I%=1 TO 5 20 PRINT I%, SQR(I%) 30 NEXT RUN 1 1 2 1.41421 3 1.73205 4 2 .CP15 5 2.23607 18.6. Функция EXP Функция EXP определяет значение экспоненциальной функции от заданного числового выражения обычной точности. Формат: [<числовая переменная>=] EXP (<аргумент>) <аргумент> может быть числовым выражением, числовой переменной или числовой константой. Значение аргумента не может быть больше величины 87.3365. Значение функции имеет тип вещественный обычной точности. Пример: 10 Z!=10 20 PRINT EXP(Z!-7) RUN 20.0855 OK Примечание: Если наибольшее допустимое значение аргумента будет превышено, то выдается сообщение об ошибке OVERFLOW (переполнение). Функция принимает значение, равное наибольшему представимому числу с правильным знаком. Выполнение программы продолжается. 18.7. Функция LOG Функция LOG вычисляет натуральный логарифм величины заданного числового выражения обычной точности. Формат: [<числовая переменная>=] LOG (<аргумент>) <аргумент> может быть числовым выражением, числовой константой или числовой переменной. Значение функции имеет тип вещественный обычной точности. Пример: 10 A!=77 20 B!=8 30 PRINT LOG(A!/B!) RUN 2.26436 OK 18.8. Функция SIN Функция SIN определяет значение синуса заданного числового выражения обычной точности. Формат: [<числовая переменная>=] SIN (<аргумент>) <аргумент> может быть числовым выражением, числовой переменной или числовой константой, заданной в радианах. Значение функции имеет тип вещественный обычной точности. Пример: 10 A!=0.9 20 B!=0.7 30 PRINT SIN(A!+B!) RUN .999574 OK 18.9. Функция COS Функция COS определяет значение косинуса заданного числового выражения обычной точности. Формат: ш<числовая переменная>=] COS(<аргумент>) <аргумент> может быть числовым выражением, числовой переменной или числовой константой, заданной в радианах. Значение функции имеет вид вещественной обычной точности. Пример: 10 X!=2*COS(4) 20 PRINT X! RUN -1.30729 18.10. Функция TAN Функция TAN определяет значение тангенса заданного числового выражения обычной точности. Формат: [<числовая переменная>=] TAN (<аргумент>) <аргумент> может быть числовым выражением, числовой переменной или числовой константой, заданной в радианах. Значение функции имеет тип вещественный обычной точности. Пример: 10 A!=1.9 20 PRINT TAN(A!/2) RUN 1.39838 OK 18.11. Функция ATN Функция ATN возвращает значение арктангенса заданного числового выражения в интервале от -PI/2 до PI/2 (главное значение). Формат: [<числовая переменная>=] ATN (<аргумент>) <аргумент> может быть числовым выражением, числовой переменной или числовой константой типа вещественный обычной точности. Значение функции имеет тип вещественный обычной точности. Пример: 10 X!=3 20 PRINT ATN(X!) RUN 1.24905 OK 18.12. Функция RND Функция RND возвращает псевдослучайное число в интервале от 0 до 1. Формат: [<числовая переменная>=] RND (<аргумент>). Имеющийся в Бейсик-интерпретаторе генератор псевдослучайных чисел может быть использован с помощью функции RND. Возможности доступа к нему управляются с помощью параметра <аргумент>. Аргументом может быть числовое выражение, числовая переменная или числовая константа, принимающая вещественные значения обычной точности. Если аргумент задает величину меньшую нуля, то генератор псевдослучайных чисел инициализируется. Если аргумент задает величину, равную нулю, то значением функции является предыдущее псевдослучайное число. Если аргумент задает величину, большую нуля, то выдается следующее псевдослучайное число. Пример: 10 FOR I%=1 TO 3 20 PRINT RND(I%); 'аргумент > 0 30 NEXT 40 PRINT: PRINT 50 X!=RND(-6) 'аргумент < 0 60 FOR I%=1 TO 3 70 PRINT RND(I%); 'аргумент > 0 80 NEXT 90 PRINT: PRINT 100 RANDOMIZE 888 'RANDOMIZE 110 X!=RND(-6) 'аргумент < 0 120 FOR I%=1 TO 3 130 PRINT RND; 'тот же эффект,как при арг. > 0 140 NEXT 150 PRINT: PRINT 160 FOR I%=1 TO 3 170 PRINT INT(RND(0)*100) 180 NEXT RUN .245121 .305003 .311866 .709808 .658938 .639327 .709808 .658938 .639327 63 63 63 OK 18.13. Оператор RANDOMIZE для определения стартового значения генератора случайных чисел В языке Бейсик имеется в распоряжении генератор случайных чисел. Оператор RANDOMIZE определяет случайную стартовую точку последовательности псевдослучайных чисел. Формат: RANDOMIZE (<аргумент>) Аргументом может быть числовое выражение, числовая переменная или числовая константа целого типа, определяющая стартовую точку последовательности псевдослучайных чисел. Допустимы любые числа в диапазоне от -32768 до 32767. Если аргумент не задан, то программа выдает сообщение "RANDOM NUMBER SEED (задайте произвольное число) (-32768 то (до) 32767)?" И ожидает ввода стартовой точки. Тем самым, при каждом выполнении программы могут быть использованы желаемые стартовые точки. Пример: 10 RANDOMIZE 3 20 FOR I%=1 TO 3 30 PRINT RND; 40 NEXT RUN 0.88598 0.484668 0.586328 0.119426 0.709225 OK Примечание: Если, например, должны быть получены случайные числа в интервале от 0 до 1, то это возможно выполнить в соответствии с оператором 170 из примера в предыдущем пункте. 19. Простые управляющие операторы и функции в языке Бейсик 19.1. Оператор LET для обозначения операторов присвоения С помощью LET могут быть специально выделены операторы присвоения. Формат: [LET] <идентификатор переменной>=<выражение> Оператор LET в общем случае может отсутствовать. Пример: Обе следующие программные строки выполняют одно и то же: 10 LET Z!=Z!%+Z! И 10 Z!=Z!%+Z! Примечание: Программы, написанные на старых версиях Бейсика, обязательно содержат оператор LET. Эти программы могут использоваться без изменений. 19.2. Оператор REM Формат: REM <комментарий> или ' <комментарий> Комментарии к программе могут размещаться в любом месте внутри программы на Бейсике. Комментарии не оказывают влияния на выполнение программы, но выдаются вместе с текстом. На месте ключевого слова REM может также использоваться апостроф "'". Номер строк в операторах GOTO, соотв. GOSUB, могут также указывать на строки комментариев. Пример: 100 GOSUB 150 . . . 150 REM подпрограмма 1 . . . 180 RETURN 'конец п/п 1 . . . 210 H3!=25*A!/B !: ZZ#=H3!*ZZ#: REM коэффициент Примечание: Бейсик-компилятором комментарии обходятся. 19.3. Оператор END для окончания Бейсик-программы По оператору END производится завершение Бейсик-программы. Формат: END При достижении оператора END закрываются все открытые файлы, очищаются области буферов и устанавливаются в исходное состояние рабочие области Бейсик-интерпретатора. Интерпретатор переходит в состояние ввода команд и ожидает следующей команды. Если в Бейсик-программе оператор END отсутствует, то стандартно исходят из того, что оператор END находится после последней программной строки. Оператор END может находиться в любом месте программы. Указание: При использовании Бейсик-компилятора, по достижении этого оператора закрываются все файлы и следует возврат в операционную систему. Если оператора END нет, то компилятор принимает, что он находится после последней программной строки. 19.4. Оператор STOP для вызова программного прерывания Оператор STOP прерывает выполнение программы. Формат: STOP Оператор вызывает выдачу сообщения "BREAK IN (прерывание в) <номер строки>". Текущее состояние обработки в программе сохраняется. Лишь интерпретатор переходит в состояние команд и ожидает ввода команды. Выполнение программы может быть продолжено с помощью команды CONT (см. Пункт 5.5.) Со строки программы, непосредственно следующей за оператором STOP. Пример: 10 FOR I%=0 TO 4 20 FOR J%=1 TO 2 30 PRINT I%+J% 40 NEXT 50 STOP 60 NEXT RUN 1 2 BREAK IN 50 OK CONT 2 3 BREAK IN 50 OK Указание: При использовании бейсик-компилятора оператор STOP соответствует оператору END. Однако при возврате в операционную систему выдается сообщение о шестнадцатеричном адресе, где выполняется оператор STOP. Если задействованы опции /D, /X или /E, то дополнительно сообщается номер строки. 19.5. Функция FRE Функция FRE сообщает о количестве доступного места в памяти для переменных и программы. Формат: FRE (O) или FRE (X$) При использовании первого формата функция возвращает значение об'ема памяти, доступной для числовых переменных и программы, в то время, как при использовании второго формата возвращается значение об'ема памяти, доступной для строковых переменных. Пример: 350 PRINT FRE(O); FRE (A$) Примечание: Если функция вызывается с использованием в качестве аргумента пустой строки (т.е. FRE (" ")), подобный вызов обеспечивает перед определением свободного об'ема озу выполнение так называемого "сбора мусора", что означает реорганизацию области для запоминания строковых значений и освобождение неиспользуемого более места в памяти. Подобная реорганизация обычно производится лишь при переполнении области памяти для строк (так называемого неупорядоченного массива) и может длиться до полутора минут. При вызове FRE (" ") реорганизация производится раньше и происходит поэтому