Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.работы_алг_2часть19.11.08.doc
Скачиваний:
4
Добавлен:
23.11.2019
Размер:
507.39 Кб
Скачать

3.4 Методические указания к лабораторной работе №3

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

Каждый объект в множестве называется элементом множества, все элементы множества должны принадлежать одному типу. Этот тип называется базовым типом множества, он задаётся диапазоном, или перечислением, область значений типа множества, это набор всевозможных подмножеств, составленных из элементов базового типа, они указываются в квадратных скобках. Если множество не имеет элементов, оно называется пустым и обозначается пустыми квадратными скобками [ ], количество элементов множества называется его мощностью. В Turbo Pascal в качестве базовых могут использоваться порядковые типы, мощность которых не превышает 256 значений. Порядковые значения, верхние и нижние границы базового типа не должны выходить за пределы диапазона от 0 до 255. в качестве базового типа не рекомендуется использовать тип LongInt, Integer, Word, ShortInt.

Формат записи:

1)type имя типа= Set of элемент1,…элементN;

Var идентификатор: имя типа;

2)Var идентификатор Set of элемент1,…;

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

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

if (a=1) or (a=2) or (a=3) or (a=4) then if a in [1..4] then

часто операция in пытаются записать с отрицанием, это ошибка, правильно будет not (x in M) нахождение простых чисел по методу Сито по определению простым является нарицательное число x>1, которое не разложено на множи-тели, кроме множителей L и х. простые числа, исключая 2, могут быть получе-ны по формуле х=2*L+1, где L – основа это любое число, не присутствующее ни в одной из следующих бесконечных арифметических прогрессий, их число так же бесконечно:

1) 4,7,10,13,16,19,22…

2) 12,17,22,27,32,37…

3)2,31,38,45,52,59,66,73…

А=2k*(к+1); а+2r, a+3r…

R=2k+1 K – номер прогрессии

Если поставлена задача найти всё кроме числа 2, простые числа, не пре-восходящие нуля, заданного числа n, нужно выявить все основы для диапазона [1…n div 2]. Метод решения, строим полное множество [1…n div 2] исключаем из него числа, состоящие из прогрессий, оставшиеся числа используем как осно-ва L, и печатаем это значение 2L+1.

Переменная множественного типа может принимать как все значения множества, так и ни одного. Любой множественный тип может принимать значение [], которое называется пустым множеством.

Пример: type     Digits = set of 0..9; Letters = set of 'A'..'Z';

В таблице 2 представлены операции над множествами.

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

Операция

Действие

Результат

+

Объединение

Порядковое значение c содержится в a+b только тогда, когда он содержится в a или в b.

-

Разность

Порядковое значение c содержится в a-b только тогда, когда оно содержится в a и не содержится в b.

*

Пересечение

Порядковое значение c содержится в a*b только тогда, когда он содержится в обоих множествах a и b.

Если наименьшим порядковым значением, которое является членом результата операций над множествами, является a, а наибольшим - b, то типом результата будет множество a..b.

Напишем программу использующею множества. На примере программы реализующей детскую считалку.

program kinder; const     nmax = 20; var    n, {Число игроков}    m, {Число слов в считалке}   

i, j: integer; krug: set of 1..nmax; begin

Wreteln (‘Введите значения n и m’);    

readln(n);   

  readln(m);    krug:=[1..n];{В круге стоит n детей}     i:=n;     repeat  

     for j:=1 to m do      repeat       i:= i mod n+1;   

until i in krug;

writeln(i:3); krug:=krug-[i];     until krug=[]; end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]