22.05.2013, 12:35 | #1 (permalink) |
Новичок
Регистрация: 22.05.2013
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Работа с множествами
Определить, являются ли множества идентичными и в случае их различия вывести несовпадающие элементы. |
22.05.2013, 12:35 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Упростить решение проблемы могут эти темы Моя вторая работа Помогите с множествами Моя первая работа Первая работа Моя первая работа Моя первая работа |
22.05.2013, 13:10 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ладно, на основании помещения в раздел будем считать, что Паскаль. Тогда так:
Код:
Var M1,M2,M3,M4:Set of Byte; i:Byte; YN:Char; b:boolean; Begin M1:=[]; M2:=[]; Writeln('Set1:'); Repeat Write('Next element: '); Readln(i); M1:=M1+[i]; Write('Continue? (Y/N): '); Readln(YN); Until (YN='N') or (YN='n'); Writeln; Writeln('Set2:'); Repeat Write('Next element: '); Readln(i); M2:=M2+[i]; Write('Continue? (Y/N): '); Readln(YN); Until (YN='N') or (YN='n'); Writeln; M3:=M1-M2; M4:=M2-M1; b:=(M3<>[]) or (M4<>[]); If b then begin if M3<>[] then begin Writeln('Not coinciding elements of Set1:'); for i:=0 to 255 do if (i in M1) and Not(i in M2) then write(i:4); Writeln; end; if M4<>[] then begin Writeln('Not coinciding elements of Set2:'); for i:=0 to 255 do if Not(i in M1) and (i in M2) then write(i:4); end; end else Writeln('Sets coicide'); Readln End. |
22.05.2013, 14:17 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
23.05.2013, 10:23 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Так, прежде всего - заметил некоторую неточность в своей программе. Исправил.
Теперь попробую объяснить, как она работает. Прежде всего, раз речь идет о числовых множествах, вспомним, что единственным типом элементов таких множеств может быть byte (диапазон 0..255). Такие множества и объявляем. Далее начинаем вводить значения элементов обоих множеств. Поскольку число элементов множеств наперед не задается, ввод осуществляем в диалоговом режиме. Как только ответ на вопрос о продолжении становится "N" или "n", ввод прекращается. Далее находим разности. Множество M3 представляет собой совокупность элементов, входящих в множество М1 и не входящих в М2. М4 - соответственно, наоборот. Если множества М1 и М2 совпадают, то обе разности М3 и М4 оказываются пустыми множествами, и булева переменная-флажок b получает значение false. Если хотя бы одна из разностей не пустая, то b становится true. Если b получает значение true (множества М1 и М2 не совпадают), то выводятся несовпадающие элементы, причем порознь: сначала список элементов (если таковые имеются) множества М1, не входящих в М2, потом - наоборот. Формируются списки так: прогоняем переменную i от 0 до 255 и если какое-то из значений i имеется в М1 и не имеется в М2, это значение выводится на экран. Потом повторяем такой же цикл с перестановкой множеств М1 и М2. Если же флажок b получает значение false, то выводится сообщение "Множества совпадают". Всё! |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|