Instrukcje sterujące

2016-05-20 00:53
Jacek Labudda
												Na początek powiem, że ważna jest wiedza na temat warunków.
Więc co to jest warunek?
W życiu każdy napotyka wiele warunków. Na przykład;
jeśli nie będziesz się uczył to zostaniesz prezydentem. ;D
Czyli, jeśli nauka równa się fałsz to znaczy, nie spełnia nadanego mu warunku i Kowalski zostanie prezydentem, a jeśli będzie się uczył, czyli nauka będzie równa prawdzie, to zostanie kimś wielkim. 

Warunek to tak na prawdę wartość logiczna wynikająca z wyrażenia.  Instrukcje sterujące polegają na sprawdzaniu danej wartości np. zmiennych, stałych lub funkcji, dzięki czemu kieruje wykonywanie programu.
Chodzi oczywiście o instrukcje if (z ang. jeśli).
Instrukcja if sprawdza, czy wartość logiczna jest równa true (prawda), czy false (fałsz).

Jeśli kiedyś miałeś kontakt z jakimkolwiek językiem programowania, to zapewne spotkałeś się z instrukcją if.
Ale jednak polecam przeczytać tą lekcje.

Więc zaczynamy. 
Instrukcja wygląda następująco:
if(warunek) { //czesc programu wykonywana //po spelnieniu warunku }

Operatory logiczne

Zapewne w warunku chciałbyś/chciałabyś wstawić operator = w celu porównania dwóch wartości i zauważył byś, że warunek za każdym razem jest spełniony. Dzieje się tak dlatego, iż operator = jest operatorem przypisania, a w warunkach potrzebujemy operatora porównania, a jest nim ==(podwójny znak równości). I wygląda to następująco:
if(wartosc1 == wartosc2);
A co jeśli byśmy chcieli wyznaczyć przedział liczb, np. od 0 do 10?? Mamy od tego odpowiednie operatory: A. mniejsze < B. większe > C. mniejsze bądź równe <= D. większe bądź równe >= Przykład:
if(watrosc > 10); //jesli wartosc wieksza od 10 if(wartosc < 10); //jesli wartosc mniejsze od 10 if(watrosc >= 10); //jesli wartosc wieksza badz rowna 10 if(wartosc <= 10); //jesli wartosc mniejsza badz rowna 10
Działania na jednym warunku jest niewygodne ze względu na to, że gdy chcemy podać więcej warunków to robimy coś takiego:
if(warunek1) if(warunek2)
Na szczęście przychodzą z pomocą dla programisty 2 operatory[&&, ||]. Operator &&(podwójny znak ampersand) - powoduje, że wstawiony między dwoma warunkami sprawdza, czy jeden i drugi jest poprawny. Działania są wykonywane od lewej do prawej, czyli jeśli np. pierwszy warunek będzie błędny to reszta jest opuszczana, ponieważ wszystkie warunki muszą być spełnione. Operator ||(podwójny znak pipe)(Tak. Napisałem pipe, ponieważ ten klawisz ma taką nazwę(z ang. rura)) - powoduje, że wstawiony między dwoma warunkami sprawdza, czy przynajmniej jeden z nich jest poprawny. Chyba nie muszę przypominać, że kolejność wykonywanych działań jest stała. Czyli od lewej strony do prawej. W takim razie jeśli pierwszy warunek zostanie spełniony to reszta jest opuszczana, bo po co sprawdzać resztę, skoro wystarczy spełnić jeden warunek. Przykład:
if(wartosc > 10 && wartosc < 100) { //jesli wartosc wieksza od 10 oraz mniejsza od 100 //przedzial 10 - 100 } if(wartosc == 10 || wartosc == 100) //jesli wartosc rowna 10 albo rowna 100
No i został jeszcze jeden ważny operator. Mianowicie operator nierówności: != (jest przeciwieństwem ==). Działa to na zasadzie, że jeśli wartość po jednej stronie tego operatora jest inna niż po drugiej, to warunek zostaje spełniony. Przykład:
if(watrosc != 0) { //jesli watrosc jest inna niz 0 }

I co dalej?

No właśnie. Co się dzieje z naszym blokiem gdy warunek nie zostanie spełniony? Oczywiście blok programu umieszczony między nawiasami klamrowymi po niespełnionym warunku jest pomijany i program przechodzi dalej. Można też zrobić tak, że jeśli warunek nie zostanie spełniony to program zostanie w następnym kroku odpowiednio pokierowany dalej. Robimy to za pomocą instrukcji else. else można umieścić tylko po nawiasie klamrowym kończącym blok instrukcji if oraz po średniku, w przypadku gdy nie użyjemy nawiasu klamrowego, ponieważ gdy blok programu w instrukcji if jest jednowierszowy to nawias klamrowy nie jest wymagany. Działa to na zasadzie; jeśli warunek/warunki nie zostaną spełnione to wykonuje się to co mamy w instrukcji else. Przykład:
if(warunek) { cout << "warunek zostal spelniony" << endl; } else { cout << "warunek nie zostal spelniony" << endl; } //lub... if(warunek) cout << "warunek zostal spelniony" << endl; else cout << "warunek nie zostal spelniony" << endl;
Instrukcja sterująca else też może posiadać własne warunki. Jeśli warunek w instrukcji if nie zostanie spełniony to program przechodzi do dalszych instrukcji i nie zawsze instrukcja else musi się zgadzać na dostęp do jego bloku programu. Wygląda to następująco:
if(warunek1) { //blok pierwszej instrukcji } else if(warunek2) { //blok drugiej instrukcji }

Przypisanie warunku do zmiennej

Każdy dowolny warunek można przypisać do zmiennej logicznej lub liczbowej. W przypadku, gdy warunek przypisany do zmiennej zostanie spełniony, to zmienna przyjmie wartość logiczną 1 czyli true, albo 0 czyli false.
bool a; int b = 2; a = (b==2); if(a) cout << a << endl;
Uwaga bo to ważne!!! W przypadku jeśli chcemy sprawdzić, czy dany warunek nie został spełniony:
//to zamiast pisać tak if(wartosc==false); //mozemy to samo zapisac w taki sposob if(!wartosc);

Skrócona forma warunku

Instrukcje sterujące if oraz else można zapisać w skróconej formie. Służą do tego dwa operatory[?(znak zapytania) i :(dwukropek)]. Znak zapytania zastępuje instrukcję if, a dwukropek instrukcję else. Schemat: ( ( warunek ) ? spelniony : niespelniony ) Przykład:
#include <iostream> using namespace std; int main(){ bool warunek = true; cout << "Warunek " << ((warunek)?"spelniony":"niespelniony") << "." << endl; return 0; }
Wynik: Warunek spelniony. Wszystkie przykłady w obecnej lekcji były schematyczne, a jak to wygląda w praktyce, to pokażę za chwilę.

Przykłady

#include <iostream> using namespace std; int main() { int zmienna1 = 10; int zmienna2 = 20; if(zmienna1 == 10) cout << "Zmienna1 jest rowna 10" << endl; else cout << "Zmienna1 jest inna niz 10" << endl; if(zmienna1 != 10) cout << "Zmienna1 jest inna niz 10" << endl; else cout << "Zmienna1 jest rowna 10" << endl; if(zmienna1 <= zmienna2) cout << "Zmienna1 jest mniejsza badz rowna zmianna2" << endl; else cout << "Zmienna1 jest wieksza od zmianna2" << endl; if(zmienna1 == 10 && zmienna2 == 10) cout << "Obie zmienna sa rowne 10" << endl; else cout << "Przynajmniej jedna ze zmiennych nie spelnia warunku" << endl; if(zmienna1 == 10 || zmienna2 == 10) cout << "Przynajmniej jedna zmienna ma watrosc rowna 10" << endl; else cout << "Zadna zmienna nie ma wartosci rownej 10" << endl; return 0; }
Wynik programu: Zmienna1 jest rowna 10 Zmienna1 jest rowna 10 Zmienna1 jest mniejsza badz rowna zmianna2 Przynajmniej jedna ze zmiennych nie spelnia warunku Przynajmniej jedna zmienna ma watrosc rowna 10 Powyższy przykład jest skrótem lekcji, więc przeanalizuj go sobie w celu przypomnienia i utrwalenia wiadomości z tej lekcji.

Użytkownicy
Logowanie:
Zaloguj
Polub nas na facebooku
Wyszukiwanie na stronie