Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Лабораторна робота № 5. Операції на рядками сиволів



Тема:

Операції на рядками сиволів.

Мета:

Навчитись складати програми з використанням операцій над рядками символів.

5.1. Теоретичні відомості

5.1.1. Стрінговий тип (тип літерний рядок)

Літерний рядок являє собою послідовність символів. Оскільки кожний окремий символ належить до типу Char, літерний рядок, або стрінг (String) можна подати як сукупність, або масив однорідних елементів типу Char. Стрінг може виступати в програмі як константа, або як змінна. Константа-стрінг подається або за допомогою ідентифікатора в розділі опису констант: Const name='Jack'; або безпосередньо записом у виді послідовності символів обмежених апострофами: Writeln('Кінець програми');

Кількість символів в літерному рядку (довжина рядка) лежить в межах 0-255. Літерний рядок може використовуватися як змінна, яка попередньо повинна бути описана. Формат опису стрінгової змінної в розділі опису змінних має вид:

Var

ідентифікатор: String[ML];

де ідентифікатор – ім’я літерної змінної, String – службове слово, ML – максимальна довжина (кількість символів) даного літерного рядка. Наявність ключового слова String без вказання розміру означає максимальний розмір рядка (255 символів).

Приклад: Var

line: String [30];

Окрім безпосереднього опису стрінгової змінної в розділі Var, можна ввести спочатку стрінговий тип (літерний рядок обмеженої довжини) в розділі опису типів, а потім звертатися до цього типу у розділі Var.

Приклад: Тype

ST = String [80]; Var s1, s2, s3: ST;

В даному випадку ST – це введений нами тип String обмежений 80 символами; величини s1, s2, s3 належать до цього типу. Тип ST можна було б, подати в виді масиву Сhar: Type ST = array [1..80] of Сhar;

Оскільки змінна стрінг являє собою послідовність символів, Pascal надає можливість (так само як в масиві) звертатися до кожного окремого символа в літерному рядку за форматом ідентифікатор [і], де ідентифікатор – ім’я стрінг-змінної, і – індекс (номер елемента в стрінгу), 0 < і < N, де N – довжина рядка.

Для визначення величини пам`яті в байтах, необхідної для розміщення стрінга в ОЗП, до значення максимальної величини додається одиниця. Додат-ковий байт розміщується на початку рядка (в елементі з індексом [0]). В цьому елементі записується дійсна довжина літерного рядка, записаного в даний момент по вказаному імені.

5.1.2. Стрінгові вирази

Вирази, в яких операндами є стрінгові константи, змінні та функції, називаються стрінговими виразами. Над стрінгами виконуються такі операції:

Присвоєння.

Приклад:

Var St1: String [6];

St1:='інститут';

Значення St1 обмежуються лише 6 символами і становить 'інстит.'

Об’єднання.

Приклад:

St1:='Група '; St2:='МІ';

St:=St1+St2; Write (st);

Результат: Група МІ

До окремих символів літерного рядка можна звертатися за номером (індексом) даного символа в рядку:

Приклад:

St:='Група'; St[1]:='Т'; Write (St);

Результат: Трупа.

Для обробки літерних рядків в Паскаль-системі є такі стандартні функції:

1. Copy(St, Pos, N) – виділяє із стрінга St підрядок довжиною N символів, починаючи з позиції Pos.

Приклад: Write(Copy('трансформатор'; 6, 5)); друкує: фoрма.

Аналогом цієї функції в Бейсіку є MID$(St,Pos,N);

Concat(St1, St2,...,StN) – виконує об'єднання рядків St1,...,StN в тому порядку, в якому вони записані.

3. Length(St) – обчислює справжню(в символах) величину St.

Аналогом цієї функції в Бейсіку є функція Len(St).

Pos(St1, St2) – визначає номер позиції, з якої St1 входить в St2. Якщо входження відсутнє – результат рівний нулю.

Приклад: Pos('форма','трансформатор') => 6.

Аналогом цієї функції в Бейсіку є функція INSTR.

Крім стандартних функцій в Pascal для обробки стрінгових величин використовують такі стандартні процедури:

1. Str(N,St) – перетворює числове значення N в стрінг St.

Аналогом цієї процедури є в Бейсіку функція N=Str$(St).

Val(St,N,Cod) – перетворює стрінг St в величину цілого, або дійсного типу і вміщує результат в N. St не повинен містити пробілів на початку та кінці. Cod – цілочисельна змінна, яка рівна 0, якщо перетворення пройшло корректно, без помилок. В разі помилки в перетворенні, при наявності нечислового символа в St, Cod містить номер позиції першого помилкового символа. N при цьому невизначено.

Аналогом цієї процедури в Бейсіку є функція N=Val(St).

Delete(St,Pos,N) – процедура вилучення N символів рядка St, починаючи з позиції Pos. При Pos>255 виникає помилка.

Приклад: St="аввгд"; Delete(St,4,2); Результат: "авве".

4. Insert(Str1,Str2,Pos) – вставка рядка Str1 в рядок Str2, починаючи з позиції Pos.

Приклад:

Var S1,S2: String[12];

S1:=' МІ-'; S2:='Група 31'; S3:=Inster(S1,S2,6)

Результат: 'Група МІ-31',

5. UpCase(Ch) – функція, яка перетворює малу літеру Ch в велику. Параметр і результат мають літерний тип. Функція обробляє літери лише латинського алфавіту.

Приклад: Ch:='а'; B:=UpCase(Ch); Результат: 'A'.

Серед множини операцiй над лiтерними рядками найбiльш поширеними є об'єднання, обчислення довжини тексту, копіювання фрагмента тексту, пошук фрагмента тексту, вирiзування фрагмента з тексту.

Введемо такі позначення:

S – змінна типу String PASCAL-програми;

Q – змінна типу String PASCAL-програми (фрагмент тексту);

P – позиція літерної змінної;

N – кількість символів.

Операцiя об'єдання, як вказувалось вище, позначаеться на PASCAL знаком "+", наприклад: S:=S+Q;

Деякі інші, найбільш поширенні операції над літерними рядками, подані в таблиці7.

Таблиця 7

Операція Функції Pascal
Довжина рядка Копія фрагмента Пошук фрагмента Заміщення фрагмента Вставлення фрагмента Вилучення фрагмента N:=Length(S) Q:=Copy(S,P,N) P:=Pos(Q,S) - Insert(Q,S,P) Delete(S,P,N)

Побудову конкретних програм обробки текстiв на мові PASCAL розглянемо на прикладах.

Приклад1:

Скласти програму для перевiрки того, чи дана лiтерна змiнна є "перевертнем" (так звуться слова, що читаються однаково з лiва на право i з права на лiво).

На PASCAL програма запишеться так:

Program Turn;

Var S, Q: String;

i: Byte;

BEGIN

Writeln('Введiть рядок');

Readln(S);

Q:='';

For i:=1 to Length(S) do Q:=Copy(S,i,1)+Q;

If S=Q then Writeln('Лiтерний рядок ',S,' перевертень.')

else Writeln('Лiтерний рядок ',S,' не перевертень.')

END.

Приклад 2:

Скласти програму, яка пiдраховуе, скiльки разiв в даному словi X (як його частина) зустрiчаеться деяке слово Y.

Розглянемо варіант розв'язку цієї задачі на мовi PASCAL:

Program Search;

Var S, Q, W: String;

K, N, P: Byte;

BEGIN

Writeln('Введiть рядок ');

Readln(S);

Writeln('Введiть фрагмент рядка ');

Readln(Q); W:=S; K:=0;

While Pos(Q,W)>0 do

begin

Delete(W,Pos(Q,W),Length(Q));

K:=K+1

end;

Writeln('В лiтерний рядок ',S, ' фрагмент ',Q,' входить ',K,' разiв')

END.

Тут використовується допоміжний літерний рядок W, з якого пос-лідовно вилучаються фрагменти Q.

Приклад 3:

Вважаючи словом групу символiв, роздiлених пробiлами (всерединi слова пробiли вiдсутнi), вивести на екран всі слова рядка.

На PASCAL програма запишеться так:

Program Print_Word;

Var i: Byte;

S, Q: String;

Begin

Writeln('Введiть рядок');

Readln(S);

i:=1;

Repeat

Q:='';

While (S[i]<>' ') and (i<=Length(S)) do

begin

Q:=Q+S[i];

i:=i+1

end;

if Q<>'' then Writeln(Q);

i:=i+1

Until i>Length(S);

End.





Дата публикования: 2014-11-04; Прочитано: 404 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.011 с)...