Instrukcje warunkowe w języku C++

Instrukcja warunkowa (ang. conditional instruction) służy do tworzenia rozgałęzień w programach. Instrukcja ta posiada następującą składnię:

if(warunek) instrukcja1; else instrukcja2;

warunek  -  jest wyrażeniem, które może przyjmować wartość 0 - wtedy jest traktowane jako niespełnione, fałszywe, albo wartość różną od 0 - wtedy jest traktowane jako spełnione, prawdziwe. W warunkach często stosuje się operatory porównań:

<    <=    ==    >=    >

!=  - różny

Operatory porównań zwracają wartość 0, jeśli porównanie jest negatywne, lub wartość 1, jeśli porównanie jest pozytywne. Wartości 0 i 1 w języku C++ mogą być reprezentowane stałymi false (0) i true (1).

Przykłady:

a < 10;     // 0, jeśli a nie spełnia nierówności, 1 jeśli spełnia
b != c;     // 0, jeśli b = c i 1, jeśli b ≠ c
c == b - 5; // 0, jeśli c ≠ b - 5 i 1 w przypadku przeciwnym

instrukcja1  - instrukcja wykonywana, gdy warunek ma wartość różną od 0, czyli gdy jest prawdziwy (true)
instrukcja2  - instrukcja wykonywana, gdy warunek ma wartość równą 0, czyli gdy jest fałszywy (false). Człon z else może być pominięty, jeśli nasz algorytm nie przewiduje wykonania żadnej operacji przy fałszywym warunku. Wtedy instrukcja warunkowa upraszcza się do postaci:

if(warunek) instrukcja;

Jeśli w instrukcji warunkowej if musimy wykonać więcej niż jedną operację, to stosujemy tzw. instrukcję złożoną, czyli grupę instrukcji objętych klamrami:

{
    inst1;
    inst2;
    ...;
}

Składnia instrukcji if będzie następująca:

if(warunek)
{
    instrukcje wykonywane, gdy warunek jest różny od zera
}
else
{
    instrukcje wykonywane, gdy warunek jest równy zero
}

Poniżej przedstawiamy kilka prostych przykładów użycia instrukcji warunkowej.

Wybór większej z dwóch liczb

// Większa z dwóch liczb
// (C) I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
  int a,b;

  cout << "Wyszukiwanie wiekszej z dwoch liczb\n"
          "-----------------------------------\n\n";

// odczytujemy liczby a i b

  cout << "a = "; cin >> a;
  cout << "b = "; cin >> b;
  cout << endl;

// na wyjście wyprowadzamy większą liczbę

  cout << "Wieksze jest ";

  if(a > b) cout << "a = " << a;
  else      cout << "b = " << b;

  cout << endl << endl;

  system("pause");
  return 0;
}
Wyszukiwanie wiekszej z dwoch liczb
-----------------------------------

a = 3
b = 10

Wieksze jest b = 10

Aby kontynuować, naciśnij dowolny klawisz . . .

Badanie znaku liczby

// Badanie znaku liczby
// (C) I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
  int a;

  cout << "Badanie znaku liczby calkowitej\n"
          "-------------------------------\n\n";

// odczytujemy liczbę a

  cout << "a = "; cin >> a;
  cout << endl;

// badamy znak liczby a

  if(a == 0)     cout << "a = 0";
  else if(a < 0) cout << "a < 0";
  else           cout << "a > 0";

  cout << endl << endl;
 
  system("pause");
  return 0;
}
Badanie znaku liczby calkowitej
-------------------------------

a = -13421

a < 0

Aby kontynuować, naciśnij dowolny klawisz . . .

Porządkowanie dwóch liczb

// Porządkowanie dwóch liczb
// (C) I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

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

  cout << "Porzadkowanie dwoch liczb\n"
          "-------------------------\n\n";

// odczytujemy liczby a i b

  cout << "Wpisz dwie dowolne liczby\n\n";
  cin >> a >> b;
  cout << endl;

// Jeśli liczby a i b są w złej kolejności, zamieniamy je

  if(a > b)
  {
     x = b;
     b = a;
     a = x;
  }
  cout << a << " " << b << endl << endl;
 
  system("pause");
  return 0;
}
Porzadkowanie dwoch liczb
-------------------------

Wpisz dwie dowolne liczby

32 18

18 32

Aby kontynuować, naciśnij dowolny klawisz . . .

 

Instrukcja wyboru służy do warunkowego wykonywania operacji w zależności od wartości pewnego wyrażenia. Składnia jest następująca:

switch(wyrażenie)
{
  case w_1: inst;
            inst;
            ...;
  case w_2: inst;
            inst;
            ...;
  ...
  ...
  ...
  case w_n: inst;
            inst;
            ...;
  defaultinst;
            inst;
            ...;
}

wyrażenie  -  jest wyrażeniem dającym w wyniku liczbę całkowitą
w_i  - liczby całkowite, etykiety, które mogą być wartością wyrażenia
inst;  - instrukcje wykonywane wewnątrz instrukcji switch.

Instrukcja switch działa w sposób następujący:

Komputer oblicza wartość wyrażenia umieszczonego w nawiasach instrukcji switch. Następnie sprawdza, któraś z opcji case w_i posiada etykietę w_i o takiej wartości. Jeśli tak, to następuje wykonanie instrukcji umieszczonych za dwukropkiem etykiety. Jeśli żadna z etykiet nie odpowiada wartości wyrażenia, to zostają wykonane instrukcje umieszczone za dwukropkiem opcji default.

Instrukcje wewnątrz switch są wykonywane jedna za drugą. Na końcu zwykle umieszcza się instrukcję break, która powoduje przerwanie wykonywania instrukcji w swich - jeśli tego nie zrobimy, to wykonanie przejdzie do kolejnego bloku case (czasem jest to potrzebne).

Przykład:

switch(a)
{
    case 1:  b++;    break;
    case 2:  b--;    break;
    case 3:  b += 2; break;
    case 4:  b -= 2; break;
    default: b = 0;
}

W powyższym przykładzie wykonywane są różne operacje w zależności od zawartości zmiennej a:

jeśli a = 1, to b zostaje zwiększone o 1
jeśli a = 2, to b zostaje zmniejszone o 1
jeśli a = 3, to b zostaje zwiększone o 2
jeśli a = 4, to b zostaje zmniejszone o 2
dla każdej innej wartości a zmienna b jest zerowana

Instrukcję wyboru switch w całości można zrealizować za pomocą odpowiednich instrukcji warunkowych if. Na przykład powyższa konstrukcja może być zrealizowana następująco:

if(a == 1)      b++;
else if(a == 2) b--;
else if(a == 3) b += 2;
else if(a == 4) b -= 2;
else            b = 0;

Jednakże przyznasz, iż switch jest w takich wypadkach bardziej czytelne.

Instrukcję switch często wykorzystuje się do reakcji na wybór opcji dokonany przez użytkownika. Poniższy program jest prostym kalkulatorem 4 działaniowym.

// Kalkulator
// (C) I LO w Tarnowie
//------------------------

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
  int w;
  double a = 0,b = 0;

  cout << setprecision(4) << fixed;

  do
  {    
    cout << "Kalkulator (C)2008 I-LO\n"
            "-----------------------\n\n"
            "a = " << setw(15) << a << endl <<
            "b = " << setw(15) << b << endl << endl <<
            "Opcje:\n"
            "------\n"
            "0 - koniec\n"
            "1 - nowe a i b\n"
            "2 - a + b\n"
            "3 - a - b\n"
            "4 - a * b\n"
            "5 - a / b\n\n"
            "Twoj wybor (0...5) : ";
    cin >> w;
    cout << endl;
    switch(w)
    {
      case 1: cout << "a = "; cin >> a;
              cout << "b = "; cin >> b;
              break;
      case 2: cout << "a + b = " << a + b << endl;
              break;
      case 3: cout << "a - b = " << a - b << endl;
              break;
      case 4: cout << "a * b = " << a * b << endl;
              break;
      case 5: cout << "a / b = " << a / b << endl;
              break;
    }
    cout << endl << endl;
  } while(w);
  return 0;
}
Kalkulator (C)2008 I-LO
-----------------------

a =        234.0000
b =         33.4500

Opcje:
------
0 - koniec
1 - nowe a i b
2 - a + b
3 - a - b
4 - a * b
5 - a / b

Twoj wybor (0...5) : 5

a / b = 6.9955

 



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.