Множества в паскале примеры программ

Множества в языке Паскаль: описание, хранение, операции, вывод, использование

Когда мы произносим слово множество, подразумеваем большое количество объектов:

  • множество целых чисел,
  • множество латинских букв,
  • множество слов.

В этой публикации расскажем, как использовать множества в языке Паскаль.

Множество — это набор уникальных неупорядоченных значений одного типа.

Описание (объявление) множества

var m:set of базовый тип;

Примеры

Целые числа

[’ Mazda ’,’ BMW ’,’ Audi ’]

Описание
в блоке var

m : set of integer ;

s : set of string ;

Хранение данных в множестве

m:=[3,4,6,8,9]; элементы множества заключаются в квадратные скобки и перечисляются через запятую

m:=[0..9]; диапазон значений через две точки

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

  • пересечение
  • объединение
  • вычитание

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

Уроки на языке Pascal. Урок 20 (часть 2). Множества ( Set ).

m2:=m*m1; пересечение [3,4,9]

m2:=m+m1; объединение [3,4,6,8,9,15,20]

m2:=m1-m; разность [15,20]

Пустое множество

Как добавить значение в множество

m:=m+[x]; значение переменной x добавили в множество m

Операция вхождения in

Обратиться к элементу множества непосредственно нельзя. Но можно использовать операцию вхождения in.

Вывод множества на экран

for k:=10 to 24 do

if k in m then write(k); //если значение k принадлежит множеству m, то вывести k

В версии PascalABC.NET 3.8.2 множество можно вывести целиком:

Результат будет таким:

Использование множеств в задачах

Задача 1. Дано натуральное число. Сформировать множество его цифр (найти различные цифры числа)

В цикле while будем разбивать число на цифры и добавлять цифру в множество.

Исходные данные: n – натуральное число (тип integer)

Промежуточные данные: d – цифра числа (тип integer)

Выходные данные: m – множество цифр числа

Программа решения на языке Паскаль

var m:set of integer;

m:=[]; //пустое множество

writeln(‘Введите натуральное число’);

writeln(‘Множество цифр числа’);

Результат выполнения программы

Задача 2. Дан алфавит строчных русских букв, получить множество согласных букв вычитанием множества гласных букв.

Воспользуемся тем, что char является порядковым типом данных, в качестве букв алфавита возьмем множество b:=[‘а’..’я’] .

Множество гласных букв получим перечислением: g:=[‘у’,’е’,’ы’,’а’,’о’,’э’,’я’,’и’,’ю’]

Множество согласных букв получим вычитанием s:=b-g;

b – множество строчных русских букв

g – множество строчных гласных букв

Выходные данные: s – множество строчных согласных букв

Программа решения на языке Паскаль

var b,g,s:set of char;k:char;

if k in s then write(k,’ ‘);

Задача 3. Дана строка символов. Сколько в этой строке символов цифр?

Будем проверять принадлежность символа строки множеству символов цифр [‘0’..’9′] и копить счетчик.

Уроки на языке Pascal. Урок 20 (часть 1). Множества ( Set ).

Программа решения на языке Паскаль

for k:=1 to length(s) do

if s[k] in m then t:=t+1;

writeln(‘Символов цифр в строке: ‘,t);

Еще одна задача на применение операции вхождения in. Как проверить, есть ли в строке заданная подстрока.

Читайте также:
Как создать программу для взлома паролей

Результат выполнения программы

Задача 4. Как найти все уникальные (неповторяющиеся) значения в массиве чисел?

Множества в Pascal

В Pascal множества обладают рядом особенностей. Все элементы одного множества должны принадлежать одному и тому же базовому типу. В качестве базового типа должен выступать порядковый тип, но не каждый.

Размер множества в Паскале ограничен предельно допустимым количеством элементов. Во множествах допускаются только такие элементы, порядковые значения которых в их базовых типах не выходят за границы 0..255. Для целочисленных множеств это означает, что в них могут присутствовать только числа от 0 до 255. Отрицательные элементы во множествах не допускаются.

Поэтому базовым типом не может выступать, например, integer . Если необходимо множество целочисленных объектов, то базовый тип должен объявлен как диапазон типа byte . Для символьных множеств базовым типом является char (в нем 256 значений с порядковыми номерами от 0 до 255).

Объявление множеств

В математике для обозначения множества используют фигурные скобки, например , в Паскале — квадратные, например [1, 3, 5]. Порядок элементов во множестве не имеет значения. Так множества [3, 6, 9] и [9, 3, 6] одинаковы.

По форме записи объявление переменной типа множество сходно с объявлением одномерного массива:

var имя: set of тип;

Например, объявление переменной ch как множества с базовым типом char , имеет вид:

var ch: set of char;

Можно сначала объявить тип множества, а потом использовать его для объявления переменных:

type t_ch = set of char; var ch1, ch2: t_ch;

Часто в качестве базового типа используются перечисления и диапазоны:

type week_days = (Mon, Tue, Wed, Thu, Fri); var work_days: set of week_days; lett: set of ‘A’..’Z’;
type nums = 5..25; var a: set of nums;

Объявление переменной-множества не присваивает ей набора значений.

Построение множества

Чтобы во множестве появились элементы, необходимо выполнить оператор присваивания, в левой части которого стоит имя переменной-множества, а в правой — конструктор множества или некоторое выражение над множествами.

Конструктор множества — это заключенный в квадратные скобки перечень элементов, разделенных запятыми. В качестве элементов могут использоваться диапазоны значений:

type week_days = (Mon, Tue, Wed, Thu, Fri); var work_days: set of week_days; lett: set of ‘A’..’Z’; begin work_days := [Mon, Wed, Thu]; lett := [‘C’, ‘E’..’M’, ‘Z’] end.

Следует помнить, что при задании множества порядок его элементов безразличен, но при задании диапазона такой порядок важен.

Множество, в котором нет элементов, называется пустым (или нуль-множеством). В языке программирования Паскаль обозначается квадратными скобками, между которыми нет элементов:

work_days := [ ];

Множество может быть объявлено типизированной константой, для чего в описании после знака равенства следует указать конструктор множества. Например:

const lett: set of [‘а’..’я’] = [‘а’, ‘е’, ‘и’, ‘о’, ‘у’, ‘ы’, ‘э’, ‘ю’, ‘я’];

Конструируя множества, можно использовать и переменные при условии, что их текущие значения попадают в диапазон базового типа множества. Так, если ch1 и ch2 имеют тип char , то допустима следующая последовательность операторов:

ch1 := ‘A’; ch2 := ‘K’; chs := [ch1, ch2, ‘M’];

В результате получится множество [‘A’, ‘K’, ‘M’].

Вывод элементов множества

В Pascal элементы множества нельзя вводить и выводить. Для организации их ввода-вывода следует использовать вспомогательные переменные. В то же время можно использовать множества как элементы типизированных файлов.

Читайте также:
Программа для просмотра вин кода машины

type nums = 0..10; var a: set of nums; i: byte; begin a := [3, 0, 2]; for i := 0 to 10 do if i in a then writeln(i); end.
0 2 3

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

  • присвоение
  • объединение
  • пересечение
  • дополнение
  • тождественность
  • нетождественность
  • содержится во множестве
  • содержит множество
  • принадлежность элемента множеству

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

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

Над множествами выполнимы объединение (+), пересечение (*) и разность (-).

Объединение двух множеств A и B (A + B) – это новое множество, состоящее из элементов, принадлежащих множеству A или B, либо тому и другому одновременно.

var chs1, chs2, chs3: set of char; begin chs1 := [‘a’, ‘b’, ‘d’]; chs2 := [‘m’, ‘d’, ‘e’]; chs3 := chs1 + chs2 + [‘k’, ‘n’]; end.

Результат: chs3 = [‘a’, ‘b’, ‘d’, ‘m’, ‘e’, ‘k’, ‘n’].

Пересечение двух множеств A и B (A * B) – это множество, состоящее из элементов, одновременно принадлежащих множествам A и B.

chs3 := chs1 * chs2;

Результат: chs3 = [‘d’] .

Разность (дополнение) множеств A и B (A — B) – это новое множество, состоящее из элементов множества A, не вошедших в множество B.

chs1 := [‘a’, ‘e’, ‘t’]; chs2 := chs1 – [‘e’] < [‘a’, ‘t’] >chs3 := [‘m’, ‘n’, ‘t’] – chs2

Используя операции объединения, пересечения и разности, можно добавлять элементы к множествам или удалять их.

Для вставки и удаления элементов при работе с множествами в Pascal введены две процедуры:

include(имя_множества, элемент) exclude(имя_множества, элемент)

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

include (chs1, ‘g’); < аналогично chs1 + [‘g’] >exclude (chs2, ‘a’);

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

Над множествами можно выполнять четыре операции сравнения: =, <>, >=,

Два множества A и B равны (A = B), если каждый элемент множества A является элементом множества B и наоборот.

Два множества A и B не равны (A <> B), если они отличаются хотя бы одним элементом.

Другими словами, операции = и <> используются для проверки эквивалентности: два значения переменной типа set считаются равными, если они состоят из одних и тех же элементов.

[1, 3] = [3, 1] возвращает true,
[1..3] = [1, 2, 3] возвращает true,
[1] <> [2] возвращает true,
[1, 2, 3] = [1, 4, 3] возвращает false,
[red, blue] = [red, yellow] возвращает false.

Множество A является подмножеством множества B (A = A), если каждый элемент из A присутствует в B.

Пустое множество [ ] содержится во всех множествах, т.е. всегда [ ]

in — операция проверки принадлежности элемента множеству

Имеется возможность выяснить, принадлежит ли данный элемент некоторому множеству. Для этого служит операция in . Пусть A – множество элементов некоторого базового типа, а x – переменная этого типа. Тогда выражение x in A истинно, если значение x является элементом множества A .

red in [red, yellow] возвращает true ;
red in [blue, green] возвращает false .

Замечание 1. Чтобы проверить, является ли значение n цифрой, удобно использовать операцию in следующим образом:

if n in [0..9] then …

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

a: set of 1..50; x: integer.

Если присвоить x число, большее максимального значения 50 (например, x := 55 ), то в этом случае результат операции x in a не всегда false .

Все операции сравнения множеств, а также операция in возвращают логическое значение true или false .

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

В сложных выражениях над множествами операции имеют следующие приоритеты:

Читайте также:
Как научить программу самообучаться

Источник: pas1.ru

1.6. Использование множеств в языке Паскаль

В языке Паскаль множеством называется конечный неупорядоченный набор элементов [2]. Все элементы одного множества должны принадлежать к одному и тому же типу, который называется базовым типом данного множества. В качестве базового типа можно использовать любой простой тип, кроме вещественного. Множество должно быть описано в разделе описания типов. Общий вид описания:

Type имя=set of базовый_тип;

Пусть в нашем распоряжении имеется множество монет различного достоинства: 1р, 5р и 10р. Из этих монет можно составить следующее подмножества (их число равно 2 3 =8):

1р; 5р; 10р; 1р, 5р; 1р, 10р; 5р, 10р; 1р, 5р, 10р; пустое множество.

Эти подмножества и будут принадлежать некоторому множеству sum. Сами элементы (монеты), из которых состоит подмножество, пусть принадлежат некоторому базовому типу monet. Тогда описание будет иметь вид:

Var sum:set of monet;

В программе значение переменной типа «множество» изображается путем перечисления конкретных компонентов подмножества, разделенных запятыми и заключенных в скобки [ ]. Такие изображения называются конструкторами множеств. Например: [r1], [r1,r10].

С переменной типа set допустимы следующие операции: =, <>, >=,

Пример использования операции присваивания:

В этом случае в ячейку k будет записана комбинация [3,4,5,6].

Операции = и <> используются для проверки эквивалентности: два значения переменной типа set считаются равными, если они состоят из одних и тех же элементов.

[1,3]=[3,1] – дает True;

[1..3]=[1,2,3] – дает True;

[1,2,3]=[1,4,3] – дает False.

Операция In используется для установления наличия определенного элемента в множестве. Так, если x есть элемент множества b, то (x In b) дает True.

Пример: [3]In [1,2,3] дает True.

Если a и b – операнды, имеющие один и тот же конкретный тип, то к ним применимы операции:

Так, a+b представляет собой объединение множества элементов, входящих в a или в b (одинаковые элементы не повторяются); a–b – это множество элементов, которые есть в a, но отсутствуют в b; a*b представляет собой объединение множества элементов, входящих в множества a и b одновременно.

Операция a:=a+x добавляет элемент x к множеству a, а операция a:=a–x исключает x из a.

Рассмотрим несколько примеров решения задач на Паскале, использующих множества [3].

З а д а ч а 1. Задать множество целых чисел от заданного числа до числа в три раза большего, чем заданное.

Решение. Используем описание множеств на языке Паскаль и операторы для работы с множествами.

Если количество элементов n в множестве известно заранее, то задача решается так:

type setnum=set of byte;

Если начальное значение задается пользователем, то задача решается так:

type setnum=set of byte;

begin write(‘задайте первый элемент множества ‘);

else write(‘заданное количество элементов не поместится в множестве ‘);

З а д а ч а 2. Вывести на экран элементы множества, содержащего прописные и строчные буквы латинского алфавита.

Решение. В цикле проверим вхождение всех элементов базового типа и выведем те, которые входят в множество.

var zn:set of ‘A’..’z’;

begin for i:=’A’ to ‘Z’ do

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

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

З а д а ч а 3. Написать программу, которая в заданном слове, состоящем из строчных букв, определяет составляющие его буквы, глухие и звонкие согласные, затем все согласные и все гласные буквы.

Решение.

type setchar=set of char;

Источник: studfile.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru