Планирование уроков на учебный год (по учебнику К.Ю. Полякова, Е.А. Еремина, полный углубленный курс, 4 часа в неделю)



Уроки 97 - 104
Символьные строки. Функции для работы с символьными строками
§66. Символьные строки






Содержание урока

Что такое символьная строка?

Операции со строками

Поиск в строках

Пример обработки строк

Преобразования число ↔ строка

Строки в процедурах и функциях

Рекурсивный перебор

Сравнение и сортировка строк

Вопросы и задания

Задачи


Строки в процедурах и функциях


Строки можно передавать в процедуры и функции как аргументы (значения параметров), а также возвращать как результат функций. Построим процедуру, которая заменяет в строке s все вхождения слова-образца wOld на слово-замену wNew (здесь wOld и wNew — это имена переменных, а выражение «слово wOld» означает «слово, записанное в переменную wOld»).

Сначала разработаем алгоритм решения задачи. На первый взгляд кажется, что можно написать такой алгоритм на псевдокоде:

Однако такой алгоритм работает неверно, если слово wOld входит в состав wNew, например, нужно заменить '12' на 'А12В' (покажите самостоятельно, что это приведет к зацикливанию).

Чтобы избежать подобных проблем, попробуем накапливать результат в другой символьной строке res, удаляя из строки s уже обработанную часть. Предположим, что на некотором шаге в оставшейся части строки s обнаружено слово wOld (рис. 8.13, а).

Рис. 8.13

Рис. 8.13

Теперь нужно выполнить следующие действия:

1) ту часть строки s, которая стоит слева от образца, «прицепить» в конец строки res (рис. 8.13, б);
2) «прицепить» в конец строки res слово-замену wNew (рис. 8.13, в);
3) удалить из строки s начальную часть, включая найденное слово-образец (рис. 8.13, г).

Далее все эти операции (начиная с поиска слова wOld в строке s) выполняются заново до тех пор, пока строка s не станет пустой. Если очередное слово-образец найти не удалось, вся оставшаяся строка s приписывается в конец строки-результата, и цикл заканчивается.

В начале работы алгоритма в строку res записывается пустая строка ' ', не содержащая ни одного символа. В таблице 8.3 приведён протокол работы алгоритма замены для строки '12.12.12', в которой нужно заменить слово '12' на 'А12В'.

Теперь можно написать процедуру на школьном алгоритмическом языке. Так как она должна менять строку s, эта строка должна быть одновременно аргументом и результатом (в школьном алгоритмическом языке — аргрез), а старое и новое слова — это просто аргументы (арг).

Дадим некоторые пояснения к программе. Переменная р — это номер первого символа первого найденного слова-образца wOld, а в переменной lеn записана длина этого слова. Если после поиска слова значение р меньше нуля (образец не найден), происходит выход из цикла:

Если р > 1, то слева от образца есть какие-то символы, и их нужно «прицепить» к строке res:

Условие р+lеn>длин (s) означает, что образец стоит в самом конце слова, при этом остаток строки s — пустая строка.

В конце программы результат записывается на место исходной строки s.

Приведём пример использования процедуры:

Построенную выше процедуру можно легко превратить в функцию. Для этого нужно:

• в заголовке функции указать, что она возвращает строку (добавить ключевое слово лит);
• все параметры должны быть аргументами (нужно убрать аргрез и арг);
• поскольку в школьном алгоритмическом языке нельзя менять аргументы внутри процедуры, назовём первый параметр (исходную строку) s0, и введём дополнительную переменную s для работы со строкой в процедуре;
• в конце нужно записать результат во встроенную переменную знач, а не в s.

Ниже показаны все изменённые части подпрограммы:

Вызывать функцию можно таким образом:



Следующая страница Рекурсивный перебор



Cкачать материалы урока







Наверх