Тип данных множество. Представление в памяти. Основные операции с множествами. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тип данных множество. Представление в памяти. Основные операции с множествами.



Множества

Множество напоминает перечислимый тип, но отличается от него тем, что элементы

в нем не упорядочены (в множестве нет ни самого младшего, ни самого старшего

элементов). В множество входят также все допустимые подмножества (все мысли-

мые комбинации его элементов), что приводит к огромному числу вариантов,

поэтому количество элементов в множестве не может быть больше, чем 256.

Множество описывается так:

type тип-множества = eet of диапазон-значений-множества;

В качестве диапазона указывается любой тип Паскаля, число элементов в котором

не более 256: Char, Byte, 0..255, TFootballTeam и так далее.

type MySet = set of 0.. 2 5 5;

type MySet = set of Byte;

type MySet = set of (Spartak, CSKA, Dynamo!;

Конкретные значения множества задаются перечислением списка значений через

запятую, который берется в квадратные скобки.

MySet:= [1, 2, 5, 10];

В таком списке можно дополнительно указывать диапазоны значений:

MySet:= [2, 4, 8, 12..21];

Дополнительные операции над множествами описаны в следующей таблице.

Таблица 1.6. Дополнительные операции над множествами

Название операции Действие

+ (объединение) Результирующее множество состоит из элементов обеих множеств,

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

Выражение [1,2,3] +• [3/4,5] равно [1,2,3,4,5]

- (разность) Результирующее множество состоит из тех элементов множества,

указанного в качестве левого операнда, которые отсутствуют во

множестве, указанном в качестве правого операнда.

Выражение [1,2,3] - [3,4,5] равно [1,2]

* (пересечение) Результирующее множество состоит из элементов, имеющихся

в каждом из множеств,указанных в качестве операндов.

Выражение [1,2,3] * [3,4,5] равно [3]__

При работе с множествами допускается использование операций отношения (=, <>, >=, <=), объединения, пересечения, разности множеств и операции in.

Операции сравнения (=, <>). Два множества считаются равными, если они состоят из одних и тех же элементов. Порядок следования элементов в сравниваемых множествах значения не имеет. Два множества A и B считаются не равными, если они отличаются по мощности или по значению хотя бы одного элемента.

Выражение Результат
[1, 2] <> [1, 2, 3] True
[1, 2] = [1, 2, 2] True
[1, 2, 3] = [3, 2, 1] True
[1, 2, 3] = [1..3] True

Операции принадлежности (>=, <=). Выражение A >= B равно True, если все элементы множества B содержатся в множестве A. Выражение A <= B равно True, если выполняется обратное условие, т.е. все элементы множества A содержатся в множестве B.

Выражение Результат
[1, 2] <= [1, 2, 3] True
[1, 2, 3] >= [1, 2] True
[1, 2] <= [1, 3] False

Операция in. Используется для проверки принадлежности элемента указанному множеству. Обычно применяется в условных операторах.

Выражение Результат
5 in [1..9] True
5 in [1..4, 6..9] False

Операция in позволяет эффективно и наглядно выполнять сложные проверки условий, заменяя иногда десятки других операций. Например, оператор

if (X = 1) or (X = 2) or (X = 3) or (X = 5) or (X = 7) then

можно заменить более коротким:

if X in [1..3, 5, 7] then

Операцию in иногда пытаются записать с отрицанием: X not in S. Такая запись является ошибочной, так как две операции следуют подряд. Правильная запись имеет вид: not (X in S).

Процедура Include (S, I) включает в множество S элемент I. Она дублирует операцию + (плюс) с той лишь разницей, что при каждом обращении включает только один элемент и делает это более эффективно.

Процедура Exclude (S, I) исключает из множества S элемент I. Она дублирует операцию – (минус) с той лишь разницей, что при каждом обращении исключает только один элемент и делает это более эффективно.

Выражение Результат
S:= [1, 3]; [1, 3]
Include(S, 2); [1, 2, 3]
Exclude(S, 3) [1, 2]

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

12. Способы преобразования типов в Delphi.(еще чет для классов надо)

Преобразование типов

В ряде случаев требуется гарантировать, что результат вычисления выражения при-

надлежит конкретному типу. Например, вычисления могут производиться над чис-

лами типа Longint, а результат должен принадлежать типу Byte. Такая операция

называется приведением типов. Для этого применяют так называемые преобразо-

ватели типов, которые напоминают стандартные функции Паскаля с именами, сов-

падающими с именами базовых типов (Byte, Integer и другие). Результат, возвраща-

емый таким преобразователем, гарантированно лежит в диапазоне указанного типа.

При этом, конечно, возможна потеря значащих цифр: берется остаток от деления

значения аргумента на максимально допустимое значение соответствующего типа.

Определение собственных типов данных 53

Например, значение Byte{300) равно 44

var X: Integer;

L: Longint;

Begin

X;= IntegerjL * 1234567);

Однако подобным способом невозможно преобразовать число типа Real в число типа

Integer или любое число в строку. Для таких, более сложных, преобразований типов

в Delphi 7 имеется набор стандартных функций, упрощающих процесс преобразован! 1я.

Таблица 1.9. Стандартные функции преобразования типов

Имя функции Назначение

Round Округление дробного числа до ближайшего целого. Значение Round{ 3.74) равно 4

Trunc Отбрасывание дробной части числа. Значение Тшпс(3.74) равно 3

IntToStr Преобразование целого числа в строку. Значение IntToStr(12987) равно '12987'

FloatToStr Преобразование дробного числа в строку. Значение FloatToStr(3.74) равно '3.74'

StrToInt Преобразование строки в целое число. Значение StrToInt('129B5') равно 12985

StrToFloat Преобразование строки в дробное число. Значение StrToFloatf '3.14') равно 3.14

Приведение типов переменных

Помимо стандартных функций, в Паскале имеется еще одна возможность явно ука-

зывать, в какой тип должны быть приведены конкретные данные. Эта возможность

используется в операторе присваивания, когда переменная, стоящая в левой части,

≪охватывается^ названием типа, соответствующего типу выражения правой части

оператора. Например:

var С: Byte;

Char(C):= ' А ';

Переменной С будет присвоен код ASCII символа 'А'. При этом необходимо, чтобы

длины (в байтах) переменной и присваиваемого значения совпадали.

Другая форма записи этого оператора:

С:= Byte(' А ');__

http://www.programmersclub.ru/is-as-gruzin/ про классы



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 243; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.107.90 (0.01 с.)