Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/34: Рейтинг темы: голосов - 34, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 25.12.2018
Сообщений: 32

Реализация бинарной операции над множествами: "Симметрическая разность"

03.01.2019, 01:25. Показов 6697. Ответов 8

Студворк — интернет-сервис помощи студентам
Само условие:
Реализуйте бинарную операцию над множествами — симметрическую разность. Ее результатом являются те элементы двух множеств, которые принадлежат ровно одному из множеств (но не принадлежат их пересечению).

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

Выходные данные
Результат требуется вывести в том же формате: сначала количество элементов, полученных в результате операции, затем (если получено ненулевое количество элементов) вывести сами элементы в порядке возрастания.

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

Примеры
входные данные
3
1 2 3
2
1 2

выходные данные
1
3

Буду очень признателен за решение с комментариями.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.01.2019, 01:25
Ответы с готовыми решениями:

Реализовать операции над множествами: объединение, пересечение, разность
Модуль. Разработать способ представления множеств, содержащих более 255 элементов. Реализовать операции над множествами: объединение,...

Операции над множествами
Даны три множества X1, X2, X3, содержащие целые числа из диапазона 100...200. Известно, что мощность каждого из этих множеств равна 10....

Операции над множествами
Выполнить операции над заданными множествами (A Δ B) ∩ C, где A Δ B = (A U B) \ (A ∩ B) = (A \ B) U (B \ A) реализуя множества ...

8
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
03.01.2019, 10:35
Цитата Сообщение от TheSuperSerg Посмотреть сообщение
количество элементов первого множества. Во второй строке через пробел перечислены эти элементы (натуральные числа).
А какой порядок количества и элементов?
0
0 / 0 / 0
Регистрация: 25.12.2018
Сообщений: 32
05.01.2019, 00:58  [ТС]
Puporev, не понял ваш вопрос.
0
Модератор
10412 / 5699 / 3401
Регистрация: 17.08.2012
Сообщений: 17,353
05.01.2019, 04:27
TheSuperSerg, что может быть непонятного?

Напишите так:

"Максимальное количество элементов множества равно ..., каждый элемент множества не более ...".

Вместо многоточий укажите соответствующие числа.
0
0 / 0 / 0
Регистрация: 25.12.2018
Сообщений: 32
05.01.2019, 22:20  [ТС]
Puporev, Максимальное количество элементов множества равно 256, каждый элемент не более 109
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
05.01.2019, 22:26
Еще забыл спросить какой Паскаль? В АВС.net можно работать с такими числами как с множествами, в других Паскалях только как с массивами, там для чисел только тип set of byte([0..255]).
0
0 / 0 / 0
Регистрация: 25.12.2018
Сообщений: 32
06.01.2019, 01:23  [ТС]
Puporev, можно на любом, не важно.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
06.01.2019, 09:23
Лучший ответ Сообщение было отмечено TheSuperSerg как решение

Решение

Паскаль АВС.net
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var m1,m2,m3:set of integer;
    n1,n2,n3,a,mn,mx:integer;
begin
readln(n1);//читаем первое число
m1:=[];
for var i:=1 to n1 do//читаем числа из 2 строки
 begin
  read(a);
  include(m1,a);//заносим их в множество
 end;
readln(n2);//читаем второе число
m2:=[];
for var i:=1 to n2 do//читаем числа из 4 строки
 begin
  read(a);
  include(m2,a);//заносим во 2 множество
 end; 
m3:=(m1-m2)+(m2-m1);//получаем симметрическую разность
n3:=0;//считаем число элементов в множестве
mn:=maxint;//и находим минимальный и максимальный
mx:=-maxint-1;//в АВС.net выводит множество не в порядке возрастания
foreach var s in m3 do
 begin
  inc(n3);
  if s<mn then mn:=s
  else if s>mx then mx:=s;
 end; 
 writeln(n3);//выводим количество чисел в новом множестве
 if n3>0 then//если в множестве есть числа
 for var s:=mn to mx do//выводим числа в порядке возрастания
 if s in m3 then write(s,' ');
 end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
06.01.2019, 11:28
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const TSetMaxSize=256;
type
  TSet = record
    count: Word;
    data: array [0..TSetMaxSize-1] of LongInt;
  end;
 
function SymDiff(var s: TSet; const a, b: TSet): Boolean;
var ai, bi: Word;
begin with s do begin
  SymDiff:=False; count:=0; ai:=0; bi:=0;
  while (ai<a.count) and (bi<b.count) do begin
    if a.data[ai]<b.data[bi] then
      if count<TSetMaxSize then begin
        data[count]:=a.data[ai]; Inc(count); Inc(ai);
      end else Exit
    else if a.data[ai]>b.data[bi] then
      if count<TSetMaxSize then begin
        data[count]:=b.data[bi]; Inc(count); Inc(bi);
      end else Exit
    else begin
      Inc(ai); Inc(bi);
    end;
  end;
  while ai<a.count do
    if count<TSetMaxSize then begin
      data[count]:=a.data[ai]; Inc(count); Inc(ai);
    end else Exit;
  while bi<b.count do 
    if count<TSetMaxSize then begin
      data[count]:=b.data[bi]; Inc(count); Inc(bi);
    end else Exit;
  SymDiff:=True;
end; end;
Для добавления/удаления/проверки наличия можно использовать что-то вроде:
Pascal
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
function LowerBound(const v: array of LongInt; left, right: Word; x: LongInt): Word;
var m: Word;
begin
  while left<right do begin
    m:=left+(right-left) div 2;
    if x>v[m] then left:=m+1 else right:=m;
  end;
  LowerBound:=left;
end;
 
function sInclude(var s: TSet; x: LongInt): Boolean;
var i, j: Word;
begin with s do begin
  sInclude:=True;
  i:=LowerBound(data,0,count,x);
  if (i<count) and (data[i]=x) then Exit;
  if count=TSetMaxSize then begin
    sInclude:=False; Exit;
  end;
  Inc(count); for j:=count downto i+1 do data[j]:=data[j-1];
  data[i]:=x;
end; end;
 
procedure sExclude(var s: TSet; x: LongInt);
var i: Word;
begin with s do begin
  i:=LowerBound(data,0,count,x);
  if (i<count) and (data[i]=x) then begin
    Dec(count); for i:=i to count do data[i]:=data[i+1];
  end;
end; end;
 
function sIsIn(const s: TSet; x: Longint): Boolean;
var i: Integer;
begin with s do begin
  i:=LowerBound(data,0,count,x);
  sIsIn:=(i<count) and (data[i]=x);
end; end;
Пример использования
Pascal
75
76
77
78
79
80
81
82
83
84
var
  a, b, c: TSet;
  n: Word; x: LongInt;
begin
  Read(n); for n:=1 to n do begin Read(x); sInclude(a,x); end;
  Read(n); for n:=1 to n do begin Read(x); sInclude(b,x); end;
  if SymDiff(c,a,b) then with c do begin
    WriteLn(count); if count>1 then for n:=0 to count-1 do Write(' ',data[n]); WriteLn;
  end else WriteLn('Ошибка: слишком много значений');
end.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.01.2019, 11:28
Помогаю со студенческими работами здесь

Операции над множествами
Даны два числовых множества A = (2,3,4,5,6,7,8,10) и B = (1,3,4,7,9,12,15). Написать программу, которая реализует операции над множествами...

Операции над множествами
Не могу разобраться, помогите пожалуйста. Пусть U= {a, b, с, d}, X= {а, с}, Y= {a, b, d}, Z= {b, с}. 1. X⋂Y 2. (X⋂Z) ∪ Y

Реализовать классические операции над множествами - объединение, пересечение и симметричная разность
Создать параметризованный тип данных - множество. Этот тип предназначен для хранения множества элементов и выполнения операций над ними....

Работа с множествами: объединение, пересечение, симметрическая разность
В общем нужно задать 3 множества (a,b,c) (массивы) И на выходе получить (&quot;A&quot; объединение с &quot;B&quot;) симметрическая разность этой...

Операции над множествами
Здравствуйте уважаемые. Нужно найти объединение, пересечение и разницу множеств А и В. a). A = {x : 0&lt; x &lt; 3} B = {x : 1 &lt;= x...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru