ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Введення і виведення строкових даних

Багато важливих практичних задач зв'язані з обробкою тесктовою інформацією. Для рішення таких задач за допомогою мови Turbo-Pascal існує спеціально передбачений для обробки рядків символів тип даних String (рядок). Він не відноситься до простих типів даних і займає проміжне місце між простими і структурованими типами даних.

При описі змінних типу String указують максимальну довжину (атрибут довжини). Максимальна довжина не повинна перевищувати число 255 і бути менше 1, наприклад:

var

line1: string[150];

line2: string[80];

line3: string;

Тут описано три змінних типи String при цьому змінна line1 може мати будь-яку довжину від 0 до 150, змінна line2 – будь-яку довжину від 0 до 80, а змінна line3 – за замовчуванням приймає гранично припустиму довжину 255. Помітимо, що довжину 0 має порожній рядок (рядок, що не містить жодного символу). Так після виконання оператора присвоювання

line1:='';

змінна line1 є порожнім рядком.

Можливі значення символьних констант-лексем від #0 до #255. При цьому значення коду К може бути довільним цілим шістнадцятковим або десятковим числом без знаку. Якщо К>255, то воно попередньо обробляється за правилом К:=К Mod 256. Наприклад: #270 -> #14.

Змінні, символьного типу описують у розділі , змінних Var. Наприклад: .

Var c,d : Char; {змінні с і d символьного типу}

¨ До будь-якого значення Z символьного типу можна застосувати функцію Ord(Z), що дає код цього значення.

¨ До будь-якого значення Z символьного типу можна застосувати функцію Pred(Z), що дає значення. попереднє до Z (значення з попереднім кодом у кільці). Наприклад: Pred('1')='0' ;

¨ До будь-якого значення Z символьного типу можна застосувати Функцію Succ(Z), що дає значення, наступне за Z (значення з наступним кодом у кільці). Наприклад: Succ('О')='1'.

¨ До будь-якого значення Z символьного типу із проміжку 'а'..'z' може бути застосована функція перетворення малих літер англійського алфавіту у великі UpCase(Z). Наприклад: UpCase('d')='D'.

¨ Значення символьного типу можна порівнювати: більшим вважається те, що має більший код. Наприклад: 'А'<'В' = True.

¨ До будь-якого цілого десяткового або шістнадцяткового числового значення X може бути застосована символьна функція Chr(X), яка дає символ, що має код X. Якщо Х<0 або X>255, то попередньо виконується перетворення по модулю 256. Наприклад: Chr(33)='!';

Для введення значень змінних типу String використовуються оператори readln або read. Одним оператором може бути введена тільки один рядок, при цьому значення вводиться цілком, а не посимвольно. Для виведення значень змінних типу String використовуються стандартні процедури Write і Writeln.

Розглянемо фрагмент програми для введення і виведення рядків даних:

program input_output_line;

var line1: string[150];

line2: string[80];

begin

write('введіть рядок 1:');

readln(line1);

write('введіть рядок 2:');

readln(line2);

...........................

writeln(line1);

write(line2);

end.

Операції порівняння строкових даних

Строкові дані можна порівнювати, використовуючи операції відносини:

=, <> (не дорівнює), >, >=, <, <=.

Так, наприклад, у результаті виконання операції порівняння S=P двох строкових величин S і P виходить логічне значення TRUE, якщо тексти S і P цілком збігаються, інакше виходить логічне значення FALSE. Аналогічно виконується операція порівняння S<>P, що є запереченням операції S=P. Операція порівняння S<P виконується посимвольно (як і інші операції порівняння строкових величин). У результаті виконання операції S<P виходить значення TRUE, якщо для першої ж пари незбіжних символів відповідний символ з тексту P має більший порядковий номер в алфавіті (старший код у ASCII), чим символ у тексті S. У противному випадку виходить значення FALSE. Аналогічно виконуються й інші операції порівняння.

Наприклад, що випливають логічні вираження мають значення TRUE:

'FATHER' < 'MOTHER', 'PI' > 'PEACE', 'HELLO ' > 'HELLO',

а вираження

'CAT'='DOG', 'BETA'<>'BETA', 'TABLE' < 'CHIAR'

мають значення FALSE.

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

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

У мові Turbo-Pascal використовуються два підходи для обробки змінних типу String. Перший припускає обробку всього рядка як єдиного цілого (єдиного об'єкта). Другий розглядає рядок як складений об'єкт, що складається з окремих символів, тобто елементів типу Char, доступних при обробці кожний окремо.

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

line1:='Це-рядок!';

Другий підхід забезпечує доступ до окремих символів рядка по номері позиції для їхнього читання і запису. Для доступу необхідно вказати ім'я рядка й у квадратних дужках номер позиції елемента в рядку, наприклад:

line2[1] :='А'; line2[26]:='Z';

при цьому стосовно окремого символу рядка можна застосовувати ті ж операції, що і до змінного типу Char, наприклад оператор

write(ord(line2[1]);

видасть на екран ASCII-код першого символу в рядку line2.

Стандартні функції і процедури для роботи з рядками

У мові Pascal для роботи з рядками мається ряд стандартних (убудованих) функцій.

¨ Функція LENGTH (довжина) – для заданого значення типу String видає ціле число, рівне кількості символів у рядку.

Вона має вигляд

length('текст'); або length(<ім'я зміною типу string>);

Наприклад, після виконання програми:

program txt;

var a,b:string[20];

begin

a:= 'Привіт!'; b:='';

write(length(a));

write(length(b));

write(length(a);length(b);length('Комп'ютер!'))

end.

 

на екран буде виведено три числа: 7, 0, 10.

¨ Функція CONCAT (конкатенація або склейка) виконує операцію з'єднання (склеювання) рядків, що є аргументами функції.

Вона має вигляд

concat(S1,S2,...,Sn),

де S1,S2,...,Sn – строкові константи, змінні типу Char або/і String. Результатом операції буде рядок, отримана конкатенацією значень величин S1,S2,...,Sn. Якщо довжина результату виявиться більше 255, то виникає помилка часу виконання (run time error).

Наприклад, результатом програми

program world;

var a:char;

b:string[20];

begin

a:='І';

b:='форма';

write(concat(a,'н',b,'тика'))

end.

буде рядок 'Інформатика'.

Помітимо, що в даній версії мови PASCAL операцію конкатенації записану у виді S:=CONCAT(S1,S2,...,Sn) можна замінити еквівалентним записом

S:=S1+S2+...+Sn.

¨ Функція POS(P,S) (P,S-рядка) визначає, чи утримується перший рядок P у другому рядку S. Результатом функції є ціле число, що показує номер символу, починаючи з якого перший рядок входить у другу. Якщо перший рядок не утримується в другий, то функція видає значення 0.

Наприклад, значення функції

pos('трон','електроніка') дорівнює 5;

pos('град','електроніка') дорівнює 0;

pos('електрон','електроніка') дорівнює 1.

¨ Функція COPY(S,P,L) (вирізка) формує подстроку довжиною в L символів, починаючи з позиції P вихідного рядка S.

Наприклад, оператор

Write(copy('трансформатор',6,5))

видає слово 'форма', а оператор

Write(copy(S,length (S)-1,2))

видає два останніх символи строкової змінної S.

Відзначимо деякі особливості цієї функції:

- якщо P > length(S), те результатом буде порожній рядок;

- якщо P+L > length(S), то результатом будуть символи, що належать рядкові S з позици P.

¨ Процедура DELETE(S,I,J) видаляє подстроку довжиною в J символів, починаючи з позиції I вихідного рядка S. Tак, після виконання операторів:

x:='трансформатор';

delete(x,6,5);

writeln(x);

буде виведений рядок 'транстор'.

¨ Процедура INSERT(S1,S2,I) уставляє вміст рядка S1 у рядок S2 перед символом з номером I.

Наприклад, після виконання операторів:

a:='автокросс';

b:='мото';

c:=insert(b,a,5);

write(c);

на екрані буде виведений рядок 'автомотокросс'.

Зауваження.

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

Розглянемо приклади задач для роботи з рядками і реалізуємо їхнє рішення у виді програм.

Приклад 1. Скласти програму, що визначає, чи є дане слово словом 'перевертышем' чи ні, якщо ні, те на екран виводиться перевернене слово.

program Invert;

var a, b:string[80];

i, n:integer;

begin

writeln(' П е р е в е р т ы ш ');

write('введіть слово - ');readln(a);

b:='';

n:=length(a);

for i:=1 to n do

b:=copy(a,і,1)+b;

if a=b then write('Слово - перевертыш!')

else write('Перевернене слово - ',b)

end.

 

Приклад 2. Скласти програму, що із заданого слова X видаляє зазначену групу символів Y (подстроку) (якщо вона там є), у іншому випадку видає відповідне повідомлення.

program Del;

var x,y:string[80];

n,m,k:integer;

begin

writeln(' Видалення подстроки ');

write('введіть слово - ');readln(x);

write('введіть подстроку -');readln(y);

n:=length(x);m:=length(y);

if n<m then write('Погані дані!')

else begin

k:=pos(y,x);

if k<>0 then

begin

delete(x,k,m);

write('Відповідь: ',x)

end

else write('Такий подстроки немає!')

end;

end.

 

 

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти