Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прогр часть 1.doc
Скачиваний:
11
Добавлен:
07.06.2015
Размер:
1.47 Mб
Скачать

Лабораторна робота 11 обробка строкових даних

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

Строковий тип даних

Рядок - це послідовність символів. Кількість символів у рядку (довжина рядка) може змінюватися від 0 до 255. Для визначення даних строкового типу використовується ідентифікатор string, за яким записано в квадратних дужках значення максимально припустимої довжини рядка:

type T = string[N];

де T - ім'я типу; N - довжина рядка.

Наприклад:

type ST = string[20];

var X:ST; Y:string[10]; Z:string;

Якщо довжина не зазначена, мається на увазі 255.

Над строковими даними допустима операція зчеплення (+) і операції відношення (=,<>,<,>).

Наприклад:

X:='група'+' ИТ98-2';

Z:=X+Y;

'ІВАНОВ'<'ПЕТРОВ'.

Порівняння рядків виконується зліва направо до першого незбіжного символу, і той рядок вважається більшим, у якому перший незбіжний символ має більший код (номер). Результат порівняння має булевський тип і набуває значення true чи false. У наведеному прикладі результат true.

Допускається змішання в одному виразі операндів строкового та символьного типу.

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

Для обробки строкових даних використовуються стандартні процедури і функції.

Процедури

1) delete(S,POZ,N) - видалення N символів у рядку S, починаючи з позиції POZ.

'ЕОМ ЄС 1840' delete(S,7,5) 'ЕОМ ЄС' ;

2) insert(S1,S2,POZ) - вставка рядка S1 у рядок S2, починаючи з позиції POZ.

S1:=' ЄС '; S2:='ЕОМ 1840';

insert(S1,S2,4) ;

Значення S2 стане рівним 'ЕОМ ЄС 1840';

3) str(R,S) - перетворення числового значення величини R і поміщення результату в рядок S.

150.2 str(R:6,S) ' 150.2';

4) val(S,R,COD) - перетворення значення S у величину цілого чи дійсного типу і поміщення результату в R. Якщо під час операції перетворення помилки не виявлено, COD=0, якщо помилка виявлена, COD буде містити номер позиції першого помилкового символу, а значення R не визначене.

'14.2E2' val(S,R,COD) 1420 COD=0;

'52.4A+2' val(S,R,COD) ? COD=5.

Функції

5) copy(S,POZ,N) - виділення з рядка S підрядка довжиною N символів, починаючи з позиції POZ.

'Abcdef' copy(s,2,3) 'bcd';

6) concat(S1,S2,...,SN) - зчеплення рядків S1,S2,...,SN у зазначеному порядку. Сума символів не повинна перевищувати 255.

concat('AA','XX',' YZ') 'AAXX YZ';

7) length(S) - обчислення довжини в символах рядка S. Результат має цілий тип.

'System' length(s) 6;

8) pos(S1,S2) - виявлення першої появи в рядку S2 підрядка S1. Результат має цілий тип і дорівнює номеру позиції першого символу підрядка S1. Якщо підрядок S1 не знайдено, результат дорівнює 0.

'ABCDEF' pos('DE',S2) 4;

'ABCDEF' pos('Г',S2) 0;

9) upcase(C) - перетворення малої латинської букви у велику. Параметр і результат мають літерний тип.

'n' upcase(C) 'N'.

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

Приклад 34. Наведемо текст програми найпростішої лінгвістичної обробки рядків, у якому до строкових даних застосовуються наведені вище процедури і функції.

program PR34;

uses crt;

var a,b,c:string[12];s:string[40];ch:char; N:integer;

begin clrscr;

a:='electronic'; b:='digit'; c:='machine';

ch:=copy(a,1,1); writeln(ch);

ch:=upcase(ch); writeln(ch);

s:=concat(a,b,c); writeln(s);

delete(s,1,1);writeln(s);

insert(ch,s,1); insert(' ',s,11); insert(' ',s,17);

writeln(s); n:=pos('a',s);

WRITELN('ПЕРША БУКВА "A" З'ЯВИЛАСЯ В ПОЗИЦІЇ',N);

N:=LENGTH(S); WRITELN('ДОВЖИНА РЯДКА=',N);

ch:=readkey

end.

Результатом роботи програми буде:

ch - e

ch - E

s - elektronicdigitmachine

s - lektronicdigitmachine

s - Elektronic digit machine

Перша буква 'А' з'явилася в позиції 19

Довжина рядка = 24

Приклад 35. Дано текст s. Визначити кількість слів у даному тексті.

Програма має вид:

program PR35;

uses crt;

var s:string; ch:char; I,N,K:integer;

begin clrscr;

READ(S);

S:=’ ’+S;

n:=length(s);

FOR I:=1 TO N-1 DO

IF (S[I]=’ ‘) AND (S[I+1]<>’ ‘) THEN K:=K+1;

writeln(‘У ДАНОМУ ТЕКСТІ ‘,K:3,’ СЛІВ’)

; ch:=readkey

end.