АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Множества

Читайте также:
  1. Вхождение Казахстана в состав России – как результат множества политических, военных, социально-экономических и других факторов.
  2. Индуизм – соединение множества религий и культов
  3. МНОЖЕСТВА.
  4. Множество, элементами которого являются другие множества, называется КЛАССОМ или СЕМЕЙСТВОМ.
  5. Операции над множествами.
  6. СПОСОБЫ УКАЗАНИЯ ПОДМНОЖЕСТВА ТОЧЕК

Множества – наборы логически связанных друг с другом объектов. Характер связей между объектами лишь подразумевается программистом и никак не конт­ролируется Delphi. Количество элементов, входящих во множество, может меняться в пределах от 0 до 256 (множество, не содержащее элементов, называется пустым). Именно непостоянством количества своих элементов множества отличаются от массивов и записей.

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

Пример определения и задания множеств:

Type

digitChar = set of '0'.. '9';

digit = set of 0..9;

Var

sl, 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.

В этом примере множества s1 и s2 эквивалентны, а множество s3 включено в s2, но не эквивалентно ему.

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

<имя типа> = set of <базовый тип>;

Здесь <имя типа> – правильный идентификатор; set, of – зарезервирован­ные слова (множество, из); <базовый тип> – базовый тип элементов множе­ства, в качестве которого может использоваться любой порядковый тип, кроме Word, Integer, Longlnt, Int64.

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

Над множествами определены следующие операции:

· пересечение множеств (*); результат содержит элементы, общие для обоих мно­жеств; например, s4*s6 содержит [3], s4* s5 – пустое множество (см. выше);

· объединение множеств (+); результат содержит элементы первого множества, дополненные недостающими элементами из второго множества:

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

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

· разность множеств (-); результат содержит элементы из первого множества, которые не принадлежат второму:

s6-s5 содержит [3,6,7,8,9];

s4-s5 содержит [0,1, 2, 3, 6];

· проверка эквивалентности (=); возвращает True, если оба множества эквива­лентны;

· проверка неэквивалентности (<>); возвращает True, если оба множества неэк­вивалентны;

· проверка вхождения (<=); возвращает True, если первое множество включено во второе;

· проверка вхождения (>=); возвращает True, если второе множество включено в первое;

· проверка принадлежности (in); в этой бинарной операции первый элемент – выражение, а второй – множество одного и того же типа; возвращает True, если выражение имеет значение, принадлежащее множеству:

3 in s6 возвращает True;

2*2 in s1 возвращает False.

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

Процедура Include включает новый элемент во множество. Обращение к про­цедуре:

Include (S, I)

Здесь S – множество, состоящее из элементов базового типа TSetBase; I – элемент типа TSetBase, который необходимо включить во множество. Процедура Exclude исключает элемент из множества. Обращение:

Exclude(S,I)

Параметры обращения – такие же, как у процедуры Include.

В отличие от операций + и -, реализующих аналогичные действия над двумя множествами, процедуры оптимизированы для работы с одиночными элементами множества и поэтому отличаются высокой скоростью выполнения.

Строки

Для обработки текстов в Delphi используются следующие типы:

· короткая строка ShortString или String [N], где N<=255;

· длинная строка String или AnsiString;

· широкая строка WideString;

· заканчивающаяся нулем строка PChar.

Общим для этих типов является то, что каждая строка трактуется как одномер­ный массив символов, количество элементов в котором может меняться в работа­ющей программе: для String [N] длина строки меняется от 0 до N, для String, WideString и PChar – от 0 до 2 Гбайт.

В стандартном языке Паскаль используются только короткие строки String [N]. В памяти такой строке выделяется N+1 байт, первый байт содержит текущую длину строки, а сами символы располагаются, начиная со 2-го по счету байта. Поскольку для длины строки в этом случае отводится один байт, макси­мальная длина короткой строки не может превышать 255 символов. Для объявле­ния короткой строки максимальной длины предназначен стандартный тип Short-String (эквивалент String [255]).

В Windows широко используются заканчивающиеся нулем строки, представ­ляющие собой цепочки символов, ограниченные символом #0. Максимальная дли­на такой строки лимитируется только доступной памятью и может быть очень боль­шой.

В 32-разрядных версиях Delphi введен новый тип String, сочетающий в себе удобства обоих типов. При работе с этим типом память выделяется по мере надоб­ности (динамически) и ограничена имеющейся в распоряжении программы дос­тупной памятью.

Для совместимости с компонентами, основывающимися на OLE-технологии, в 32-разрядных версиях Delphi введены также широкие строки, объявленные стан­дартным типом WideString. По своим свойствам они идентичны длинным стро­кам String, но отличаются от них тем, что для представления каждого символа используются не один, а два байта.

Примеры объявлений строковых типов:

var

ssS: String[250]; // Короткая строка длиной до 250 символов

ssMax: ShortString // Короткая строка длиной до 255 символов

stS: String; // Длинная строка

swS: WideString; // Широкая строка

pcS: PChar; // Ссылка на заканчивающуюся нулем строку

acS: array [0..1000] of Char; // Заканчивающаяся нулем строка длиной до 1000 символов

При объявлении переменной ssS компилятор выделяет для ее размещения 250 + 1 = 251 байт и помещает в первый байт 0 – текущую длину строки. Рассмот­рим следующий фрагмент программы:

Var

ssS: String[250];

Begin

ssS:= 'Строка символов';

ssS[6]:= 'и'; // Буква ‘а’ – 6 символ заменяется на букву ‘и’

writeln(ssS); // Выводится строка "Строки символов"

readln;

end.

При выполнении этого фрагмента сначала в переменную ssS будет помещена цепочка символов «Строка символов», причем 1-й байт получит значение 15 (ко­личество символов в строке). После выполнения второго оператора символ с ин­дексом 6 (индексация байтов начинается с 0, но поскольку первый байт содержит текущую длину, первый символ в строке имеет индекс 1) будет заменен символом «и», и в переменной окажется цепочка «Строки символов».

Операции отношения (=, < >, >, <, >= и <=) выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменя­ются значением #0.


1 | 2 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.)