Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
strings.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
654.13 Кб
Скачать

Пример Обработки массива строк Задача “Поиск символов в тексте”

Рассмотрим обработку строк на примере следующей задачи:

С клавиатуры вводится 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. {Конец программы}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]