Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 22.01.2013
Сообщений: 58

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

22.01.2013, 21:16. Показов 2926. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста, как в c# в WindowsForm рассчитать булеан массива arr = {5, 9, 1}.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.01.2013, 21:16
Ответы с готовыми решениями:

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

Создать приложение, выполняющее логические операции над множествами
Создать приложение, выполняющее логические операции над множествами. Пользователь щелчком мыши включает или исключает элемент одного из...

Используя массивы, реализовать основные операции над множествами
Здравствуйте, помогите, пожалуйста, решить задачку:

18
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
22.01.2013, 21:56
Переформулируйте задание


Не по теме:

Leksi11, WTF 0_o ?
Сохраню на случай важных переговоров.

0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
23.01.2013, 00:10
Лучший ответ Сообщение было отмечено как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
static IEnumerable<IEnumerable<T>> PowerSet<T>(IEnumerable<T> initialSet)
{
    var set = new List<IEnumerable<T>>() { Enumerable.Empty<T>() };
    return initialSet.Aggregate((IEnumerable<IEnumerable<T>>)set, (x, y) => x.Concat(x.Select(z => z.Concat(new List<T>() { y }))));
}
 
static void Main()
{
    int[] arr = { 5, 9, 1 };
    Console.WriteLine("{{{0}}}", string.Join(",", PowerSet(arr).Select(s => '{' + string.Join(",", s) + '}')));
    Console.ReadKey(true);
}
Цитата Сообщение от Noob.net Посмотреть сообщение
Переформулируйте задание
Булеан множества
4
 Аватар для GOLD
124 / 37 / 6
Регистрация: 14.01.2012
Сообщений: 264
23.01.2013, 00:11
Интересная тема, правда ссылка не открывается))
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
23.01.2013, 00:15
Цитата Сообщение от Sleepy_Master Посмотреть сообщение
ссылка не открывается
http://ru.wikipedia.org/wiki/Булеан
Похоже, форумный редиректор тупит.
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
23.01.2013, 00:21
Sleepy_Master, классическая комбинаторика, олимпиадникам ей с 10 класса мозг выносят. Вот тут неплохое описание сих экзорицизмов. Определение 1.10 - описание этой задачи человеческим языком.
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
23.01.2013, 00:42
kolorotur, Наверное из-за ассоциации забыл дискретку.
минут 15 разбирал ваш код

Добавлено через 9 минут

Не по теме:

и теперь я понял...вы маньяк.. :bravo:

0
23.01.2013, 00:54

Не по теме:

Цитата Сообщение от Noob.net Посмотреть сообщение
и теперь я понял...вы маньяк..
тсс... Он стесняется
;D

0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
23.01.2013, 01:12
Цитата Сообщение от Noob.net Посмотреть сообщение
вы маньяк.
Не, я этот код где-то на просторах инета увидел, где - уже не помню, давно было. Вроде как на Розетте.
Этот кусочек - своего рода легкий троллинг ленивых студентов: им же преподавателю надо будет объяснить что там происходит
Сам стараюсь по возможности писать понятно.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
23.01.2013, 08:42
Наверное я еще мала, я ничего не поняла...
0
1 / 1 / 0
Регистрация: 22.01.2013
Сообщений: 58
23.01.2013, 12:31  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
static IEnumerable<IEnumerable<T>> PowerSet<T>(IEnumerable<T> initialSet)
{
    var set = new List<IEnumerable<T>>() { Enumerable.Empty<T>() };
    return initialSet.Aggregate((IEnumerable<IEnumerable<T>>)set, (x, y) => x.Concat(x.Select(z => z.Concat(new List<T>() { y }))));
}
 
static void Main()
{
    int[] arr = { 5, 9, 1 };
    Console.WriteLine("{{{0}}}", string.Join(",", PowerSet(arr).Select(s => '{' + string.Join(",", s) + '}')));
    Console.ReadKey(true);
}

Булеан множества
а как в форме сделать, а не в консоли?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
23.01.2013, 12:50
А что именно подразумевается под фразой "в форме"?
Форма - это окно приложения. Что в нем должно быть?
0
1 / 1 / 0
Регистрация: 22.01.2013
Сообщений: 58
23.01.2013, 12:53  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
А что именно подразумевается под фразой "в форме"?
Форма - это окно приложения. Что в нем должно быть?
есть listbox с первоначальным массивом, button при нажатии на который, в другом listboxе появляется булеан
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
23.01.2013, 13:53
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
IEnumerable<IEnumerable<T>> PowerSet<T>(IEnumerable<T> initialSet)
{
    var set = new List<IEnumerable<T>>() { Enumerable.Empty<T>() };
    return initialSet.Aggregate((IEnumerable<IEnumerable<T>>)set, (x, y) => x.Concat(x.Select(z => z.Concat(new List<T>() { y }))));
}
 
void Form_Load(object sender, EventArgs e)
{
   listBox1.DataSource = new int[] {5, 9, 1};
}
 
void Button_Click(object sender, EventArgs e)
{
   listBox2.DataSource = PowerSet(listBox1.DataSource as IEnumerable<int>).Select(subset => string.Join(" ", subset));
}
Контролы на форму набросайте сами и прицепите вышеуказанные обработчики - попрактикуйтесь.
0
23.01.2013, 14:36

Не по теме:

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

0
1 / 1 / 0
Регистрация: 22.01.2013
Сообщений: 58
25.01.2013, 18:59  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
IEnumerable<IEnumerable<T>> PowerSet<T>(IEnumerable<T> initialSet)
{
    var set = new List<IEnumerable<T>>() { Enumerable.Empty<T>() };
    return initialSet.Aggregate((IEnumerable<IEnumerable<T>>)set, (x, y) => x.Concat(x.Select(z => z.Concat(new List<T>() { y }))));
}
 
void Form_Load(object sender, EventArgs e)
{
   listBox1.DataSource = new int[] {5, 9, 1};
}
 
void Button_Click(object sender, EventArgs e)
{
   listBox2.DataSource = PowerSet(listBox1.DataSource as IEnumerable<int>).Select(subset => string.Join(" ", subset));
}
Контролы на форму набросайте сами и прицепите вышеуказанные обработчики - попрактикуйтесь.
а попроще не получится? а то ничего не понятно..
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.01.2013, 19:59
kolorotur, ув. kolortur, извиняюсь, но я был бы рад, если бы вы пояснили, что тут происходит, а то это что-то вроде
C++
1
2
if (cmd[1] == RESET)
{((void(*)(void))0)();}
можно понять только если быть в теме. А я не в теме. Был бы признателен
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.01.2013, 22:04
Цитата Сообщение от Psilon Посмотреть сообщение
что тут происходит
Вот бы узнать!!!1

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

На выходе, фактически, получается ступенчатый массив, содержащий подмассивы с возможными комбинациями элементов.

На примере выше:
а). Дается исходный массив { 5, 9, 1 }
б). Создается множество множеств, состоящее из одного пустого подмножества:
C#
1
var set = new List<IEnumerable<T>>() { Enumerable.Empty<T>() };
То есть изначальный вид такой: { {} }

в). Далее идет метод Aggregate. Суть его в том, чтобы для каждого нового элемента коллекции вызывался метод, получающий параметром этот элемент коллекции (У) и сгенерированный в предыдущей итерации результат (Х), начиная с зернового (в нашем случае это {{}}).

Итак, что происходит пошагово:
1. Получаем множество множеств параметром х, которое изначально равно { {} } (пустое подмножество, сгенерированное в шаге (б), и первый элемент массива - 5.
2. Берем все подмножества из множества Х, добавляем к каждому элемент У и соединяем все получившиеся новые подмножества с Х. На данный момент подмножество только одно - {}, добавляем к нему 5 и получаем {5}, потом результат соединяем с Х ({ {} }), получается { {}, {5} }
3. Следующая итерация - на вход подается множество множеств из предыдущего результата { {}, {5} } и новый элемент массива - 9.
Делается то же самое: к каждому подмножеству добавляется новый элемент и получившиеся результаты добавляются к родительскому множеству:
{} + 9 = {9}
{5} + 9 = {5, 9}
{ {}, {5} } + { {9}, {5, 9} } = { {}, {5}, {9}, {5, 9} }
4. Новая итерация - опять сгенерированное в прошлом шаге множество { {}, {5}, {9}, {5, 9} }, но на этот раз новый элемент - 1.
Процедура та же: берется каждое подмножество, к нему добавляется новый элемент, потом все получившиеся подмножества добавляются к родительскому:
{} + 1 = {1}
{5} + 1 = {5, 1}
{9} + 1 = {9, 1}
{5, 9} + 1 = {5, 9, 1}
{ {}, {5}, {9}, {5, 9} } + { {1}, {5, 1}, {9, 1}, {5, 9, 1} } = { {}, {5}, {9}, {5, 9}, {1}, {5, 1}, {9, 1}, {5, 9, 1} }
5. Элементы в изначальном массиве кончились - генерация булеана завершена, результат:
{ {}, {5}, {9}, {5, 9}, {1}, {5, 1}, {9, 1}, {5, 9, 1} }

Остальное - уже дело техники для вывода результата в консоль.
Замените списки на массивы, переименуйте параметр х в superset, y в value, а z - в subset и код станет более понятен.

Надеюсь, не сильно сумбурно объяснил.
2
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.01.2013, 22:37
Цитата Сообщение от kolorotur Посмотреть сообщение
А если серьезно, то происходит генерирование булеана, то есть множества всех возможных подмножеств.
Говоря простыми словами, для каждого нового элемента берутся все сгенерированные до этого подмножества, начиная с пустого, к ним добавляется этот элемент, и получившийся ряд добавляется к результату.
Ну что такое булеан (2B) я представляю, вопрос был именно в том, что происходит в этой мешанине. Спасибо за ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.01.2013, 22:37
Помогаю со студенческими работами здесь

Используя массивы, реализовать основные операции над множествами
Здравствуйте, помогите решить задачку: Используя массивы, реализовать основные операции над множествами: -определение принадлежности...

Используя массивы, реализовать основные операции над множествами
Здравствуйте, помогите решить задачку: Используя массивы, реализовать основные операции над множествами: ...

Выполнить операции над множествами (объединение, пересечение, разницу)
над множествами 1 и 2 выполнить - объединение ,пересечение , разницу mnoj1\mnoj2 и mnoj2\mnoj1(ну ещё дополнение mnoj1 и mnoj2 до...

Используя массивы, реализовать основные операции над множествами
Здравствуйте, помогите решить задачку: Используя массивы, реализовать основные операции над множествами: -определение принадлежности...

ArrayList: необработанное исключение. Операции над множествами с использованием ArrayList
Задача: разработать калькулятор для логических множеств ( для операций пересечение, объединение, разность и симметричная разность). Сделано...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru