Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Тема Програмування обробки рядків та символів

Работа добавлена на сайт samzan.net:


озробили: Волик О.Ф., Кащеєва О.В., Мормуль М.Ф.   15, 20142008-10-26T07:45:00Z

Лабораторна робота № 6

Тема. Програмування обробки рядків та символів.

Мета: навчитися створювати програми обробки рядків та символів.

Порядок виконання роботи

  1.  Ознайомитися з інструкцією до лабораторної роботи, опрацювати й законспектувати теоретичний матеріал у звіт з лабораторної роботи.
  2.  Засвоїти прийоми роботи з рядками та символами.
  3.  Виконати завдання на ПЕОМ.
  4.  Оформити звіт з лабораторної роботи.
  5.  Відповісти на запитання викладача за темою роботи.

Зміст звіту

  1.  Номер лабораторної роботи, тема, мета.
  2.  Стислий конспект теоретичного матеріалу.
  3.  Формулювання завдань до лабораторної роботи.
  4.  Звіт про виконання кожного з пунктів завдання і машинні результати виконання.
  5.  Висновки.
  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.

Зробити перестановку букв слова у зворотному порядку

Текст

Контрольні запитання

  1.  Як здійснюється опис рядкового типу?
  2.  Як здійснюється опис рядкових змінних без визначення типу?
  3.  Привести приклади визначення рядкових змінних.
  4.  Як виконується об’єднання рядків?
  5.  Які операції відношення використовуються для рядкових даних?
  6.  Як звернутися до окремих символів рядка?
  7.  Які стандартні процедури використовуються для обробки рядків?
  8.  Які стандартні функції використовуються для обробки рядків?

PAGE  11

  1.  



1. х годов как указывают вследствии ускорившейся глобализации и роста развивающихся стран её влияние в миро
2. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата наук з фізичного виховання і спорту
3. Ходжа Ахмет Яссауи
4. Тема- Организация работы с конфиденциальной информацией на примере конкретной организации Выпо
5. трюфелях в своей книге История нового государства Гренады
6. ГОЛЬФСТРИМ охранные системы предлагает оптимальные решения для безопасности бизнеса
7. тема электросвязи ~ это совокупность технических средств и среды распространения сигналов обеспечивающих п
8. встретил Сатья Саи Бабу в 1984 году моя жизнь была полной неразберихой и эта ситуация была общей для многих по
9. то давно еще при царе Горохе жил был в некотором царстве царь и было у него три дочери
10. .Бюджет ж~йесіндегі бекітілген ж~не реттеуші кірістер Бюд кірістері салы~ты~ ж-е бас~а міндетті т~лемдер
11. Грёзы о Земле и Небе
12. Переведите текст на русский язык
13. Реферат- Александр Парвус (Израиль Гельфанд)
14. Дом Fberlic Прежде чем взяться за выпуск такой посуды мы проанализировали другие аналогичные предложения на
15. Лабораторная работа- СТРУКТУРА И СВОЙСТВА СТАЛЕЙ В РАВНОВЕСНОМ СОСТОЯНИИ Выполнил- студен
16. Государственная измена
17. МЕЖДУНАРОДНЫЕ ОТНОШЕНИЯ И ЗАРУБЕЖНОЕ РЕГИОНОВЕДЕНИЕ I КУРС.html
18. Система пожаротушения внутри двигателя ССП-2А ССП-7 самолета -АН12 А
19. В соответствии со ст
20. Характеристика государства