Instrukcja warunkowa if

Skoro już wiesz jak stworzyć zmienną i nadać jej określoną wartość, czas nauczyć porównywać dwie wartości. Do tego celu należy użyć instrukcji warunkowej if – else.

Podstawowa składnia instrukcji:
if(warunek)
{
Działanie1;
Jeśli warunek jest prawdziwy – true;
}
else
{
Działanie2;
Jeśli warunek jest fałszywy – false;
}

Schemat blokowy instrukcji if:



Warunek musi zawierać przynajmniej dwie wartości, które program porównuje. Czas wprowadzić operatory, które występują w C++.

<      mniejszy od
>      większy od
<=    mniejszy równy
>=    większy równy
==    przyrównanie wartości
!=     różny od

Przykładowy program zawierający instrukcję if:

3.cpp


1: #include<iostream>
2:
3: using namespace std;
4:
5: int main()
6: {
7:            int iLiczba1 = 5;
8:            int iLiczba2 = 7;
9:
10:            if(iLiczba1>iLiczba2)
11:            {
12:                      cout<<"Liczba pierwsza jest większa niż druga"<<endl;
13:            }
14:            else
15:            {
16:                      cout<<"Liczba druga jest większa niż pierwsza"<<endl;
17:            }
18:
19: }



Wynik działania programu:
Liczba druga jest większa niż pierwsza

W ten sposób możemy używać wszystkich podstawowych operatorów.

Zadania
3. Napisz program wykorzystując instrukcję if używając wszystkich podstawowych operatorów.


Kolejnymi operatorami w języku C++ są operatory logiczne.

!        zaprzeczenie
&&   połączenie dwóch warunków logicznych spójnikiem ‘i’
||        alternatywa, jeśli jeden warunek jest poprawny wykona się Działanie1 (true), kolejny nie będzie sprawdzany

Są one bardziej skomplikowane niż podstawowe, gdyż dzięki nim możemy używać wielu warunków w instrukcji if. Omówię po krótce każdy z nich.

Pierwszym jest zaprzeczenie.

Program wykorzystujący zaprzeczenie:

4.cpp


1: #include<iostream>
2:
3: using namespace std;
4:
5: int main()
6: {
7:            int iZmienna = -55;
8:
9:            cout<<"iZmienna = "<<!iZmienna<<endl;
10: }


Każda zmienna, która zostanie wyświetlona z operatorem negacji da wartość 0. Wynikiem programu jest:

iZmienna = 0

Operator zaprzeczenia nie najlepiej nadaje się do zmiennych. Będziemy go wykorzystywać najczęściej w odczycie z pliku. Będzie on nam sprawdzał, czy wartość podana przez program jest różna niż np. koniec pliku. Pierwsze przykłady znajdziesz właśnie w tym temacie.

Kolejnym operatorem możemy połączyć kilka warunków. Należy jednak pamiętać, że działanie dla wartości prawdziwej wykona się, jeśli zostaną spełnione wszystkie warunki.

Przykładowy program:

5.cpp


1: #include<iostream>
2:
3: using namespace std;
4:
5: int main()
6: {
7:           float fLiczba1 = 13;
8:           float fLiczba2 = 9;
9:           float fLiczba3 = -1;
10:           float fLiczba4 = 5;
11:
12:           if ( fLiczba1 > fLiczba2 && fLiczba3 < fLiczba4)
13:           {
14:                cout<<fLiczba1<<" jest wieksze niz "<<fLiczba2<<" i "<<fLiczba3<<" jest mniejsza niz "<<fLiczba4<<endl;
15:           }
16:           else
17:           {
18:                cout<<"Liczby nie spełniają zakresu"<<endl;
19:           }
20: }


Wynikiem działania programu jest zdanie:

13 jest większe niż 9 i -1 jest mniejsze niż 5

Jak widzimy między nawiasami warunku znajdują się dwa wyrażenia, dla których if sprawdza czy są poprawne, jeśli tak wykonują odpowiednią instrukcję (true).

Ostatnim operatorem logicznym jest alternatywa, czyli w warunku możemy podać kilka wyrażeń, lecz jeśli chociaż jedno z nich jest prawdą, warunek będzie true, a dalsze wyrażenia nie zostaną sprawdzone.

Przykładowy program:

6.cpp


1: #include<iostream>
2:
3: using namespace std;
4:
5: int main()
6: {
7:      float fLiczba1 = 13;
8:      float fLiczba2 = 9;
9:      float fLiczba3 = 7; //drugi warunek będzie nieprawdziwy
10:      float fLiczba4 = 5;
11:
12:      if ( fLiczba1 > fLiczba2 || fLiczba3 < fLiczba4)
13:      {
14:           cout<<fLiczba1<<" jest wieksze niz "<<fLiczba2<<" albo "<<fLiczba3<<" jest mniejsza niz "<<fLiczba4<<endl;
15:      }
16:      else
17:      {
18:           cout<<"Liczby nie spełniają zakresu"<<endl;
19:      }
20: }


Wynikiem programu jest zdanie:

13 jest większe niż 9 albo 7 jest mniejsze niż 5

Pierwsze wyrażenie było prawdziwe, więc program nie sprawdzał nawet drugiego – od razu uznał cały warunek za prawdziwy. Niestety na alternatywę należy uważać … przeanalizuj poniższy przykład.

7.cpp


1: #include<iostream>
2:
3: using namespace std;
4:
5: int main()
6: {
7:      float fLiczba1 = 13;
8:      float fLiczba2 = 9;
9:      int iPomoc = 0;
10:
11:      cout<<"iPomoc = "<<iPomoc<<endl; //wyswietlenie na konsoli zmiennej iPomoc
12:
13:      if ( fLiczba1 > fLiczba2 || iPomoc++)
14:      {
15:           cout<<"Warunek prawdziwy"<<endl;
16:      }
17:      else
18:      {
19:           cout<<"Warunek nieprawdziwy"<<endl;
20:      }
21:
22:      cout<<"iPomoc = "<<iPomoc<<endl;
23: }


W linijce 13. widzimy nowe polecenie, które omówię przy pętlach. Na teraz wystarczy nam wiedzieć, że dodaje ono do zmiennej jeden. Pamiętajmy jednak, że jeśli pierwsze wyrażenie jest prawdziwe działanie z drugiej części nie wykona się tak jak na powyższym programie.

Wynik działania programu:

iPomoc = 0
Warunek prawdziwy
iPomoc = 0


Gdybyśmy jednak zmienili znak z > na < wyrażenie będzie fałszywe, ale nasza zmienna powiększy się o jeden. Należy o tym pamiętać.

Do tej pory w naszym warunku znajdowało się równanie, którego wynik dawał wartość prawda lub fałsz. W temacie o zmiennych poznałeś zmienną typu bool. Właśnie ona jest stworzona do różnorakich instrukcji warunkowych. Oto przykład takiej instrukcji.

8.cpp


1: #include<iostream>
2:
3: using namespace std;
4:
5: int main()
6: {
7:      int fLiczba1 = 13;
8:      int fLiczba2 = 9;
9:
10:      bool bLogika;
11:
12:      bLogika = (fLiczba1 > fLiczba2); //warunek w zmiennej
13:
14:      if(bLogika) cout<<"Prawda";
15:      else cout<<"Falsz";
16: }


Jak widzimy w linijce 12 nasz warunek został wpisany do zmiennej typu prawda/fałsz. W linijkach 14 – 15 zastosowałem skrócony zapis if-else, bez klamr. Jeśli wyrażenie jest krótkie możemy je od razu zapisać za poleceniem if lub else. Jednak dłuższe instrukcje wymagają stosowania klamr jak na poprzednich przykładach.

Dla zainteresowanych
Instrukcję warunkową if można zagnieżdżać w sobie. Co to znaczy. Jeśli mamy jedną instrukcję to w bloku if czy else możemy stworzyć następną.
if(warunek)
{
Działanie 1.1
     if(warunek2)
     {
          Działanie2.1
     }
     else
     {
          Działanie 2.2
     }
}
else
{
Działanie1.2
}
Również można użyć form skróconych bez stosowania bloku else.
if(warunek1) dzialanie1;
if(warunek2) działanie2;
if(warunek3) działanie3;


Zadania
4. Stosując instrukcję warunkową if sprawdź, która z trzech liczb jest najmniejsza.
© Mateusz Ratajczak         www.commitcode.pl