Poziom 1, Rozdział 12 (Operacje logiczne) - negacja w nawiasach (nie rozumiem, dlaczego taki wynik wychodzi)
Ostatnio zmodyfikowano 2017-08-19 19:20
Key Temat założony przez niniejszego użytkownika |
Poziom 1, Rozdział 12 (Operacje logiczne) - negacja w nawiasach (nie rozumiem, dlaczego taki wynik wychodzi) » 2017-08-19 17:41:20 Przedstatni cout kodu pokazuje mój problem, gdyż nie rozumiem dlaczego, gdy uruchamiam program, to wychodzi wartość 1, czyli true, bo w końcu a=false, b=true, c=false zmienia się na a=true, b=false i c=true, no chyba, że w tym przypadku negacja działa inaczej w nawiasie. Ostatni cout został zapisany tak samo, lecz w inny sposób i już wynik wychodzi 0, czyli false. O co chodzi z tym przedostatnim wynikiem? Złe wykorzystanie tej funkcji negacji w nawiasie, czy co? #include <iostream>
using namespace std;
bool wynik;
int main() { wynik = false && true || !( false &&!true ) || !( true &&!false ); cout << "wynik (false&&true || !(false&&!true) || !(true&&!false) = " << wynik << endl; bool a = false; bool b = true; bool c = false; cout << "wynik = " <<( a && b && c ) << endl; cout << "wynik = " <<( !a && b &&!c ) << endl; cout << "wynik = " <<( !a && b && c ) << endl; cout << "wynik = " <<( !( !a && b &&!c ) ) << endl; cout << "wynik = " <<( !( a && b && c ) ) << endl; cout << "wynik = " <<( !a &&!b &&!c ) << endl; return 0; }
|
|
latajacaryba |
» 2017-08-19 17:56:47 ( !( a && b && c ) ) Zaprzeczenie koniunkcji (a i b i c) więc skoro a = false; b = true; c = false; (false && true && false) daje false Zaprzeczenie false to true. Ostatni to co innego. tam masz !a czyli true !b czyli false !c czyli true więc (!a && !b && !c) daje false bo operator && to coś jak znak koniunkcji w logice, czyli żeby zdanie (p && q) było prawdziwe, to p musi być true, i q musi być true. Podsumowując: (a && b && c) daje false, a Ty zmieniasz to na true ( ! ) natomiast (!a && !b && !c) daje również false, bo w obydwu przypadkach, nie wszystkie zmienne bool z nawiasów dają true |
|
mateczek |
» 2017-08-19 19:20:29 !A*!B*!C to nie to samo co !(A*B*C) Ale !A*!B*!C to jest to samo co !(A+B+C) #include <iostream>
int main() { bool A, B, C; for( int i = 0; i < 8; i++ ) { A = i & 4; B = i & 2; C = i & 1; std::cout << A << " " << B << " " << C << std::endl; std::cout << "iloczyn negacji = " <<( !A &&!B &&!C ) << "; suma zanegowana=" <<( !( A || B || C ) ) << std::endl; std::cout << std::endl; } }
|
|
« 1 » |