Организация работы с внешней памятью

Цель работы. Получить навыки написания программ, считывающие данные из внешнего файла и обрабатывающих эти данные.

Задание. Работа с внешними файлами.

Постановка задачи. Сформировать файл данных на внешнем носителе и определённым образом обработать его.

Варианты заданий

Для обработки текстовой информации в программе в соответствии с вариантами заданий лабораторной работы №12 данные считывать и записывать на внешний носитель.

Множества

Множества представляют собой структурированный тип данных. Множества – это наборы однотипных логически связанных друг с другом объектов (элементов или членов).

Использование в программе множеств даёт следующие преимущества: упрощаются сложные операторы if, увеличивается степень наглядности программы и понимания алгоритмов решения задачи, экономится память, время компиляции и выполнения.

Одной из причин редкого применения является очень низкая скорость выполнения операций с множествами.

Множество должно состоять из элементов одного и того же базового типа. Базовый тип определяет перечень всех элементов, которые могут содержаться в данном множестве. В качестве базового типа может выступать простой базовый порядковый тип (например, char ), кроме word, integer, longint.

Элементами множества Паскаля не могут быть вещественные числа (real не относятся к классу порядковых типов), стринги (string - это не простой тип).

Размер множества в Паскале всегда ограничен некоторым предельно допустимым количеством элементов. Величина предела зависит от конкретного компилятора. Для большинства реализаций языка предельное значение элементов множества 256 (это универсальное множество). Данная характеристика называется мощностью множества. Итак, количество элементов, входящих во множество, может меняться от 0 до 256.

Если рассматривается множество целых чисел, то его базовым типом не может быть integer, так как полное количество всех значений типа integer превышает 256 (-32768..+32767). В этом случае базовым типом может быть отрезок 0..255, 9..50 и т. п. Отрицательные числа в Паскале как элементы множества недопустимы. 256 – универсальное множество.

Для задания множества используется следующий конструктор множества: список спецификаций элементов множества, отделяемых друг от друга запятыми; список обрамляется квадратными скобками [].

Порядок элементов во множестве значения не имеет. Многократное повторение какого либо элемента роли не играет.

Например, множества [2, 2, 4, 6] и [2, 4, 6] одинаковы.




Объявление множества

Всему множеству в целом даётся имя, которое объявляется в разделе var или type. Для описания множественного типа используется словосочетание SET OF (множество из …).

TYPE <имя типа> = SET OF <базовый тип>;

VAR <имя множества> : <имя типа>;

Здесь, <имя типа> - правильный идентификатор;

SET OF – зарезервированные слова (множество, из);

<базовый тип> - базовый тип элементов множества, в качестве которого может использоваться любой порядковый тип, кроме WORD, INTEGER, LONGINT.

Пример 13.1.

TYPE m = set of char;

CONST d1 : m = [‘0’..’9’];

d2 : m = [‘a’..’z’, ’A’..’Z’];

Пример 13.2.

TYPE m = 11..19;

m1 = set of ‘a’..’f’;

VAR a : set of m;

a1 : m1;

a2 : set of 1..31;

Пример 13.3.

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];

…..

End.

Множество, не содержащее элементов, называется пустым или нуль множеством, и обозначается [].

Например, const M = [];

Здесь, множества S1 и S2 эквивалентны, а множество S3 включено в S2, но не эквивалентно ему.

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

1. Объединение А и В есть новое множество, состоящее из элементов, принадлежащих множеству А или В, или тому и другому одновременно.

Например,

S4 + S5 содержит [0, 1, 2, 3, 4, 5,6];

S5 + S6 содержит [3, 4, 5, 6, 7, 8, 9];

Объединять можно только множества одного базового типа.

2. Пересечение А * В есть новое множество, состоящее из элементов, принадлежащих и А, и В.

Например,

S4 * S6 содержит [3,6];

S4 * S5 – пустое множество.

3. Разность А – В есть новое множество, состоящее только из тех элементов А, которых нет в В (из А убираются все элементы, которые обнаружены в В).

Например,

S6 – S5 содержит [3, 6, 7, 8, 9];

S4 – S5 содержит [0, 1, 2, 3, 6];

Сравнение множеств

В Паскале множества сравнивают между собой применяя операции отношения.

1. Два множества А и В равны, если каждый элемент множества А является элементом множества В и наоборот, то есть А = В.

2. Множество А есть подмножество множества В, если каждый элемент А присутствует в В: А <= В или В >= А.

3. Принадлежность множеству (оператор in). Пусть А – множество элементов базового типа, а X – переменная этого типа. Выражение X in A истинно, если X является элементом множества А.

Например,

3 in S6 возвращает TRUE;

2 * 2 in S1 возвращает FALSE;

Дополнительно к этим операциям можно использовать две процедуры: INCLUDE - включает новый элемент во множество.

Обращение к процедуре:

INCLUDE (S, I);

Здесь, S – множество, состоящее из элементов базового типа;

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

И вторая процедура EXCLUDE – исключает элемент из множества.

Обращение к процедуре имеет вид:

EXCLUDE (S, I);

Например,

VAR

chars1, chars2, chars3 : set of char;

…..

chars1 := [‘a’, ‘x’, ‘o’];

chars2 := chars1 – [‘a’]; {то есть chars2 = [‘o’, ‘x’];}

chars3 := chars1 + chars2 + [‘e’]; {то есть chars3 = [‘a’, ‘x’, ‘e’, ‘o’]}

not (‘g’ in chars2) – ‘g’ не является элементом chars2.

Выражение

chars1 <> chars2 – множества не совпадают по составу входных элементов;

chars1 >= chars2 – каждый элемент chars2 присутствует и в chars1;

chars1 <= chars3 – каждый элемент chars1 присутствует и в chars3;

‘a’ in chars1 – элемент ‘a’ присутствует во множестве chars1;

Наши рекомендации