Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: Piotr Szawdyński
Kurs C++

Instrukcja warunkowa if ... else

[lekcja] Rozdział 13. Sterowanie przebiegiem programu za pomocą instrukcji warunkowej if ... else.
Nareszcie za nami podstawy podstaw. Teraz można zabrać się za tłumaczenie poważniejszych zagadnień związanych już bezpośrednio z programowaniem. Pragnę w tym miejscu po raz kolejny podkreślić, że cała wiedza, która do tej pory została omówiona jest niezbędna do kontynuowania nauki programowania. Wróć do poprzednich rozdziałów jeśli czegoś nie rozumiałeś, bo zarówno ten jak i każdy kolejny rozdział będzie zakładał, że rozumiesz w stu procentach to co było.

No to zaczynamy

Skoro dotarłeś do tego miejsca i czytasz ten tekst dalej to znaczy, że wszystko zrozumiałeś co do tej pory było... i bardzo dobrze. Dzięki temu będzie Ci dużo łatwiej zrozumieć nowe rzeczy, a ja nie będę musiał tłumaczyć kilku zagadnień jednocześnie. W tym rozdziale zajmiemy się instrukcją warunkową. Zanim jednak przejdziemy do właściwej części rozdziału zastanówmy się przez chwilę jak wygląda podejmowanie decyzji przez nas samych.

Intuicja i podejmowanie decyzji

Jeśli zaczniemy zastanawiać się nad naszym życiem dojdziemy do wniosku, że w życiu stale podejmujemy jakieś decyzje. Jedne są lepsze, inne gorsze jednak zawsze wybieramy jakąś drogę. Zdecydowaną większość decyzji podejmujemy jednak intuicyjnie, czyli w zależności od humoru jaki mamy w danej chwili czy też pogody jaka na chwilę obecną jest. Takie spontaniczne podejście do życia w przypadku człowieka jest naturalne i wpisane w jego naturę. Pomimo, iż komputer również stale podejmuje jakieś decyzje to wygląda to nieco inaczej, niż w przypadku człowieka. Komputer postępuje zgodnie z tym, co mu napiszemy. Nie ma własnej woli, nie ma intuicji - to tylko maszyna. Wszystko więc musi być precyzyjnie sformułowane. Jeśli by tak nie było, komputer stałby się nieprzewidywalny, a co za tym idzie bezużyteczny jako narzędzie. Sztuką programowania jest umiejętność zapisywania swoich rozbieganych myśli w sposób formalny i poprawny z punktu widzenia logiki za pomocą języka programowania. Niniejszy rozdział pokaże nam jak zapisuje się formalnie decyzje, jakie ma podejmować komputer w naszym programie.

Składnia warunku if

Zapis instrukcji warunkowej wygląda następująco:
if(...)...

Umieszczamy wyrażenie logiczne

Wartość, którą umieszczamy w nawiasach zaokrąglonych to wyrażenie logiczne. Wyrażenia logiczne zapisywaliśmy do tej pory do zmiennych i wyglądało to tak:
C/C++
int wiek = 30;
bool wyrazenieLogiczne = wiek > 100 || wiek < 2;
Powyższe wyrażenie możemy wstawić do instrukcji warunkowej na dwa sposoby. Pierwszym z nich jest użycie zmiennej, tj:
C/C++
if( wyrazenieLogiczne == true )...
//powyższy zapis jest równoważny poniższemu:
     if( wyrazenieLogiczne )...
Drugą możliwością, jaką mamy to wstawienie wyrażenia logicznego bezpośrednio w instrukcję warunkową, czyli:
C/C++
if( wiek > 100 || wiek < 2 )...
Z praktycznego punktu widzenia znacznie częściej korzysta się z drugiego zapisu, ponieważ nie trzeba tworzyć dodatkowej tymczasowej zmiennej, która prawdopodobnie i tak nie była by nam potrzebna nigdzie więcej.

Kiedy instrukcja warunkowa zostanie wykonana

Instrukcja warunkowa zostanie wykonana wtedy, gdy wartość wyrażenia logicznego, umieszczonego w nawiasach zaokrąglonych jest prawdziwa. Wartość wyrażenia logicznego jest prawdziwa wtedy, gdy jest ona różna od zera.

Instrukcja lub blok instrukcji

Jeśli piszemy już jakiś warunek to zazwyczaj chcemy, aby w zależności od niego coś się wykonało. Pierwsza instrukcja, która wystąpi po nawiasie zamykającym wyrażenie logiczne będzie tą, która wykona się jeśli warunek będzie spełniony. Jeśli warunek nie będzie spełniony instrukcja ta zostanie przeskoczona. Przykład:
C/C++
#include <iostream>
int main()
{
    int wiek;
    std::cin >> wiek;
    if( wiek >= 18 )
         std::cout << "Twierdzisz, ze jestes pelnoletni :)" << std::endl;
   
    std::cout << "Koniec" << std::endl;
    return 0;
}
Pisząc własne programy będziesz jednak natrafiał na sytuacje, w których będziesz chciał napisać więcej niż jedną instrukcję po spełnieniu warunku. W tym przypadku będziesz musiał użyć bloku instrukcji, który tworzymy za pomocą klamer { }. Przykład demonstrujący użycie bloku instrukcji:
C/C++
#include <iostream>
int main()
{
    int wiek;
    std::cin >> wiek;
    if( wiek >= 18 )
    {
        std::cout << "Twierdzisz, ze jestes pelnoletni..." << std::endl;
        std::cout << "ale czy to kogos interesuje? :)" << std::endl;
    }
    std::cout << "Koniec" << std::endl;
    return 0;
}
Ilość instrukcji jaką możemy umieścić w bloku nie jest ograniczona w żaden sposób.
Zwróć szczególną uwagę, że po if nie piszemy średnika. Bezpośrednio po if(...) znajduje się instrukcja, bądź blok instrukcji do wykonywania warunkowo. Jeśli napiszesz średnik po if(...), warunkowo wykonywana będzie instrukcja pusta!
C/C++
if( wiek >= 18 ); // !!!ŚREDNIK!!!

std::cout << "Twierdzisz, ze jestes pelnoletni - albo i nie" << std::endl; // Ten kod nie jest związany z powyższym if i wykona się zawsze!

Zagnieżdżanie warunków

Ucząc się programowania dobrze wiedzieć od samego początku, że warunki możemy zagnieżdżać. Zasady używania i działania warunków pozostają te same. Przykład:
C/C++
#include <iostream>
int main()
{
    int liczba;
    std::cin >> liczba;
    if( liczba >= 10 )
    {
        std::cout << "Liczba jest >= 10" << std::endl;
        if( liczba >= 50 )
        {
            std::cout << "Liczba jest >= 50" << std::endl;
            if( liczba <= 100 )
                 std::cout << "Liczba jest <= 100" << std::endl;
           
        }
    }
    std::cout << "Koniec" << std::endl;
    return 0;
}

Słowo kluczowe else

Do tej pory poznaliśmy instrukcję warunkową if w jej podstawowej wersji. Jej funkcjonalność możemy rozszerzyć za pomocą słowa kluczowego else. Słowo kluczowe else oznacza "w przeciwnym wypadku", czyli jeśli warunek nie zostanie spełniony, wykonaj inny kod. Ogólny zapis instrukcji warunkowej, wykorzystujący słowo kluczowe else będzie więc wyglądał tak:
if(...)...else...
Jedyną niewiadomą w tym zapisie są ostatnie trzy kropki. Oznaczają one instrukcję/blok instrukcji, który ma się wykonać jeśli warunek nie zostanie spełniony. Poniżej zamieszczam prosty przykład demonstrujący działanie instrukcji warunkowej if ... else:
C/C++
#include <iostream>
int main()
{
    int wiek;
    std::cin >> wiek;
    if( wiek >= 18 )
         std::cout << "Jestes pelnoletni." << std::endl;
    else
         std::cout << "Nie jestes pelnoletni." << std::endl;
   
    std::cout << "Koniec" << std::endl;
    return 0;
}
Zasady odnośnie jednej instrukcji lub wielu w bloku else są takie same jak za pierwszym razem. Jedną instrukcję możemy zastąpić blokiem { }.

Praca domowa

1. Przeanalizuj działanie poniższego programu i odpowiedz sobie jaki będzie jego wynik działania:
C/C++
#include <iostream>
int main()
{
    int wiek;
    std::cin >> wiek;
    if( wiek >= 18 )
    if( wiek <= 100 )
    {
        std::cout << "Twierdzisz, ze jestes pelnoletni..." << std::endl;
        std::cout << "ale czy to kogos interesuje? :)" << std::endl;
    }
    std::cout << "Koniec" << std::endl;
    return 0;
}
2. Napisz powyższy program tak, aby występowała w nim instrukcja warunkowa tylko raz. Program ma działać tak samo jak jego pierwotna wersja.
3. Usuń błędy z poniższego programu:
C/C++
#include <iostream>
int main()
{
    int wiek;
    std::cin >> wiek;
    if( wiek < 18 );
   
    std::cout << "Nie jestes pelnoletni" << std::endl
    else;
   
    std::cout << "Jestes pelnoletni" << std::endl
    std::cout << "Koniec" << std::endl;
    return 0;
}
Poprzedni dokument Następny dokument
Operacje logiczne Warunek wielokrotnego wyboru switch ... case