Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
озробили: Волик О.Ф., Кащеєва О.В., Мормуль М.Ф. 15, 2014
Лабораторна робота № 6
Тема. Програмування обробки рядків та символів.
Мета: навчитися створювати програми обробки рядків та символів.
Порядок виконання роботи
Теоретичні відомості
Загальні відомості.
Рядок це послідовність символів, обмежена апострофами. Для опису даних рядкового типу використовується зарезервоване слово string.
Синтаксис опису рядкового типу:
Type <імя типу> = string[максимальна довжина рядка];
Var <ідентифікатор> : <імя типу>;
Можливий опис рядкової змінної і без визначення типу:
Var <ідентифікатор> : string[максимальна довжина рядка];
Довжина рядка (кількість символів у рядку) може динамічно змінюватися від 1 до 255. Нульовий байт рядка вміщує інформацію про його довжину. Якщо максимальна довжина рядка не указана явно в описі типу, вона вважається рівною 255 символів.
Приклади визначення рядкових змінних.
Type
Address = string; {довжина рядка 255 символів}
Processor = string[20];
Var
House : Address;
Intel : Processor;
Book : string[80]; {опис рядкової змінної без визначення типу}
Рядкові змінні не можуть бути селекторами в операторі вибору case.
Рядкові дані можуть також використовуватися як константи:
Const
Author =Ніклаус Вірт;
Операції з рядками.
Операції конкатенації та відношення.
Для рядкових даних визначена операція конкатенації (+), яка обєднує декілька рядків в один результуючий рядок. Довжина результуючого рядка не повинна перевищувати 255 символів.
Приклад.
St1:=Процесор;
St2:= ;
St3:=Athlon2700;
St1:=St1+St2+St3;
В результаті операції буде отриманий результуючий рядок St1, що вміщує текст:
Процесор Athlon2700
Для рядкових даних визначені також операції відношення (=, <>, >, <, >=, <=), які виконують порівняння двох рядкових операндів і мають пріоритет більш низький, ніж операція конкатенації, тобто спочатку завжди виконуються всі операції обєднання і лише потім реалізуються операції відношення. Рядки є рівними, якщо мають однакову довжину та у її межах відповідні символи однакові. Коротший рядок менший більш довгого. Якщо довжини порівнюваних рядків рівні, відбувається поелементне порівняння символів цих рядків з урахуванням лексикографічної упорядкованості значень стандартного символьного типу.
Результат виконання операцій відношення з рядковими операндами має логічний тип і набуває значення True, якщо вираз істинний, і False, якщо вираз хибний. Наприклад, враз Процесор <Athlon2700; повертає результат True.
Для присвоювання рядковій змінній рузультату рядкового виразу використовується оператор присвоювання. Якщо значення змінної після виконання оператора присвоювання перевищує по довжині максимально допустиму при описі величину, всі зайві символи справа відкидаються.
Допускається змішування в одному виразі операндів рядкового та символьного типу. Якщо символьній змінній присвоюється значення рядкового типу, довжина рядка має бути рівною одиниці.
До окремих символів рядка можна звернутися за номером (індексом) даного символу в рядку. Індекс записується в квадратних дужках зразу за ідентифікатором рядкової змінної або константи. Наприклад, вираз St1[7] забезпечить доступ до сьомого символу значення змінної St1. Запис St1[0] надає доступ до нульового байта, який вміщує значення поточної довжини рядка. Для обробки рядкових даних використовуються стандартні процедури і функції.
Стандартні процедури обробки рядків.
Процедура Val.
Перетворює рядкове значення в числове.
Синтаксис прцедури:
Val(St, V, Code);
де St рядок цифр; не повинен вміщувати пробіли на початку та в кінці рядка;
V змінна типу integer або real, що вміщує результат перетворення;
Code номер позиції у рядку, в якій при перетворенні відбулася помилка; при успішному перетворенні параметр Code повертає нуль.
Приклади використання процедури.
St1:=1234;
St2:=12.34;
St3:=12.3E+02;
Val(St1, X, Code); {Змінна X буде вміщувати значення 1234}
Val(St1, Y, Code); {Змінна Y буде вміщувати значення 12.34}
Val(St1, Z, Code); {Змінна Z буде вміщувати значення 1230}
Процедура Val(12.3A+ 02, V, Code); поверне значення Code=5, значення змінної V не визначене.
Процедура Str.
Перетворює числове значення в рядок цифр.
Синтаксис процедури:
Str(X:[:Size[:Dec]], St);
де X число, що перетворюється в рядок;
Size ширина числового поля;
Dec число знаків після десяткової крапки;
St рядок цифр.
Приклади використання процедури.
X:=123;
Y:=12.34;
Str(X, St1); {Рядок St1 буде вміщувати послідовність символів 123}
Str(Y:5:2, St2); {Рядок St2 буде вміщувати послідовність символів 12.34}
Процедура Insert.
Вставляє підрядок в рядок символів.
Синтаксис процедури:
Insert(St1, St2, Index);
де St1 підрядок, що вставляється;
St2 рядок, що вміщує вставлений підрядок;
Index позиція в рядку St2, куди вставляється підрядок St1.
Загальна довжина рядка не повинна перевищувати 255 символів.
Приклад використання процедури.
S1:=Алгоритмічна мова;
S2:=Turbo Pascal;
S3:=Insert(S2, S1, 19);
Результатом виконання останнього виразу буде рядок S3, що вміщує значення Алгоритмічна мова Turbo Pascal.
Процедура Delete.
Видаляє підрядок з рядка символів.
Синтаксис процедури:
Delete(St, Index, Count);
де St рядок, з якого видаляється підрядок;
Index позиція в рядку St, з якої починається знищуваний підрядок;
Count кількість символів у знищуваному підрядку.
Приклад використання процедури.
S1:=Алгоритмічна мова Turbo Pascal;
S2:=Delete(S1, 19, 6);
Результатом виконання процедури буде рядок S2, що вміщує значення Алгоритмічна мова Pascal.
Стандартні функції обробки рядків.
Функція Length.
Обчислює довжину рядка символів. Результат має цілочисловий тип.
Синтаксис функції:
Length(St);
де St рядок, у якому обчислюється число символів.
Приклад використання функції.
S1:=Turbo Pascal;
L:=Length(S1); {Довжина рядка L=12 символів}
Функція Pos.
Виконує пошук підрядка в рядку символів. Результат має цілочисловий тип і дорівнює індексу першого символу розшукуваного підрядка в рядку символів.
Синтаксис функції:
Pos(FindSt, St);
де FindSt розшукуваний підрядок;
St рядок, у якому виконується пошук підрядка.
Приклад.
S1:=Алгоритмічна мова Turbo Pascal;
S2:=Turbo;
N:=Pos(S2, S1);
Індекс першого знайденого символу підрядка S2 в рядку S1 N = 19.
Функція Copy.
Виділяє підрядок в рядку символів.
Синтаксис функції:
Copy(St, Index, Count);
де St рядок, у якому виконується виділення підрядка;
Index номер символу рядка, з якого починається підрядок;
Count кількість символів підрядка.
Функція Copy повертає виділений у рядку St підрядок, що вміщує Count символів, починаючи з символу з номером Index.
Приклад.
S1:=Алгоритмічна мова Turbo Pascal;
S2:=Copy(S1, 14, 4);
Результатом виконання функції буде рядок S2, що вміщує значення мова.
Функція Concat.
Обєднує рядки символів в один загальний рядок.
Синтаксис функції:
Concat(St1, St2, …,Stn);
де St1, St2, …,Stn рядки, що обєднуються в один загальний рядок.
Приклад.
S1:=Алгоритмічна ;
S2:=мова ;
S3:=Turbo ;
S4:=Pascal;
S5:=Concat(S1, S2, S3, S4);
Результатом виконання функції буде рядок S5, що вміщує значення Алгоритмічна мова Turbo Pascal.
Функція UpCase.
Перетворює малу букву в прописну.
Синтаксис функції:
UpCase(Ch);
де Ch символ, що перетворюється в букву верхнього регістру.
Приклад.
Ch1:=f;
Ch2:=UpCase(Ch1); {Символ Ch2 буде мати значення F}
Використання рядкових даних.
Приклади розробки програм.
Приклад 1.
Постановка задачі:
Розробити програму обробки списку студентів, яка виводить всі прізвища, що починаються із введеної з клавіатури букви.
У програмі оголошується масив прізвищ студентів Name та буква для пошуку Simvol. В циклі виділяється перший символ у кожному прізвищі та порівнюється з розшукуваною буквою. Якщо ці символи співпадають, прізвище студента виводиться на екран.
Лістинг програми:
Program FindName;
USES WinCrt;
Const
n=10;
Var
Name : array[1..n]of string[25]; {Оголошення масиву прізвищ}
i : integer;
Simvol : char; {Буква для пошуку}
Begin
for i:=1 to n do
begin
Writeln(Введіть призвіще та імя студента);
Readln(Name[i]);
end;
Writeln(Введіть букву для пошуку);
Readln(Simvol);
for i:=1 to n do
if Name[i,1]=Simvol then {Порівняння першого символу прізвища з розшукуваною буквою}
Writeln(Name[i]) {Вивід знайденого прізвища}
End.
Приклад 2.
Постановка задачі:
Розробити програму обробки тексту, яка виводить всі слова, що входять до нього, з вказанням кількості символів у кожному з них. В тексті слова відділяються одне від одного пробілами, текст завершується крапкою.
У циклі оброблюються всі символи введеного тексту і порівнюються з пробілом, комою та крапкою. Якщо поточний символ не співпадає з цими символами, він додається до змінної Slovo, яка використовується для формування чергового слова. При співпаданні символів на екран виводиться порядковий номер, слово та його довжина.
Лістинг програми:
Program Words;
USES WinCrt;
Var
Txt : string; {Рядок для обробки}
Slovo : string[25];
i, N : integer;
Begin
Writeln(Введіть рядок тексту:);
Readln(Txt);
N:=0;
for i:=1 to Length(Txt) do
begin
if(Txt[i]<> )and(Txt[i]<>,)and(Txt[i]<>.)
then Slovo:=Slovo+Txt[i]
else
begin
N:=N+1;
Writeln(N, слово , Slovo, вміщує , Length(Slovo), букв );
Slovo:=
end
end
End.
Приклад 3.
Постановка задачі:
Розробити програму обробки тексту, яка замінює букву м у тексті на букву н.
У циклі функція Pos виконує пошук символу м і повертає номер позиції знайденого символу. Потім функцією Delete виконується видалення символу у визначеній позиції та вставка символу заміни н у цій же позиції.
Лістинг програми:
Program Replace;
USES WinCrt;
Var
Txt : string; {Рядок для обробки}
i : integer;
Begin
Writeln(Введіть рядок тексту:);
Readln(Txt);
while Pos(м, Txt)>0 do
begin
i:=Pos(м, Txt);
Delete(Txt, i, 1);
Insert(н, Txt, i);
end;
Writeln(Новий рядок тексту:, Txt);
End.
Приклад 4.
Постановка задачі:
Розробити програму виводу в окремому рядку кожного слова рядка.
Лістинг програми:
Program Words;
USES WinCrt;
Procedure PrintWords(Sentence : string);
{Виводить в окремому рядку кожне слово речення.
Вхід: Рядок змінної довжини Sentence визначений.
Вихід: Кожне слово із Sentence виводиться в окремому рядку.}
Const
WordSeparator= ;
Var
Word : string; {кожне слово}
SentLen, {довжина рядка Sentence}
First, {індекс першого символа в кожному слові}
Next : integer; {індекс чергового символа}
begin {PrintWords}
{Вивід кожного слова Sentence в окремому рядку}
First:=1; {Перший символ першого слова має індекс 1}
SentLen:=Length(Sentence);
for Next:=1 To SentLen do
begin
if Sentence[Next]=WordSeparator then
begin
{Вибірка слова}
Word:=Copy(Sentence, First, Next-First);
Writeln(Word);
First:=Next+1;
end; {if}
end; {for}
{Вивід останнього слова}
Word:=Copy(Sentence, First, SentLen-First+1);
Writeln(Word);
end; {PrintWords}
Var
Radok : string[80]; {Рядок змінної довжини}
Begin
Writeln(Введіть рядок довжиною до 80 символів);
Readln(Radok);
PrintWords(Radok);
End.
Приклад 5.
Постановка задачі:
Розробити програму заміни вказаного підрядка у вихідному рядку новим підрядком.
Лістинг програми:
Program Replaces;
USES WinCrt;
Procedure Replace(Target, Pattern : string; Var Source : string);
{Замінює перший знайдений підрядок Target в рядку Source підрядком Pattern.
Вхід: Target, Pattern, Source визначені.
Вихід: Source перетворений.}
Var
PosTarg : integer; {індекс першого символа Target в Source}
begin {Replace}
PosTarg:=Pos(Target, Source); {Пошук Target}
If PosTarg>0 Then
begin
Delete(Source, PosTarg, Length(Target));
Insert(Pattern, Source, PosTarg);
end
Else
begin
Writeln(Заміна не виконана; Рядок:);
Writeln(Target, не виявлений);
end
end; {Replace}
Var
Radok : string; {Рядок змінної довжини}
Words : string; {Замінюваний підрядок}
ReplaceWords : string; {Підрядок для заміни}
Begin
Writeln(Введіть рядок довжиною до 80 символів);
Readln(Radok);
Writeln(Введіть підрядок, що має бути замінений);
Readln(Words);
Writeln(Введіть підрядок для заміни);
Readln(ReplaceWords);
Replace(Words, ReplaceWords, Radok);
Writeln(Radok);
End.
Приклад 6.
Постановка задачі:
Розробити програму подання рядка в зворотному порядку.
Лістинг програми:
Program Words;
USES WinCrt;
Function Reverse(InString : string) : string;
{Подає в зворотному порядку рядок, що вміщується в InString}
Var
TempString : string; {тимчасове місце збереження рядка}
i : integer; {лічильник циклу}
begin {Revers}
TempString:= ; {Ініціалізація TempString}
For i:=Length(InString) Downto 1 Do
TempString:=Concat(TempString, InString[i]);
Reverse:=TempString; {Визначення результату}
end; {Revers}
Var
Radok : string[80]; {Рядок змінної довжини}
Begin
Writeln(Введіть рядок довжиною до 80 символів);
Readln(Radok);
Writeln(Reverse(Radok));
End.
Скласти блок-схему та програму виконання завдання обробки рядкових даних. Ввести самостійно вхідні дані (текст), за якими можна перевірити роботу програми, та вивести на екран вхідні дані та результати виконання завдання.
№ В. |
Завдання |
Вхідні дані |
В.1. |
Підрахувати кількість літер а у тексті. |
Текст |
В.2. |
Підрахувати кількість речень у тексті. |
Текст |
В.3. |
Продублювати кожний символ тексту. |
Текст |
В.4. |
Видалити з тексту всі літери а. |
Текст |
В.5. |
Дописати до літери а літеру м. |
Текст |
B.6. |
Підрахувати кількість слів у тексті. |
Текст |
B.7. |
Замінити сполучення символів := словом присвоїти. |
Текст |
В.8. |
Підрахувати кількість слів write у тексті. |
Текст |
В.9. |
Підрахувати кількість крапок і ком у тексті. |
Текст |
В.10. |
Підрахувати кількість малих латинських літер у тексті. |
Текст |
В.11. |
Підрахувати кількість чисел у тексті. |
Текст |
В.12. |
Підрахувати кількість слів у тексті, які мають подвоєні букви. |
Текст |
В.13. |
Видалити всі слова з тексту, які мають хача б одну латинську букву. |
Текст |
В.14. |
Знайти найдовше слово у тексті. |
Текст |
В.15. |
Підрахувати кількість слів, що починаються і закінчуються на одну й ту ж букву. |
Текст |
В.16. |
Додати у тексті пробіл після кожної коми. |
Текст |
В.17. |
Підрахувати кількість букв у тексті. |
Текст |
B.18. |
Видалити з тексту знаки + та -. |
Текст |
B.19. |
Підрахувати кількість цифр у тексті. |
Текст |
B.20. |
Підрахувати кількість символів у тексті, відмінних від пропусків. |
Текст |
B.21. |
Підрахувати кількість слів, що мають довжину менше пяти букв. |
Текст |
B.22. |
Видалити з тексту частину тексту, що розміщений у круглих дужках. |
Текст |
B.23. |
Знайти та вивести усі слова, які мають непарну кількість букв. |
Текст |
B.24. |
Із введеного списку прізвищ вивести прізвища, які починаються на літери К і Л. |
Текст |
B.25. |
Знайти та вивести слова, що мають довжину більше пяти букв. |
Текст |
B.26. |
Зробити перестановку букв слова у зворотному порядку |
Текст |
Контрольні запитання
PAGE 11