Koło informatyczne

Przyspieszony kurs języka C++

 

Wyrażenia logiczne

Komputer jest maszyną opartą na logice. Zasady logiki opracował matematyk angielski George Boole. W logice Bolle'a istnieją tylko dwie wartości:

W języku C++ prawdą jest każda wartość różna od 0. Fałszem jest wartość równa 0. Wartości logiczne powstają w wyniku obliczania wyrażeń zawierających operatory porównań:

 

==   równy
!=   różność
>   większy
<   mniejszy
>=   większy lub równy
<=   mniejszy lub równy

 

Sprawdźmy wyniki działania tych operatorów w poniższym programie:

 

Code::Blocks
// Wyrażenia logiczne
// Koło informatyczne
// (C)2015 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int a = 5, b = 7;

    cout << (a == b - 2) << endl
         << (a == b) << endl;

    return 0;
}

 

W pierwszym przypadku zawartość zmiennej a jest równa wartości wyrażenia b - 2. Wynikiem porównania jest prawda, czyli 1.

W drugim przypadku zawartość zmiennej a nie jest równa zawartości zmiennej b. Wynikiem porównania jest fałsz, czyli 0.

Wymień w tym programie operatory == na !=.

 

Uwaga!
Początkujący programiści często mylą operator równości == z operatorem przypisania. Skutki mogą być opłakane:
(x = y) powoduje umieszczenie w zmiennej x wartości y. Wartość wyrażenia jest równa y.
(x == y) porównuje zawartość zmiennej x z zawartością zmiennej y. Jeśli obie są równe, daje wynik 1. W przeciwnym razie daje wynik 0. Zawartość zmiennej x nie jest zmieniana.

 

Operatory logiczne

W języku C++ mamy następujące operatory logiczne:

Zaprzeczenie !

Wynikiem operacji !x jest wartość logicznie przeciwna do wartości logicznej wyrażenia x. Jeśli x jest różne od 0, to wynikiem jest 0. Jeśli x jest równe zero, to wynikiem jest jeden.

 

Code::Blocks
// Wyrażenia logiczne
// Koło informatyczne
// (C)2015 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int a = 5;

    cout << !a << endl
         << !(a - 5) << endl;

    return 0;
}

 

Suma logiczna ||

Wynikiem operacji x || y jest 1, jeśli jedno z wyrażeń x lub y jest różne od zera. Jeśli oba wyrażenia x i y są równe zero, to ich suma logiczna też jest równa zero.

 

Code::Blocks
// Wyrażenia logiczne
// Koło informatyczne
// (C)2015 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int a = 5, b = 2;

    cout << a || b << endl
         << (a == 2) || (b - 2) << endl;

    return 0;
}

 

Iloczyn logiczny &&

Wynikiem operacji x && y jest 1, jeśli oba wyrażenia x i y są różne od zera. Jeśli jedno z wyrażeń x lub y jest równe zero, to wynikiem też jest zero.

 

Code::Blocks
// Wyrażenia logiczne
// Koło informatyczne
// (C)2015 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int a = 5, b = 2;

    cout << a && b << endl
         << (a == 5) && (b - 2) << endl;

    return 0;
}

 

Instrukcja warunkowa if

Do podejmowania decyzji w programie służy instrukcja warunkowa if (jeśli). Posiada ona następującą składnię:

 

if(wyrażenie) instrukcja_1; else instrukcja_2;

 

Działanie instrukcji if jest następujące:

 

Komputer oblicza wartość wyrażenia. Jeśli wynik jest różny od zera, to zostanie wykonana instrukcja_1. Jeśli wynik jest równy zero, to zostanie wykonana instrukcja_2.

 

Code::Blocks
// Instrukcja warunkowa
// Koło informatyczne
// (C)2015 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int a, b;

    // Odczytujemy dwie liczby
    cout << "a = "; cin >> a;
    cout << "b = "; cin >> b;

    // Wyświetlamy większą z nich
    if(a > b) cout << a << endl;
    else      cout << b << endl;

    return 0;
}
Code::Blocks
// Instrukcja warunkowa
// Koło informatyczne
// (C)2015 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int a;

    // Odczytujemy liczbę
    cout << "a = "; cin >> a;

    // Sprawdzamy jej parzystość
    if(a % 2) cout << "nieparzyste" << endl;
    else      cout << "parzyste" << endl;

    return 0;
}

 

Instrukcja if może wystąpić w postaci skróconej:

 

if(wyrażenie) instrukcja_1;

 

W takim przypadku instrukcja_1 zostanie wykonana tylko wtedy, gdy wyrażenie będzie miało wartość różną od zera. Jeśli wyrażenie będzie równe zero, to komputer przejdzie do wykonywania dalszej części programu za instrukcją if.

 

Code::Blocks
// Instrukcja warunkowa
// Koło informatyczne
// (C)2015 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int a;

    // Odczytujemy liczbę
    cout << "a = "; cin >> a;

    // Sprawdzamy, czy a jest w przedziałach
    if((a >= 0) && (a <= 9)) cout << "Jest w przedziale 0 do 9" << endl;
    if((a >= 10) && (a <= 19)) cout << "Jest w przedziale 10 do 19" << endl;
    if((a >= 20) && (a <= 29)) cout << "Jest w przedziale 20 do 29" << endl;
    if(a > 29) cout << "Jest w przedziale od 30 do nieskończoności" << endl;
    if(a < 0) cout << "Jest w przedziale minus nieskończoności do 0" << endl;

    return 0;
}

 

Często zachodzi potrzeba wykonania w instrukcji if więcej niż jednej operacji. W takim przypadku zastępujemy instrukcję_1 lub instrukcję_2 tzw. instrukcją blokową, czyli ciągiem instrukcji umieszczonych w klamerkach:

 

if(wyrażenie)
{
  dowolny ciąg instrukcji wykonywanych dla wyrażenia różnego od zero
}
else
{
  dowolny ciąg instrukcji wykonywanych dla wyrażenia równego zero
}

lub

if(wyrażenie)
{
  dowolny ciąg instrukcji wykonywanych dla wyrażenia różnego od zero
}

 

Zwróć uwagę, że za instrukcją blokową nie ma potrzeby umieszczania średnika.

 

Code::Blocks
// Instrukcja warunkowa
// Koło informatyczne
// (C)2015 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int a, b, c;

    // Odczytujemy liczby
    cout << "a = "; cin >> a;
    cout << "b = "; cin >> b;
    cout << "c = "; cin >> c;

    // Wypisujemy liczby w kolejności od najmniejszej do największej
    if((a < b) && (a < c))
    {
       cout << a << " ";
       if(b < c) cout << b << " " << c << endl;
       else      cout << c << " " << b << endl;
    }
    else if((b < a) && (b < c))
    {
       cout << b << " ";
       if(a < c) cout << a << " " << c << endl;
       else      cout << c << " " << a << endl;
    }
    else if((c < a) && (c < b))
    {
       cout << c << " ";
       if(a < b) cout << a << " " << b << endl;
       else      cout << b << " " << a << endl;
    }
    return 0;
}

 

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.