Лабораторная работа № 6. Обработка строк с использованием операторов цикла.
При выполнении работы необходимо знать:
Особенности работы со строками.
Операторы цикла и уметь применять их при обработке строк.
Уметь составить схему программы (алгоритм) циклической структуры для задачи по обработке строк и записать программу по готовому алгоритму.
Теоретический минимум:
Строки.
Строки – представляют собой последовательность символов, иными словами структуры, состоящие из элементов простого типа (Char).
Значение типа string представляет собой строку длиной от 0 (пустая строка) до 255 символов. При этом нулевой байт строки содержит сведения о текущей длине строки.
Примеры строковых значений:
‘12345’ ‘@#$%^’ ‘TRUE’ ‘АБВГДЕЖЗ’ ‘2007 год’
Следует помнить, что строка ‘12345’ не имеет ничего общего с числом и с ней нельзя производить арифметических действий. Строка ‘TRUE’ также вовсе не является значением типа Boolean.
Пример описания переменных строкового типа:
Var
A: string; {если длина строки не указана, то по умолчанию}
{она считается равной 255 символам}
B: string [80]; {максимальную длину строки можно указать явно}
Текущая длина строки – величина изменяющаяся, определяемая реальными данными.однако она не может превышать максимальную длину, указанную для данной строковой переменной.
Строки занимают промежуточное положение между простыми и структурированными типами данных. Строка – это структура, состоящая из элементов простого типа (Char). И в тоже время к строкам применимы некоторые действия, неприменимые к данным структурированного типа. Например, строку можно ввести с клавиатуры или вывести на экран, воспользовавшись операторами Read(A) и Write(A), где А-переменная строкового типа. Также допустимо сравнивать строки. Эти действия невозможны с другими данными структурированного типа – массивами и записями, обработка которых осуществляется только в цикле.
Обратиться к отдельному символу строки можно, указав имя строковой переменной и порядковый номер символа в строке, например:
A[5]:=’F’; {5-му символу в строке присваивается значение типа Char }
Write(A[33]); {значение 33-го символа строки выводится на экран}
Переменную типа string можно сравнить с другой переменной или константой типа string, используя знаки >, <, >=, <=, <>. Строки сравниваются посимвольно от первого символа. Если все символы строк одинаковы, то строки считаются равными. Если в одинаковых позициях строк находятся разные символы, то большей считается та строка, у которой в этой позиции находится символ с большим кодом.
К строкам применимы некоторые специальные процедуры и функции, приведенные в таблице.
Таблица 9. Стандартные строковые процедуры и функции.
Процедура или функция | Назначение | Тип результата |
Length(x) |
Определяет текущую длину строки х. |
Целое число – количество символов строки х.
|
Delete(x, p, n) | Позволяет удалить часть строки х, начиная с позиции p, длиной n символов. | Строка. |
Pos(x1, x) | Позволяет определить положение подстроки х1 в строке х. | Целое число, номер позиции вхождения подстроки в строку. Если подстрока не найдена, возвращает ноль. |
Copy(x, p, n) | Позволяет скопировать фрагмент строки х, начиная с позиции p, длиной n символов. | Строка. |
Insert (x1, x, n) | Вставка подстроки х1 в строку х, начиная с позиции n. | Строка. |
Val(x, p, n) | Позволяет преобразовать изображение числа х в число, р - переменная, которой присваивается полученное число, n - код ошибки. | Если строка успешно преобразована в число, то код ошибки ноль, если преобразование невозможно, то код ошибки равен номеру позиции в строке, содержащей недопустимый символ. |
Для того, чтобы обработать строку посимвольно от первого символа до последнего, можно применить цикл, например:
For i:=1 to Length(x) do { переменная i перебирает номера символов строки }
If x[i]=’a’ then k:=k+1; { подсчитываем в цикле количество букв ‘а’ в строке }
Задача 6.
Если в строке количество пробелов больше, чем количество запятых, заменить пробелы звездочками, иначе заменить запятые звездочками. Вывести измененную строку на экран.
Математическая формулировка задачи:
Необходимо задать исходную строку с клавиатуры и затем посимвольно обработать ее при помощи цикла. В цикле осуществим подсчет количества пробелов и запятых в строке. После окончания просмотра всей строки можно сравнить полученное количество пробелов и количество запятых.
Как заменить пробелы или запятые символом звездочка? Очевидно, нужно заново просмотреть строку посимвольно в цикле, и как только встретится интересующий нас символ (пробел или запятая), присвоить этому символу новое значение, то есть заменить его символом звездочка.
А лгоритм решения задачи 6:
Текст программы к задаче 6:
Program Ex_6;
Uses Crt;
Label 1;
Var
S: string; { строка }
kl, k2: integer; { количество пробелов и запятых }
i: integer; { текущий номер символа строки}
Begin
ClrScr;
Write(‘Введите строку ’);
Readln(S);
k1:=0; k2:=0;
For i:=1 to Length(S) do { переменная i перебирает номера символов строки }
Begin
If S[i]=’ ’ then k1:=k1+1;
{ подсчитываем в цикле количество пробелов в строке }
If S[i]=’,’ then k2:=k2+1;
{ подсчитываем в цикле количество запятых в строке }
End;
If k1>k2 then begin
For i:=1 to Length(S) do
If S[i]=’ ’ then S[i]:=’*’; { заменяем пробелы на * }
End
Else
If k2>k1 then begin
For i:=1 to Length(S) do
If S[i]=’, ’ then S[i]:=’*’; { заменяем запятые на * }
End
Else goto 1;
Writeln(‘Измененная строка: ’,S);
1: Readln;
End.
- 230401 «Информационные системы»
- 230115 «Программирование в компьютерных системах»
- Лабораторная работа №1. Организация ввода-вывода информации
- Алфавит языка Turbo Pascal.
- Переменные и константы.
- Основные типы переменных.
- Структура программы.
- Оператор присваивания, операторы ввода с клавиатуры и вывода на экран.
- Процедуры управления выводом на экран.
- Компиляция и выполнение программы.
- Лабораторная работа №2. Арифметические выражения. Программирование алгоритмов линейной структуры.
- Арифметические выражения в языке Turbo Pascal.
- Стандартные арифметические функции.
- Генератор случайных чисел.
- Составление алгоритма и программы для решения задачи.
- Лабораторная работа № 3. Программирование алгоритмов разветвленной структуры. Оператор ветвления if … then … else
- Условный оператор if … then … else.
- Составной оператор.
- Лабораторная работа № 4. Программирование алгоритмов разветвленной структуры. Оператор ветвления case.
- Условный оператор Case.
- Лабораторная работа № 5. Программирование алгоритмов циклической структуры с известным числом повторений.
- Оператор циклаWhile.
- Оператор цикла repeat.
- Вложенные циклы
- Оператор перехода
- Лабораторная работа № 6. Обработка строк с использованием операторов цикла.
- Лабораторная работа № 7. Программирование алгоритмов циклической структуры с неизвестным числом повторений.
- Лабораторная работа № 8. Обработка одномерных числовых массивов.
- Лабораторная работа № 9. Обработка двумерных числовых массивов.
- Лабораторная работа № 10. Использование процедур и функций при обработке массивов.
- Лабораторная работа № 11. Тип запись. Массивы записей.
- Лабораторная работа № 12. Обработка информации из файлов последовательного доступа.
- Лабораторная работа № 13. Обработка информации из файлов прямого доступа.
- Лабораторная работа № 14. Модуль программиста. Многомодульный проект.
- Текст модуля программиста к задаче 14.