Koło informatyczne

Przyspieszony kurs języka C++

 

Instrukcja wyboru

Poznana na poprzednich zajęciach koła instrukcja warunkowa if umożliwia warunkowe instrukcji dla pojedynczego warunku. Jeśli warunków tych jest kilka, to zwykle stosuje się łańcuch instrukcji if:

 

if(w_1) instrukcja_1;
else if(w_2) instrukcja_2;
else if(w_3) instrukcja_3;
...
else if(w_n) instrukcja_n;
else instrukcja_x;

 

Działa to następująco. Komputer wylicza warunek w_1. Jeśli jest prawdziwy, to zostaje wykonana instrukcja nr 1. Jeśli warunek w_1 jest fałszywy, to następuje wykonanie instrukcji po słowie else. Jest to jednak kolejna instrukcja if. Dlatego komputer wyliczy warunek w_2 i, jeśli będzie prawdziwy, to wykona instrukcję nr 2. Jeśli w_2 będzie fałszywy, to nastąpi przejście do kolejnej instrukcji if, itd. Jeśli żaden z warunków nie jest prawdziwy, zostanie wykonana instrukcja_x.

Wynika z tego, że w takim ciągu zostaje wykonana ta instrukcja_i, dla której warunek w_i jest prawdziwy. Warunki mogą być dowolnymi wyrażeniami, które zwracają wartość liczbową. Wynik różny od zera jest traktowany jako prawda. Wynik równy zero jest traktowany jako fałsz.

 

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

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
    int wiek;
    cout << "Cześć, ile masz lat? : "; cin >> wiek;
    cout << endl;
    if(wiek < 12)      cout << "Jesteś małolat.\n";
    else if(wiek < 18) cout << "Jeszcze nie jesteś dorosły\n";
    else if(wiek < 35) cout << "Jesteś w sile wieku, korzystaj!\n";
    else if(wiek < 55) cout << "Starzejesz się, nie nadwyrężaj się!\n";
    else if(wiek < 67) cout << "Czas pomyśleć już o emeryturze\n";
    else               cout << "Odpoczywaj, należy ci się w tym wieku!\n";
    return 0;
}

 

W języku C++ jest instrukcja, która działa podobnie (ale nie tak samo!) do opisanego ciągu instrukcji if. Nazywa się switch i jest instrukcją blokową. Posiada następującą składnię:

 

switch(wyrażenie)
{
   case wartość_1: instrukcje_1; break;
   case wartość_2: instrukcje_2; break;
   ...
   case wartość_n: instrukcje_n; break;
   default: instrukcje_x;
}

 

Instrukcja switch działa następująco: najpierw jest wyliczana wartość wyrażenia. Następnie jest wyszukiwana wartość_i (musi to być stała!) za słowami case, która jest równa wyliczonej wartości wyrażenia. Jeśli komputer znajdzie ją, to wykonuje instrukcje_i za dwukropkiem. Jeśli ostatnią z tych instrukcji będzie break, to komputer wyjdzie z instrukcji switch i zacznie wykonywać dalej program. Jeśli na końcu nie umieścimy break, to nastąpi przejście do instrukcji za case, które znajdują się bezpośrednio poniżej (pozwala to reagować tak samo na kilka wartości wyrażenia). Jeśli żadna z wartości_i nie jest równa wyliczonej na początku wartości wyrażenia, to komputer przechodzi do wykonywania instrukcji_x za słowem default.

W instrukcji switch nie ma obowiązku umieszczania sekcji default. Jeśli żadne z case nie podaje wartości wyrażenia, to nic nie zostanie wykonane w instrukcji switch. Również wartości case nie muszą pokrywać wszystkich możliwych wartości wyrażenia. Jeśli przyjmie ono wartość, której nie ma za case, to również nic nie zostanie wykonane (chyba, że dostarczysz opcji default).

Teraz poćwiczmy praktycznie.

Program tworzy coś w rodzaju prostego menu.

 

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

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
    int w;

    cout << "1. Data i czas\n"
            "2. Użytkownik\n"
            "3. Zajętość dysku\n"
            "4. Katalog główny\n\n"
            "Wpisz 1...4 : ";
    cin >> w;
    cout << endl;
    switch(w)
    {
      case 1: system("date"); break;
      case 2: system("who"); break;
      case 3: system("df"); break;
      case 4: system("ls /"); break;
      default: cout << "Wpisałeś złą liczbę!" << endl;
    }
    return 0;
}
1. Data i czas
2. Użytkownik
3. Zajętość dysku
4. Katalog główny

Wpisz 1...4 : 2

uczen :0 2015-01-24 11:56 (:0)
uczen pts/4 2015-01-24 12:13 (:0)

Process returned 0 (0x0) execution time : 6.804 s
Press ENTER to continue.

 

Program pokazuje również sposób wykonywania poleceń systemowych linuxa:

 

date pokazuje bieżącą datę i czas systemu
who pokazuje informację o aktualnym użytkowniku
df pokazuje informacje o wolnej przestrzeni na dyskach zamontowanych w systemie
ls / wyświetla zawartość katalogu głównego, podając nazwy katalogów i plików umieszczonych w katalogu głównym

 

Kolejny przykład demonstruje prosty kalkulator:

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

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
    double a1,a2,w = 0;
    char d;

    cout << "Prosty kalkulator\n"
            "-----------------\n\n"
            "Działanie (+ - x :) ? "; cin >> d;
    cout << "Argument nr 1  = "; cin >> a1;
    cout << "Argument nr 2  = "; cin >> a2;
    switch(d)
    {
      case '+': w = a1 + a2; break;
      case '-': w = a1 - a2; break;
      case 'x': w = a1 * a2; break;
      case ':': if(a2) w = a1 / a2;
                else cout << "Dzielenie przez zero!!!\n";
                break;
      default: cout << "Nierozpoznane działanie arytmetyczne.\n";
    }
    cout << "Wynik obliczeń = " << w << endl;
    return 0;
}
Prosty kalkulator
-----------------

Działanie (+ - x :) ? x
Argument nr 1  = 12.5
Argument nr 2  = 47.3
Wynik obliczeń = 591.25

 



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.