Archiwa tagu: instrukcja warunkowa

C++ kurs podstawy programowania. Instrukcja warunkowa switch case.

Instrukcja SWITCH…CASE
Innym pomysłem na rozwiązanie problemu obsługi warunków jest instrukcja switch…case (czasami nazywana instrukcją wielokrotnego wyboru). Poniżej definicja i zaraz zabieram się do objaśniania kodu.

switch(zmienna)
{
case wartosc_1:
    // jeżeli zmienna = wartość_1 to wykonaj kod który znajduje się tutaj
    break;
   
case wartosc_2:
    // jeżeli zmienna = wartość_2 to wykonaj kod który znajduje się tutaj
    break;
   
    //...
case wartosc_n:
    // jeżeli zmienna = wartość_n to wykonaj kod który znajduje się tutaj
    break;
   
default:
// kod który wykona się w momencie kiedy wartość zmiennej zmienna
   //     nie będzie oprogramowana w żadnym z powyższych przypadków
    break;
}

Na początku widzisz słówko switch i parametr w nawiasie. Tym parametrem jest wartość zmiennej i w zależności od tej wartości switch zachowa się tak jak to mu oprogramujemy. Po słówku case oprogramowujemy konkretne przypadki, co komputer ma zrobić w zależności od wartości zmiennej zdefiniowanej w parametrze instrukcji switch. Słówko break przerywa działanie instrukcji switch. Wykonamy teraz małe ćwiczenie napiszemy program który zapyta użytkownika o liczbę z przedziału od 1 do 5. Pobierzemy tą liczbę do zmiennej i w zależności od wybranej liczby wyświetlimy komunikat „Wpisales liczbe n, wiec wykonuje kod z czesci case:n”, gdzie pod n będziemy podstawiali liczbę podaną przez użytkownika. No to do dzieła.

#include <iostream>

using namespace std;

int main()
{
    int liczba;
    cout << "Podaj liczbe 1-5 : ";
    cin >> liczba;
    switch(liczba)
    {
    case 1: 
        cout << "Wpisales liczbe 1, wiec wykonuje kod z czesci case:1"; 
        break;
    case 2: 
        cout << "wpisales liczbe 2, wiec wykonuje kod z czesci case:2"; 
        break;
    case 3: 
        cout << "wpisales liczbe 3, wiec wykonuje kod z czesci case:3"; 
        break;
    case 4: 
        cout << "wpisales liczbe 4, wiec wykonuje kod z czesci case:4"; 
        break;
    case 5: 
        cout << "wpisales liczbe 5, wiec wykonuje kod z czesci case:5"; 
        break;
    
    }

    return 0;
}

Przetestujmy nasz program podając liczbę 2 (zrzut poniżej).

 cpp c++ loops switch
Widzimy, że wszystko poszło zgodnie z planem i wykonała się instrukcja dla wartości zmiennej liczba = 2.
A co się stanie jeżeli użytkownik podałby liczbę spoza zakresu np. 6 ? Przetestujmy.
 cpp c++ loops switch
Widzimy, że nic tragicznego się nie stało. Program „poszedł” dalej i nie wyświetlił żadnej instrukcji bo wartość 6 dla zmiennej liczba nie była oprogramowana w switch-u, więc kompilator nie wiedział co ma zrobić. Czasami jednak potrzebujemy oprogramować taką sytuację kiedy chcemy wykonać jakiś kod lub wyświetlić jakiś komunikat dla przypadku który jest inny niż oprogramowaliśmy w switch-u, jak np. u nas kiedy użytkownik podał liczbę 6. Do tego celu służy instrukcja default. Definiujemy ją identycznie jak w przypadku instrukcji case.

default:
   cout << "liczba nie z przedzialu 1-5, wiec nie wykonam zadnego kodu";
   break;

 Stosując instrukcję default mówimy kompilatorowi, że jeżeli nie znajdzie wartości z warunku oprogramowanej w instrukcji case to ma wykonać kod z części default. Dopiszmy tą część kodu do naszego programu i przetestujmy go.

#include <iostream>

using namespace std;

int main()
{
    int liczba;
    cout << "Podaj liczbe 1-5 : ";
    cin >> liczba;
    switch(liczba)
    {
    case 1:
        cout << "Wpisales liczbe 1, wiec wykonuje kod z czesci case:1";
        break;
    case 2:
        cout << "wpisales liczbe 2, wiec wykonuje kod z czesci case:2";
        break;
    case 3:
        cout << "wpisales liczbe 3, wiec wykonuje kod z czesci case:3";
        break;
    case 4:
        cout << "wpisales liczbe 4, wiec wykonuje kod z czesci case:4";
        break;
    case 5:
        cout << "wpisales liczbe 5, wiec wykonuje kod z czesci case:5";
        break;
    default:
        cout << "liczba nie z przedzialu 1-5, wiec nie wykonam zadnego kodu";
        break;
    }
    cout << endl;



    return 0;
}

Uruchamiamy program i wprowadzamy wartość 6.
 cpp c++ loops switch
Widzimy na ekranie komunikat który oprogramowaliśmy dla  warunku default, więc wszystko działa jak należy.

 


c++ kurs programowania obiektowego spis treści 

 

 

C++ kurs podstawy programowania. Instrukcja warunkowa if else.

Instrukcja IF ELSE
Pierwszą z instrukcji warunkowych jaką poznamy jest instrukcja if … else. Definicja if-a poniżej.

if(warunek)
   {    
      // jeżeli warunek jest spełniony, czyli przyjmuje wartość TRUE (prawdy)
      // to wykona się kod pomiędzy tymi klamrami
   }
else
   {
      // w przeciwnym wypadku wykona się ten kod tutaj
      // czyli warunek przyjmuje wartość FALSE (fałsz)
   }

Wróćmy do przykładu z kontrolowaniem prędkości. Jak mogłoby to wyglądać. Postarajmy się to oprogramować. Przyjmijmy, że co chwilę odczytujemy wartość z czujnika prędkości auta. Wartość z czujnika wrzucamy do zmiennej o nazwie aktualna_predkosc. Mamy też oprogramowane dwie funkcje. Pierwsza odcina dopływ paliwa i będzie miała nazwę zamknij_doplyw_paliwa(), a druga otwierająca z powrotem  dopływ paliwa o nazwie otworz_doplyw_paliwa(). Będzie nam potrzebna jeszcze jedna zmienna, nazwiemy ją dopływ_paliwa, zaraz wyjaśnię dlaczego. Nasz kod mógłby wyglądać jak poniżej.

if(aktualna_predkosc >= 200)
   {
      zamknij_doplyw_paliwa();
      doplyw_paliwa = "Z";
   }
else
   {
      // sprawdz czy doplyw zamkniety
      if(doplyw_paliwa == "Z")
         {
            otworz_doplyw_paliwa();
            doplyw_paliwa = "O";
         }
   }

Powyższy kod można przetłumaczyć tak. Jeżeli aktualna_predkosc jest większa lub równa 200, czyli moment kiedy przekroczyliśmy prędkość graniczną 200 km/h, to uruchom funkcję zamknij_doplyw_paliwa() i ustaw zmienną dopływ_paliwa na "Z" (zamknięty). W przeciwnym przypadku, czyli kiedy prędkość jest mniejsza niż 200 km/h, wykonaj kod z części else{}. Ale tutaj mamy drugiego if-a, bo jeszcze musimy sprawdzić czy aktualnie dopływ_paliwa jest zamknięty czy otwarty. Drugiego if-a możemy przetłumaczyć tak. Jeżeli dopływ_paliwa jest zamknięty (czyli nasz poprzednia prędkość była większa niż 200km/h) uruchamiamy funkcję otworz_doplyw_paliwa() i ustawiamy dopływ_paliwa na "O" (otwarty). Jeżeli dopływ_paliwa jest otwarty ("O") to nie robimy nic no bo aktualnie dopływ paliwa jest otwarty więc nie ma potrzeby uruchamiania funkcji otworz_doplyw_paliwa(). Myślę, że już rozumiesz dokładnie działanie instrukcji if… else i po co w ogóle była nam potrzebna zmienna dopływ_paliwa.
Zwróć uwagę, że używając instrukcji if nie musisz za każdym razem korzystać także z konstrukcji if…else możesz skorzystać tylko z if-a.
Jak już zauważyłeś if-y możemy zagnieżdżać, czyli definiować jednego if-a wewnątrz drugiego.
Cały kod programu mógłby wyglądać tak.

#include <iostream>

using namespace std;

void zamknij_doplyw_paliwa()
{
    cout << "Jedziesz jak wariat, zwolnij!" << endl;
    cout << "Zamykam doplyw paliwa!" << endl << endl;
}

void otworz_doplyw_paliwa()
{
    cout << "Widze, ze zwolniles!" << endl;
    cout << "Otwieram doplyw paliwa!" << endl << endl;
}
    int aktualna_predkosc;
    int i; // licznik dla for-a
    string doplyw_paliwa;

int main()
{



    for(i=0;i<=5;i++)
    {
        cout << "Z jaka predkoscia aktualnie jedziesz? : ";
        cin >> aktualna_predkosc;

        if(aktualna_predkosc >= 200)
           {
              zamknij_doplyw_paliwa();
              doplyw_paliwa = "Z";
           }
        else
           {
              // sprawdz czy doplyw zamkniety
              if(doplyw_paliwa == "Z")
                 {
                    otworz_doplyw_paliwa();
                    doplyw_paliwa = "O";
                 }
                 else
                 {
                     cout << "Jedziesz przepisowo, jedz tak dalej!" << endl << endl;
                 }

           }

    }

    cout << "Dziekujemy za skorzystanie z naszej nawigacji";

    return 0;
}


c++ kurs programowania obiektowego spis treści