Встроенные стандартные функции для обработки строк
Length(S:String) : Byte возвращает текущую длину строки S. Результат имеет целочисленный тип.
Пример. Var L:Byte;
. . .
L:=Length(S);
Concat(S1,S2,…,SN:String) : String выполняет слияние строк S1,S2,…,SN в том порядке, в каком они указаны в списке параметров.
Пример. Var Ssum:String[50];
. . .
Ssum:=Concat(S1,S2,S3);
Если сумма длин строк в Concat превысит объявленную длину строки в левой части оператора присваивания, то излишек будет отсечен. Следует помнить, что вместо Concat можно пользоваться операцией сцепления.
Пример. Ssum:=S1+S2+S3;
Copy(S:String; Poz, L:Length) : String;
позволяет выделить из строки S последовательность из L символов, начиная с позиции Poz. Если Poz>Length(S), то функция вернет пустую строку, а если L больше, чем число символов от Poz до конца строки S, то вернется остаток строки S от Poz до конца.
Пример. Var Ssum:String;
. . .
Ssum:=Copy(‘ABC***123’, 4, 3); {Ssum=’***’}
Ssum:=Copy(‘ABC’, 4, 3); {Ssum=’ ‘}
Ssum:=Copy(‘ABC***123’, 4, 11); {Ssum=’***123’]
Pos(S1, S:String) : Byte
возвращает номер символа в строке S, с которого начинается включение в S подстроки S1. Если S не содержит в себе S1, то функция вернет 0. Недостатком функции Poz является то, что она возвращает ближайшую стартовую позицию S1 в S от начала строки, т.е. вызов
Var P:Byte;
. . .
P:=Poz(‘abc’, ’Nom abcabcabcfcd’);
завершит свою работу, вернув значение 5, хотя есть еще и 8, и 11.
UpCase(C:Ch) : Char;
преобразует строчную букву латинского алфавита в прописную, возвращая все остальные, в том числе и буквы русского алфавита, в исходном виде.
Pred(C:Char) : Char выдает ЬЮM__п”___предшествующий C символ.
Succ(C:Char) : Char выдает следующий за C символ.
Chr(X:Byte) : Char возвращает символ, код которого равен X.
Ord(C:Char) : Byte возвращает число, равное коду символа C.
Учитывая, что текущая длина строки S содержится в S[0], она может быть определена следующим образом:
Var S:String;
L:Byte;
. . .
Read(S);
L:=Ord(S[0]);
Запись― это структура данных, состоящая из фиксированного числа элементов, которые называют полями. В отличие от массива поля могут иметь разные типы. Чтобы можно было ссылаться на тот или иной элемент записи, поля именуются.
Форма описания записи :
type имя типа = record
список идентификаторов полей1 : тип полей1;
список идентификаторов полей2 : тип полей2;
. . .
список идентификаторов полейN : тип полейN;
end;
var имя записи : имя типа;
или:
var имя записи : record
список идентификаторов полей1 : тип полей1;
список идентификаторов полей2 : тип полей2;
. . .
список идентификаторов полейN : тип полейN;
end;
Пример записи, объединяющей данные об одном студенте:
type student = record
nom : string[8]; {номер группы}
fio : string[25]; {фамилия,имя,отчество}
year : word; {год рождения}
pasport : string[12]; {серия и номер паспорта}
address : string[30]; {домашний адрес}
end;
var stud, bun : student;
Обращение к элементам записи производится с помощью составного имени. Составное имя имеет следующий вид :
Имя записи . имя поля
Например, для обращения к паспортным данным и адресу студента нужно воспользоваться следующими составными именами:
stud.pasport и stud.adress
Элементы записи используются в программе так же, как и обычные переменные.
Пример.
Stud.address := ’г.Минск, ул. Скорины 8, кв. 36.’;
Обращение к записи как к единому блоку допускается только в операторе присваивания.
Пример.
Bun := stud;
Запись может быть элементом других структурированных данных. Чаще всего записи используют в качестве элементов массивов. Так, список группы, состоящий из 20 студентов, может быть оформлен как массив следующим образом:
type student = record
nom : string[8]; {номер группы}
fio : string[25]; {фамилия, имя, отчество}
year : word; {год рождения}
pasport : string[12]; {серия и номер паспорта}
address : string[30]; {домашний адрес}
end;
var group : array[1..20] of student;
Для обращения, например, к полю fio 10-го элемента этого массива, т.е. к ФИО студента, имеющему 10-й порядковый номер, нужно использовать следующее составное имя:
group[10].fio;
Обращение к полям записи по составному имени имеет достаточно громоздкий вид. Поэтому для сокращения записи составных имен в языке Паскаль предусмотрен оператор WITH, который имеет следующий формат:
With имя записи Do оператор;
где имя записи - имя переменной типа «запись», а оператор - простой или составной оператор Паскаля, в котором имена полей указываются как обычные переменные.
Множества
Еще один структурированный тип данных ― это множество (set). В нем может содержаться не более 256 элементов.
Важное отличие множества от остальных структурированных типов состоит в том, что его элементы не являются упорядоченными.
Описание множеств
В разделе var множества описываются следующим образом:
var <имя_множества>: set of <тип_элементов_множества>;
Элементы могут принадлежать к любому порядковому типу, размер которого не превышает 1 байт (256 элементов). Например:
var s1: set of char; {множество из 256-ти элементов}
s2: set of 'a'..'z','A'..'Z'; {множество из 52-х элементов}
s3: set of 0..10; {множество из 11-ти элементов}
s4: set of boolean; {множество из 2-х элементов}
Множество-константа
Наименованная константа
Множество можно задать неименованной константой прямо в тексте программы. Для этого необходимо заключить список элементов создаваемого множества в квадратные скобки:
[<список_элементов>]
Список элементов может быть задан перечислением элементов нового множества через запятую, интервалом или объединением этих двух способов. Элементы и границы интервалов могут быть переменными, константами и выражениями. Если левая граница интервала окажется больше правой, результатом будет пустое множество.
Примеры конструирования и использования различных множеств:
if c in ['a','e','i','o','u']
then writeln('Гласная буква');
if set1 < [k*2+1..n,13] then set1:=[];