PROGRAMOWANIE I ALGORYTMY

szkoła fraktal
Zapraszamy na zajęcia

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 (lub wartości równej 1), instrukcje dla bloku if zostaną wykonane. Oznacza to, że w przypadku zmiennych logicznych 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 instrukcji warunkowej 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 razie ta część kodu zostanie 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 else zostanie 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. Popatrzmy na 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, dbając o czytelność kodu. Warto stosować wcięcia określające kolejne poziomy zagnieżdżenia.

Dla przykładu rozwiążemy zadanie z wykorzystaniem zagnieżdżeń if - else.

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;
}