Паскаль. Прикладне програмне забезпечення


Програмування рядкових величин

1. Поняття рядкової величини.

Величиною рядкового типу Strings називається послідовність символів, укладена в одинарні лапки. Цей тип даних є стандартним для мови ПАСКАЛЬ, хоча він є структурованим. Величини можуть бути як константами, так і змінними. При завданні змінних символьного типу можна вказати кількість символів у цій величині.

ПРИКЛАД:

Type

Message=string;

List=string[10];

Опис типу message задає тип рядкових величин з максимально можливою довжиною рядка 255 символів, а опис типу list – рядкові величини з максимальною довжиною рядка 10 символів.

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

ПРИКЛАДИ:

‘TURBO’

‘п"ятниця’

"""

‘;’

Для рядкових величин визначена операція конкатенації об’єднання рядків. Операція позначається символом "+". Тип результату – також рядкова величина. Мова ТУРБО ПАСКАЛЬ дозволяє використовувати оператор + для об’єднання двох рядкових операндів. Якщо довжина результуючого рядка перевищує 255 символів, то вона усікається до 255 символів.

Оператори відношення =,,,, =, або = Можуть застосовуватися для порівняння рядків відповідно до порядку розширеного набору символів коду ASCII. Будьякі два значення рядкового типуданих можна порівняти, оскільки всі значення рядкових даних сумісні. Значення рядкового типу сумісні зі значеннями символьного типу, і при їхньому порівнянні символьне значення опрацьовується як рядкове значення довжиною 1. Та величина вважається "більшою", яка має на відповідному місці символ з більшим ASCII кодом. Слід зауважити, що пробіл є повноправним символом рядкової величини і він опрацьовується аналогічно іншим символам величини.

ПРИКЛАДИ:

‘turbo’’Turbo’;

‘turbo’’pascal’;

‘turbo’’turbo pascal’;

‘123’’ 123’;

2. Основні процедури та функції опрацювання рядкових величин.

Рядкові величини можна вводити з клавіатури. Для цього можна використати стандартну процедуру вводу Read. Однак при цьому є така особливість: необхідно ввести стільки символів, скільки було оголошено при визначенні цієї величини. Так, якщо величина була оголошена як величина типу String [10], то необхідно ввести 10 символів якщо їх кількість менша, то вільні місця необхідно заповнити пробілами. Якщо ж величина описана як String, то кількість пробілів буде дуже великою. Щоб позбавитись цього недоліку, для вводу рядкових величин варто використовувати іншу процедуру вводу – Readln. В цьому випадку доповнювати пробілами рядкову величину непотрібно.

Функція Соncat виконує конкатенацію послідовності рядків.Її дія аналогічна дії операції конкатенації.

Функція Copy повертає підрядок частину рядкової величини.

Процедура Delete видаляє з рядка його частину заданої довжини, починаючи з заданої позиції.

Процедура Insert додає в рядок підрядок, починаючи з певної позиції рядка.

Функція Length повертає динамічну довжину рядка.

Функція Роs здійснює пошук підрядка в рядкові.

Процедура Str перетворює чисельне значення в його рядкове представлення.

Процедура Val перетворить рядкову величину, яка є числом,в її чисельне значення.

ПРИКЛАДИ

Var

s, t,x:string;

n, m,k:integer;

Begin

readlns;{припустимо, що введена величина‘програма’}

readlnt;{припустимо, що введена величина‘рог’}

n:=lengths; {n=8}

x:=concats, t;{x=’програмарог’}

x:=copys,4,3;{x=’гра’}

m:=post, s;{m=2}

deletes,4,3;{s=’прома’}

End.

Розглянемо приклад алгоритмів опрацювання рядкових величин із застосуванням наведених функцій.

Заданий текст рядкова величина,слова якої розділені символом "пропуск".

1.Знайти кількість слів у тексті.

2.Надрукувати окремо з нового рядка кожне слово тексту.

3.Знайти i надрукувати найдовше слово тексту.

Program strings;

Uses crt;

Var s, t:string;

i, k:integer;

Procedure kols:string; var k:integer;

{ процедура знаходження кiлькостi слiв у текстi текст мiстить хоча б одно слово}

Var i, n:integer;

Begin

k:=1;

n:=lengths;

for i:=1 to n do

if s[i]=’ ‘ then k:=k+1;

End;

Procedure druks:string;

{ процедура друкування слів тексту }

Var n:integer;

s1:string;

Begin

n:=pos‘ ‘,s;

while n0 do

begin

s1:=copys,1,n1;

writelns1;

deletes,1,n;

n:=pos‘ ‘,s

end;

writelns

End;

Procedure max_words:string; var s1:string;

{ процедура знаходження найбільшого слова тексту }

Var m, n,max:integer;

s2:string;

Begin

s1:=";

max:=0;

n:=pos‘ ‘,s;

while n0 do

begin

s2:=copys,1,n1;

m:=lengths2;

if mmax then

begin

max:=m;

s1:=s2

end;

deletes,1,n;

n:=pos‘ ‘,s

end;

m:=lengths;

if mmax thens1:=s

End;

{Основна програма}

Begin

write‘Введiть текст, розділяючи слова одним символом "пропуск": ‘;

readlns;

writeln;

writeln‘Результати: ‘;

kols, k;

writeln‘кiлькiсть слiв у текстi k=’,k;

writeln;

writeln‘Слова тексту: ‘;

druks;

writeln;

writeln‘Найдовше слово тексту;

max_words, t;

writelnt;

End.

Узагальнення по темі.

Величиною рядкового типу Strings називається послідовність символів, укладена в одинарні лапки. Цей тип даних є стандартним для мови ПАСКАЛЬ, хоча він є структурованим. Величини можуть бути як константами, так і змінними. При завданні змінних символьного типу можна вказати кількість символів у цій величині.

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

Для рядкових величин визначені операція конкатенації об’єднання рядків та операції відношення . Вони можуть застосовуватися для порівняння рядків відповідно до порядку розширеного набору символів коду ASCII.Будьякі два значення рядкового типуданих можна порівняти, оскільки всі значення рядкових даних сумісні. Значення рядкового типу сумісні зі значеннями символьного типу, і при їхньому порівнянні символьне значення опрацьовується як рядкове значення довжиною 1. Та величина вважається "більшою", яка має на відповідному місці символ з більшим ASCII кодом. Слід зауважити, що пробіл є повноправним символом рядкової величини і він опрацьовується аналогічно іншим символам величини.

Рядкові величини можна вводити з клавіатури. Для цього можна використати стандартну процедуру вводу Read. Однак при цьому є така особливість: необхідно ввести стільки символів, скільки було оголошено при визначенні цієї величини. Щоб позбавитись необхідностівводу 255 символів при оголошенні рядкової величини як Strings, варто використовувати іншу процедуру вводу – Readln.

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