
Задача на побитые операции в c++ В пиццерии для заказа пиццы используют стенд заказов, на котором
посетители выбирают ингредиенты. Возможные ингредиенты: помидоры, ветчина, грибы, сыр, ананасы, креветки и лук; выбранные ингредиенты записываются в одну переменную как битовые флаги. Пункт А. Создайте константы для обозначения флагов для ингредиентов. С их помощью создайте и запишите в переменную заказ на пиццу с помидорами, ветчиной и луком. Остальные пункты. Выполняются произвольно, в любом порядке и количестве. Во всех пунктах предполагается, что в переменной pizza записан некоторый (произвольный) заказ. Пункт B. Посчитайте и выведите общее количество ингредиентов в заказе. Пункт C. В пиццерии проводится акция: во все пиццы добавляется сыр. Установите соответствующий флаг. В пиццерии закончились креветки. Сбросьте соответствующий флаг. На стенде перепутали подписи у кнопки заказа ананасов. Поменяйте соответствующий флаг на протиповоложный. Пункт D. Новая акция: каждый, заказавший грибы, получает к ним лук. Установите флаг для лука, если в заказе установлен флаг для грибов. Условные операторы if, switch, циклы и тернарная операция всё ещё запрещены.

Ответы на вопрос

Ответ:
Программа представлена на скрине.
Далее под константой будет пониматься макроопределение (символическая константа)
Были созданы константы для обозначения флагов ингредиентов. Им даны осмысленные названия. Также была создана константа для формирования пустого заказа.
int ingredientsCount(Pizza&); - возвращает количество ингредиентов.
void addCheese(Pizza&); - добавляет в заказ сыр
void removeOnion(Pizza&); - убирает из заказа лук
void togglePineapple(Pizza&); - переключает ананасы
void addOnionIfMushroomsExist(Pizza&); - добавляет лук если есть грибы




Вот пример кода на C++, который решает данную задачу:
cpp#include <iostream>
// Пункт А
const int TOMATO = 1;
const int HAM = 1 << 1;
const int MUSHROOM = 1 << 2;
const int CHEESE = 1 << 3;
const int PINEAPPLE = 1 << 4;
const int SHRIMP = 1 << 5;
const int ONION = 1 << 6;
int main() {
// Пункт А
int pizza = TOMATO | HAM | ONION;
// Пункт B
int ingredientCount = __builtin_popcount(pizza);
std::cout << "Общее количество ингредиентов в заказе: " << ingredientCount << std::endl;
// Пункт C
pizza |= CHEESE; // Добавляем сыр
pizza &= ~SHRIMP; // Убираем креветки
pizza ^= PINEAPPLE; // Переключаем флаг для ананасов
// Пункт D
pizza |= ((pizza & MUSHROOM) != 0) ? ONION : 0; // Если есть грибы, добавляем лук
// Выводим результат
std::cout << "Итоговый заказ на пиццу: " << pizza << std::endl;
return 0;
}
Обратите внимание на использование битовых операций для установки, сброса и переключения флагов. __builtin_popcount
используется для подсчета установленных битов и определения общего количества ингредиентов в заказе.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili