Главная » Basic » ЧИСЛОВЫЕ ФУНКЦИИ СО СТРОКОВЫМИ АРГУМЕНТАМИ

0

Все функции  Бейсика для работы со строками машинно-зависимы.  Ниже описываются наиболее широко распространенные функции.

В  данном  подразделе  речь  пойдет  о  функциях, которые  обрабатывают  строки символов, но возвращают числовое значение, например длину строки. Будучи функциями,  они требуют один  или несколько  аргументов  и   возвращают  одно  числовое значение, присваиваемое  имени функции. Например, оператор

10   A =LEN("DON’T GIVE UP")

поместит в переменную А значение 13 в результате обращения к функции  LEN, возвращающей длину строки.  В  табл.  4.4   4.8  приводятся альтернативные имена и   указываются  отдельные особенности реализаций для наиболее распространенных функций. Для единообразия действие этих функций иллюстрируется на примере версии Бейсика Microsoft. В этих таблицах А$ и В$ могут быть переменными, выражениями или константами.

Если А$ содержит строку "ФОСФОР", то в результате выполнения операторов

B=LEN(A$)

С = ASC (А$) D=INSTR(A$,""Ф") E=INSTR(3,A$,"ФO")

Таблица 4.4 Функции Бейсика для персональной ЭВМ ZX81 фирмы Sinclair

Результат

Функция

Действие

Значение

кода

CODE A$

Дает внутренний машинный код

первого символа строки А$. Если строка пуста, в качестве результата возвращается 0

Длина строки

LEN(A$)      Дает число символов в строке А$

Число      VAL(A$)      Дает численный результат обработки строки А$ которая может содержать символьную запись достаточно сложного арифметического выражения

Таблица 4.5. Функции Бейсика Microsoft; некоторые другие функции используются при работе  с файлами прямого доступа (см. подразд. 8.6.2)

Результат

Функция

Действие

Значение

кода Длина строки Позиция

Число

ASC(A$)

LEN(A$) INSTR(A$,B$)

INSTR(I,A$,B$)

VAL(A$)

Дает (внутренний машинный) коя первого

символа

Дает число символов в строке А$

Дает начальную позицию первого вхождения строки В$ в строку А$; возвращает 0, если строка В$ не является вырезкой из строки  А$. Если параметр I указан, то поиск вхождения строки В$ в строку AS начнется с 1-й

позиции строки  А$

Дает число по его символьной записи в строке AS которая может содержать только цифры или знаки  +, -, или &. Пробелы и символы прогона строки при этом игнорируются

Таблица 4.6. Функции Бейсика ВВС

Значение кода

Длина строки Позиция

Число

Таблица 4.7. Функции Бейсика для персональной ЭВМ СВМ PET

Результат Функция       Действие

Таблица 4.8. Функции Бейсика для ЭВМ ICL 2903/4

Результат

Функция

Действие

Значение

кода

Длина строки Количество вхождений Позиция

Число

CHR(A$)

LEN(A$)

ОСС(А$,В$)

POS(A$,B$) POS(A$,B$,N)

VAL(A$)

Дает внутренний машинный код первого символа

строки А$

Дает число символов в строке А$

Дает число неперекрывающихся  вхождений строки В$ в строку А$

Дает начальную позицию первого вхождения строки В$ в строку А$; возвращает 0, если строка В$ не является вырезкой из строки  А$. Если параметр N указан, то поиск вхождения строки В$ в строку А$ начнется с N-й позиции строки  А$

Дает число по его символьной записи в строке А$;

строка не должна содержать посторонних символов

В получит значение 6, С 102, равное десятичному коду буквы Ф, D1, указывающее позицию символа

в  строке А$, начиная с которой произошло  совпадение с Ф, а Е получит значение 4, указывающее позицию   символа   в  строке А$,  начиная с  которой произошло совпадение  с  ФО  при поиске от позиции  3 к концу строки. Использование VAL(A$) ошибочно, и  для данной системы приведет к значению 0.

Если А$ содержит "-12356", то VAL(A$) возвратит число -12356, которое при необходимости  можно обрабатывать арифметически.  Существует функция, обратная  VAL  и   преобразующая  числовое значение в строку, содержащую запись этого числа  в определенной системе счисления. Такую строку полезно представлять себе как изображение  числа. Если А$ содержит "1234", а В$ "5678", то в результате исполнения операторов

С$=А$ + В$ E=VAL(A$) +VAL(B$)

С$  получит значение "12345678",  а  Е  6912.  Функция VAL  может  показаться странной, но  она оказывается чрезвычайно полезной в двух   случаях. Во-первых, ее можно применять для  придания выводу требуемого  формата.  Можно  преобразовывать подлежащие  выводу числа  в   строки, манипулировать  этими  строками, добавляя или  убавляя пробелы,  отбрасывая ненужные  цифры, затем выдавать результаты оператором PRINT, сразу или предварительно объединяя несколько строк в одну, и т. д.

Во-вторых, при некоторых видах  обработки  дисковых  файлов требуется, чтобы обмен с диском происходил только строками  символов. В этих случаях приходится преобразовывать  при записи на диск  числовые  значения в строки   символов,  а при чтении с диска — из строк символов обратно в числовые значения.

Весьма  полезной оказывается функция ОСС  (см.  табл.  4.8),  и   если она  потребовалась, а  ее  не оказалось в Вашей системе, то приведем фрагмент

программы, выполняющий  ту  же работу. В нем А$ воспринимается  как аргумент, а В$ должна содержать  искомый образец.  Возвращаемый в   переменной  О  результат  равен  0,  либо   числу обнаруженных в А$ неперекрывающихся вхождений образца. Обратите  внимание на то, что функция INSTR  применяется так,  как  описано в   табл.  4.5.  Для  решения этой  задачи, иллюстрируемого приведенной  ниже структограммой, нам требуется продолжать сравнение образца В$ с символами

строки А$ до тех пор, пока не произойдет одно из двух событий:  либо совпадений с образцом больше нет, либо при поиске мы вышли за пределы строки А$. Так как структурного символа, позволившего бы осуществить  выход из различных  мест внутри цикла, не существует, то условие выхода  из цикла надо сформировать в его конце. На практике для этого вводится дополнительная переменная М. Ей присваивается начальное значение 0, а затем в случае выполнения какого-либо  из условий значение

1. При этом цикл управляется по принципу "повторять, пока не будет достигнут конец строки А$ либо пока не станет ни одного совпадения с образцом", что в  терминах переменной М примет вид "повторять, пока М не станет равной 1".

Ниже приводится соответствующая   этой  структограмме программа.  Она  не  представляет собой полную программу, так как предназначена для использования в виде части  большой программы — например, в виде подпрограммы или функции (эти понятия обсуждаются в гл. 5).

100 REM ФРАГМЕНТ ПРОГРАММЫ ДЛЯ ОПРЕДЕЛЕНИЯ ЧИСЛА ВХОЖДЕНИЙ

110 0=8

120 1=1

130 J=LEN(A$)

140   K=LEN(B$)

150   М=0

160   P=INSTR (I,A$,B$)

170   IF P<>0 THEN 200

180  M=1

190     GOTO 230

200   O=O+1

210   I=P+K

220   IF (I+K)>J THEN M=l

230 IF M<>1 THEN 160

240 REM ВЫХОД С ИСКОМЫМ ЗНАЧЕНИЕМ В О

Для проверки этого фрагмента добавим к нему строки с операторами INPUT, PRINT и END: 10 INPUT A$.B$

250 PRINT "ЧИСЛО ВХОЖДЕНИЙ =";O

260 END RUN

?BOT КОТ УВИДЕЛ БЕГЕМОТА.ОТ ЧИСЛО ВХОЖДЕНИЙ = 3

END AT LINE 260

Эта программа дополнительно  регистрирует позиции   в строке А$, начиная с которых в этой строке встречается искомый образец. Позиции можно запомнить в массиве   и использовать по окончанию процесса поиска вместе с числом вхождений образца в строку А$.

Источник: Уолш Б.    Программирование на Бейсике: Пер. с англ. М.: Радио и связь, 1988. 336 с: ил.

По теме:

  • Комментарии