Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по курсу.docx
Скачиваний:
107
Добавлен:
24.02.2016
Размер:
2.8 Mб
Скачать

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

К множествам применимы операции:

Объединение множеств (+): D=A+B={oi, о2, о3, о4, о5}, множество D состоит из элементов, входящих или в А или в В.

Разность множеств (-): Е=А-В={ о2, о5}, множество Е состоит из эле­ментов множества А, не входящих в В.

Пересечение множеств (*): F=A*B={oi, о4}, множество F состоит из элементов, одновременно входящих в А и в В.

Равенство (=): А= В, результат равен true, если множества А и В со­стоят из одних и тех же элементов.

Неравенство (<>): А <> В, результат равен true в противном случае.

Подмножество (<=): A<=B, результат равен true, если все элементы множества А являются элементами множества В.

Надмножество (>=): A>=B, результат равен true, если все элементы множества В являются элементами множества А.

Принадлежности (in): со in A, результат равен true, если элемент со входит в множество А.

Кроме того, эти операции дополняют две процедуры:

Include (s, i); - добавляет в множество s элемент i;

Exclude (s, i); - исключает из множества s элемент i.

Элемент i должен быть базового типа. Эти операции выполняются зна­чительно быстрее, чем их эквиваленты s:=s+[ i ]; s:=s - [ i ];

10.3. Примеры работы с множествами

1. Ввод n элементов множества: 2. Распечатать содержимое мно-

жества:

Var a : set of char;

s : char;

n : word; begin

a:=[ ]; // пустое множество for i:=1 to n do begin read(s); a:=a+[s]; end;

end.

Var b : set of 1..100;

k : byte; begin

for k:=1 to 100 do

if k in b then Write(k);

end.

3. Использование множеств в ряде случаев позволяет в более компакт- ном виде записать проверку условия, например, вместо оператора:

if (k=5) or (k=1) or (k=8) or (k=12) then . . . записать: if k in [5, 1, 8, 12] then . . .

4. Выделить отдельные слова из строки символов и вывести их в алфа- витном порядке. Пример программы приведен ниже.

К Работа с ComЬоВох+множества (^][п][Х

[sss]]]] ..! {{{{ ааа хх zz ЬЬЬ [sss]]]] ..! {{{{ ааа хх zz ЬЬЬ

unit Unitl;

Interface

uses Windows,Messages,SysUtils,Variants,Classes,

Graphics,Controls,Forms,Dialogs,StdCtrls,Buttons;

type

TForml = class(TForm) ComboBoxl: TComboBox; BitBtnl: TBitBtn; Memol: TMemo;

procedure FormActivate(Sender: TObject); procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);

procedure ComboBox1Click(Sender: TObject); private

{ Private declarations } public

{ Public declarations }

end;

var Forml: TForml;

implementation {$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject); begin

combobox1.setfocus;

memo1.Clear; end;

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);

begin

if key=#13 then begin

combobox1.items.add( combobox1.text);

combobox1.text:='';

end;

end;

procedure TForm1.ComboBox1Click(Sender: TObject); const c : set of char = ['

i.i 1 I 1 1 \ 1 1 9 1 'i' ' г л л 1 ' лл mm*

;, (, ), - ,,[, ] , {, }];

//

список разделителей

var s : string;

n ,k, i : integer;

a : array[1..100] of string;

begin

s:= combobox1.text; memo1.clear;

s:=s+' '; n:=0;

while s <> do

begin // удаление начальных разделителей while (s <> '') and (s[1] in c) do de-lete(s,1,1);

if s <> '' then begin

for k:=1 to length(s) do

if s[k] in c then break; n:=n+1;

a[n]:=copy(s,1,k-1); delete(s,1,k); end; end;

// Сортировка по алфавиту for i:=l to n-l do for k:=1 to n-i do

if a[k]>a[k+1] then begin s:=a[k]; a[k]:=a[k+1]; a[k+1]:=s; end;

for k:=1 to n do memo1.lines.add(a[k]); end; end.

ЛЕКЦИЯ 11. ИСПОЛЬЗОВАНИЕ СТРОКОВЫХ ДАННЫХ