Смекни!
smekni.com

Типи даних алгоритмічної мови TURBO Pascal Стандартні функції і оператори роботи з рядками (стр. 2 из 2)

МодульTURBO3 iGRAPH3 – для сумісності з версією ТР 3.0.

SYSTEM, CRT, DOSрозміщені у файлі TURBO.TPL. GRAPHокремий файл GRAPH.TPU.

Всі модулі крім SYSTEM стають доступними після їх підключення:

USES <ім’я модуля>.

5. Символьні масиви

Символьний тип даних дозволяє працювати з окремими символами тексту. Для обробки більшої кількості текстових одиниць використовують символьні масиви або рядкові типи даних.

Розглянемо одномірні масиви, які складаються з елементів символьного типу (Char).

Наприклад:

Var

S: array [1..12] of char;

Паскаль містить деякі додаткові засоби роботи з такими масивами:

1) Конкретні значення символьних масивів записують за допомогою зображення рядка та використання їх в присвоюванні та передачі параметрів:

S: = ‘Приклад рядка’;


Зображення рядка будується з символів масиву і обмежується апострофами.

Якщо необхідно задати апостроф, то його удвоюють {‘ ” ’}.

Допускають формування рядків з використанням десяткових кодів символів і спеціальних позначень: ( #7#17C^A^B…)

2) для символьних масивів операцію “+” конкатенації (зчеплення, поєднання). Смисл операції полягає у формуванні нового символьного масиву, кількість елементів якого дорівнює сумі розмірів масивів – операндів, а значення елементів – елементи масивів, які розміщюються послідовно один за одним.

Приклад:

Var S1 : array [1..8] of char;

S2 : array [1..5] of char;

Begin

S1 := ’рядковий’;

S2 := ’масив’;

Writln (S1+’ ’+S2);

{результат: на екрані}

end.

Особливість:

1) в операторах присвоювання рядків символьним масивам необхідна точна відповідність довжини рядків і розмірів масивів;

2) операція конкатенація для символьних масивів не допускається у правій частині присвоювання.

Приклад:S : S1+’ ’+S2; {помилка}

У таких випадках необхідно використовувати рядки, тобто рядкові типи даних.


6. Визначення рядкового типу даних

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

При використанні у виразах рядок обмежується апострофами. Кількість символів в рядку (довжина рядка) може динамічно змінюватись від 0 до 255.

Для визначення рядкових даних використовується ідентифікатор STRING, за якими у квадратних дужках вказується максимальна довжина рядка. Якщо значення не вказане, то по замовченню довжина рядка встановлюється 255 байт.

Приклад:

Line: string [80];

Line1: string ;

Line2: string [255];

В приведеному прикладі змінна Line може мати будь-яку послідовність символів (кожен з яких має стандартний тип char) довільної довжини в межах від 0 до 80 символів; Line1 і Line2 – від 0 до 255 символів.

Таким чином, важливіша різниця між рядками і символьними масивами, що рядки можуть динамічно змінювати свою довжину.

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

Рядкові дані також можна використовувати у програмі як константу.

Формат:

1) type

2)

<ім’я типа > = string[max довжина рядка];

var

< ідентифікатор > : <ім’я типа >;

або

3) var

< ідентифікатор > : string[maxдовжина рядка];

Приклад:

Const

address = ‘пл. Соборна, 1’;

Type Line = string [125];

Var

S1 : Line;

S2 : string;

S3 : string [50];

Механізм динамічних рядківреалізований в мові Турбо-Паскаль достатньо просто. Для рядкових змінних пам’ять виділяється відповідно максимального значення, а використовується лише частина, яка реально зайнята символами рядка у даний час, тобто для N символів виділяється N+1 байт пам’яті, із яких Nбайт призначено для зберігання символів рядка, а 1 байт – для значення поточної довжини цього рядка:

Елементи рядка нумеруютьсяцілими числами, починаючи з 1. Це іноді використовують для визначення поточної довжини рядка.

Наприклад:

1) Line:= ‘ ’; {пустий рядок}

WriteLn (ORD (Line [0] )); {на екрані число 0}

2) Line : =‘ABCD’;

WriteLn (ORD (Line [0])); {на екрані число 4}

Однак, для визначення поточної довжини рядка, як правило, використовують стандартну функцію length, яке повертає ціле значення поточної довжини рядка. Але це ми розглянемо далі.

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

Наприклад:

Var Line : string [4];

Begin

Line:=‘ дуже довгий рядок’;

WriteLn (Line);

Таким чином рядки можуть змінювати свою довжину.

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

Над рядковими даними виконують такі операції :

1.присвоювання (:=);

2.ввод (Read);

3.вивод(Write);

4.порівняння (відношення);

5.поєднання (зчеплення, конкатенації, - ,+).

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

Операція конкатенації.

Використовується для зчеплення декількох рядків в один, при чому довжина результуючого рядка не повинна перевищувати 255 символів (або вказану довжину N). Інакше останні символи будуть відкинуті.

Приклади:

1) st := ‘a’+’b’;

st := st + ‘c’;

writeLn (‘st = ‘, st) {результатst =abc}

2) var st :

string [2];

begin

st :=’1’ + ‘2’ + ‘3’;

writeLn (st) {на екрані 12}

end.

Операції порівняння (відношення).

Проводить порівняння двох рядкових операндів за допомогою стандартних операторів: = , <>, >, <, >=, <=.

Правила порівняння:

1) проводиться з ліва-направо з урахуванням внутрішнього кодування таблиці символів ASCII. Рядок буде більшим, якщо перший не співпадаючий символ має більший номер.

2) У менший по довжині рядок додаються символи значенняCHR(0).

Тому при однакових, символах короткий рядок завжди менше довгого рядка.

Результат виконання операції завжди має логічний тип і приймає значення TRUEабо FALSE.

Приклади:

Виразрезультат

1)‘ “ ‘ < ‘.’ TRUE

2) ‘A’ > ‘2’ TRUE

3) ‘AB’ = ‘A’FALSE

4) ‘ABC’ > ‘AB’ TRUE

5) ‘12’ <’2’ TRUE

8. Cтандартні засоби обробки рядків: процедури і функції

Функції:

1) CONCAT(S1,S2,…,SN) – функція типа STRING. Виконує послідовне поєднання рядків S1,S2,…,SN, кожен з яких є вираз рядкового типу (STRING).Результатом є рядок не більше 255 символів. Дана функція еквівалентна операції конкатенації:

S1’ + ‘S2’ + ‘S3’…

2) COPY(st : STRING; index : INTEGER; count : INTEGER): STRING;

або

COPY (st, index, count).

Функція копіює (повертає) частину рядка, виділеного з рядка st, довжиною countсимволів, починаючи з символу під номером index.

1) LENGTH(st : STRING) функція типу INTEGER; повертає довжину рядка.

2) POS(subst, st : STRING): BYTE.Функція шукає у рядку stрядок subst. Результатом є номер позиції, де рядок subst зустрічається перший раз. Якщо рядок substне знайдено, то результатом буде 0 (нуль).

3) UPCASE(ch) – функція типу CHAR. Повертає для символьного виразу ch, яке повинно представляти собою рядкову (маленьку) латинську букву, відповідно їй велику букву. Якщо значенням функціїch є будь-який інший символ (в тому числі рядкова буква російського алфавіту), функція повертає його без змін.

Процедури:

1) DELETE(st : STRING; index, count : INTEGER)або

DELETE(st, index, count)процедура вилучає (знищує) count символів у рядкуst починаючи з символу під номером index.

2) INSERT(subst : STRING; st :STRING; index : INTEGER)або

INSERT(subst, st, index). – процедура вставляє рядок substу рядок st, починаючи з символу під номером index.

3) STR(X[:width[:decimals]];st:STRING) – процедура перетворює число Х в рядок символів stтак, як це робить це робить процедура WRITELN перед виводом. Параметри widthіdecimals(якщо вони присутні, тобто дужки [] показують на необов’язковість цих параметрів) задають формат перетворення: загальну ширину поля для представлення числаХ(width) та кількість символів дрібної частини (decimals), якщо X : REAL.

4) VAL(st, x, code) – процедура перетворює рядок символів stв значення числової змінної X (визначеного типу). Параметр code=0, якщо перетворення пройшло успішно, тоді Xдорівнює результату перетворення. Якщо виявляється помилковий символ у рядку st, то значення Х не змінюється, а codeдорівнюєномеру позиції з помилковим символом.

Приклади:

Var x: real;

y: integer;

st, st1 : string;

begin

st:= concat (‘12’, ‘345’); {рядокstмістить 12345}

st1:= copy (st, 3, Length(st)-2); {st1 містить 345}

insert(‘-’ , st1, 2); {рядокst1містить 3-45}

delete(st, pos(‘2’, st), 3); {рядокstмістить 15}

str(pi : 6 : 2, st ); {рядокst містить 3,14}

val (‘3.1415’, x, y); {yмістить 2, х беззмін}

end.

Висновок

Таким чином над рядками можна виконувати операції присвоювання, порівняння, з’єднання (конкатенації), введення та виведення. Для цього використовують широкий набір процедур та функцій.