W tej lekcji nauczymy się pisać programy potrafiące dokonywać wyboru ;-) Instrukcje warunkowe, bo o nich mowa służą do wybierania poleceń na podstawie warunku.

1. Instrukcja if

Jest najprostsza instrukcja warunkowa. Instrukcja sprawdza czy warunek jest spełniony, jeżeli tak, to niech program wykona określone instrukcje. Dla przykładu napiszmy sobie program, który będzie mówił, która z liczb jest większa. Jak widać przy instrukcjach warunkowych, jako warunków zwykle używa się operatorów porównania poznanych na poprzedniej lekcji.

#include <iostream>


int main(int argc,char* argv[])
{
  int liczba1,liczba2;
  std::cout<<
"Podaj dwie liczby\n"
;
  std::cin>>liczba1>>liczba2;
  
//teraz użyjemy instrukcji if

  if(liczba1>liczba2) std::cout<<
"Liczba pierwsza jest wieksza niz liczba druga.\n"
;
  if(liczba1<liczba2) std::cout<<
"Liczba druga jest wieksza niz liczba pierwsza.\n"
;
  if(liczba1==liczba2) std::cout<<
"Liczba pierwsza jest rowna liczbie drugiej.\n"
;
  system(
"PAUSE"
);
  return
0
;
}


Jak widać program porównuje wartości i wyświetla odpowiedni tekst. Po podaniu wartości zmiennych program trafia na i instrukcje if i sprawdza warunek w nawiasie, jeżeli warunek jest spełniony, czyli nie wychodzi wartość 0, wykonuje polecenie, które jest po nawiasie. Ogólny wzór instrukcji if:

if (warunek) instrukcja;

Instrukcję if można rozszerzyć dodając else. Jeżeli warunek nie jest spełniony to wykona się instrukcja, która jest po else.

if(warunek) instrukcja_jeżeli_prawda; else instrukcja_jeżeli_nie_prawda;

Przykładowy program, który sprawdza czy podane liczby są równe:

#include <iostream>


int main(int argc,char* argv[])
{
  int liczba1,liczba2;
  std::cout<<
"Podaj dwie liczby\n"
;
  std::cin>>liczba1>>liczba2;
  
//teraz użyjemy instrukcji if z else

  if(liczba1==liczba2) std::cout<<
"Liczby sa rowne.\n"
; else std::cout<<
"Liczby nie sa rowne.\n"
;
  system(
"PAUSE"
);
  return
0
;
}


Tym razem użyliśmy tylko jednej instrukcji if z else. Po podaniu wartości zmiennym liczba1 i liczba2, program sprawdza czy wartości zmiennych są równe, jeżeli tak, to wykonuje instrukcję po nawiasie, jeżeli nie to wykonuje instrukcję po else.

Instrukcje można zagnieżdżać jedną w drugiej, spójrzmy na przykład:

#include <iostream>


int main(int argc,char* argv[])
{
  int liczba1,liczba2;
  std::cout<<
"Podaj dwie liczby\n"
;
  std::cin>>liczba1>>liczba2;
  
//teraz użyjemy instrukcji if zagnieżdżonej

  if(liczba1==liczba2) std::cout<<
"Liczby sa rowne.\n"
;
  else if(liczba1>liczba2) std::cout<<
"Pierwsza wieksza niz druga.\n"
;
  else std::cout<<
"Druga wieksza niz pierwsza.\n"
;
  system(
"PAUSE"
);
  return
0
;
}


Tutaj po podaniu zmiennych, najpierw program sprawdza równość, jeżeli zachodzi prawda to wypisuje, że są równe i do else już nie dochodzi, ale jeżeli liczby nie są równe to program wykonuje instrukcję else, a w niej kolejną instrukcję, która sprawdza czy liczba pierwsza jest większa niż liczba druga, jeżeli tak po wykonuje odpowiednią instrukcję, natomiast, jeżeli nie to wykonuje instrukcję po else. Można tą sytuację zaprezentować na schemacie:

Jeżeli chcemy wykonać kilka instrukcji w jednej instrukcji if, to należy wziąć je w klamry {}:

#include <iostream>


int main(int argc,char* argv[])
{
  int liczba1,liczba2;
  std::cout<<
"Podaj dwie liczby\n"
;
  std::cin>>liczba1>>liczba2;
  if(liczba1==liczba2)
  {
    std::cout<<
"Liczby sa "
;
    std::cout<<
"rowne\n"
;
  }
  else
  {
    std::cout<<
"Liczby nie sa "
;
    std::cout<<
"rowne\n"
;
  }
  system(
"PAUSE"
);
  return
0
;
}


Jak widać na przykładzie klamerek nie trzeba kończyć średnikami, ale każdą instrukcję w klamrze należy zakończyć średnikiem. W przykładzie wypisanie napisu rozbiłem na dwa strumienie.

2. Instrukcja switch

Instrukcja switch jest bardziej rozbudowana. W warunku podajemy nazwę zmiennej, nastepnie w możliwościach(case) podajemy jej możliwe wartości, oraz akcje dla danych wartości.

#include <iostream>


int main(int argc,char* argv[])
{
  std::cout<<
"Podaj liczbe od 1 do 4\n"
;
  int liczba;
  std::cin>>liczba;
  switch(liczba)
//warunkiem jest wartość zmiennej liczba

  {
    case
1
:
//jeżeli liczba wynosi 1(wariant 1)

      std::cout<<
"Wpisales jedynke.\n"
;
      break;
    case
2
:
//jeżeli liczba wynosi 2

      std::cout<<
"Wpisales dwojke.\n"
;
      break;
    case
3
:
//jeżeli liczba wynosi 3

      std::cout<<
"Wpisales trojke.\n"
;
      break;
    case
4
:
//jeżeli liczba wynosi 4

      std::cout<<
"Wpisales czworke.\n"
;
      break;
    default:
//liczba nie spełni żadnej z poprzednich możliwości

      std::cout<<
"Miales podac od 1 do 4!\n"
;
  }
  system(
"PAUSE"
);
  return
0
;
}


Działanie instrukcji switch różni się od instrukcji if. Najpierw piszemy słówko switch i w nawiasie warunek, zwykle jakąś zmienną. Kontynuacja instrukcji będzie w klamrach. Teraz piszemy słówko case i możliwą wartość, jaką może przyjąć warunek, dwukropek, następnie instrukcje, które mają się wykonać dla tej możliwości. Każdą możliwość trzeba zakończyć słówkiem break, jeżeli tego nie zrobimy, to instrukcje z innych możliwości będą się wykonywały, aż program nie napotka break; Program będzie sprawdzał kolejne możliwości, a jeżeli żadna nie będzie spełniona, to wykona to, co jest po default, czyli możliwości domyślnej.

Jest jeszcze pewna niewygodna sprawa przy stosowaniu instrukcji switch. Otóż bezpośrednio po case nie możemy deklarować zmiennych, ale można to ominąć biorąć możliwość case w klamry.

#include <iostream>


int main(int argc,char* argv[])
{
  int liczba;
  std::cin>>liczba;
  switch(liczba)
  {
    case
1
:
      std::cout<<
"Wpisales jedynke.\n"
;
      break;
    case
2
:
    {
      float zmienna;
//gdybym nie użył tutaj klamerek, kompilator pokazał by błąd
      //gdyż, nie można deklarować zmiennych w instrukcji switch, gdy nie mamy klamerek

      std::cout<<
"Wpisales dwojke.\n"
;
    }
    break;
  }
  system(
"PAUSE"
);
  return
0
;
}
Wejść na stronę:     Ilość osób online:
Prawa autorskie © 2008 crayze. Wszelkie prawa zastrzeżone.
crayze7@gmail.com