Главная/Раздел  5

 

 

Главная

 

 Раздел 1

 

Раздел 2

 

Раздел 3

 

Раздел 4

 

Раздел 5

 

 

 

Сложные типы данных.
Множества

Тип "множество" является одним из сложных типов данных системы программирования Turbo Pascal 7.0. Тип "множество" является множеством всевозможных сочетаний объектов исходного порядкового типа. Число элементов исходного множества в Turbo Pascal не должно превышать 256. Все значения базового типа, образующие конкретные значения множественного типа, должны быть различны. Порядок "расположения" элементов в множестве никак не фиксируется. Это соответствует принятой в математике трактовке множества как бесповторной неупорядоченной совокупности объектов.

Описание (декларация) типа множество.

Для задания типа "множество" следет использовать служебные слова set и of, а затем указать элементы этого множества, как правило, в виде перечисления или диапазона, например:

     Type
      Alfa = set of 'A'..'Z';
      Ten = set of 0..9;
      Count = set of (Plus, Minus);
   Введя тип "множество", можно задать переменные этого типа.
     Var
      CAlfa: Alfa;
      U233: Ten;

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

     Var
      CAlfa: set of 'A'..'Z'
      Operation: set of (Plus, Minus);
      U233: set of 0..9;
      C: set of char;

Присвоение для переменных типа множество.

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

     CAlfa := ['A', 'B', 'C'];
     C := [chr(0)..chr(31), 'D', 'F'];

В каждое множество включается и т.н. пустое множество [], не содержащее никаких элементов. Конструктор множества можно использовать и непосредственно в операциях над множествами.

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

Так же как и в математике в системе программирования Turbo Pascal 7.0 над множествами применимы следующие операции:

+ - объединение множеств. C := A+B;

Каждый элемент множества C является элементом либо множества A, либо множества В.

    
    - - разность множеств. C := A-B;

Каждый элемент множества C является элементом множества A, но не является элементом множества В.         

   * - пересечение множеств. C := A*B;

Каждый элемент множества C является элементом множества A и B одновременно.

= - проверка эквивалентности двух множеств. A = B; 

Множество A равно множеству B, если каждый элемент множества A является элементом множества B, и наоборот, каждый элемент множества B является элементом множества A. Результат операции логическая величина.

<> - проверка неэквивалентности двух множеств. A <> B;

Множество A не равно множеству B, если множество A содержит хотя бы один элемент, не являющийся элементом множества B, или (и) наоборот, множество B содержит хотя бы один элемент, не являющийся элементом множества A. Результат операции логическая величина.

<= - проверка, является ли левое множество подмножетвом правого.

A <= B; Множество A является подмножеством множества B, если все элементы множества A являются элементами множества B. Результат операции логическая величина.

>= - проверка, является ли правое множество подмножеством левого.

A >= B; Действие операции аналогично действию предыдущей операции. Результат операции логическая величина.

in - проверка, входит ли элемент (слева) в множество (справа).

 C in B; результат операции логическая величина.

Примеры программ.

ПРИМЕР 1.

Из множества целых чисел 1..20 выделить: множество чисел, делящихся на 6 без остатка; множество чисел делящихся на 2 или на 3 без остатка. Вывести содержимое этих множеств на экран.

Program a6_23;

Var
 N6 : set of integer;   {множество чисел, делящихся на 6}
 N23 : set of integer;  {множество чисел, делящихся на 2 и 3}
 k: integer;            {параметр цикла с параметром}

Begin

 N6 := [];              {"обнуление" множества N6}
 N23 : = [];            {"обнуление" множества N23}

     { формирование множеств}

 For k:=1 to 20 do begin
   if k mod 6 = 0 then N6 := N6 + [k];
   if (k mod 2 = 0) or (k mod 3 = 0) then N23 := N23 + [k];
                   end;

     { вывод содержимого множеств}

 Writeln(' На 6 без остатка делятся числа: ');
  for k:=1 to 20 do
  if k in N6 then write(k:3);

 Writeln;
 Writeln(' На 2 или 3 без остатка делятся числа: ');
  for k:=1 to 20 do
  if k in N6 then write(k:3);

 Readln; { пауза }

End.

ПРИМЕР 2.

Ввести строку символов, состоящую из латинских букв цифр и пробелов. Осуществить проверку правильности введённых символов.

Program Verify_string;

Var
  s: string;
  m: set of char;
  k: integer;
  Done: boolean;

Begin

     { формирование контрольного множества символов}
 m := [ '0'..'9', 'A'..'Z',  'a'..'z', ' '];

     { ввод строки
       ----------- }
 Writeln(' Введите строку: ');
 Readln(s);

     { проверка правильности строки}
 done := true;
 for k:=1 to Length(s) do
 if not (s[k] in m) then done := false;

     { вывод результата}
 if done then
   writeln('Правильная строка. ');
         else
   writeln('Неправильная строка. ');

 Readln;   { пауза }

End.

Контрольные вопросы.

  1. Что такое множество?
  2. Какие операции над множествами вы знаете?
  3. Как записываются операции над множествами в системе программирования Turbo Pascal 7.0?
  4. Что такое конструктор множества и когда он применяется?
  5. Как объявляются (декларируются) переменные типа множество?
  6. Что такое пустое множество и как оно задаётся?
  7. Как организовать вывод элементов множества?

Задания для самостоятельного выполнения.

  1. Из множества целых чисел 1..100 выделить множество чисел на которые делится без остатка число 444. Вывести это множество на экран.
  2. Из множества латинских букв выделить множество состоящее из символов не входящих в множество символов составляющих ваше имя. Вывести это множество на экран.
  3. Определить и вывести на экран множество символов входящих одновременно в имя, отчество, и фамилию, введённые с клавиатуры.
  4. Определить и вывести на экран множество символов входящих только в имя, отчество или фамилию, введённые с клавиатуры.
  5. Определить и вывести на экран множество символов входящих в диапазон '0'..'9' и не входящих в множество символов, составляющих дату рождения, введённую с клавиатуры.
  6. Из множества целых чисел 1..100 выделить множество чисел, являющихся, в свою очередь, квадратами целых чисел.
  7. Из множества целых чисел вводимых с клавиатуры в линейную таблицу из 10-ти элементов, выделить множество чисел кратных минимальному числу этой таблицы.
  8. Организовать символьные файлы g и f состоящие из n и m символов соответственно. Определить и вывести на экран множество символов входящих одновременно в файлы g и f.

ДАЛЕЕ               

 

 

 

 

 

 

 

 

 :::

 

 :::

 

 

 

 

 

 

 

Сайт создан в системе uCoz