Структурированные типы. Тип «множество»

   
На этом шаге мы рассмотрим описание типа "множество".

   
Термин "множество" в программировании используется аналогично его математическому пониманию. Отличие состоит в том, что в Object Pascal множества могут
включать элементы только порядковых типов. Элементы какого-либо конкретного множества (переменной или типизированной константы) должны принадлежать одному типу, который называется
базовым типом. Максимальное количество значений базового типа множества называется его мощностью. В Object Pascal в качестве базовых могут использоваться порядковые типы,
мощность которых не превышает 256-ти значений. Кроме того, порядковые значения верхней и нижней границы базового типа не должны выходить за пределы диапазона от 0..255. Поэтому, в качестве базовых типов множеств не могут
использоваться Integer, Word и некоторые другие.

   
Приведем таблицу с графическим пояснением операций, допустимых для множеств.

Таблица 1. Операции над множествами

Математическое обозначениеОбозначение в Borland PascalДействиеПример
*Пересечение
+Объединение
-Разность
inПринадлежность (элемента множеству)
<=>=Является подмножествомВключает подмножество

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

   
Задача. Подсчитать в текстовом файле отдельно число цифр и латинских букв.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
type
  CharSet = set of Char;
const
  Digits : CharSet = ['0'..'9'];
  Letters: CharSet = ['a'..'z','A'..'Z'];
var
  CountDig,
  CountLet : Word;
  Finp     : System.Text;
  Ch       : Char;
  S : String;
begin
  System.AssignFile (Finp, 'TESTSETS.DAT');
  System.Reset (Finp);
  CountDig := 0;
  CountLet := 0;
  while not eof (Finp) do
  begin
    Read ( Finp, Ch );
    if Ch in Digits then CountDig := CountDig + 1;
    if Ch in Letters then CountLet := CountLet + 1;
  end;
  Str (CountLet:5,S);
  Edit1.Text := S;
  Str (CountDig:5, S);
  Edit2.Text := S;
end;

end.

Текст этого примера можно взять здесь.

   
Для исходного файла:

  a 0 b 6 fgrtrw4556 
  dgfg 567 #$%^%^ fhhf655 
  56456##$

будет получен такой результат:


Рис.1. Результат работы приложения

   
Используемое в программе множество Letters при необходимости может быть получено из двух других множеств

    SmallLetters = ['а'..'z']; 
    BigLetters = ['A'..'Z'];

операцией сложения (объединения):

    Letters := SmallLetters + BigLetters;

   
Возможно также и обратное действие: из множества Letters получить SmallLetters и BigLetters с помощью операции разности множеств.

    SmallLetters := Letters - ['A'..'Z']; 
    BigLetters := Letters - ['a'..'z'];

   
На следующем шаге мы рассмотрим тип "запись".



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий