Programowanie i algorytmy

Instrukcja warunkowa (if-else)

Spis treści:

Instrukcja warunkowa bez alternatywy

Instrukcja warunkowa bez alternatywy ma postać:

if(warunek (warunki))

{ //początek bloku należącego do if

//instrukcje zostaną wykonane, gdy warunek (warunki) jest prawdziwy

 

//w przeciwnym wypadku ta część kodu zostanie pominięta

} //koniec bloku należącego do if

Przykład 1
#include <iostream>
using namespace std;
 
int main()
{
  int a = 3, b = 6;
 
  if(a > b) //warunek jest fałszywy, a więc poniższa instrukcja
 //zostanie pominięta
    cout<<a<<" jest większe od "<<b<<endl;
 
  if(b > a) //warunek jest prawdziwy, a więc wykona się instrukcja 
//należąca do bloku if
    cout<<b<<" jest większe od "<<a<<endl;
 
return 0;
}
 

 

Zasada działania instrukcji warunkowej if opiera się na wartości, jaką przyjmuje warunek. W przypadku true (1), instrukcje dla bloku if zostaną wykonane. To oznacza, że w przypadku zmiennych logicznych (i w niektórych przypadkach) można użyć skróconej konstrukcji warunku:

 

Przykład 2
bool zmienna = true;
 
//zamiast pisać
if(zmienna == true) //w tym przypadku wartość warunku 
//jest równa true, czyli wykona 
  cout<<"Wartość zmiennej jest równa true !"; 
//się instrukcja należąca do bloku if
 
//można skrócić zapis
 
if(zmienna) //w tym przypadku wartość nawiasu 
//też jest równa true, czyli tu także zostanie wykonana instrukcja poniżej
  cout<<"Wartość zmiennej jest równa true !"; 
 
 

 

Gdy do bloku if należy tylko jedna instrukcja, klamrę otwierającą blok i klamrę zamykającą blok można opuścić.

 

Instrukcja warunkowa z alternatywą

W Instrukcja warunkowa z alternatywą pojawia się drugi blok instrukcji rozpoczynany słowem kluczowym else, wykonany w przypadku, gdy warunek (warunki) jest fałszywy. Warto zauważyć, że w tym przypadku wykona się zawsze jeden z dwóch bloków:

if(warunek (warunki))

{ //początek bloku należącego do if

 

//instrukcje zostaną wykonane, gdy warunek (warunki) jest prawdziwy

 

//w przeciwnym wypadku część kodu należąca do bloku ifzostanie pominięta

} //koniec bloku należącego do if

else //do tego bloku należą instrukcje, które zostaną wywołane w przypadku, gdy warunek dla if będzie fałszywy

{ //początek bloku należącego do else

 

//instrukcje zostaną wykonane, gdy warunek (warunki) jest fałszywy

 

//w przeciwnym wypadku część kodu należąca do bloku elsezostanie pominięta

} //koniec bloku należącego do else

Prześledźmy przykład, który sprawdzi, czy podana osoba jest pełnoletnia:

Przykład 3
#include <iostream>
using namespace std;
 
int main()
{
  unsigned int wiek;
 
  cout<<"Podaj wiek: ";
  cin>>wiek;
 
  if(wiek>=18)
//ta część wykona się gdy warunek będzie prawdziwy
    cout<<"Podana osoba jest pełnoletnia"<<endl; 
  else
//ta część wykona się gdy warunek będzie fałszywy
    cout<<"Podana osoba jest nieletnia"<<endl; 
 
  return 0;
}
 

Warunki proste i złożone

Konstrukcja warunków instrukcji if może być prosta - złożona z jednego warunku, lub złożona z kilku warunków połączonych operatorami logicznymi. Rozpatrzmy przykład, który sprawdzi, czy dana liczba naturalna jest podzielna przez 3 lub reszta z dzielenia tej liczby przez 7 jest równa 2:

Przykład 1 - realizacja zadania z wykorzystaniem  warunków prostych
#include <iostream>
using namespace std;
 
int main()
{
  unsigned int liczba;
 
  cout<<"Podaj liczbę: ";
  cin>>liczba;
 
  if(liczba%3==0) // warunek prosty
    if(liczba%7==2) // warunek prosty
      cout<<"Liczba "<<liczba<<" spełnia warunki zadania."<<endl;
    else
      cout<<"Liczba "<<liczba<<" nie spełnia warunki zadania."<<endl;  
  else
    cout<<"Liczba "<<liczba<<" nie spełnia warunki zadania."<<endl;
 
  return 0;
}
 

 

To samo zadanie zrealizowane warunkami złożonymi:

Przykład 2
#include <iostream>
using namespace std;
 
int main()
{
  unsigned int liczba;
 
  cout<<"Podaj liczbę: ";
  cin>>liczba;
 
// warunek złożony z dwóch warunków prostych
  if(liczba%3==0 && liczba%7==2) 
    cout<<"Liczba "<<liczba<<" spełnia warunki zadania."<<endl;
  else
    cout<<"Liczba "<<liczba<<" nie spełnia warunki zadania."<<endl;
 
return 0;
}
 

 

Zagnieżdżona instrukcja warunkowa

Zagnieżdżenie instrukcji warunkowej polega na wywołaniu jej wewnątrz innej instrukcji warunkowej. W C++ można dowolnie zagnieżdżać if - else, pamiętając o tym, aby kod był czytelny. Stosuje się tu wcięcia określający kolejne poziomy zagnieżdżenia.

 

Dla przykładu rozwiążmy zadanie:

Zadanie. Tabela poniżej określa taryfikator mandatów w pewnym państwie:

Wykroczenie Wysokość mandatu
Przekroczenie prędkości do 10 km 100
Przekroczenie prędkości z przedziału [11, 30] 200
Przekroczenie prędkości > 30 400

 

Użytkownik podaje liczbę km, jaką przekroczył kierowca. Zadaniem programu jest określenie wysokości mandatu.

Rozwiązanie:

#include <iostream>
using namespace std;
 
int main()
{
  cout<<"Podaj wartość przekroczonej predkości: ";
  unsigned int km;
  cin>>km;
 
  if(km<=10)
    cout<<"Wartość mandatu wynosi 100";
  else //dla czytelności kodu stosujemy odpowiednie wcięcia
 
     if(km<=30) //zagnieżdżona instrukcja if
       cout<<"Wartość madatu wynosi 200";
     else
       cout<<"Wartość mandatu wynosi 400";
 
  cout<<endl; 
  return 0;
}