2 - Instrukcje warunkowe i pętle

Ikona obiektów Cele lekcji
Nabycie umiejętności używania instrukcji warunkowych i pętli

Ikona obiektów Co powinieneś już wiedzieć?
  • W jaki sposób uruchomić środowisko do tworzenia programów w języku C/C++. W jaki sposób skompilować program. Co to znaczy skompilować i uruchomić program.
  • Jak wygląda struktura programu w C/C++.
  • Jakie są podstawowe typy zmiennych w C/C++. W jaki sposób obsługuje się polecenia wejścia/wyjścia w C/C++.
  • Jak wyglądają podstawowe operacje w języku C/C++, np. jak zadeklarować zmienną, przypisać wartość do zmiennej, wykonać podstawowe operacje arytmetyczne.

Ikona obiektów Instrukcje warunkowe
Instrukcje warunkowe to takie instrukcje, które umożliwiają wykonywanie różnych czynności w zależności od tego, czy pewien podany warunek jest spełniony.

Konstrukcja instrukcji warunkowej w języku C/C++ wygląda następujaco:

if (wyrażenie) operacja_prawda;
else operacja_fałsz;


Jeśli wyrażenie jest prawdziwe, wykonana zostanie operacja_prawda.
Jeśli wyrażenie jest fałszywe, wykonana zostanie operacja_fałsz.

Słowo else nie musi wystąpić w instrukcji warunkowej. Wówczas operacja zostanie wykonana, jeśli wyrażenie jest spełnione, a jeśli nie jest, nie wydarzy się nic.

Każda operacja (operacja_prawda lub operacja_fałsz) może być równie dobrze blokiem operacji rozpoczynającym się od znaku { a kończącym znakiem }.

Ikona obiektów Prawda/Fałsz
Problem rozróżniania prawdy od fałszu w C/C++ sprowadza się do sprawdzania, czy wyrażenie ma wartość 0, czy też ma inną wartość.
0 (zero) zawsze oznacza fałsz. Każda inna wartość oznacza prawdę.
Np. fragment kodu:

i = 1;
if (i) printf("Prawda");
else printf("Fałsz");


wypisze na ekranie słowo "Prawda". Gdyby jednak napisać:

i = 0;
if (i) printf("Prawda");
else printf("Fałsz");


wówczas na ekranie pojawi się słowo "Fałsz".

W nawiasach można też umieszczać dowolne operacje arytmetyczne, a do określenia prawdy lub fałszu wzięty zostanie wynik działań.

Jaki według Ciebie będzie efekt działania poniższego kodu?

i = 1;
if (2*i-3+1/i) printf("Prawda");
else printf("Fałsz");


Ikona obiektów Operacje porównania
Podczas sprawdzania spełnialności wyrażenia można używać standardowych operatorów porównania, które w języku C/C++ wyglądają następująco:

równe: ==
różne: !=
mniejsze: <
mniejsze lub równe: <=
większe: >
większe lub równe: >=

Wyrażenie umieszczone w nawiasie zawsze zwraca wartość 1 lub 0 w zależności od tego, czy dane porównanie jest prawdą, czy też fałszem.
Np. dla kodu:

i = 1;
if (i==1) printf("Prawda");
else printf("Fałsz");


na ekranie pojawi się słowo "Prawda".

Ikona obiektu Zastanów się
Jak myślisz, co pojawi się na ekranie w wyniku uruchomienia takiego kodu?

int x,i;
i = 1;
x = (i==1)
printf("%d",x);
Ikona obiektów Operatory logiczne
Wyrażenia można ze sobą łączyć używając odpowiednich operatorów logicznych. Najważniejsze z nich to:
koniunkcja: &&
alternatywa: ||
negacja: !
Można je łączyć dowolnie, używając odpowiedniego ponawiasowania. Np:

if (i>=0 && i<=10 && !(i==5)) printf("Prawda");
else printf("Fałsz");


Program wypisze słowo "Prawda", jeśli i jest w przedziale od 0 do 10, ale nie jest równe 5. W przeciwnym wypadku wypisze "Fałsz".

Ikona obiektów Pętle
W języku C/C++ wyróżniamy 3 rodzaje pętli:

Pętla while:

while (warunek) operacja;

Tak długo, jak warunek jest prawdziwy, wykonywana jest operacja (operacja może być również blokiem operacji rozpoczynającym się od znaku { a kończącym znakiem }).

Pętla do while:

do operacja; while (warunek);

Operacja zostanie wykonana raz, a następnie, tak długo jak warunek jest prawdziwy, będzie powtarzana (operacja może być również blokiem operacji rozpoczynającym się od znaku { a kończącym znakiem }).

Pętla for:

for (wartość_początkowa; warunek_kontynuacji; modyfikacja_zmiennej_sterującej) operacja;

Wartość_początkowa - ciąg instrukcji, które są wykonywane na początku, przy inicjalizacji pętli. Najczęściej jest to nadanie wartości początkowych zmiennej sterującej.
Modyfikacja_zmiennej_sterującej - ciąg instrukcji, które są wykonywane natychmiast po zakończeniu każdego obiegu pętli. Najczęściej jest to modyfikacja zmiennej sterującej, np. zwiększenie jej wartości.
Warunek_kontynuacji - warunek sprawdzany przed rozpoczęciem wykonania każdego obrotu pętli. Jeśli warunek ten nie jest prawdziwy, wówczas pętla kończy swoje działanie.
Operacja może być także blokiem operacji rozpoczynającym się od znaku { a kończącym znakiem }.

Np:

for (int i=0; i<5; i++) operacja;

Taka pętla na początku zainicjuje zmienną i przypisując jej wartość zero. Następnie operacja zostanie wykonana 5 razy. Będzie tak, gdyż kiedy 5 razy zwiększymy wartość zmiennej i o jeden, warunek i<5 przestanie być spełniony.

Poniższe pętle działają w nieskończoność:

while (1)
{
}
for (;;)
{
}

Ikona obiektów Zakłócanie przebiegu pętli
Aby zmienić bieg działania pętli, można użyć jednego z dwóch poleceń zakłócających przebieg pętli:
continue - przerywa działanie pętli i przechodzi do jej następnej iteracji
break - opuszcza pętlę i kończy jej działanie

Ikona obiektu Pytanie Zadania
Jaki będzie wynik działania następującego programu?

int i=4;
if ((i<1) || (i>5) || (i!=10)) printf("Prawda");
else printf("Fałsz");
  
Prawda
Fałsz

Ile razy wykonana zostanie operacja w następującej pętli?

for (int i=0; i<11; i+=2)
{
operacja;
}
  
11
6
5
4
0