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

 …

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

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

 n:=length(s); {n=8}

 x:=concat(s,t); {x=’програмарог’}

 x:=copy(s,4,3); {x=’гра’}

 m:=pos(t,s); {m=2}

 delete(s,4,3); {s=’прома’}

 …

end.

 

 

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

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

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

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

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

 

 

program strings;

uses crt;

var s,t:string;

 i,k:integer;

procedure kol(s:string; var k:integer);

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

var i,n:integer;

begin

 k:=1;

 n:=length(s);

 for i:=1 to n do

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

end;

procedure druk(s:string);

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

var n:integer;

 s1:string;

begin

 n:=pos(‘ ‘,s);

 while n<>0 do

 begin

 s1:=copy(s,1,n-1);

 writeln(s1);

 delete(s,1,n);

 n:=pos(‘ ‘,s)

 end;

 writeln(s)

end;

procedure max_word(s:string; var s1:string);

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

var m,n,max:integer;

 s2:string;

begin

 s1:=”;

 max:=0;

 n:=pos(‘ ‘,s);

 while n<>0 do

 begin

 s2:=copy(s,1,n-1);

 m:=length(s2);

 if m>max then

 begin

 max:=m;

 s1:=s2

 end;

 delete(s,1,n);

 n:=pos(‘ ‘,s)

 end;

 m:=length(s);

 if m>max then s1:=s

end;

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

begin

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

 readln(s);

 writeln;

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

 kol(s,k);

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

 writeln;

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

 druk(s);

 writeln;

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

 max_word(s,t);

 writeln(t);

end.

 

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 
75 76 77 78 79  Наверх ↑