Новые книги

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

Простые проекты на основе Arduino не вызывают сложностей в реализации. Но, вступив на территорию, не охваченную вводными руководствами, и увеличивая сложность проектов, вы быстро столкнетесь с проблемой нехватки знаний — врагом всех программистов.

Эта книга задумана как продолжение бестселлера «Programming Arduino: Getting Started with Sketches». Несмотря на то что эта книга включает краткое повторение основ из книги «Programming Arduino», она познакомит читателя с более продвинутыми аспектами программирования плат Arduino.
Существуют тысячи книг по стратегии. Мы выбрали эту, поскольку она стоит вашего времени. Ее автор участвовал в разработке стратегий десятков компаний. Он – практик и знает, чем хорошая стратегия отличается от плохой.

На русском языке публикуется впервые.

28. Множества

28. Множества

   Понятие множества в языке ПАСКАЛЬ основывается  на  математическом

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

элементов. Для построения конкретного множественного типа использует-

ся перечисляемый или интервальный тип данных.  Тип элементов, состав-

ляющих множество, называется базовым типом.

   Множественный тип  описывается  с  помощью  служебных слов Set of,

например:

 

         type  M= Set of B;

 

Здесь М - множественный тип, В - базовый тип.

   Пример описания переменной множественного типа:

 

         type

             M= Set of 'A'..'D';

         var

            MS: M;

 

   Принадлежность переменных к множественному типу может быть опреде-

лена прямо в разделе описания переменных:

 

         var

            C: Set of 0..7;

 

   Константы множественного  типа  записываются  в виде заключенной в

квадратные скобки последовательности элементов или интервалов базово-

го типа, разделенных запятыми, например:

 

         ['A', 'C']    [0, 2, 7]    [3, 7, 11..14].

 

Константа вида

 

         [ ]

 

означает пустое подмножество.

   Множество включает в себя набор элементов базового типа, все подм-

ножества данного множества, а также пустое подмножество. Если базовый

тип, на котором строится множество, имеет К элементов, то число подм-

ножеств, входящих в это множество, равно 2 в степени К. Пусть имеется

переменная Р интервального типа:

 

         var P: 1..3;

 

   Эта переменная может принимать три различных значения  -  либо  1,

либо 2, либо 3. Переменная Т множественного типа

 

         var T: Set of 1..3;

 

может принимать восемь различных значений:

 

         [ ]        [1,2]

         [1]        [1,3]

         [2]        [2,3]

         [3]        [1,2,3]

 

   Порядок перечисления элементов базового типа в константах  безраз-

личен.

   Значение переменной  множественного  типа  может быть задано конс-

трукцией вида [T], где T - переменная базового типа.

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

присваивания(:=), объединения(+), пересечения(*) и вычитания(-):

 

         ['A','B'] + ['A','D']      даст  ['A','B','D']

         ['A'] * ['A','B','C']      даст  ['A']

         ['A','B','C'] - ['A','B']  даст  ['C'].

 

   Результат выполнения  этих  операций  есть величина множественного

типа.

   К множественным величинам применимы операции: тождественность (=),

нетождественность (<>), содержится  в (<=), содержит (>=).  Результат

выполнения этих операций имеет логический тип, например:

 

         ['A','B'] = ['A','C']  даст FALSE

         ['A','B'] <> ['A','C'] даст TRUE

         ['B'] <= ['B','C']     даст TRUE

         ['C','D'] >= ['A']     даст FALSE.

 

   Кроме этих операций для работы с величинами множественного типа  в

языке ПАСКАЛЬ используется операция

 

         in

 

проверяющая  принадлежность  элемента  базового типа,  стоящего слева

от знака операции,  множеству, стоящему справа от знака операции. Ре-

зультат выполнения этой операции - булевский.  Операция проверки при-

надлежности элемента множеству часто используется вместо операций от-

ношения, например:

 

         A in ['A', 'B'] даст  TRUE,

         2 in [1, 3, 6]  даст  FALSE.

  

   При использовании  в   программах   данных   множественного   типа

выполнение операций происходит над битовыми строками данных.  Каждому

значению множественного типа в памяти ЭВМ соответствует один двоичный

разряд. Например, множество

 

         ['A','B','C','D']

 

представлено в памяти ЭВМ битовой строкой

 

         1 1 1 1.

 

Подмножества этого множества представлены строками:

 

         ['A','B','D']   1 1 0 1

         ['B','C']       0 1 1 0

         ['D']           0 0 0 1

 

   Величины  множественного типа не могут быть элементами списка вво-

да - вывода.

   В каждой  конкретной  реализации транслятора с языка ПАСКАЛЬ коли-

чество элементов базового типа,  на котором строится множество, огра-

ничено. В  TURBO PASCAL количество базовых элементов не должно превы-

шать 256.

   Инициализация величин  множественного  типа производится с помощью

типизированных констант:

  

   const  seLit: Set of 'A'..'D'= [];

  

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

   Пример. Составить программу, которая вырабатывает и выводит на эк-

ран дисплея наборы случайных чисел для игры в "Спортлото 5 из 36".

   Для заполнения каждой карточки спортлото необходимо получить набор

из пяти псевдослучайных чисел. К этим числам предъявляются два требо-

вания:

    -числа должны находиться в диапазоне 1..36;

    -числа не должны повторяться.

  

    Program Lotto;

     var

         nb, k: Set of 1..36;

         kol, l, i, n: Integer;

     begin

        Randomize;

        WriteLn('ВВЕДИ kol');

        ReadLn(kol);

        nb:=[1..36];

        for i:=1 to kol do

          begin

           k:=[];

           for l:=1 to 5 do

             begin

               repeat

                 n:=Random(36)

               until (n in nb) and not (n in k);

               k:=k+[n];

               Write(n:4)

             end;

           WriteLn

          end

         end.