Информатика -продвинутый курс


ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ


Кроме числовых значений переменные в Бейсике могут принимать значения в виде строки символов. Символьные значения (константы) заключаются в кавычки " ".

Имя символьной (строковой) переменной отличается от обычной числовой переменной добавлением справа специального символа, чаще знака доллара $, например, AS, Fl$, MaxS. Над символьными переменными допустима операция сложения (склейка строк символов); могут быть использованы функции и процедуры обработки символьных величин.

Начнем с примеров программ, аналогичных приведенным ранее на языке Паскаль.

Программа 68 (см. программу 11)

10 ' ******* Количество гласных в тексте ************

20 с$ =

"аеиоуыэюяАЕИОУЫЭЮЯ"

30 INPUT "Введите текст"; а$

40 n » О

50 FOR k = 1 ТО LEN(c$)

6t> b$ = MID$(c$, k, 1)

70 FOR i = 1 TO LEN(a$)

80 IF b$ = MID$(a$, i, 1) THEN n = n + 1



90 NEXT i

100 NEXT k

110 PRINT "Количество гласных равно", n

120 END

Здесь использована строковая функция MID(a$,ij) - вырезка подстроки из строки а$, где первый аргумент - исходная строка, второй - начальная позиция подстроки, третий - длина подстроки. Функция LEN(aS) - длина текста.

В следующей программе дополнительно использованы строковые функции LEFT$(a$,i) - выделение подстроки длиной i от левого края заданной строки и RIGHT$(a$,i) - то же, но с правого края.

Программа 69 (см. программу 12)

10 ' ******* Замена в тексте sqr на ехр ************

20 INPUT "Введите текст"; а$

30 FOR i = 1 ТО LEN(a$) - 2

40 IF MID$(a$, i, 3) О "THEN GOTO 60

50 a$ = LEFT$(a$, i -1) + "+ RIGHT$(a$, LEN(a$) - i - 2)

60 NEXT i

70 PRINT a$

80 END

Приведем еще несколько примеров.

Программа 70

10 ' ******* игра клавиатурный тренажер ************

12 DATA "азбука", "год"," .23*45/56", letter, pc-ibm

15 DATA

"дом-home", "Красноярск", "Омск", "Пермь", "Воронеж"

20 FOR i = 1 ТО 10

30 READ a$(i)

40 NEXT i


60 FOR i = 1 TO 10

70 CLS : PRINT : PRINT TAB(IO); a$(i);

100 PRINT : PRINT : PRINT

110 PRINT "введите слово и нажмите <ВК>";

120 LOCATE 8, 5 : х » TIMER : INPUT b$ : CLS

130 у = TIMER : PRINT : n =LEN(a$(i))

140 IF a$(i) <> b$ THEN 190

150 PRINT USING "###.#<"; (y - x) / П;

160 PRINT "сек. на один символ": GOTO 200

170 PRINT : PRINT "слово набрано неверно"

180 FOR m = 1 ТО 5000 : NEXT m

190 NEXT i

Функция TIMER возвращает текущее время системной среды в секундах. В строке 180 предусмотрен пустой цикл для осуществления временной задержки в исполнении программы.

Использование функций LEFTS(aS,n) и MID$(a$,n,k) еще раз продемонстрировано в следующем примере. Здесь же использованы математические функции INT(x) -целая часть числа х, RND(x) - случайное число в интервале от 0 до 1. В программе задается массив (оператор DIM aS(k)) из пяти слов, представленных в списке DATA (30 и 40 строки). Случайным образом выбирается одно из них и предлагается его угадать вводом подходящих символов.

Программа 71

5 ' *************** угадай слово *********************

10 k = 5

15 DIM a$(k)

30 DATA

"вечер","информатика","университет"

40 DATA

"эхо","тра-ля-ля"

50 FOR i = 1 ТО k

60 READ a$ (i)

70 NEXT i

80 CLS

90 r = INT(k * RND(-TIMER)) + 1

100 n = LEN(a$(r))

110 PRINT "Я задумал слово из "; n; "букв"

120 LOCATE 5, 20: PRINT LEFT$(s$, n) Ш

130 t = о

т

140 DO • 150 LOCATE 8, 12: PRINT "введи

букву" Щ

160 INPUT h$

170 у = О

180 FOR i = 1 ТО n ] 190 IF h$ = MID$(a$(r), i, 1) THEN | 200 LOCATE 5, 19 + i: PRINT h$: | 210 t=t+l:y=l | 220 END IF |

230 NEXT i

240 LOCATE 8, 12: PRINT " "

250 IF у О 1 THEN LOCATE,10, 15: PRINT "нет такой буквы"

260 FOR m = 1 ТО 5000 : NEXT m 270 LOCATE 10, 15: PRINT " " |

280 LOOP WHILE t 0 n I 290 LOCATE 13, 13: PRINT "угадал, поздравляю!" f

Обратим внимание на использованный в данной программе цикл DO-LOOP-WHILE, который допустим в некоторых версиях Бейсика (QBASIC, Turbo-BASIC).


Содержание раздела