1. Czym są instrukcje warunkowe?
Każdy program jest wykonywany linia po linii, w kolejności, w jakiej został napisany. Dzięki instrukcjom warunkowym, możemy przejść do wykonywania innej części kodu jeśli podany warunek został spełniony ( jeśli zwróci wartość true ). W przeciwnym razie instrukcje są pomijane.
2. Instrukcja if
Instrukcja if umożliwia sprawdzenie czy dany warunku został spełniony (na przykład, czy dwie zmienne są równe) i przejście do wykonania innej części kodu. Schemat działania instrukcji if, można przedstawić w taki sposób :
1 2 3 |
if (wyrażenie) instrukcja; |
Można to odczytać jako : „Jeśli wyrażenie jest prawdą, to wykonaj instrukcje”. Oto przykład proste instrukcji if:
1 2 3 4 5 6 7 8 9 10 11 |
int a = 1; int b,c; c = 3; if (a==1) // pamiętajmy, o tym żeby nie pomylić z "=" z "==" ! b = a+c; |
Ten kod sprawdza czy zmienna a jest równa jeden i jeśli tak jest, to wykonuje instrukcje przypisania sumy a i c do b.
Instrukcje if, mogą być też bardziej rozbudowane, dzięki zostawaniu bloków :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if (a==1) { b = a+c; cout << a << endl; cout << b << endl; cout << c << endl; } |
Jak widać, jeśli warunek zostanie spełniony, rozpocznie się wykonywanie całego bloku instrukcji. W tym przykładzie została użyta funkcja cout, która zostanie omówiona głębiej w którejś z kolejnych lekcji. Do tworzenia bloków używamy nawiasów klamrowych { }. Styl ich użycia jest dowolny tzn :
1 2 3 |
if (wyrażenie){ instrukcja;} |
Jest to równoznaczne z :
1 2 3 4 5 6 7 |
if (wyrażenie) { instrukcja; } |
Nie ma to znaczenia ponieważ podczas kompilacji, kompilator pomija wszystkie spacje, tabulatory i znaki nowej linii ( tzw. białe spacje ). Nie maja one znaczenia, jednak sprawiają, że kod jest bardziej przejrzysty.
W poprzedniej lekcji – „Operatory” poznaliśmy operatory relacji i operatory logiczne, które możemy wykorzystać w instrukcjach if. Ich użycie zostało opisane w poprzedniej lekcji, dlatego nie będe ponownie opisywał ich działania.
2. Instrukcja else
Instrukacja else wykonywana jest w przypadku nie spełnienia warunku przez instrukcje if. Jeśli warunek zwróci wartość false, to program przejdzie do wykonywania instrukcji else. Wzór można przedstawić następująco :
1 2 3 4 5 6 7 |
if (wyrażenie) instrukcja1; else instrukcja2; |
A oto przykładowy kod :
1 2 3 4 5 6 7 |
if (liczba < 5) cout << "Liczba jest mniejsze niż 5"; else cout << "Liczba nie jest mniejsza niż 5"; |
3. Złożone instrukcje z wykorzystaniem if i else
Można zauważyć, że łączenie if i else daje możliwość tworzenia zawansowanych instrukcji. Dzieki temu możemy zbudować nasze instrukcje jak sie nam podoba, w zależności od naszych potrzeb. Oto przykład :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
if (dzisiaj=="sobota" || dzisiaj=="niedziela") { if(godzina=="9:00") { if (nieche_mi_sie_wstac) cout << "to sobie śpij "; else cout << "I poco wstales :p ?" } else cout << "możesz jeszcze spac ;p "; } else if(godzina=="7:00") cout << "wstawaj juz, zaraz do szkoły ;("; else cout << "śpij dopóki możesz ;s" |
4. Instrukcja switch
W poprzednim przykładzie zbudowaliśmy złożoną funkcje z wykorzystaniem if i else. Wyobraźmy sobie, że potrzebujemy sprawdzić czy jakaś wartość jest równa 1,2,3,4 itd. Czy potrzebujemy do tego dziesiątki ifów ? Nie. Instrukcja switch umożliwia podjęcie działań na podstawie jednej z wielu różnych wartości. Wzór funkcji można przedstawić tak :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
switch (wyrażenie) { case wartość1: instrukcja; break; case wartość2: instrukcja; break; .... case wartośćN: instrukcja; break; default: instrukcja; break; } |
Tak jak w instrukcjach if, wyrażenie i instrukcje są dowolne. Instrukcja case służy do przejścia do wykonywania instrukcji, jeśli jej wartość jest równa wartości wyrażenia. Zauważmy, że instrukcje case nie są objęte w blokach instrukcji, dlatego musimy poinformować kompilator o zakończeniu instrukcji. Do tego celu służy break. Stawaimy go po każdym case ( nawet jeśli nie zawiera instrukcji ). Instrukcja default określa co zrobić w przypadku, jeśli żadna z wartość case nie będzie równa wartości wyrażenia. Oto przykład użycia switch :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
#include int main() { int ocena; char* tekst; cout << "Podaj ocene : "; cin >> ocena; switch(ocena) { case 1: tekst = "niedostateczny"; break; case 2: tekst = "dopuszczający"; break; case 3: tekst = "dostateczny"; break; case 4: tekst = "dobry"; break; case 5: tekst = "bardzo dobry"; break; case 6: tekst = "celujacy"; break; default: tekst = "nie ma takiej oceny"; break; } cout << endl << tekst << endl; return 0; } |