|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
МножестваМножества – наборы логически связанных друг с другом объектов. Характер связей между объектами лишь подразумевается программистом и никак не контролируется 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. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.) |