Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_ОАиП.doc
Скачиваний:
17
Добавлен:
01.04.2025
Размер:
5.06 Mб
Скачать

Лабораторная работа №25. Тема: Множества. (Продолжение)

Цель: показать практическое использование этого типа данных при решении задач.

Множества можно описать в разделе описания типов:

type имя множества = set of тип элементов;

var идентификатор переменной : имя множества;

или же в разделе переменных:

var идентификатор переменной : set of имя типа элементов;

Тип элементов задается диапазоном или перечислением идентификаторов (в последнем случае обязательны круглые скобки), например:

type den = set of 1..5;

этим мы определили множество с именем den, значениями которого могут быть наборы целых чисел в диапазоне от 1 до 5: [], [1], [2], [3], [4], [5], [1,2], [2,3], [1,3], [2,3] ,[1,2,3], [1,2,3,4,5] и другие сочетания (в данном случае упорядоченные по возрастанию). Для экономии времени можно взять меньший диапазон значений.

var а: den; описана переменная типа множества den.

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

Var s: set of'А'..'В';

Описана переменная s как множество, значениями которого могут быть: [], ['А'],['В'] и ['А','В'].

Или

var kinder : set of (inna,ivan);

Описана переменная kinder как множество, значениями которого могут быть: [], [inna],[ ivan] и [inna, ivan].

Множество можно описать в разделе констант:

const p=[3,7,9]; (простая константа)

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

const m:set=[‘a’..’z’];

или так: const mn0:set of char=[‘a’..’z’];

Всe элементы множества должны иметь одинаковый тип (char, boolean, ограниченный, перечисляемый). Элементами множества могут быть выражения. Число элементов множества называют мощностью множества (число элементов до 255, поэтому в описании множества нельзя указать типы integer и real). Порядок следования элементов и способ их записи не играет роли: одинаковы множества [1,2,3], [3,2,1], [3,1,2], [1+2,1,2], [1..3], [3,3,3,1,2,3], но, если множество обозначается как диапазон, важно, чтобы начальный элемент был меньше, чем конечный, иначе множество будет считаться пустым. Например, ['z'..'а'] - пустое множество.

[ ] - также пустое множество.

При работе с множествами можно использовать следующие правила или операции:

* - пересечение множеств; с:=a*b, где а и b - переменные типа множество.

+ - объединение множеств; с:= а+ b ;

- - разность множеств; с:=а- b ;

=, <>, >=, <= - проверки на равенство, неравенство и т.д.

а> b и т.д.

in - проверка на принадлежность; d in а.

Практическая работа.

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

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

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

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

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

program exampl_3_1;

uses crt;

const n=30;

type mn=set of 1..n;

var n2,n3,n6,n23:mn;

{n2 - множество чисел, кратных 2, n3- кратных 3, n6-кратных 6, n23- кратных 2 или3}

k:integer;

procedure print(m:mn);

var i: integer;

begin

for i:=1 to n do if i in m then write (i:3); writeln;

end;

begin clrscr;

n2:=[];n3:=[]; {начальное значение множеств}

for k:=1 to n do {формирование n2 и n3}

begin {если число делится на 2, то заносим его в n2}

if k mod 2=0 then n2:=n2+[k];

if k mod 3=0 then n3:=n3+[k];

{если число делится на 3, то заносим его в n3} end;

n6:=n2*n3; n23:=n2+n3; writeln('n2');

print(n2); writeln('n3');

print(n3); writeln('n6');

print(n6); writeln('n23');

print(n23); readln;

end.

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

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

Program example_2;

var m: set of byte;

i, k, n: integer;

begin

writeln(‘введите размер промежутка (до 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 write(i:3);

{распечатаем оставшиеся элементы}

readln; end.