Множества в языке Паскаль: описание, хранение, операции, вывод, использование
Когда мы произносим слово множество, подразумеваем большое количество объектов:
- множество целых чисел,
- множество латинских букв,
- множество слов.
В этой публикации расскажем, как использовать множества в языке Паскаль.
Множество - это набор уникальных неупорядоченных значений одного типа.
Описание (объявление) множества
var m:set of базовый тип;
Примеры |
Целые числа |
Символы |
Строки |
|
[0,2,4,6,8,10,12] |
[’a’,’b’,’c’,’d’,’e’] |
[’Mazda’,’BMW’,’Audi’] |
Описание |
m:set
of integer; |
p:set
of char; |
s:set
of string; |
Хранение данных в множестве
m:=[3,4,6,8,9];
элементы множества заключаются в квадратные скобки и перечисляются через запятую
m:=[0..9];
диапазон значений через две точки
Операции над множествами
- пересечение
- объединение
- вычитание
Применение операций над множествами
m:=[3,4,6,8,9];
m1:=[3,4,9,15,20];
m2:=m*m1;
пересечение [3,4,9]
m2:=m+m1;
объединение [3,4,6,8,9,15,20]
m2:=m1-m;
разность [15,20]
Пустое множество
m:=[];
Как добавить значение в множество
m:=m+[x];
значение переменной x добавили в множество m
inlude(m, x);
в среде PascalABC.NET
Операция вхождения in
Обратиться к элементу множества непосредственно нельзя. Но можно использовать операцию вхождения in.
Вывод множества на экран
m:=[10,12,14,15,16,18,20,21,22,24];
for k:=10 to 24 do
if k in m then write(k);//если значение k принадлежит множеству m, то вывести k
В версии PascalABC.NET 3.8.2 множество можно вывести целиком:
write(m);
Результат будет таким:
{10,12,14,15,16,18,20,21,22,24}
Использование множеств в задачах
Задача 1. Дано натуральное число. Сформировать множество его цифр (найти различные цифры числа)
В цикле while будем разбивать число на цифры и добавлять цифру в множество.
Исходные данные: n – натуральное число (тип integer)
Промежуточные данные: d – цифра числа (тип integer)
Выходные данные: m – множество цифр числа
Программа решения на языке Паскаль
var m:set of integer;
d,n:integer;
begin
m:=[]; //пустое множество
writeln('Введите натуральное число');
readln(n);
while n<>0 do
begin
d:=n mod 10;
m:=m+[d];
n:=n div 10;
end;
writeln('Множество цифр числа');
write(m);
End.
Результат выполнения программы
Задача 2. Дан алфавит строчных русских букв, получить множество согласных букв вычитанием множества гласных букв.
Воспользуемся тем, что char
является порядковым типом данных, в качестве букв алфавита возьмем множество b:=['а'..'я']
.
Множество гласных букв получим перечислением: g:=['у','е','ы','а','о','э','я','и','ю']
Множество согласных букв получим вычитанием s:=b-g;
Исходные данные:
b – множество строчных русских букв
g – множество строчных гласных букв
Выходные данные: s – множество строчных согласных букв
Программа решения на языке Паскаль
var b,g,s:set of char;k:char;
begin
b:=['а'..'я'];
g:=['у','е','ы','а','о','э','я','и','ю'];
s:=b-g;
for k:='а' to 'я' do
if k in s then write(k,' ');
{либо вывод сразу всего множества write(s), цикл for k:='а' to 'я' do тогда не нужен}
end.
Задача 3. Дана строка символов. Сколько в этой строке символов цифр?
Будем проверять принадлежность символа строки множеству символов цифр ['0'..'9'] и копить счетчик.
Программа решения на языке Паскаль
var s:string;
c:char;
m:set of char;
k,t:integer;
begin
writeln('Введите строку');
readln(s);
m:=['0'..'9'];
for k:=1 to length(s) do
if s[k] in m then t:=t+1;
writeln('Символов цифр в строке: ',t);
end.
Еще одна задача на применение операции вхождения in. Как проверить, есть ли в строке заданная подстрока.
Результат выполнения программы
Задача 4. Как найти все уникальные (неповторяющиеся) значения в массиве чисел?
Мы знаем, что множество хранит уникальные значения. Возьмем пустое множество.
Добавим значение элемента в множество. В множестве сохранятся значения элементов массива, и они будут уникальными.
Программа решения на языке Паскаль
var a:array[1..100] of integer;
k,n:integer;
m:set of integer;
begin
writeln('Введите количество элементов массива');
readln(n);
m:=[]; //пустое множество
writeln('Массив чисел');
for k:=1 to n do
begin
a[k]:=random(1,10);//случайные числа из промежутка [1;10]
write(a[k],' ');
include(m,a[k]);//или m:=m+[a[k]]; добавить значения элемента a[k] в множество m
end;
end;
writeln;
writeln('Уникальные элементы массива');
for k:=1 to 10 do //цикл по числам из промежутка от 1 до 10
begin
if k in m then write(k,' '); //если число k принадлежит множеству, вывести число k
end;
//либо вывод сразу всего множества write(m), цикл for k:=1 to 10 do тогда не нужен
end.
Результат выполнения программы
Вопросы:
- Можно ли в множестве сохранить вещественное число?
- Как узнать длину множества?