Строковые выражения и функции
Наряду с числовыми переменными в языке Бейсик определены и строковые переменные. Имена строковых переменных заканчиваются знаком $. Константы строкового типа при записи заключаются в кавычки. В языке Бейсик над строками определена единственная операция — операция конкатенации (слияние строк). Она обозначается знаком +, при этом длина результирующей строки не должна быть больше N. Для присваивания строковым переменным значений строкового типа в языке служит обычный оператор присваивания, в левой части которого указывается имя строковой переменной, а в правой части — выражение строкового типа. Строковым выражением называется выражение, включающее в себя строковые константы, переменные строкового типа, элементы строковых массивов, строковые функции, связанные между собой операцией конкатенации. Например, результатом выполнения приведенных ниже операторов
А$="СТР" B$="ОКА СИМ" С$=А$+В$+"ВОЛОВ" PRINT С$ будет строка на экране монитора СТРОКА СИМВОЛОВ В строковых выражениях могут использоваться следующие функции:
Пример 1. I$="МАТЕМАТИКА" J$=LEFT$(I$,4) K$=RIGHT$(I$,5) L$=MID$(I$,3,3) PRINT J$;"РИАЛ НОВОЙ ";L$;"Ы-ТРУДЕН" PRINT "СТ"+К$,"-ЭТО РАЗДЕЛ МЕХАНИКИ" на экране появятся следующие две строки: МАТЕРИАЛ НОВОЙ ТЕМЫ-ТРУДЕН СТАТИКА -ЭТО РАЗДЕЛ МЕХАНИКИ Пример 2. Х$="PROGRAM" L=LEN(X$) K=ASC(X$) М=INSTR(X$,"GRAM") D=VAL("777") PRINT "ДЛИНА СТРОКИ ";Х$;"=";L PRINT "КОД 1-ГО СИМВОЛА СТРОКИ=";К PRINT "НАЧАЛЬНАЯ ПОЗИЦИЯ ВХОЖДЕНИЯ СТРОКИ GRAM=";M PRINT "ЦЕЛОЕ ЧИСЛО=";D на экран будет выведена следующая информация: ДЛИНА СТРОКИ PROGRAM = 7 КОД 1-ГО СИМВОЛА СТРОКИ= 80 НОМЕР НАЧАЛЬНОЙ ПОЗИЦИИ ВХОЖДЕНИЯ СТРОКИ GRAM= 4 ЦЕЛОЕ ЧИСЛО = 777 Строки можно сравнивать в условных выражениях операторов IF. При проверке на равенство (операция =) вырабатывается истинное значение, только если строки идентичны. Применительно к строкам можно использовать и операции < (меньше), < = (меньше или равно), > (больше) и >= (больше или равно). Строки сравниваются посимвольно слева направо. Символ считается меньшим, если он имеет меньший числовой код (меньший номер в алфавите). Многие системы имеют различные внутренние числовые коды символов, поэтому операции над строками называют машинно-зависимыми. Символы латинских букв. как правило, во всех алфавитах расположены подряд, поэтому, например, "LY" < "LYC" < "NYC" < "NZ" Строка 'LY" меньше строки "LYC", так как при совпадении первых двух символов вторая строка длиннее первой. "LYC" меньше "NYC", потому что символ "L" стоит раньше символа "N" в латинском алфавите, т. е. имеет меньший числовой код. Строка "NYC" меньше строки "NZ", так как при совпадении первых символов сравниваются вторые символы строк, "Y"<"Z". При вводе строковых значений с помощью оператора INPUT вводимые строки символов можно и не заключать в кавычки, но если в состав строки входит символ ",",то кавычки обязательны, иначе запятая будет воспринята как разделитель вводимых значений. Например, если для оператора INPUT К, L$, М$ на клавиатуре набрать следующие значения: ? 25.4, "MAX=, MIN=", СУММА <ENTER> то переменной К присвоится вещественное число 25.4, строковой переменной L$ присвоится строка символов "MAX=, MIN=", а строковой переменной М$ — строка "СУММА". Если бы при наборе исходной информации кавычки были опущены, то переменной L$ соответствовала бы строка "MAX=", переменной М$ - строка "MIN=". а последнее вводимое строковое значение оказалось бы лишним. В таких случаях некоторые системы выдают предупреждение о несоответствии числа параметров в списке ввода и числа вводимых данных. В большинстве Бейсик-систем предусмотрен специальный оператор LINE INPUT, предназначенный для ввода в одну строковую переменную произвольной строки символов. Вводимая последовательность символов может содержать любые знаки, в том числе запятые, пробелы и кавычки. Строковой переменной присваиваются все вводимые данные до тех пор, пока не будет превышена допустимая длина строки, определяемая реализацией, или пока не будет нажата клавиша <ENTER>. В Бейсик-программах для представления текстовой информации часто используют массивы строк. Как и числовые массивы, они должны описываться в программе с помощью оператора DIM. Например, оператор DIM А$(5) определяет массив, состоящий из шести компонентов строкового типа. Ниже приводится пример программы, в которой по исходным данным — списку учащихся группы и их оценкам — осуществляется поиск учащихся, средний балл оценок у которых выше 4,5: REM ПРИМЕР 3 INPUT "ВВОДИ ЧИСЛО УЧАЩИХСЯ В ГРУППЕ->";N INPUT "ВВОДИ ЧИСЛО ЭКЗАМЕНОВ->";M DIM A$(N),B(N,M) FOR I=l TO N INPUT "ВВОДИ ФАМИЛИЮ->";A$(I) FOR J=l TO M INPUT "ВВОДИ OЦEHKУ->";B(I,J) NEXT J.I FOR I=l TO N S=0 FOR J=l TO M S=S+B(I,J) NEXT J IF S/M>4.5 THEN PRINT A$(I);"СРЕДНИЙ БАЛЛ=";S/М END IF NEXT I END В данной программе формируются два массива: А$ — одномерный массив строк, содержащий фамилии учащихся. и В - двумерный массив, содержащий их оценки. Массивы описываются динамически в соответствии с вводимым числом учащихся в группе и числом экзаменов. В первых двух вложенных циклах осуществляется ввод исходной информации, а в следующих двух вложенных циклах – вычисление среднего балла каждого учащегося и вывод на экран фамилий тех учащихся, чей средний балл выше 4,5. Пример 4. В заданной переменной вычислить количество гласных букв и на их место поставить символ " " (пробел). Преобразованную переменную вывести на экран. INPUT "Введите переменную->"; P$ G$ = "АИЕОУЯЮЭЫаиеоуяюэы" K = 0 FOR I = 1 TO LEN(P$) IF INSTR(G$, MID$(P$, I, 1)) <> 0 THEN K = K + 1 MID$(P$, I, 1) = " " END IF NEXT I PRINT "Преобразованная переменная->"; P$ PRINT "Количество гласных букв= "; K END Пример 5. В текстовой переменной, состоящей из букв и цифр, цифры переставить в порядке возрастания, оставив буквы на своих местах. Полученную переменную вывести на экран дисплея. INPUT "Введите переменную->"; P$ FOR I = 1 TO LEN(P$) - 1 FOR J = I + 1 TO LEN(P$) IF VAL(MID$(P$, I, 1)) <> 0 THEN IF VAL(MID$(P$, J, 1)) <> 0 THEN IF VAL(MID$(P$, I, 1)) >= VAL(MID$(P$, J, 1)) THEN A$ = MID$(P$, I, 1) MID$(P$, I, 1) = MID$(P$, J, 1) MID$(P$, J, 1) = A$ END IF END IF END IF NEXT J, I PRINT "Преобразованная переменная->"; P$ END Пример 6. В заданной переменной, состоящей из букв и цифр все цифры заменить на символ "*". Полученную переменную вывести на экран дисплея. INPUT "Введите строку символов->"; S$ FOR I = 1 TO LEN(S$) IF VAL(MID$(S$, I, 1)) <> 0 THEN MID$(S$, I, 1) = "*" END IF NEXT I PRINT "Преобразованная переменная->"; S$ END Пример 7. Существует ведомость, состоящая из N фамилий. Вывести на экран дисплея самую короткую фамилию, количество букв в ней и ее порядковый номер. INPUT "Количество фамилий->"; N DIM FAM$(N) FOR I = 1 TO N PRINT "Введите фамилию->"; I INPUT FAM$(I) NEXT I MIN = LEN(RTRIM$(FAM$(1))) F$ = FAM$(1) NOM = 1 FOR I = 1 TO N IF LEN(RTRIM$(FAM$(I))) < MIN THEN MIN = LEN(RTRIM$(FAM$(I))) F$ = FAM$(I) NOM = I END IF NEXT I PRINT "Самая короткая фамилия->"; F$ PRINT "Количество букв в ней->"; MIN; "Порядковый номер->"; NOM END Пример 8. Задан список фамилий. Вывести на экран фамилии, которые заканчиваются на гласную букву. INPUT "Введите количество фамилий-> "; N DIM FAM$(N),F$(N) FOR I = 1 TO N PRINT "Введите фамилию->"; I INPUT FAM$(I) NEXT I J = 0 FOR I = 1 TO N IF INSTR("АИЕОУЯЮЭЫаиеоуяюэы", MID$(FAM$(I), LEN(FAM$(I)))) <> 0 THEN J = J + 1 F$(J) = FAM$(I) END IF NEXT I PRINT "Фамилии, заканчивающиеся на гласную букву->" FOR I = 1 TO J PRINT F$(I) NEXT I END Пример 9. Определить букву, на которую начинается больше всего слов в заданном тексте. DIM a(255) LINE INPUT "Введите текст->"; s$ s$ = " " + s$ FOR i = 2 TO LEN(s$) s1$ = MID$(s$, i, 1) s0$ = MID$(s$, i - 1, 1) IF s1$ <> " " AND s0$ = " " THEN a(ASC(s1$)) = a(ASC(s1$)) + 1 END IF NEXT i FOR i = 31 TO 255 PRINT "i="; i IF a(i) > max THEN max = a(i) st = i END IF NEXT i PRINT "Символ->"; CHR$(st);"Встречается " max; " раз" END
Функция INKEY$ (Input KEY – ввод по ключу) предназначена для считывания символа с клавиатуры: Формат записи INKEY$: INKEY$ Функция INKEY$ возвращает нулевую строку символов, если нет символа для возврата. Для стандартных клавиш INKEY$ возвращает 1-байтовую строку символов, содержащую считанный символ. Пример 10. PRINT "Для выхода нажмите Esc…" DO: LOOP UNTIL INKEY$=CHR$(27) '27 – это ASCII код для Esc Пример 11. В зависимости от нажатой клавиши клавиатуры (Y/N) вывести на экран монитора сообщение "Корректировка данных" или "Расчет". DO PRINT "Будете корректировать данные? (Y/N)" DO p$ = INKEY$ LOOP WHILE p$ ="" K = INSTR("YyНнNnТт", p$) LOOP WHILE K = 0 IF N <= 4 THEN PRINT "Корректировка данных" IF N > 4 THEN PRINT "Расчет"
|