Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример 25. Определить количество слов в тексте




Выделение отдельного слова из текста

Рассмотрим алгоритм многократного удаления знака по условию.

Удаление символов

Особого внимания заслуживают задачи, в которых переменную необходимо изменять несколько раз в зависимости от условия.

Эти алгоритмы предполагают использование цикла и операторов логической передачи управления, хотя принцип действия остается неизменным — формирование новой переменной путем сложения частей

Пример 21. В тексте A$ после каждого пробела вставить B$.

a$= "Белеет парус одинокий"

PRINT a$

B$ = "11"

x = LEN(a$)

FOR i = 1 TO x

IF ASC(MID$(a$, i, 1)) = 32 THEN

a$ = MID$(a$, 1, i) + B$ + MID$(a$, i + 1, x)

END IF

NEXT i

PRINT

PRINT a$

Результат. Белеет 11парус 11одинокий

Работа программы. В цикле анализируется АSСП-код очередного выделенного символа на равенство 32 (код пробела). Если равенство выполняется в ходе 1-й итерации цикла, то переменной А$ присваивается сумма трех компонентов — левая часть исходной А$ (знаки с номерами от 1 до 1) + В$ + правая часть AS (знаки от 1 до х).

Удаление символов проходит путем записи в новую текстовую переменную знаков исходной строки, расположенных до удаляемой части и после нее.

Пример 22. Удалить пятый символ из A$.

a$ = "123456789"

n = 5

x = LEN(a$)

a$ = MID$(a$, 1, n - 1) + MID$(a$, n + 1, x)

PRINT a$

Результат: 12346789

Работа программы. Первое значение A$ образуется путем сложения знаков 1-4 (1, N - 1) и 6-9 (N+1, x) исходной строки. Если удаляется не один знак, а целый блок знаков BS, то во втором MID$ номер первого элемента правой части запишется N + LEN(B$) и команда в целом будет иметь вид

MID$(A$, N+LEN(B$)

Такие задачи решаются с помощью цикла.

Пример 23. Удалить все запятые в строке А$.

a$ = ",,,1,2,3,4,5,,,,"

PRINT a$ x = LEN(a$)

FOR i = 1 TO x

IF MID$(a$, i, 1) = "," THEN

a$ = MID$(a$, 1, i - 1) + MID$(a$, i + 1, x)

i = i – 1 'Уменьшаем счетчик i

END IF

NEXT i

PRINT a$

Результат:,,,1,2,3,4,5,,,, 12345 Работа программы. В значение A$ специально введено несколько блоков идущих друг за другом запятых. Это сделано для того, чтобы продемонстрировать частный случай задач на удаление. Если удаляются знаки, стоящие последовательно по одному, то необходимо уменьшать счетчик цикла па количество удаляемых знаков.

Текст состоит из отдельных слов. Слово – это последовательность букв, заключенных между двумя символами, не являющимися буквами.

Алгоритмы выделения слов, как правило, основаны на поиске знаков – разделителей. Ими могут быть пробелы, знаки пунктуации, специальные символы.

a$ = " Отговорила роща золотая Березовым, веселым языком "

' выделяем i-й знак и проверяем буква ли это

FOR i = 1 TO LEN(a$)

tmp$ = MID$(a$, i, 1): isletter = 0

IF 128 <= ASC(tmp$) AND ASC(tmp$) <= 175 THEN isletter = 1

IF 224 <= ASC(tmp$) AND ASC(tmp$) <= 239 THEN isletter = 1

IF 65 <= ASC(tmp$) AND ASC(tmp$) <= 90 THEN isletter = 1

IF 97 <= ASC(tmp$) AND ASC(tmp$) <= 122 THEN isletter = 1

' Если это буква, то формируем слово

' Иначе переходим к формированию след слова

IF isletter = 1 AND i < LEN(a$) THEN

T$ = T$ + tmp$

ELSE

IF LEN(T$) > 0 OR isletter = 1 THEN

IF i = LEN(a$) AND isletter = 1 THEN

T$ = T$ + tmp$ ' Теперь можно проводить анализ очередного слова Т$ PRINT T$ L = L + 1

T$ = "" ' Обнулять Т$ обязательно

END IF

END IF

NEXT i

PRINT " Всего слов "; L

Результат: Отговорила роща золотая Березовым веселым языком Всего слов 6

Работа программы. Приведенный алгоритм выполняет следующие операции: выделяет очередной символ; если это буква, то начинает накапливать очередное слово; если это не буква — переходит к анализу полученного слова и формированию следующего.

Четыре оператора IF в начале цикла предназначены для определения принадлежности выделенного знака к буквам русского или английского алфавита. Действие операторов основано на анализе ASCII-кода каждого знака. Если знак является буквой, то переменной isletter присваивается значение 1, в

противном случае — 0.

Пример 26. Сформировать массив слов Word$, входящих в текст A$. Определить слова с максимальным и минимальным количеством букв.

CLS 'Очистка экрана

DIM word$(LEN(a$))

a$ = "Еще светло перед окном, В разрывы облак солнце блещет"

min = LEN(a$)

FOR i = 1 TO LEN(a$)

' выделяем i-й знак и проверяем буква ли это

' Если это буква, то формируем слово

'Теперь можно проводить анализ очередного слова Т$

K = K + 1: word$(K) = T$ 'формируем массив слов

' находим слово с max кол-вом букв

IF LEN(T$) > max THEN max = LEN(T$): wmax$ = T$

' находим слово с min кол-вом букв

IF LEN(T$) < min THEN min = LEN(T$): wmin$ = T$

T$ = "" ' Обнуляем Т$

END IF

END IF

NEXT i

PRINT "Слово с кол букв max "; wmax$

PRINT " Слово с кол букв min "; wmin$

PRINT "Массив слов"

FOR i = 1 TO K

PRINT word$(i)

NEXT i

END

Результат

Слово с кол букв max разрывы

Слово с кол букв min В

Массив слов

Еще

светло

перед

окном,

В

разрывы

облак

солнце

блещет

Работа программы. Алгоритм выделения слова из предыдущего примера приведен сокращенно. В первой сроке программы происходит объявление массива Word$. Рассчитывать, сколько нем будет слов не рационально. Для этого пришлось бы анализировать исходную строку и, получив количество слов, и объявить массив, а для его заполнения выполнить алгоритм заново. Поэтому предполагаем, что в массиве Word$ Len(a$) элементов.




Поделиться с друзьями:


Дата добавления: 2015-05-29; Просмотров: 551; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.068 сек.