Головна

Приклад Обробки масиву рядків

  1.  II. Орієнтовна тематика курсових робіт
  2.  III. Акцентування теоретичного моменту по темі «Техніка диференціювання», розгляд прикладів - 8 хвилин
  3.  III. Приблизний перелік контрольних питань для самостійної роботи
  4.  III. Рекомендації до виконання курсової роботи на умовному прикладі
  5.  IV. Акцентування теоретичного моменту по темі «Механічний зміст похідної», розгляд прикладів - 7 хвилин
  6.  IV. Приблизний перелік питань до заліку
  7.  V. Акцентування теоретичного моменту по темі «Геометричний зміст похідної», розгляд прикладів - 17 хвилин

Завдання "Пошук символів в тексті"

Розглянемо обробку рядків на прикладі наступної задачі:

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

Завдання "Пошук слів у рядку і видалення символів"

В якості другого прикладу візьмемо таку задачу: в рядку з слів, що починаються з двох приголосних букв, видалити всі голосні літери.

{

Приклад обробки рядка.

Видаляються всі голосні літери в словах, які починаються

з двох приголосних букв

}

{================================================= ====}

{Функція IsLetter.

Повертає TRUE, якщо Ch є російською буквою.

Інакше повертає False.}

function IsLetter (Ch: char): boolean;

begin

IsLetter: = ch in [ 'А' .. 'Я', 'а' .. 'п', 'р' .. 'я', 'е', 'Е'];

end;

{================================================= ====}

{Функція IsSoglasn.

Повертає TRUE, якщо Ch є російською згодної буквою.

Інакше повертає False.}

function IsSoglasn (ch: char): boolean;

begin

IsSoglasn: = ch in [ 'б', 'в', 'г', 'д', 'ж', 'з', 'ї', 'до', 'л',

'М', 'н', 'п', 'р', 'з', 'т', 'ф', 'х', 'ц',

'Ч', 'ш', 'щ', 'ь', 'ь',

'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'Ї', 'К', 'Л',

'М', 'Н', 'П', 'Р', 'С', 'Т', 'Ф', 'Х', 'Ц',

'Ч', 'Ш', 'Щ', 'Комерсант', 'Ь'];

end;

{================================================= ====}

{Функція IsGlasn.

Повертає TRUE, якщо Ch є російської голосною буквою.

Інакше повертає False.}

function IsGlasn (ch: char): boolean;

begin

IsGlasn: = ch in

[ 'А', 'е', 'е', 'і', 'про', 'у', 'и', 'е', 'ю', 'я',

'А', 'Е', 'Е', 'І', 'О', 'У', 'И', 'Е', 'Ю', 'Я'];

end;

{================================================= ====}

{Функція FindNextWord.

Шукає в рядку S наступне слово, що починається зі знаку Start.

Якщо слово знайдено, то повертається True

і повертається індекс першого символу слова (через BeginWord)

і його довжина (через LengthWord).

Якщо слово не знайдене, повертається False.}

function FindNextWord (const S: String;

Start: Integer;

var BeginWord: Byte;

var LengthWord: Byte): Boolean;

var

i: Integer; {Індекс може вийти за межі 255,

тому Byte використовувати не можна!}

Len: Byte; {Довжина рядка}

Begin

{Обчислюємо довжину рядка}

Len: = length (s);

{Шукаємо початок слова, починаючи зі стартового символу рядка}

i: = Start;

{У циклі просуваємо i вперед по рядку до тих пір,

поки не зустрінеться буква або поки не закінчиться рядок}

while not isLetter (S [i]) and (i <= Len) do

inc (i);

{Зараз i вказує на перший символ знайденого слова}

BeginWord: = i;

{Шукаємо кінець слова}

{Для цього просуваємо i вперед до тих пір, поки не зустрінеться

НЕ БУКВА або поки i не вийде за межі рядка}

while isLetter (S [i]) and (i <= Len) do

inc (i);

{Зараз i вказує на перший символ-роздільник, наступний

за словом (або i вказує на символ за межами кордонів

рядки).

Довжину слова обчислюємо як різницю між індексами його

останнього і першого символів}

LengthWord: = i - BeginWord;

{Якщо обчислена довжина слова більше 0, значить, слово в рядку

знайдено. Повертаємо True.

Інакше - слова в рядку немає. Повертаємо False.}

if LengthWord> 0

then FindNextWord: = true

else FindNextWord: = false;

end;

{================================================= ====}

{Функція StringWithoutGlasn.

Повертає рядок, створену з рядка

S шляхом видалення всіх голосних букв.}

function StringWithoutGlasn (const s: string): string;

var

res: string; {Результат}

i: integer;

begin

res: = ''; {Спочатку результуючий рядок порожня}

for i: = 1 to length (s) do {Потім все символи}

if not IsGlasn (s [i]) then, {Які не є}

res: = res + s [i]; {Голосними буквами,

додаються до рядка}

WordWithoutGlasn: = res; {Отримана рядок повертається}

end;

{================================================= ====}

{Функція DeleteGlasn.

У рядку S у всіх словах, що починаються на дві приголосні букви, видаляються голосні літери.

Отримана рядок повертається.}

function DeleteGlasn (const s: String): String;

var

newstr: string; {Новий рядок}

i: integer; {Лічильник}

beg: byte; {Індекс початку слова}

len: byte; {Довжина слова}

w: string; {Виділене слово}

begin

newstr: = ''; {Новий рядок спочатку порожня}

{У рядку S шукаємо все слова по черзі}

I: = 1;

while FindNextWord (S, i, beg, len) do {Шукаємо чергове

слово}

begin

{До нового рядка причіплюємо розділювачі,

стоять перед черговим словом}

newstr: = newstr + Copy (S, i, beg-i);

{Знайдене слово копіюємо в W}

w: = Copy (s, beg, len);

{Якщо перші дві букви слова є приголосними}

if IsSoglasn (w [1]) and IsSoglasn (w [2]) then

newstr: = newstr + WordWithoutGlasn (w) {До рядку

причіплюємо слово без голосних букв}

else

newstr: = newstr + w; {Інакше - причіплюємо

незмінена слово}

I: = beg + len; {Пошук чергового слова почнемо

з символу, наступного за кінцем цього слова}

end;

DeleteGlasn: = newstr; {Повертаємо створену нову рядок}

end;

{Тіло програми}

var

s: string; {Троки}

begin

s: = 'В словах видалити всі голосні літери';

s: = DeleteGlasn (s);

writeln (s); {Буде виведено 'В слвх видалити вс глсн літери'}

end.

лабораторна робота "обробка рядків"




 Власенко О. Ф., Бєляєва І. В. |  Символьний тип char |  Приклади використання стандартних процедур і функцій обробки символів |  Вбудований тип STRING |  Операції над рядками string |  Стандартні процедури та функції для роботи з рядками string |  процедура Val |  безлічі |  Операції над множинами |

© 2016-2022  um.co.ua - учбові матеріали та реферати