
- •О.Ф. Власенко, и.В. Беляева символы и строки в языке turbo pascal
- •Оглавление
- •Введение
- •Символьный тип Символьный тип char
- •Функция Ord
- •Функция Chr
- •Функция Succ
- •Функция Pred
- •Функция UpCase
- •Процедура Inc
- •Процедура Dec
- •Примеры использования стандартных процедур и функций обработки символов
- •Строки Встроенный тип string
- •Операции над строками string
- •Правила сравнения двух строк
- •Стандартные процедуры и функции для работы со строками string
- •Процедура Delete
- •Процедура Insert
- •Процедура Str
- •Процедура Val
- •Функция Length
- •Функция Concat
- •Функция Copy
- •Функция Pos
- •Примеры использования стандартных процедур и функций обработки строк
- •Множества
- •Операции над множествами
- •Пример использования множеств
- •Пример Обработки массива строк Задача “Поиск символов в тексте”
- •Задача “Поиск слов в строке и удаление символов”
- •Лабораторная работа “обработка строк” Цель работы
- •Общее задание
- •Простые варианты
- •Средние варианты
- •Сложные варианты
- •Список литературы
- •Символы и строки в языке turbo pascal
- •432027, Г. Ульяновск, Сев. Венец, 32.
Пример Обработки массива строк Задача “Поиск символов в тексте”
Рассмотрим обработку строк на примере следующей задачи:
С клавиатуры вводится n строк (n<=10). Каждая строка содержит не более 70 символов. Необходимо найти и вывести все гласные буквы (без повторений), которые встретились в этих строках.
Решим эту задачу в соответствии с процедурным подходом, то есть разобьем решение на набор процедур и функций. Постараемся сделать процедуры и функции как можно более универсальными, чтобы их можно было использовать в других подобных задачах.
В результате анализа задачи в ней были выделены следующие процедуры:
1. Ввод массива строк - ReadStrings.
2. Вывод массива строк - PrintStrings.
3. Определение множества символов в массиве строк - GetAllChars.
4. Вывод массива строк с подсветкой символов, входящих в указанное множество - PrintColorStrings.
5. Вывод множества символов - WriteSetChar.
6. Ожидание нажатия любой клавиши - WaitPressed.
Имея такой набор процедур, решить нашу задачу очень просто. Для этого достаточно ввести множество русских гласных букв.
Программа:
{
Вводится не более 10 строк.
Ищутся и выводятся на экран гласные буквы, находящиеся
во введенных строках.
}
uses crt; {В программе будут использоваться средства
консольного ввода-вывода, в том числе процедуры
textcolor и clrscr, и функции readkey}
Const
MaxLengthString = 70; {Максимальная длина строки}
MaxNumberStrings = 10; {Максимальное количество строк}
Type
TString = string[MaxLengthString]; {Строка, в которой может
храниться не более MaxLengthString символов}
SetChar = Set of char; {Множество символов}
ArrayTString = array [1..MaxNumberStrings] of TString;
{Массив строк}
{Процедура ReadString.
Ввод строк в массив str. N - количество реально введенных строк.}
procedure ReadStrings(var str: ArrayTString;
var N: Integer );
var
s : TString; {Строка для ввода}
begin
clrscr; {Очистка экрана}
{Вывод приглашения к вводу}
textcolor(LightGray); {Установка цвета для выводимого
на экран текста}
writeln;
writeln('Введите не более ', MaxNumberStrings,
' строк.');
writeln('Конец ввода - пустая строка:');
{Ввод строк}
n:=0; {Вначале введенных строк нет}
repeat
{Вывод номера вводимой строки}
textcolor(DarkGray); {Установка темно-серого цвета}
write(n+1,'> '); {Вывод номера - темно-серым цветом}
{Ввод строки}
textcolor(LightGray); {Установка серого цвета}
readln(s); {Ввод строки - серым цветом}
if s <> '' then {Если введена непустая строка}
begin
inc(n); {То вписываем ее в массив SS}
str[n] := s;
end;
until (n = MaxNumberStrings) or (s = ''); {Выход из цикла
ввода либо после ввода 10 строк,
либо после ввода пустой строки}
end;
{Процедура PrintStrings.
Выводятся на экран строки из массива str.
N - количество строк в массиве str.}
procedure PrintStrings(const str: ArrayTString;
N: Integer );
var
i: integer;
begin
clrscr; {Очистка экрана}
textcolor(LightBlue); {Цвет вывода - голубой}
writeln;
writeln('Вы ввели ', n, ' строк(у,и). Вот они:');
for i := 1 to n do
begin
{Номер строки выводится голубым цветом}
textcolor(LightBlue);
write(i:2, '> ');
{Сама строка выводится серым цветом}
textcolor(LightGray);
writeln( str[i] );
end;
end;
{Процедура GetAllChars.
Получаем все символы.
Заносит все символы, встретившиеся в массиве строк str,
в множество AllChars. N - количество строк в массиве str.}
procedure GetAllChars(const str: ArrayTString; N: Integer;
var AllChars: SetChar);
var
i, j : integer;
begin
AllChars := []; {Инициализация множества}
for i := 1 to n do {Для всех введенных строк}
for j := 1 to length( str[i] ) do {Для всех символов
i-ой строки}
AllChars := AllChars + [ str[i,j] ]; {Добавляем по
очереди все символы к множеству AllChars}
end;
{Процедура PrintColorStrings.
Выводятся на экран строки из массива str.
N - количество строк в массиве str.
При выводе строк ЦВЕТОМ помечаются те символы,
которые есть в множестве S. }
procedure PrintColorStrings(const str: ArrayTString;
N: Integer;
var S: SetChar );
var
i, j: integer;
begin
writeln;
textcolor(LightBlue); {Цвет - голубой}
writeln('Гласные буквы выделены цветом');
{Проход по всем строкам массива str}
for I := 1 to n do
begin
{Вывод номера строки голубым цветом}
textcolor(LightBlue);
write(i:2,'> ');
{Проход по всем символам i-ой строки}
for j := 1 to length(str[i]) do {Length(str[i]) - количество
символов в строке str[i]}
begin
if str[i,j] in S {Если j-ый символ i-ой строки
имеется в множестве S}
then textcolor(LightGreen) {Тогда он выводится
светло-зеленым }
else textcolor(DarkGray); {Иначе – темно-серым}
write(str[i,j]); {Выводится символ}
end;
writeln; {После вывода всех символов i-ой строки
переходим на следующую строку}
end; {Заканчивается цикл по строкам}
end;
{Процедура WriteSetChar.
Процедура выводит символы, содержащиеся в множестве S,
на экран.
S – множество.
Message - строка, выводимая перед выводом множества.
ColorMessage - цвет текста сообщения Message.
ColorSet - цвет символов множества S}.
procedure WriteSetChar( message: string; S: SetChar;
ColorMessage, ColorSet: Integer);
var
C: char; {Выводимый символ}
begin
{Вывод сообщения}
textcolor(ColorMessage); {Цвет текста сообщения}
Write(message);
{Вывод символов, хранящихся в множестве}
textcolor(ColorSet); {Цвет символов множества}
For c := #0 to #255 do
{Если символ есть в множестве, он выводится}
If c in S then write(c, ' ');
Writeln;
end;
{Процедура WaitPressed.
Выводит сообщение message на экран.
ColorMessage - цвет символов сообщения.
После вывода сообщения ждет нажатия любой клавиши. }
procedure WaitPressed( message: string;
ColorMessage: Integer);
begin
textcolor(ColorMessage); {Установить цвет текста}
write(message); {Вывод сообщения}
readkey; {Ожидание нажатия любой клавиши}
writeln;
end;
const
{Множество всех гласных букв}
AllGlasn : SetChar = ['а', 'я', 'у', 'ю', 'э', 'е', 'о',
'ё', 'и', 'ы',
'А', 'Я', 'У', 'Ю', 'Э', 'Е', 'О',
'Ё', 'И', 'Ы' ];
var
ArrayStr : ArrayTString; {Массив строк}
N : integer; {Количество введенных строк}
FoundChars : SetChar; {Все найденные в ArrayStr символы }
FoundGlasn : SetChar; {Все найденные в ArrayStr
ГЛАСНЫЕ символы }
begin {Начало тела программы}
{Ввод строк}
ReadStrings(ArrayStr, N );
{Вывод строк}
PrintStrings(ArrayStr, N );
{Получение всех символов, введенных в строки ArrayStr}
GetAllChars(ArrayStr, N, FoundChars);
{Получаем все гласные символы, находящиеся в строках ArrayStr }
FoundGlasn := FoundChars * AllGlasn;
{Печатаем введенные символы с выделением гласных букв}
PrintColorStrings(ArrayStr, N, FoundGlasn);
{Печатаем гласные буквы, встречающиеся в строках ArrayStr}
WriteSetChar('Во введенных строках присутствуют' +
' гласные буквы: ',
FoundGlasn, Red, LightRed);
{Ждем нажатия любой клавиши}
WaitPressed('Для завершения работы программы нажмите' +
' любую клавишу...', LightBlue);
end. {Конец программы}