На Горох
Информатика, 10 класс

§ 5. Процедуры и функции обработки строковых переменных

"Информатика. Учебное пособие для учреждений общего среднего образования с русским языком обучения", Г.А. Заборовский, А.Е. Пупцев

Объяснение темы В оглавлении: § 5. Процедуры и функции обработки строковых переменных

Кратко о теме

Строковая переменная хранит текст, а функции и процедуры помогают исследовать и редактировать его в программе. Length считает символы, Copy возвращает фрагмент, Pos ищет подстроку, Insert добавляет текст, Delete удаляет его. Главное различие: функция возвращает значение, а процедура изменяет строку-переменную. Позиции символов отсчитываются с 1, поэтому правильный выбор позиции и количества символов определяет результат операции.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Строковая переменная — переменная типа string, которая хранит последовательность символов. В строке могут быть буквы, цифры, пробелы и знаки пунктуации, причём каждый из них занимает своё место. Такой тип нужен, когда программа работает с именами, сообщениями, командами или другими текстовыми данными. Например, строка может содержать запись 'Урок 1!'.

Функция обработки строки — средство, которое получает строковые данные и возвращает результат, не изменяя исходную строку. Length сообщает число символов, Copy возвращает выбранный фрагмент, а Pos находит позицию подстроки. Функции нужны, когда требуется узнать что-то о тексте или получить его часть для дальнейших вычислений. Их результат можно вывести, присвоить переменной либо включить в выражение.

Процедура обработки строки — средство, которое изменяет строковую переменную, переданную ей как параметр. Insert добавляет фрагмент в указанную позицию, а Delete удаляет заданное число символов. Процедуры используют, когда нужно отредактировать сам текст, а не только получить сведения о нём. Поэтому после вызова следует проверять уже изменённое значение переменной.

Как это устроено

Строковую переменную объявляют с типом string, а значение присваивают оператором присваивания. Текстовое значение заключают в одинарные кавычки, например S := 'Привет';, потому что кавычки показывают программе границы текста. Пустую строку записывают как '', если пока нет символов или текст нужно очистить. При присваивании новое значение заменяет прежнее содержимое переменной.

Length(S) определяет длину строки, то есть количество находящихся в ней символов. Результат — число, а не позиция последнего символа: если длина равна 5, в строке пять символов. Пробел тоже учитывается, потому что он занимает отдельное место между символами. Это полезно, например, при проверке длины введённого имени или сообщения.

Copy(S, позиция, количество) берёт часть строки, начиная с указанной позиции, и возвращает не более заданного числа символов. Нумерация начинается с 1, поэтому Copy(S, 1, 3) выбирает первые три символа. Исходная переменная при этом остаётся прежней: результат функции можно сохранить отдельно. Pos(подстрока, S) ищет первое вхождение подстроки и возвращает его начальную позицию; значение 0 означает, что совпадения нет.

Insert(фрагмент, S, позиция) помещает фрагмент в строку S перед символом с заданной позицией. Delete(S, позиция, количество) удаляет из S указанное число символов, начиная с этой позиции. В отличие от функций, эти процедуры изменяют исходную строку, поэтому дальнейшие действия выполняются уже с новым текстом. Если после удаления нужно вставить замену, её позицию определяют относительно изменённой строки.

Вместо текста в параметрах можно указывать строковые переменные, а вместо позиции и количества — целые числовые значения или переменные с такими значениями. Например, результат Length(S) можно использовать в проверке, а Copy(S, 2, 3) присвоить другой строковой переменной. Функция возвращает значение, поэтому её вызов встраивают в выражение или оператор присваивания. Процедуры вызывают отдельной командой, указывая изменяемую строку и остальные параметры в установленном порядке.

Средства обработки строк

СредствоВидНазначениеРезультат или изменение
Length(S)ФункцияПодсчитать число символов в SВозвращает длину строки
Copy(S, позиция, количество)ФункцияПолучить фрагмент строкиВозвращает фрагмент, S не меняется
Pos(подстрока, S)ФункцияНайти первое вхождение подстрокиВозвращает позицию или 0
Insert(фрагмент, S, позиция)ПроцедураВставить фрагмент в строкуИзменяет S
Delete(S, позиция, количество)ПроцедураУдалить символы из строкиИзменяет S

Чтобы выбрать средство, сначала определите, нужно ли получить сведения или изменить текст. Затем проверьте порядок параметров и отсчитайте позицию с единицы. Если применяется функция, используйте её возвращаемое значение; если процедура — оцените новое содержимое строки.

Разбор задач

Длина и первые символы строки

Условие: для строки S := 'Информатика' определить длину и получить первые четыре символа. Сначала нужно установить, сколько символов содержит вся запись, а затем выбрать фрагмент от начала. Пробелов в этой строке нет, но при подсчёте каждый символ всё равно учитывается отдельно.

  1. Вызов Length(S) считает символы слова «Информатика»: их 11.
  2. Для первых четырёх символов используем Copy(S, 1, 4): позиция 1 означает начало строки, а 4 — количество символов.
  3. Результат Copy можно вывести или сохранить в отдельной переменной; значение S останется прежним.

Ответ: длина строки равна 11, первые четыре символа — 'Инфо'. Начальная позиция в Copy равна 1, а не 0. Если бы начать с позиции 2, первый символ в результат не попал бы.

Поиск подстроки

Условие: в строке S := 'программирование' найти позицию подстроки 'мир' и учесть случай отсутствия. Функция Pos возвращает позицию первого символа найденного совпадения, а не количество букв до него. Поэтому полезно проверить слово по символам слева направо. Отдельная проверка результата нужна, чтобы программа могла обработать отсутствие совпадения.

  1. Вызов Pos('мир', S) проверяет последовательность символов «м», «и», «р».
  2. В строке подходящая последовательность начинается с восьмого символа: «м» стоит на позиции 8, «и» — на 9, «р» — на 10.
  3. Сохраняем или проверяем результат: если Pos вернула 0, подстроки нет; иначе полученное число указывает её позицию.

Ответ: Pos('мир', S) возвращает 8. Если изменить S так, что в ней не будет последовательности «мир», результатом станет 0. Такую проверку удобно применять перед извлечением или редактированием найденного фрагмента.

Замена фрагмента

Условие: в строке S := 'Книга' заменить фрагмент 'ниг' на 'омпьютер' процедурами Delete и Insert. Искомый фрагмент занимает позиции со 2-й по 4-ю, поэтому удалять нужно три символа, начиная с позиции 2. После удаления остаётся 'Ка', и вставку следует выполнять в позицию 2. Такой порядок сохраняет первую и последнюю буквы исходного слова.

  1. Выполняем Delete(S, 2, 3): удаляются «ниг», строка становится 'Ка'.
  2. Выполняем Insert('омпьютер', S, 2): новый фрагмент помещается перед буквой «а».
  3. Проверяем итог: перед вставленным фрагментом осталась «К», после него — «а».

Ответ: после обеих процедур S содержит 'Компьютера'. Удаление меняет длину строки, поэтому при замене позицию вставки определяют по обновлённому содержимому. Здесь начало остаётся на позиции 2, поскольку удалённый фрагмент начинался именно там.

Типичные ошибки

Ошибка: считать, что символы нумеруются с нуля. Такое ожидание часто появляется из-за нумерации элементов в некоторых языках программирования, но строковые операции Паскаля начинают отсчёт с 1. Проверьте себя на коротком слове: первый символ находится в позиции 1, второй — в позиции 2. Перед Copy, Insert или Delete выпишите позиции нужных букв.

Ошибка: путать длину строки с позицией последнего символа или не учитывать пробелы. Это происходит, когда длину воспринимают как номер, а пробел — как промежуток, не являющийся символом. Length считает все символы, включая пробелы, а в непустой строке позиция последнего символа обычно совпадает с длиной. Для проверки пересчитайте символы вместе с пробелами и сравните результат с Length.

Ошибка: ожидать, что Copy изменит исходную строку. Copy — функция, и она возвращает фрагмент, который можно присвоить переменной, вывести или использовать в выражении. Если результат никуда не направить, содержимое S не станет короче или иначе не изменится. Проверьте, куда записан результат вызова, и сравните исходную переменную до и после операции.

Ошибка: перепутать порядок параметров Insert и Delete либо принять процедуру за функцию. Причина — похожие названия операций и то, что обе работают со строкой; однако Insert получает сначала добавляемый фрагмент, а Delete — изменяемую строку. Функции возвращают результат, процедуры меняют строку-переменную. Чтобы проверить вызов, сверьте порядок параметров с записью операции и выясните, ожидается ли возвращаемое значение.

Связь с другими темами

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

Что запомнить

  • Строка — последовательность символов, включая пробелы.
  • Нумерация символов в строке начинается с 1.
  • Length возвращает длину строки.
  • Copy возвращает фрагмент строки.
  • Pos возвращает позицию найденной подстроки, а при отсутствии — 0.
  • Insert и Delete изменяют строку-переменную.

Частые вопросы по теме

С какого числа начинается отсчёт позиции символа в строке?

С позиции 1: это первый символ строки. Поэтому при работе с Copy, Pos, Insert и Delete нужно отсчитывать символы, начиная с единицы.

Учитывает ли Length пробелы?

Да, пробел — такой же символ строки, как буква или знак препинания. Каждый пробел увеличивает длину на 1.

Что возвращает Pos, если подстрока не найдена?

Функция возвращает 0. Это значение позволяет программе отличить отсутствие подстроки от её появления в строке.

Изменяет ли Copy исходную строку?

Нет, Copy возвращает выбранный фрагмент, но не меняет исходную строку. Результат можно присвоить другой переменной или использовать в выражении.

Чем процедура обработки строки отличается от функции?

Функция вычисляет и возвращает значение, например длину строки или позицию подстроки. Процедура, например Insert или Delete, изменяет переданную строковую переменную.

Спросить по теме параграфа

§ 5. Процедуры и функции обработки строковых переменных

Учебник

Оглавление →
Предмет
Информатика
Класс
10 класс
Учебник
"Информатика. Учебное пособие для учреждений общего среднего образования с русским языком обучения", Г.А. Заборовский, А.Е. Пупцев