ТОП 10:

Стандартные процедуры для работы с множествами



В язык Delphi введены две стандартные процедуры Include и Exclude, которые предназначены для работы с множествами.

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

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

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

13. Записи. Описание, задание значений полей, работа с записями. Примеры.

Объявление записи

Запись — это составной тип данных, состоящий из фиксированного числа элементов одного или нескольких типов. Описание типа записи начинается словом record и заканчивается словом end. Между ними заключен список элементов, называемых полями, с указанием идентификаторов полей и типа каждого поля:

type <имя записи> = record

<список имен полей1>: тип1;

...

<список имен полей…>: тип…;

end.

 

Пример:

 

type TPerson = record FirstName: string[20]; // имя LastName: string[20]; // фамилия BirthYear: Integer; // год рождения end;

Особенности:

1. Идентификаторы полей должны быть уникальными только в пределах записи.

2. Допускается вложение записей друг в друга, т.е. поле записи может быть в свою очередь тоже записью.

Чтобы получить в программе реальную запись, нужно создать переменную соответствующего типа:

var Friend: TPerson;

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

Доступ

Доступ к содержимому записи осуществляется посредством идентификаторов переменной и поля, разделенных точкой. Такая комбинация называется составным именем. Например, чтобы получить доступ к полям записи Friend, нужно записать:

Friend.FirstName := 'Alexander';Friend.LastName := 'Ivanov';Friend.BirthYear := 1991;

Обращение к полям записи имеет несколько громоздкий вид, что особенно неудобно при использовании мнемонических идентификаторов длиной более 5 символов. Для решения этой проблемы в языке Delphi предназначен оператор with, который имеет формат:

with <запись> do <оператор>;

Однажды указав имя записи в операторе with, можно работать с именами ее полей как с обычными переменными, т.е. без указания идентификатора записи перед идентификатором поля:

with Friend dobegin FirstName := 'Alexander'; LastName := 'Ivanov'; BirthYear := 1991;end;

Операции над записями

Допускается применение оператора присваивания и к записям в целом, если они имеют один и тот же тип. Например,

Friend := BestFriend;

После выполнения этого оператора значения полей записи Friend станут равными значениям соответствующих полей записи BestFriend.

2.11.3. Записи с вариантами

Строго фиксированная структура записи ограничивает возможность ее применения. Поэтому в языке Delphi имеется возможность задать для записи несколько вариантов структуры. Такие записи называются записями с вариантами. Они состоят из необязательной фиксированной и вариантной частей.

Вариантная часть напоминает условный оператор case. Между словами case и of записывается особое поле записи – поле признака. Оно определяет, какой из вариантов в данный момент будет активизирован. Поле признака должно быть равно одному из расположенных следом значений. Каждому значению сопоставляется вариант записи. Он заключается в круглые скобки и отделяется от своего значения двоеточием.

type <имя записи> = record

<список имен полей1>: тип1;

...

<список имен полей…>: тип…;

case <поле признака>: ordinalType of

<список значений1>: (вариант1);

...

<список значений…>: (вариант…);

end,

 

где <поле признака> - корректный идентификатор, который может принимать значения порядкового типа; ordinalType – идентификатор порядкового типа; <список значений…> - список значений поля признака, разделенных ‘,’; (вариант…) – список имен полей с типами, заключенных в круглые скобки.

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

type TFigure = record X, Y: Integer; case Kind: Integer of 0: (Width, Height: Integer); // прямоугольник 1: (Radius: Integer); // окружностьend;

Обратите внимание, что у вариантной части нет отдельного end, как этого можно было бы ожидать по аналогии с оператором case. Одно слово end завершает и вариантную часть, и всю запись.

14. Основные компоненты VCL для работы со строками, массивами строк (Label, Edit, LabeledEdit, Memo, StringGrid), их свойства.

EDIT

Компонент Edit используется для ввода, вывода и редактирования строк. Отображается строка, записанная в свойстве Text. Строки могут быть достаточно длинные. Однако этот компонент не распознаёт символов конца строки и не может быть использован для работы с несколькими строками. С помощью компонента Edit можно отобразить нередактируемый текст, если свойству ReadOnly присвоить значение true.

Для изменения шрифта, используемого при записи текста, необходимо изменить значение свойства Font. Свойство CharCase используется для задания регистра символов, а свойство MaxLength позволяет ограничить длину строки.

Метод Clear применяется для удаления всего текста, а метод ClearSelection – для удаления выделенной части строки. По умолчанию введённый текст выделяется при получении компонентом фокуса ввода – это определяется значением свойства AutoSelect (если true – то выделяется). Компонент Edit можно использовать для ввода пароля. Для этого свойству PassWordChar необходимо присвоить значение символа, который будет отображаться на экране при наборе пароля.

MEMO

Компонент Memo предназначен для ввода, редактирования и отображения текста. В отличие от редактора Edit может содержать несколько строк, которые задаются либо свойством Text, либо свойством Lines. Свойство Text используется для доступа ко всему содержимому компонента, а свойство Lines – для работы с отдельными строками. Редактор Memo может содержать полосы прокрутки ScrollBars.

Многострочный редактор хранит информацию в массиве Lines типа TStrings. Для загрузки текста из файла используется метод LoadFromFile. Для сохранения информации в файле используется метод SaveToFile. При необходимости добавить, удалить, вставить строку используются методы Add, Delete, Insert. Для записи текста в процессе проектирования приложения надо открыть окно редактора String list editor кнопкой, расположенной в Инспекторе объектов у свойства Lines.

В примере редактор Memo1 очищается, и в него с помощью метода Add выводятся значения из массива целых чисел x. Так как компонент Memo работает со строками, то предварительно выполняется перевод целого числа в строку функцией inttostr:

Memo1.Lines.Clear;for i:=0 to n-1 do Memo1.Lines.Add(inttostr(x[i]));

STRINGGRID

Компонент StringGrid имеют форму таблиц, предоставляют программисту мощные возможности создания и обслуживания табличных структур данных, позволяют отображать и редактировать данные в каждой ячейке

таблица StringGrid, предназначеная для работы с текстовыми данными.

Таблица делится на две части – фиксированную и рабочую. Фиксированная часть служит для отображения заголовков столбцов/рядов и для ручного управления их размерами. Обычно фиксированная часть занимает крайний левый столбец и самый верхний ряд таблицы. Остальная часть таблицы – рабочая, она содержит произвольное число столбцов и рядов. Количество рядов и столбцов можно изменять в Инспекторе объектов и программно. По умолчанию свойства ColCount и RowCount, определяющие размеры таблицы, имеют значение 5. С помощью сложного свойства Options определяется внешний вид и функциональные свойства таблицы. Так, параметр goEditing управляет режимом редактирования. Чтобы можно было вводить в таблицу данные и редактировать содержимое ячеек, параметр goEditing надо установить в true. При работе приложения пользователь может вводить данные только в ячейки рабочей области. Однако программно может быть реализован доступ к любым ячейкам таблицы.

Свойство Cells[ACol,ARow:integer]:String обеспечивает доступ к отдельным ячейкам и представляет собой двумерный массив, содержащий строки текста ячеек таблицы. Размеры массива определяются значениями свойств ColCount и RowCount. Параметр ACol указывает колонку ячейки, а параметр ARow – её строку. Доступ к ячейкам таблицы осуществляется во время выполнения приложения. Для примера зададим нужное число строк таблицы и запишем заголовки первого и второго столбца:

StringGrid1.RowCount:=10;StringGrid1.Cells[0,0]:='Аргумент';StringGrid1.Cells[1,0]:='Функция';

Свойство Objects[ACol,ARow:integer]:TObject обеспечивает доступ к объекту, связанному с ячейкой (ACol, Arow). Это свойство применяется, в основном, для связывания изображения со строками и использования их для специфического отображения данных в таблице. Следующая строка помещает объект MyBitmap типа TBitmap в 10-ю колонку, 3-ю строку таблицы StringGrid:

StringGrid1.Objects[10,3]:= MyBitmap;

Если объект был помещен в массив Objects, он продолжит своё существование даже после того, как таблица StringGrid будет удалена. Свойство Cols[index:integer]:TString – представляет собой список строк, содержащий значения всех ячеек колонки с номером index. Это свойство используется для получения доступа к любому столбцу.

Свойство Rows[index:integer]:TString обеспечивает доступ к ряду с номером, заданным параметром index. Для примера выполним копирование первой строки StringGrid2 в четвёртую строку StringGrid1:

StringGrid1.Rows[4].Assign(StringGrid2.Rows[1]);

Аналогично можно выполнять копирование в любые компоненты, имеющие свойства класса TString, например, в ComboBox или ListBox. Компонент StringGrid позволяет выбирать значения, отображённые в ячейках, во время работы приложения. В момент выбора ячейки генерируется событие OnSelectCell, в обработчик которого передаются номера столбца ACol и строки ARow выделенной ячейки. Это событие позволяет использовать в программе значение из выбранной ячейки:







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

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