- •1. Общая структура программ в тп 7.0
- •2. Раздел объявлений и соглашений
- •3. Раздел текстов процедур и функций
- •4. Заголовок программы
- •Операторы языка Pascal
- •1. Составной и пустой операторы
- •2. Операторы ветвлений
- •3. Операторы повторений
- •Простые и структурные типы данных
- •1. Перечисляемый и ограниченный типы
- •2. Символьные строки
- •3. Множества
- •4. Записи
- •5. Запись с вариантами
- •6 Совместимость и преобразования типов
- •7 Типизированные константы
- •Процедуры и функции
- •1. Блочная структура программ
- •2. Общая структура подпрограммы
- •3. Области видимости объектов
- •4. Механизм передачи параметров
- •5. Предварительные и внешние описания подпрограмм
- •6. Специальные случаи
- •7. Рекурсия и побочный эффект
- •8. Распределение памяти под данные
- •9. Процедурные типы
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<>S4 = false; S5<>S4 = 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.