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.
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 Наверх ↑