Этюд из жизни.
Есть четыре булевых переменных.
Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
А>Этюд из жизни. А>Есть четыре булевых переменных. А>Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
В реальном коде на C/C++? сложить и сравнить сумму.
Здравствуйте, Аноним, Вы писали:
А>Есть четыре булевых переменных. А>Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
Самый простой вариант — построить таблицу истинности функции, а по ней построить дизъюнктивную нормальную форму функции.
Здравствуйте, Аноним, Вы писали:
А>Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
Тебе поможет дизъюнктивная нормальная форма.
Здравствуйте, Аноним, Вы писали:
А>Есть четыре булевых переменных. А>Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
Здравствуйте, Аноним, Вы писали:
А>Этюд из жизни. А>Есть четыре булевых переменных. А>Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
Здравствуйте, K13, Вы писали:
А>>Этюд из жизни. А>>Есть четыре булевых переменных. А>>Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
K13>В реальном коде на C/C++? сложить и сравнить сумму.
Здравствуйте, Аноним, Вы писали:
А>Этюд из жизни. А>Есть четыре булевых переменных. А>Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
Какие операции булевой алгебры разрешается использовать?
Здравствуйте, snoɯʎuouɐ, Вы писали:
ɯʎɐ>Здравствуйте, Аноним, Вы писали:
А>>Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
ɯʎɐ>http://goo.gl/gYYsX
Классный ресурс, но там не хватает оптимизаций — например, методом Карт Карно.
У меня получилось выражение из 8 членов:
((b1&b2)|b3|b4) & ((b3&b4)|b1|b2)
Re[2]: Логическая функция
От:
Аноним
Дата:
16.08.11 06:26
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Этюд из жизни. А>>Есть четыре булевых переменных. А>>Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
А>Какие операции булевой алгебры разрешается использовать?
Все, какие есть в обычном прикладном языке программирования (вроде С++ или Visual Basic).
Re[3]: Логическая функция
От:
Аноним
Дата:
16.08.11 12:02
Оценка:
Здравствуйте, Аноним, Вы писали:
А>>Какие операции булевой алгебры разрешается использовать? А>Все, какие есть в обычном прикладном языке программирования (вроде С++ или Visual Basic).
Ну это как посмотреть. Битовая операция ^ (исключающее "или") тоже булева функция, но в C++ за логическую не считается. И еще (bool)==(bool) и (bool)!=(bool) тоже булевы функции, их можно использовать?
Здравствуйте, Аноним, Вы писали:
А>Этюд из жизни. А>Есть четыре булевых переменных. А>Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
Только через Монте-Карло. Случайно выбираешь переменную и проверяешь ее на true и так много раз.
Через отношение экспериментов с true к общему числу экспериментов получаешь правильный ответ.
Здравствуйте, Lloyd, Вы писали:
А>>Этюд из жизни. А>>Есть четыре булевых переменных. А>>Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
L>return ((b1 ? 1 : 0) + (b2 ? 1 : 0) + (b3 ? 1 : 0) + (b4 ? 1 : 0)) >= 2; L>
Кстати, в отличие от честных вариантов на логических функциях, этот вариант существенно понятнее
Здравствуйте, andy1618, Вы писали:
L>>return ((b1 ? 1 : 0) + (b2 ? 1 : 0) + (b3 ? 1 : 0) + (b4 ? 1 : 0)) >= 2; L>>
A>Кстати, в отличие от честных вариантов на логических функциях, этот вариант существенно понятнее
Но и не без недостатков. В частности, тебует вычисления всех выражений, даже тогда, когда в этом нет необходимости.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Аноним, Вы писали:
А>>Этюд из жизни. А>>Есть четыре булевых переменных. А>>Требуется написать функцию, возвращающую TRUE в случае, если две или больше из них равны TRUE (иначе — FALSE).
L>return ((b1 ? 1 : 0) + (b2 ? 1 : 0) + (b3 ? 1 : 0) + (b4 ? 1 : 0)) >= 2; L>
зачем такие сложности со всеми этими ветвлениями, просто сложить интерпретировав как int
, для кодогенерации компилятора это всего лишь другая инструкция процессора, но это позволяет избежать ветвления и отложенных вычислений.
Здравствуйте, nen777w, Вы писали:
L>>return ((b1 ? 1 : 0) + (b2 ? 1 : 0) + (b3 ? 1 : 0) + (b4 ? 1 : 0)) >= 2; L>>
N>зачем такие сложности со всеми этими ветвлениями, просто сложить интерпретировав как int N>, для кодогенерации компилятора это всего лишь другая инструкция процессора, но это позволяет избежать ветвления и отложенных вычислений.
Если не изменяет память, то в С любое число отличное от 0 трактуется как TRUE, поэтому в b1 может прийти как 1, так и 10, 100, MAX_INT.
Re[4]: Логическая функция
От:
Аноним
Дата:
20.08.11 16:53
Оценка:
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, nen777w, Вы писали:
L>>>return ((b1 ? 1 : 0) + (b2 ? 1 : 0) + (b3 ? 1 : 0) + (b4 ? 1 : 0)) >= 2; L>>>
N>>зачем такие сложности со всеми этими ветвлениями, просто сложить интерпретировав как int N>>, для кодогенерации компилятора это всего лишь другая инструкция процессора, но это позволяет избежать ветвления и отложенных вычислений.
L>Если не изменяет память, то в С любое число отличное от 0 трактуется как TRUE, поэтому в b1 может прийти как 1, так и 10, 100, MAX_INT.