26.02.2022

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

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

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

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

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

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

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

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

 Примеры 

Целые числа

Символы

Строки


Множество

[0,2,4,6,8,10,12]

[’a’,’b’,’c’,’d’,’e’]

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

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

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.

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

Уникальные элементы массива

Вопросы:

  • Можно ли в множестве сохранить вещественное число?
  • Как узнать длину множества?

1 комментарий: