Лекция: Пример 14. Определить к какому языку и регистру клавиатуры относится данная буква.
INPUT a$
SELECT CASE ASC(a$)
CASE 65 TO 90: PRINT " Лат.ЗАГЛАВНАЯ "
CASE 97 TO 122: PRINT «Лат. Строчная»
CASE 12 TO 159: PRINT «Русс. ЗАГЛАВНАЯ»
CASE 160 TO 175: PRINT «Русс. Строчная»
CASE 224 TO 239: PRINT «Русс. Строчная»
CASE ELSE: PRINT «НЕ является БУКВОЙ»
END SELECT
Работа программы. Алгоритм основан на использовании конструкции логической передачи управления SELECT CASE. Она анализирует ASCII-код введенного знака, который выдает функция ASC. В каждом CASE указан диапазон возможных значений, соответствующей группе букв.
Большой спектр задач выделения и анализа фрагментов строк решается с помощью функции INSTR.
Пример 15. Определить, входит ли строка В$=«dow» в слово, A$ = «Windows».
INPUT A$
INPUT B$
k = INSTR(A$, B$)
IF k > 0 AND LEN(B$) > 0 THEN PRINT «Yes» ELSE PRINT «No»
END
Результат:
Yes
Работа программы. Алгоритм основан на работе функции INSTR. Результатом ее работы является целое число k равное номеру знака в А$, с которого начинается вхождение B$. Естественно, что если k больше нуля, то В$ входит в А$. Условие в операторе IF состоит из двух компонентов. В одном проверяется значение k, во втором (LEN(B$) > 0) — длина переменной В$.
Второе условие введено для того, чтобы выдать отрицательный ответ в случае ввода нулевой переменной. Иначе при В$="" значение k будет равно 1, и программа определит вхождение.
Пример 16. Определить, сколько раз B$ входит в A$.
A$ = «промышленное производство проводов»
B$=«про»
i = 1
k = 0
DO
x = INSTR(i, A$, B$)
IF x > 0 THEN
i = x + LEN(B$) ' Номер начала поиска
k = k + 1 ' Счетчик вхождений
ELSE
EXIT DO ' Выход из цикла
END IF
LOOP
PRINT «всего вхождений=»; k
Результат:
Всего вхождений= 3
Работа программы. Цикл DO …LOOP использован потому, что заранее неизвестно, сколько будет вхождений.
В строке i = x + LEN(B$) номер начала поиска передвигается направо. Если программа найдет первое вхождение, то нужно будет продолжить поиск с позиции, номер которого равен номеру начала вхождения плюс длина искомого слова.
В примере первое вхождение «про» в «промышленное производство проводов» начинается с первой позиции, следователь но, продолжать поиск нужно с 4-й позиции (1 + LEN(B$)=1+3=4).
Если обнаруженное вхождение нужно заменить другой строкой, то используют оператор MID$.
Пример 17. Заменить все пробелы на тире в тексте А$.
A$= «Погиб поэт! невольник чести!»
FOR i = 1 TO LEN(A$)
IF ASC(MID$(A$, i, 1)) = 32 THEN MID$(A$, i, 1) = "-"
NEXT i
PRINT A$
Результат:
Погиб-поэт!-невольник-чести!
Работа программы. В цикле поочередно выделяются знаки переменной А$. Функция ASC определяет АSCII-код знака, но в том случае, если номер равен 32 (ASCII-код пробела), оператор MID$ заменяет текущий символ знаком «минус» (тире).
Сортировка текстовых массивов