Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Poziom 1, Rozdział 12 (Operacje logiczne) - negacja w nawiasach (nie rozumiem, dlaczego taki wynik wychodzi)

Ostatnio zmodyfikowano 2017-08-19 19:20
Autor Wiadomość
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?

C/C++
#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; //a false, b true, c false = wynik false
    cout << "wynik = " <<( !a && b &&!c ) << endl; //a true, b true, c true = wynik true
    cout << "wynik = " <<( !a && b && c ) << endl; //a true, b true, c false = wynik false
    cout << "wynik = " <<( !( !a && b &&!c ) ) << endl; //a false, b false, c false = wynik false
    cout << "wynik = " <<( !( a && b && c ) ) << endl; //a true, b false, c true = wynik true (o co chodzi?)
    cout << "wynik = " <<( !a &&!b &&!c ) << endl; ////a true, b false, c true = wynik false
   
    return 0;
}
P-164106
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
P-164107
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)

C/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;
    }
}
P-164108
« 1 »
  Strona 1 z 1