Дан массив строк. Отсортировать его в алфавитном порядке.
Лабораторная работа № 11
ОБРАБОТКА СИМВОЛОВ И СТРОК СРЕДСТВАМИ
ЯЗЫКА Turbo Pascal
Цель:
Получить практические навыки работы с символьной информацией с использованием средств Turbo Pascal.
Общие сведения
ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ
Строка — это последовательность символов. При использовании в выражениях строка обязательно заключается в апострофы. Количество символов в строке (длина строки) может динамически изменяться от 0 до 255. Определение строкового типа устанавливает максимальное количество символов, которое может содержать строка.
Формат описания:
1-ый способ:
Type
имя типа = string [максимальная длина строки];
Var
идентификатор: имя типа;
2-ой способ:
Var
идентификатор: string [максимальная длина строки];
Длина строки может не указываться, в этом случае принимается максимально возможная длина строки, равная 255 символов.
Пример:
Type
Stroka:string[50];
Var
St:Stroka;
St1:string;
St2:string[25];
Строку можно описать с помощью типизированной константы:
Сonst
St:string=’Сегодня хорошая погода !’;
Строковые выражения
Выражения, в которых операндами служат строковые данные, называются строковыми выражениями. Они состоят из строковых констант, переменных, указателей функций и знаков операций. Над строковыми данными допустимы операция сцепления и операции отношения.
Операция сцепления (+) применяется для сцепления нескольких строк в одну результирующую строку.
Например:
Выражение | Результат |
'E'+'C'+' 18' +'40' | 'EC 1840' |
Длина результирующей строки не должна превышать 255.
Операции отношения (=, <>, <, >, >=, <=) проводят сравнение двух строковых операндов и имеют приоритет более низкий, чем операция сцепления, т.е. вначале всегда выполняются все операции сцепления, если они присутствуют, и лишь потом реализуются операции отношения. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией. Результат выполнения операций отношения над строковыми операндами всегда имеет булевский тип и принимает значение True, если выражение истинно, и False, если выражение ложно.
Например:
Выражение | Результат |
'COSM1'<'COSM2' | True |
Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки считаются равными, если они полностью совпадают по длине и содержат одни и те же символы.
Для присваивания строковой переменной результата строкового выражения используется оператор присваивания (:=).
Допускается смешение в одном выражении операндов строкового и литерного типа. Если при этом литерной переменной присваивается значение строкового типа, длина строки должна быть равна единице, иначе возникает ошибка выполнения.
Для обработки строковых данных используются стандартные процедуры и функции.
Процедуры
Delete (St, Poz, N) — удаление N символов строки St, начиная с позиции Poz.
Значение St | Выражение | результат |
'абвгде' | Delete (Str, 4, 2) | 'абве' |
Insert (Str1, Str2, Poz) — вставка строки Str1 в строку Str2, начиная с позиции Poz.
Пример:
Var S1, S2, S3 : string[11];
...
S1:=' EC ';
S2:='ЭВМ1841';
S3:=Insert (S1, S2, 4);
В результате выполнения последнего выражения значение строки S3 станет равным 'ЭВМ ЕС 1841'.
Str (I, St) — преобразование числового значения величины I (целого или вещественного типа) и помещение результата в строку St. После I может записываться формат, аналогичный формату вывода. Если в формате указано недостаточное для вывода количество разрядов, поле вывода расширяется автоматически до нужной длины.
Значение I | выражение | Результат |
Str (I:6, St) | ' 1500' |
4) Val (St, I, Cod) — преобразует значение St в величину целочисленного или вещественного типа и помещает результат в I. Значение St не должно содержать незначащих пробелов в начале и в конце. Cod — целочисленная переменная. Если во время операции преобразования ошибки не обнаружено, значение Cod равно нулю, если ошибка обнаружена (например, литерное значение переводится в цифровое), Cod будет содержать номер позиции первого ошибочного символа, а значение I не определено.
Значение St | выражение | Результат |
'1450' | Val (St, I, Cod) | 1450 Cod=0 |
Функции
Copy (St, Poz, N) — выделяет из строки St подстроку длиной N символов, начиная с позиции Poz.
Значение St | Выражение | Результат |
'ABCDEFG' | Copy (St, 2, 3) | 'BCD' |
Concat (Str1, Str2, ..., StrN) — выполняет сцепление строк Str1, Str2, ..., StrN в том порядке, в каком они указаны в списке параметров.
Выражение | результат |
Concat ('AA', 'XX', 'Y') | 'AAXXY' |
Length (St) — вычисляет длину в символах строки St.
Значение St | Выражение | результат |
'123456789' | Length (St) |
Pos (Str1, Str2) — обнаруживает первое появление в строке Str2 подстроки Str1. Результат имеет целочисленный тип и равен номеру той позиции, где находится первый символ подстроки Str1. Если в Str2 подстроки Str1 не найдено, результат равен 0.
Значение Str1 | Выражение | результат |
'abcdef' | Pos('de', Str1) | |
'abcdef' | Pos('r', Str1) |
Примеры сортировки:
Дан массив строк. Отсортировать его в алфавитном порядке.
program sorta;
type
indata=string[80];
mas=array[1..80] of indata;
var
st:mas;
i,n:integer;
Procedure sortstring(var inm:mas; n:integer);
Procedure insort(L,R:integer;var M:mas);
var
a,b:indata;
i,j:integer;
begin
i:=L;
j:=R;
a:=m[(l+r)div 2];
repeat
while m[i]<a do i:=i+1;
while A<m[j] do j:=j-1;
if i<=j then
begin
b:=m[i]; m[i]:=m[j];
m[j]:=b; i:=i+1; j:=j-1;
end;
until i>j;
if l<j then insort(l,j,m);
if l<r then insort(i,r,m);
end;
begin
insort (1,n,inm);
end;
begin
writeln ('Введите количество строк');
readln (n);
writeln ('Введите строки');
for i:=1 to n do
readln (st[i]);
Writeln ('Исходный массив строк:');
for i:=1 to n do
writeln (st[i]);
sortstring(st,n);
Writeln ('Отсортированный массив строк');
for i:=1 to n do
writeln (st[i]);
end.