Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 4

Программная работа с множествами путем использования битовых флагов

06.12.2013, 16:09. Показов 1108. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ПОМОГИТЕ препод составил задачи, ни чего не объяснил толком я в С++ пока ноль



как я понял препода надо сделать 2 TEdit и 3 TListBox, 3 кнопки.

при нажатии кнопок 1 и 2 значения из 1 и 2 TEdit по строчно должны записыватся в ListBox1 и ListBox2 а при нажатии на 3 кнопку он должен их сравнить в ListBox3

вот что дал нам препод

Программная работа с множествами путем использования битовых флагов

Простейшая реализация работы множествами может выглядеть следующим образом. Пусть имеется множество элементов, отличительным признаком каждого из которых является его номер в условной последовательности: 1, 2, 3 и т.д. Тогда присутствие в множестве i-го элемента можно обозначить единицей в (i-1)-й позиции двоичной последовательности, а отсутствие данного элемента – нулем в той же позиции.
В качестве двоичной последовательности можно использовать просто целое число. Недостатком такого подхода будет только ограничение количества элементов множества. Например, если взять число типа long в языках C/C++/C#/Java, то им можно представить множество максимальной мощностью 32 элемента.
Для начала нужно создать множество, объявив переменную:

long set;

и проинициализировать его («опустошить»):

set = 0;

Установка «наличия» элемента в множестве выполняется путем выполнения операции дизъюнкции («ИЛИ») с некоторым унарным кодом (т.е. с битовой последовательностью, содержащей всего одну единицу). Например, дизъюнкция с последовательностью 00000000000000000000000000000100 позволит добавить в множество 3-й элемент, а с последовательностью 00000000000000000000000000100000 – 6-й элемент. Сформировать унарный код из номера элемента можно в языках C/C++/C#/Java при помощи операции двоичного сдвига:

1 << (num-1)

Здесь единица сдвигается на num-1 разрядов влево. Операция дизъюнкции для указанных языков может быть выполнена так:

set |= 1 << (num-1);

Для того, чтобы удалить элемент из множества, необходимо выполнить операцию конъюнкции с инверсией унарного кода. То есть при выполнении операции конъюнкции на исходное число, представляющее собой последовательность битовых флагов, накладывается маска, содержащая всего один ноль, обнуляющий таким образом один разряд исходной последовательности. В названных языках бинарное «И» обозначается символом “&”, а бинарная инверсия – символом “~”. Поэтому установка флага наличия элемента в множестве выполняется следующим образом:

set &= ~(1L << (num-1));

Проверка наличия элемента в множестве выполняется при помощи бинарного «И»:

for (int i = 0, flag = 1; i < 32; i++, flag <<= 1)
{
if (set & flag)
{
ListBox1->Items->Add(IntToStr(i+1) + "-é");
}
}

Здесь ListBox1 – компонент типа TListBox, в который заносится информация о наличии элементов множества.

Задание.
Реализовать форму с полем ввода номера элемента множества (TEdit), кнопками (TButton) добавления элемента в два множества и двумя списками для отображения элементов множеств. Кроме того, реализовать функции согласно варианту.

Вариант 1. Удаление элемента из множества. Пересечение множеств.
Вариант 2. Удаление элемента из множества. Объединение множеств.
Вариант 3. Удаление элемента из множества. Симметрическая разность множеств.
Вариант 4. Удаление элемента из множества. Разность множеств.
Вариант 5. Удаление элемента из множества. Нахождение дополнения к множеству.
Вариант 6. Пересечение множеств. Нахождение дополнения к множеству.
Вариант 7. Объединение множеств. Симметрическая разность множеств.
Вариант 8. Разность множеств. Пересечение множеств.
Вариант 9. Объединение множеств. Нахождение дополнения к множеству.
Вариант 10. Разность множеств. Симметрическая разность множеств.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2013, 16:09
Ответы с готовыми решениями:

Проверка битовых флагов
Привет всем. Подскажите как мне проверить включен ли флаг или нет? Вот к примеру есть такое...

Несколько примеров использования флагов
Признак в виде одноразрядного индикатора, свидетельствующий о том, что некоторый аппаратный или...

Вывод значения регистра флагов в двоичной системе счисления без использования прерывной DOS и BIOS
Завтра экзамен, препод оказался очень добрым и выдал билет за день, что бы лучше подготовиться) но...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.12.2013, 16:09
Помогаю со студенческими работами здесь

Провести операцию над множествами без использования стандартных алгоритмов
Подскажите как провести операцию над множествами без использования стандартных алгоритмов:...

Ошибка в битовых сдвигах/битовых масках
Здравствуйте! Написал программу, ориентирующуюся на принцип записи числа по IEEE 754. Требуется...

Работа флагов через оператор |
В общем всегда использовал данный оператор для установки флагов например для работы с файлами ...

Раздача Wi-Fi путём использования 4G модема
Добрый день! Поступил такой вопрос. Есть 2 4g роутера ZTE и Huawei. Вопрос, можно ли дать им инет...

Подписка на события путём использования аксессоров
Здравствуйте! Никак не могу понять каким образом здесь происходит подписка на события с помощью...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru