Главная страница
Навигация по странице:

  • Операции над множествами. Объединение, пересечение и разность множеств.

  • Порядок старшинства операций, предназначенных для работы с множествами

  • Упражнение №1.

  • Упражнение №2.

  • Упражнение №3.

  • Упражнение №4.

  • * Задание №2.

  • Упражнение №5.

  • Множества Определение и создание множеств


    Скачать 223 Kb.
    НазваниеМножества Определение и создание множеств
    Дата26.06.2019
    Размер223 Kb.
    Формат файлаdoc
    Имя файлаmnogestva.doc
    ТипДокументы
    #56909

    Множества
    Определение и создание множеств.

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

    Каждый объект в множестве называется элементом множества.

    Все элементы множества должны принадлежать одному из скалярных типов, кроме вещественного. Этот тип называют базовым типом множества. Базовый тип задается диапазоном (1..5; ‘a’..‘f’) или перечислением (1, 2, 3, 4 ,5; ‘a’, ‘b’, ‘c’, ‘d’, ‘f’).

    Набор всевозможных подмножеств, составленных из элементов базового типа – область значений типа множество.

    В выражениях на языке Паскаль значения элементов множества указываются в квадратных скобках: [1,2,3,4], [ ‘a’, ‘b’, ‘c’], [‘a’.. ‘z’]. Если множество не имеет элементов, оно называется пустым и обозначается [ ]. Количество элементов множества называется его мощностью.

    Общий вид задания множества:

    1. type

    <имя типа> = set of <элемент 1, …, элемент n>;

    var

    <идентификатор, …> : <имя типа>;

    1. множество можно задать без предварительного описания типа:

    var

    <идентификатор, …> : set of <элемент 1, …, элемент n>;
    Пример:
    type

    Simply = set of ‘a’.. ‘h’;

    Number = set of 1..31;

    var

    Pr: Simply; {Pr – принимает значения символов латинского алфавита от ‘a’ до ‘h’}

    N: Number; {N – любое значение в диапазоне 1..31}

    Letter: set of char; {Letter – любой символ}

    Season: set of (winter, spring, summer, autumn); {множество времен года}

    Количество элементов множества не должно превышать 256, соответственно номера значений базового типа должны находиться в диапазоне 0..255. Объем памяти, занимаемый одним элементом множества, составляет 1 бит.

    Примечание:

    Иногда в программах встречается запись ‘ord(str[0])’, которая означает следующее


    ×

    s

    a



    0 1 2 …

    В нулевую позицию записывается символ, ASCII-код которого равен длине строки (какой это будет символ зависит от длины строки).
    Вместо этого удобнее использовать функцию Length(S), которая возвращает длину строки S.
    Program z1;

    var gl, sogl: set of char;

    text: string;

    i, g, s:byte;

    Begin

    gl:= [‘А’, ‘а’, ‘Е’, ‘е’, ‘И’, ‘и’, ‘О’, ‘о’, ‘У’, ‘у’, ‘Э’, ‘э’, ‘Ю’, ‘ю’, ‘Я’, ‘я’];

    sogl:= [‘Б’.. ‘Д’, ‘б’.. ‘д’, ‘Ж’, ‘ж’, ‘З’, ‘з’, ‘К’.. ‘Н’, ‘к’.. ‘н’, ‘П’.. ‘Т’, ‘п’.. ‘т’, ‘Ф’.. ‘Щ’, ‘ф’.. ‘щ’, ‘Ъ’, ‘ъ’, ‘Ь’, ‘ь’];

    write (‘Введите предложение’);

    readln(text);

    g:=0; {g – количество гласных}

    s:=0; {s – количество согласных}

    for i:=1 to length(text) do

    begin

    if text[i] in gl then g:=g+1;

    if text[i] in sogl then s:=s+1;

    end;

    witeln(‘в предложении “ ’, text, ‘ ” ’, g, ‘гласных и’, s, ‘согласных букв’);

    end.

    Операции над множествами. Объединение, пересечение и разность множеств.
    При работе с множествами допускается использование операций отношения «=», «<>», «>=», «<=», объединения, пересечения, разности множеств и операции in. Результатом выражений с применением этих операций являются значения True или False.
    1. Операция «равно» (=).

    Два множества A и B считаются равными, если они состоят из одних и тех же элементов. Порядок следования элементов в сравниваемых множествах значения не имеет.

    Пример:


    Значение А

    Значение В

    Выражение

    Результат

    [1, 2, 3, 4]

    [1, 2, 3, 4]

    A=B

    True

    [‘a’, ‘b’, ‘c’]

    [‘c’, ‘a’]

    A=B

    False

    [‘a’.. ‘z’]

    [‘z’.. ‘a’]

    A=B

    True

    [1.. 4]

    [1, 2, 3, 4]

    A=B

    True


    Program d1;

    Var B,A: set of char;

    Begin

    A:=[ ];

    B:=[ ];

    Writeln(A=B);

    End.
    2. Операция «не равно» (<>).

    Два множества A и B считаются не равными, если они отличаются по мощности или по значению хотя бы одного элемента.

    Пример:


    Значение А

    Значение В

    Выражение

    Результат

    [1, 2, 3]

    [3, 1, 2, 4]

    A<>B

    True

    [‘a’.. ‘z’]

    [‘b’.. ‘z’]

    A<>B

    True

    [‘c’.. ‘t’]

    [‘t’.. ‘c’]

    A<>B

    False


    Program d1;

    Var B,A: set of char;

    Begin

    A:=[ ];

    B:=[ ];

    Writeln(A<>B);

    End.
    3. Операция «больше или равно» (>=).

    Данная операция используется для определения принадлежности множеств. Результат операции Результат операции А>=B равен True, если все элементы множества В содержатся в множестве А. В противном случае результат равен False.

    Пример:


    Значение А

    Значение В

    Выражение

    Результат

    [1, 2, 3, 4]

    [2, 3, 4]

    A>=B

    True

    [‘a’.. ‘z’]

    [‘b’.. ‘t’]

    A>=B

    True

    [‘z’, ‘x’, ‘c’]

    [‘c’, ‘x’]

    A>=B

    True


    Program d1;

    Var B,A: set of char;

    Begin

    A:=[ ];

    B:=[ ];

    Writeln(A>=B);

    End.
    4. Операция «меньше или равно» (<=).

    Данная операция аналогична предыдущей, но результат выражения А<=B равен True, если все элементы множества A содержатся в множестве B. В противном случае результат равен False.

    Пример:


    Значение А

    Значение В

    Выражение

    Результат

    [1, 2, 3]

    [1? 2, 3, 4]

    A<=B

    True

    [‘d’.. ‘h’]

    [‘z’.. ‘a’]

    A<=B

    True

    [‘a’, ‘v’]

    [‘a’, ‘h’, ‘v’]

    A<=B

    True


    Program d1;

    Var B,A: set of char;

    Begin

    A:=[ ];

    B:=[ ];

    Writeln(A<=B);

    End.
    5. Операция in.

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


    Значение А

    Выражение

    Результат

    2

    If A in [1,2,3] then…

    True

    ‘v’]

    If A in [‘a’.. ‘n’] then …

    True

    X1

    If A in [x0, x1, x2, x3] then …

    True


    Program d1;

    Var B,A: set of char;

    Begin

    A:=[ ];

    B:=[ ];

    Writeln(A in B);

    End.
    Операция in позволяет эффективно и наглядно производить сложные проверки условий, заменяя иногда десятки других операций.

    Например,

    выражение if (a=1) or (a=2) or (a=3) or (a=4) or (a=5) or (a=6) then …

    можно заменить if a in [1..6] then …
    X not in M – писать нельзя, так как 2 операции следуют друг за другом.

    not (X in M) – правильная запись.

    6. Операция «объединение множеств» (+).

    Объединением двух множеств является третье множество, содержащее элементы обоих множеств.

    A B



    Пример:


    Значение А

    Значение В

    Выражение

    Результат

    [1, 2, 3]

    [1, 4, 5]

    A+B

    [1, 2, 3, 4, 5]

    [‘a’.. ‘z’]

    [‘e’.. ‘z’]

    A+B

    [‘a’.. ‘z’]

    [ ]

    [ ]

    A+B

    [ ]


    Задание №1: Написать программу нахождения объединения двух заданных множеств и вывести его на экран.
    Program d2;

    uses crt;

    const m=[1,2,3,5];

    n=[3,7,5];

    var r:set of byte;

    i: byte;

    begin

    clrscr;

    writeln;

    r:=m+n;

    for i:=1 to 255 do

    if i in r then write(i,’ ‘);

    readln;

    end.
    7. Операция «пересечение множеств» (*).

    Пересечением двух множеств является третье множество, содержащее элементы, входящие одновременно в оба множества.
    A B



    Пример:


    Значение А

    Значение В

    Выражение

    Результат

    [1, 2, 3]

    [3, 4, 1]

    A*B

    [1, 3]

    [‘a’.. ‘z’]

    [‘b’.. ‘r’]

    A*B

    [‘b’.. ‘r’]

    [ ]

    [ ]

    A*B

    [ ]


    Задание №1: Написать программу нахождения пересечения двух заданных множеств и вывести его на экран.
    Program d2;

    uses crt;

    const m=[1,2,3,5];

    n=[3,7,5];

    var r:set of byte;

    i: byte;

    begin

    clrscr;

    writeln;

    r:=m*n;

    for i:=1 to 255 do

    if i in r then write(i,’ ‘);

    readln;

    end.
    8. Операция «разность множеств» (-).

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



    Пример:


    Значение А

    Значение В

    Выражение

    Результат

    [1, 2, 3, 4]

    [3, 4, 1]

    A-B

    [ 2 ]

    [‘a’.. ‘z’]

    [‘d’.. ‘z’]

    A-B

    [‘a’.. ‘c’]

    [X1, X2, X3, X4]

    [X4, X1]

    A-B

    [X2, X3]


    Задание №1: Написать программу нахождения разности двух заданных множеств m-n и вывести его на экран.
    Program d2;

    uses crt;

    const m=[1,2,3,5];

    n=[3,7,5];

    var r:set of byte;

    i: byte;

    begin

    clrscr;

    writeln;

    r:=m-n;

    for i:=1 to 255 do

    if i in r then write(i,’ ‘);

    readln;

    end.
    Порядок старшинства операций, предназначенных для работы с множествами:


    приоритет

    Операция

    1

    *

    2

    +, -

    3

    in, =, <>, <=, <, >=, >


    Упражнение №1.

    Даны три множества D1, D2, D3. Изобразить на диаграммах Винера (Кругами)

    1. D1+D2+D3;

    2. D1+D2-D3;

    3. (D1+D2)*D3;

    4. D1+D2*D3.


    Упражнение №2.

    Дано множество целых чисел от 1 до 100. Сформировать новое множество и вывести его на монитор. Все числа нового множества должны без остатка делиться на 2.
    Program d3;

    const n=100;

    type mn = set of 1..n;

    var n1:mn;

    i,k:integer;

    begin

    n1:=[ ];

    for i:=1 to n do

    if i mod 2=0 then n1:=n1+[i];

    writeln(‘числа, кратные двум:’);

    for i:=1 to n do

    if i in n1 then write (i:4);

    readln;

    end.
    Упражнение №3.

    Составить программу выделения из множества целых чисел от 1 до 30 следующих множеств:

    • множества чисел, кратных 3;

    • множества чисел, кратных 6;

    • множества чисел, кратных 2 или 3;

    • множества чисел не больше 10;

    • множества чисел не кратных 3 и 6.


    Упражнение №4.

    Составить программу поиска простых чисел в числовом промежутке [1..n]. Число n вводится с клавиатуры.

    Простым называется число, которое не имеет других делителей, кроме единицы и самого этого числа. Для решения этой задачи воспользуемся методом «решета Эратосфена», идея которого заключается в следующем: сформируем множество М, в которое поместим все числа заданного промежутка. Затем последовательно будем удалять из него элементы, кратные 2, 3, 4 и так далее, до [n/2] (целая часть числа), кроме самих этих чисел. После такого просеивания в множестве М останутся только простые числа.
    Program d4;

    uses crt;

    var m: set of byte;

    i,k,n: integer;

    begin

    clrscr;

    writeln (‘vvedite razmer promegutka (do 255)’);

    readln(n);

    m:=[2..n];

    for k:=2 to n div 2 do

    for i:=2 to n do

    if (i mod k =0) and (i<>k) then m:=m-[i];

    for i:=1 to n do

    if i in m then wite(i:5);

    readln;

    end.
    Задание №1.

    Написать программу, которая напечатает все символы из данного текста, которые встречаются в этом тексте не более одного раза.
    * Задание №2.

    Дан текст на русском языке. Написать программу, которая напечатает в алфавитном порядке все строчные согласные буквы, входящие в этот текст (по 1 разу).
    Упражнение №5.

    Опишите базовый перечисляемый тип NAMES, содержащий всевозможные имена (ограничьтесь 20-ю). Напишите программу, выполняющую следующее:

    1. задание множеств друзей Dody и друзей Dolly;

    2. нахождение множества друзей Dody и Dolly с одинаковыми именами;

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


    Program d5;

    uses crt;

    type names = (Mike, Jolly, Ted, Dody, Jane, Molly, Raf, Rita, Nike, Lola, Winston, John);

    d = set of names;

    var i:names;

    l:d;

    const

    dd: d = [Mike, Ted, Rita, Lola];

    ln: d = [Mike, Ted, Jane, Rita, Lola, Winston];

    begin

    clrscr;

    l:=ln*dd;

    writeln(‘Общие друзья:’);

    for i:=Mike to John do

    if i in l then

    case i of

    Mike: writeln(‘Mike’);

    Jolly: writeln(‘Jolly’);

    Ted: writeln(‘Ted’);

    Dody: writeln(‘Dody’);

    Jane: writeln(‘Jane’);

    Molly: writeln(‘Molly’);

    Raf: writeln(‘Raf’);

    Rita: writeln(‘Rita’);

    Nike: writeln(‘Nike’);

    Lola: writeln(‘Lola’);

    Winston: writeln(‘Winston’);

    John: writeln(‘John’);

    end; {case}

    readln;

    end.


    написать администратору сайта