Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
паскаль.doc
Скачиваний:
7
Добавлен:
25.09.2019
Размер:
222.21 Кб
Скачать

2. Символьные строки

Переменную типа Packed Array [0..N] of Char принято называть символьной строкой.

Строка - это упакованный массив, компоненты которого имеют тип Char и тип индекса имеет нижнюю границу равную одному. К строкам применимы все 6 операций отношений, но строки при этом должны иметь равную длину.

В Турбо-Паскале введён тип данных String вместо описанного Packed Array of Char.

Операции с Char: '5' < '25' {ошибка, так как разные длины строк} 'Var' = 'Var' {верно} Var Age: String [3]; Begin Age:="тринадцать"; {Лишние символы после "и" усекаются}

3. Множества

Паскаль позволяет оперировать с множествами как с типами данных.

Пример: Type   Symbolset = Set Of ' ' .. '_';   Color = (White, Blue, Red);   Colorset = Set Of Color;   T1= Set Of 0..9; Var   C: Color;   Colset: Colorset;   T: Integer;   Tset: T1;

Множества - наборы однотипных объектов, каким-либо образом связанных между собой. Характер связей лишь подразумевается программистом и никак не контролируется Турбо-Паскалем. Максимальное количество элементов множества - 256.

Два множества считаются эквивалентными тогда и только тогда, когда все элементы их одинаковы, причём порядок следования элементов безразличен.

Описание: <имя типа> = Set Of <базовый тип>, где <базовый тип> есть любой порядковый тип кроме Word, Integer, Longint. Для задания множества используется конструктор множества (((: : =))). Список спецификаций элементов множества, отделяемых друг от друга запятыми; список обрамляется [ ]. Спецификациями элементов могут быть константы или выражения базового типа, а так же тип - диапазон того же базового типа: Type    Digitchar = Set Of '0'..'9';    Digit =Set Of 0..9; Var   S1, S2, S3: Digitchar;   S4, S5, S6: Digit; begin   . . . . . . . . . . . . . . . .   S1 : = ['1', '2', '3'];   S2 : = ['3', '2', '1'];   S3 : = ['2', '3'];   S4 : = [0..3, 6];   S5 : = [4, 5];   S6 : = [3..9];

Операции над множествами:

*

пересечение (S4*S6 = [3,6]; S4*S5 = [4])

+

объединение (S4+S5 = [0, 1, 2, 3, 4, 5, 6])

-

разность, содержит элементы из 1-го, которые не принадлежат второму (S6-S5 = [3, 6, 7, 8, 9])

=

проверка эквивалентности (S4=S4 = true; S5=S4 = false)

<>

проверка неэквивалентности (S4<&gtS4 = false; S5<&gtS4 = true)

<=

проверка вхождения (True если 1-е содержится во втором).

>=

(наоборот).

in

проверка принадлежности.

Пример: Алгоритм получение простых чисел. Const   N = 100; Type   Set_Of_Num = Set Of 1..N; Var   N1, Next, I: Word;   Begset, Primerset: Set_Of_Num; Begin   Begset:= [2..N];   Primerset:= [1];   Next:=2;   While Begset <> [ ] Do    Begin    N1:= Next;      While N1 <= N Do       Begin       Begset:= Begset - [N1];       N1:= N1 + Next;       End;    Primerset:= Primerset + [Next];   Repeat     Inc(Next);   Until (Next In Begset) Or (Next > N);   End;   For I:=1 To N Do     If I In Primerset Then   Write(I: 8);   Writeln; End.

Итак, над множествами допустимы четыре операции:

• объединение (+) • пересечение (*) • разность (-) (содержит элементы из 1-го, которых нет во 2-ом). • операция in - позволяет определить, принадлежит элемент множеству или нет.

В программе множество задаётся в виде списка элементов, заключённого в квадратные скобки:

Colset:= [White, Red]; Colset:= [ ]; Tset:= [1, 7, 5]; Tset:= [0 ... 3, 6, 9]; Tset:= [8 Mod4, 15 Div 5];

Можно использовать операции сравнения.

Пример: из файла вводится текст, содержащий символы от "+" до "[". Требуется рассчитать символы текста в порядке кода ASCII (из повторно встречающихся выводить только один):

Program Sort Var   S: Char;   Sets: Set Of '+'..'[';   I: '+'..'['; Begin   Sets:= [ ];   Read(S);   While Not Eof Do   Begin      While Not Eof Do      Begin        Sets: = Seets + [S];        Read(S);      End;   End;   Writeln;   For I: ='+' To '[' Do    If I In Sets Then   Write (I);   Writeln; End.