
- •9. Перечисляемый тип данных. Строковый тип. Множества. Записи. Файлы
- •9.1. Перечисляемый тип данных
- •Var days: week;
- •9.2. Строковые данные. Типы Char и String
- •Var s1 : String[40];
- •Var Str1, Str2: String[20]; Ch1, Ch2 :Char;
- •Var s: String[20]; I:integer;
- •Var I: byte; begin
- •Var Str_1, Str_2, Str_3:string[10];
- •Insert('any', Str_3,5);
- •9.3. Множества
- •9.3.1. Описание и инициализация множеств
- •9.3.2. Предметные операции с множествами
- •9.3.3. Операции сравнения над множествами
- •9.3.4. Цикл типа For..In. Вывод множеств и их элементов.
- •Var d: week;
- •9.4. Записи
- •Var p_Data: Pers_Data;
- •Var p_Data: record fam:string[20]; adr:string[40]; tel:string[15];
- •Var woker_alpha: woker_firm;
- •Var woker_alpha: array [1..30] of Pers_Data;
- •9.5. Файлы
- •9.5.1. Описание файловых переменных
- •9.5.2. Стандартные операции с файлами. Связывание логических и физических файлов
- •9.5.3. Ввод и вывод данных из физических файлов. Вспомогательные действия
- •9.5.4. Примеры решения задач по обработке текстовых файлов
- •Var I:byte;n:integer; ft:text; FileName,st:string;
- •Var I,Lmas:integer; ft:text; FileName:string;
- •Var n,I:integer; ft:text; FileName:string;
- •Var str,w_s:string;
Var I: byte; begin
for i:=32 to 255 do writeln(' Symbol of',i:4, ' = ',Chr(i))
end.
Строковый тип данных удобен для преобразования информации, представленной в нем. По этой причине часто в строковый вид переводят данные из других типов. На строковых величинах основан специальный текстовый тип файлов.
Вопросы для проверки знаний.
1. Чем отличаются типы сhar и String ?
2. Может ли переменная типа String занимать в памяти пространство:
а) 1 бит, б) 4 бита, в) 2 байта, г) 100 байтов, д) 300 байтов ?
3. Каков порядок обращения к отдельным символам строковых переменных ?
4. Задано описание и выполнено присвоение:
Ch:Char; Str: String[10];
begin Str :=’ABCDEF’; Каков будет результат вывода WriteLn(' Ch=', Ch)после выполнения присваиваний:
а) Ch=Str[3], б) Ch=Str[6], в) Ch=Str[11], г) Ch=Str[13]?
5. В чем заключается назначение функции Length()?
6. В чем заключается назначение функций работы со строками Concat,Copy,Delete, Insert,Pos?
7. В чем заключается назначение процедур Str и Val ?
8. Какие преобразования символов выполняют функции Chr, Ord, UpCase ?
9. Определить, что будет выведено на экран после выполнения следующего программного кода:
Var Str_1, Str_2, Str_3:string[10];
begin
Str_1:='Computer';
Str_2:= copy(Str_1, 1, 4);
Str_3:=Str_2;
Insert('any', Str_3,5);
delete(Str_1,2, Length(Str_1)-2);
WriteLn(' Str_1=',Str_1,' Str_2=',Str_2,' Str_3=',Str_3);
end.
Практические задания.
1. Исправить текст программы из примера 3 п.9.2 таким образом, чтобы соседние буквы во введенном слове разделялись не пробелами, а запятыми и только в том случае, когда они различны. Одинаковые буквы не должны разделяться. Отладить код программы.
2. Разработать и отладить код программы, в которой с клавиатуры вводятся два слова, а затем из первого слова исключаются все буквы, входящие в первое. Результат вывести на экран. Если в первом слове не осталось букв, вывести сообщение “empty word ” (пустое слово).
9.3. Множества
В основу понятия множества в Паскале положено математическое определение конечного множества как ограниченного набора объектов (элементов), обладающих некоторыми общими свойствами. В качестве элементов множества можно использовать только перечисляемый или интервальный тип данных. Этот тип называют базовым для множества. Также используется понятие подмножества (в том числе и пустого), как набора элементов, входящих в базовое множество.
Формально определение множества схоже с определением массива. Отличия от массивов заключаются в следующем:
1) у множества ограничен тип элементов,
2) в математическом плане номер элемента в массиве не фиксирован, в массиве каждый элемент имеет свой фиксированный номер,
3) в массиве может быть любое количество элементов с одинаковыми значениями, в множестве такой элемент только один (т.е. включение в состав множества элементов 'a', 'c', 'a', 'b', 'c' даст в итоге множество вида ['a', 'b', 'c']).
9.3.1. Описание и инициализация множеств
Как и в случае других типов данных, множества могут быть описаны:
1) при помощи специального типа или
2) непосредственным описанием соответствующей им переменной.
Синтаксис описания множественного типа:
type M = Set of B;
где M - множественный тип, Set,of - служебные слова, B - базовый тип.
Базовый тип может быть задан пользователем или взят из стандартных типов.
Пример 1. Описание множественного типа, содержащего все строчные буквы латинского алфавита, а также переменной данного типа:
type LAT = Set of 'a'..'z';
var B: LAT;
Пример 2. Описание множественного типа, содержащего все символы (в качестве базового используется стандартный тип данных):
type CH = Set of char;
var SYM: CH;
Синтаксис непосредственного описания переменной множественного типа похож на синтаксис описания типа:
var M: Set of B;
Пример 3. Непосредственное описание переменной множественного типа, совпадающего с типом из примера 1:
var B: Set of 'a'..'z';
Постоянные значения (константы) множественного типа записывают в виде заключенной в квадратные скобки последовательности одиночных элементов или элементов-интервалов базового типа, разделенных запятыми. Константа вида [ ] означает пустое подмножество. Константы могут использоваться для задания базового типа, перечисление и задание интервалов могут сочетаться, например:
var B:Set of ['a','b','c']; С:Set of [0,2,7,13]; D:Set of [1,10..20,5];
Как и у массивов, инициализация величины множественного типа может производиться с помощью типизированных констант:
const B0: Set of LAT= []; {задание пустого подмножества множества LAT}
const digits: Set of char= [‘0’ .. ‘9’];{задание константы символьного типа}
Порядок перечисления элементов базового типа в константах безразличен.
Во внутреннем представлении элементы множества нумеруются, начиная с нуля. Количество базовых элементов в одном множестве не должно превышать 256. Поэтому, в частности, стандартные типы ShortInt, Word, Integer, LongInt, несмотря на то, что являются перечислимыми, базовыми для множеств быть не могут.
Базовые элементы задают основное множество, из которого могут в виде значений переменной данного типа формироваться отдельные экземпляры – подмножества.
Пример 4. Рассмотрим описание переменной множественного типа, содержащего две буквы a и b:
var v_ab: Set of 'a'..'b';
Переменная v_ab может принимать значения только из следующего набора подмножеств множества, задающего тип: [ ] [a] [b] [a b].
За счет того, что все базовые элементы множества один раз указываются в его объявлении, во внутреннем представлении каждой переменной такого множества присутствие или отсутствие каждого базового элемента отмечается в одном бите (1 - если такой элемент в множестве присутствует, 0 - иначе). Такое битовое представление используется для выполнения операций над множествами.
Пример 5. Битовое представление всех возможных подмножеств базового множества, заданного в типе переменной v_ab из примера 4:
1)[ ] – 00 (в пустое множество не входят оба базовых элемента);
2)[a] – 10 (входит первый элемент a, второй b - не входит);
3)[b] – 01 (a не входит, b входит);
4)[a b] – 11 (оба элемента входят).
Пример 6. Формирование значений величины множественного типа, содержащего базовые элементы 'a','b','с':
const
B_1='a'; B_2='b';
var
BB1,BB2: Set of 'a'..'c';
B: char;
begin
B:= 'с';
BB1:=[B_1, 'b', B];
BB2:=['a', B_2];
end.
При присваивании значений переменным множественного типа в качестве элементов в них могут засылаться не только константы и переменные базового типа, но также и выражения, у которых тип результата совпадает с базовым типом множества.
Пример 7. Рассмотрим формирование множеств байтового типа:
const
Bt_1=45; Bt_2=123;
var
B: byte;
BB1, BB2: Set of byte;
begin
x:=36;
BB1:=[1,11, Bt_1, Bt_2];
BB2:=[x,x+1, x+2, Bt_1*2, Bt_2-12];
end.