top of page

Лабораторная работа № 10

 

Тема: Решение задач на  множества.

 

Цель работы: Познакомиться с понятием множества. Научиться использовать операции по работе с множеством в программах.

 

Теория .

            Множества относятся к структурированным типам. Множество- совокупность различных элементов одинакового типа. В отличие от массива порядок перечисления элементов во множестве не имеет значения, и количество элементов заранее не определено. Количество элементов, входящих во множество, может меняться от 0 до 256. Значения множества задаются в квадратных скобках перечислением элементов через запятую. Например:

            [] – пустое множество;

            [2,3,7,11] – множество из целых чисел;

            [‘a’, ‘c’ , ‘f’] – множество из символов;

            [1..10] – множество из элемента ограниченного типа;

            [k..2*k] – элемент множества задается текущим значением переменной K.

Множество описывается следующим образом :

            <имя>: SETOF<тип компонент>;

            <тип компонент> - является базовым типом, может быть простым типом , кроме вещественног.

Множество можно задавать 2-мя способами.

  1. Сначала определить в разделе TYPE, затем в разделе VAR

  2. Сразу определить в разделе VAR.

Значениями множества может быть только значение базового типа.

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

            Для получения новых множественных значений используется 3 операции : объединение, пересечение и разность множеств.

  1. Объединение: обозначается знаком  «+» . Объединением двух множеств является множество, составленное из элементов обоих множеств. [2,7,3]+[1,7,4,5,2]→[2,7,3,1,4,5]

  2. Пересечением двух множеств является множество, состоящее из элементов , одновременно входящих в оба множества. Обозначается знаком «*».

[2,7,3]*[1,7,4,5,2] →[2,7]

  1. Разностью  двух множеств является  множество,

состоящее из элементов 1-го множества, которые не являются

элементами второго множества. Обозначается знаком «-.».

    [2,7,3] - [1,7,4,5,2] →[2,7]

C помощью множественных операций можно строить

Множественные выражения. Например:

            [1,2,5,6,7] * [2..6] + [3,9] → [2,3,5,6,9]

            К множествам применимы также операции отношения, которые приведены в таблице:

 

 

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

M:Setof 1..10;

M: = [2,3,5,7]; {множеству М присваивается значение}

6 INM→false  {число 6 не входит во множество М}

[3,5,7]<=M→true {[3,5,7] принадлежит множеству М}

М=[1,2,3] → false {множество М не равно [1,2,3]}

[]<=M→true {пустое множество [ ] меньше множества М}

(7 inM) and ([7]<=M)→ true

Операцию проверки принадлежности IN удобно использовать для упрощения сложных условий в операторе IF. Например, оператор

            IF (t=0) or (t=15) or (t=40) or (t=100) then ….

            Может быть составлен более компактно и наглядно :

            IFtin [0,15,40,100] then …

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

Вводится последовательность букв латинского алфавита , оканчивающаяся точкой. Определить общее вхождение в эту последовательность букв f,a,y,e.

            Program primer;

                        Var k: integer;

                        Litera: char;

            Begin

                        K:=0

                        Read(litera);

                        While litera<> ‘.’ Do

                         Begin

                          If litera in [f,a,y,e] then k:=k+1;

                          Read(litera);

                        End;

            Writeln(‘вхождениебуквf,a,y,eвтекст =’ , K);

END.

 

Задание 1.

Вариант 1. Если в базовом типе n различных значений, то сколько различных значений в построенном на его основе множественном типе?

Вариант 2.    Даны следующие описания переменных:

                        Type bits = set of 0..1;

                        Var x: bits;

                                y: set of (a,b,c) ;

                                    z: set of ‘*’..’*’;

Ответить на следующие вопросы:

         а) Каков базовый тип каждого из указанных множественных типов ?

         б) Сколько и какие значения может принимать каждая из переменных x, y, z ?

Вариант 3. Даны следующие описания переменных:

                        Type день недели = (пн, вт, ср, чт, пт, сб, вс);

Описать множественный тип  ,включающий в себя множества из :

            а) названия любых дней недели;

            б) названия рабочих дней недели.

Вариант 4. Какие из следующих описаний не верны и почему ?

            Type точки = set of real;

            байт = paskedВариант [1..8] of 0..1;

            данные = set of байт;

            месяц = (ян, фев, мар, апр, май, июнь, авг, сен, окт, ноя, дек);

            М1= set of месяц;

            М2= set of июн..авг;

            М3= set of дек..фев;

            М4= set of (июн, июл, авг);

Вариант 5. Какие из следующих конструкций являются множествами (в смысле языка Паскаль), а какие нет и почему ?

  1. a[9,6,3,0];                              f) [true..false];

  2. b[2..3,5,7];                             g) [2, sqrt(9)];

  3. c[1..15,4..18];                        h) [‘=’,’>=’, ‘>’];

  4. d[‘*’ , ‘*’];                                i) [[], [5]];

  5. e[0..0];                                   j) [odd(7), 0<2].

Вариант 6. Вычислить значения отношений :

  1. [2]<>[2,2,2];

  2. [4,5,6] = [4..6];

  3. [‘a’,’b’]=[‘b’,’a’];

  4. [‘c’,’b’]=[‘c’..’b’];

  5. [2,3,5,7]<=[1..9];

  6. [3,6..8]<=[2..7,9];

Вариант 7.    Вычислить значения выражений :

  1.  a[1,3,5]+[2,4];          b) [1,3,5]*[2,4];          c) [1,3,5]-[2,4];

        d) [1..6]+[3..8];          e) [1..6]*[3..8];           f) [1..6]-[3..8];

        g) [2,4]+[1..5];           h) [2,4]*[1..5];            i) [2,4]-[1..5];

         j) []+[4];                    k) []*[4];                     c) []-[4];

Вариант 8. Вычислить значения выражений :

  1. [2..13] * [3,13..60]+[4..10]-[5..15]*[6];

  2. [2..10]-[4,6]-[2..12]*[8..15];

  3. ([‘0’..’7’]+[‘2’..’9’])*([‘a’]+[‘z’]);

Вариант 9. Упростить (А и В - множества):

  1. A*B-A;                    b) A-(A-B);

  2. A*B-A;                    b) A-(A-B);

Вариант 10. Эквивалентны ли выражения :

  1. P in [0,5,19]  и (p=0) or (p=5) or (p=19) ?

  2. Pin [20..50]  и (p>=20) and  (p<=50) ?

Вариант 11. Даны следующие описания  переменных :

         Var p: set of 0..9; I,j: integer

Если i=3 и j=5 то, какое значение получит переменная P при выполнении следующего оператора присваивания :

  1. p:=[i+3, j div 2, j:sqr(i)-3];

  2. p:=[2*i..j];

  3. p:=[I, j, 2*I, 2*j].

Вариант 12. Даны следующие описания переменных :

Var s: set of char;

                c, d : char;  

Переменной s присвоить :

         а) пустое множество;

         б) множество из строчных гласных латинских букв (a, e, I, o, u);

         в) множество из всех цифр;

         г) множество из литер ,которые больше с, но меньше d (c<d)/

Вариант 13. Даны следующие описания переменных :

         TYPE строка = paskedВариант[1..100]  of char;

Описать функцию счет(s) , подсчитывающую общее количество цифр и знаков  ‘+’,  ‘-’, и ‘*’ , входящих в строку s.

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

  1. Операция принадлежности множеству ?

  2. 2.Что будет являться разностью двух множеств   ?

  3. 3.Объединение множеств  ?

  4. 4.Как объявить множественный тип ?

bottom of page