Instrukcje sterujace



Pobieranie 20,23 Kb.
Data15.03.2018
Rozmiar20,23 Kb.

Instrukcje sterujące


Instrukcje sterujące to specjalne polecenia, dzięki którym można niejako kierować wykonaniem programu :-/ Dwie pierwsze będą to instrukcje warunkowe.

instrukcja if


  1. if (warunek) instrukcja;

Jeżeli warunek zostanie spełniony zostanie wykonana tylko jedna instrukcja znajdująca się bezpośrednio za if. Nawet, gdy napiszesz tam kilka instrukcji. Zatem w poniższym zapisie wykona się tylko instrukcja_1.

  1. if (warunek) instrukcja_1; instrukcja_2; instrukcja_3;

Pamiętaj o średniku1 On właśnie stanowi zakończenie instrukcji. Tak więc instrukcja_2 i instrukcja_3 są niezależne od if. Zawsze zostaną wykonane. Teraz przedstawię jak można zapakować do jednego if kilka instrukcji. Może już się domyślasz, co? Małe naprowadzenie - zakres ważności. Teraz już chyba świta :)

  1. if (warunek)

  2. {

  3. instrukcja1;

  4. instrukcja2;

  5. instrukcja3;

  6. instrukcja4;

  7. }

Od teraz jeśli warunek zostanie spełniony zostaną wykonane wszystkie instrukcje będące między klamrami. W klamrach możesz umieścić dowolną ilość instrukcji. Możesz także umieścić tam inne instrukcję if! Tylko pamiętaj o zamykaniu klamer. Za pomocą klamer utworzyliśmy blok if. Tworzenie kilku bloków wygląda tak:

  1. if (zmienna == 0)

  2. {

  3. instrukcja1;

  4. instrukcja2;

  5. }

  6. else if (zmienna == 1)

  7. {

  8. instrukcja3;

  9. instrukcja4;

  10. }

  11. else if (zmienna >= 2) instrukcja5;

W przykładzie doszło nowe słówko else. Oznacza ono tyle co w przeciwnym wypadku. Zatem jeżeli zmienna jest równa zero wykonane zostaną dwie pierwsze instrukcje. W momencie, gdy zmienna będzie miała wartość 1 wykona się instrukcja trzecia i czwarta. Natomiast jeśli zmienna będzie większa lub równa dwa wykona się instrukcja piąta. W trzecim przypadku nie użyto klamer. Byłoby to zbędne, gdyż jest jedna instrukcja. Aczkolwiek można tam umieścić klamry. Co by się stały, gdyby wartośc była ujemna? Takiej możliwości nie przewidzieliśmy. Oczywiście wtedy wszystkie bloki if zostaną pominięte. Czasami to nam odpowiada. Jednak nie zawsze. Załóżmy, że sprawdzamy, czy akcja odczytu powiodła się. Wartośc jeden oznacza sukces, natomiast kaźda inna niepowodzenie. Tym razem jest nieco inna sytuacja. Jeżeli wartośc jest równa jeden wykona się instrukcja informująca o udanej akcji. W każdym innym przypadku zostanie wyświetlony komunikat o porażce. Można to zrobić korzystając z kombinacji if i else if. Wtedy kod wyglądałby tak:

  1. if (zmienna == 1) instrukcja1;

  2. else if (zmienna != 1) instrukcja2;

Jeżeli wartośc zmiennej jest równa jeden zostanie wykonana instrukcja pierwsza. W przeciwnym wypadku jeśli zmienna jest różna od jeden wykona się instrukcja druga. Oczywiście taki zapis jest jak najbardziej legalny. Jednak można go trochę uprościć. Wystarczy zapisać to w taki sposób:

  1. if (zmienna == 1) instrukcja1;

  2. else instrukcja2;

Tutaj również ruszy instrukcja pierwsza, gdy zmienna wynosi jeden. Jak mówiłem else oznacza 'w przeciwnym wypadku'. Tak właśnie jest w przykładzie. Instrukcja druga wystartuje w momencie, gdy wsześniejsze warunki nie zostały spełnione. Czyli w przypadku, gdy zmienna jest różna od jeden. To dokładnie jak we wcześniejszym przykładzie. Tylko nieco krócej.

instrukcja switch


Instrukcja switch jest nieco zbliżona do instrukcji if. switch jest jakby uproszczeniem kilku bloków if. Tradycyjnie wyjdziemy od tłumaczenia. switch to z angielskiego przełącznik. Dzięki tej instrukcji można w sposób zbliżony do if podejmować decyzje dotyczące dalszego działania. Zresztą pokażę to na przykładzie:

  1. switch (zmienna)

  2. {

  3. case 1: instrukcja_1;

  4. case 2: instrukcja_2;

  5. case 3: instrukcja_3;

  6. }

Podczas wchodzenia do bloku switch sprawdzana jest wartość zmiennej. Następuje próba dopasowania zmiennej do każdego z wariantów. Zatem najpierw porównywana jest zmienna z jedynką. Jeśli zmienna faktycznie wynosi jeden wykonane zostaną instrukcje będące za pasującym wariantem oraz wszystkie następne :-O. Zatem w naszym przypadku wykonają się wszystkie instrukcje z całego bloku. Gdyby zmienna była równa dwa wykonana zostałaby instrukcja druga i trzecia. Jest to trochę niezręczne, ale czasem się przydaje. Z reguły jednak chodzi nam o nieco inną sytuację. Lepiej byłoby, aby w przypadku wartości jeden wykonana została instrukcja pierwsza i żadna inna. Można tak zrobić i to całkiem prosto:

  1. switch (zmienna)

  2. {

  3. case 1: instrukcja_1; break;

  4. case 2: instrukcja_2; break;

  5. case 3: instrukcja_3; break;

  6. }

Widzisz dodatkowe słówko break. Znaczy ono tyle co przełamywać, więc doskonale odzwierciedla istotę działania. Od tej pory gdy wartość wynosi jeden wykona się tylko instrukcja pierwsza. Analogicznie jest w przypadku innych wartości. Oczywiście można nakazać wykonanie kilku instrukcji przy jednym przypadku. Robi się to w taki sposób:

  1. switch (zmienna)

  2. {

  3. case 1: instrukcja_1; instrukcja_2; break;

  4. case 2: instrukcja_3; instrukcja_4; break;

  5. case 3: instrukcja_3; break;

  6. }

Teraz instrukcja pierwsza i druga będą wykonywane zawsze, gdy zmienna będzie równa jeden. Jeśli wartośc zmiennej będzie wynosić dwa ruszy instukcja trzecia i czwarta. W ostatnim przypadku wystartuje instrukcja piąta. Jak myślisz co się stanie, gdy wartość zmiennej będzie równa cztery? Wtedy oczywiście nic się nie stanie. Jednak takie sytuacje można wykryć i odpowiednio zareagować. Wystarczy dodać linijkę kodu:

  1. switch (zmienna)

  2. {

  3. case 1: instrukcja_1; instrukcja_2; break;

  4. case 2: instrukcja_3; instrukcja_4; break;

  5. case 3: instrukcja_3; break;

  6. default: instrukcja_6; break;

  7. }

Słowo default oznacza uchybienie, zaniedbanie lub po prostu brak. To ostatnie najlepiej pasuje do sytuacji. Jeżeli wartości zmiennej nie można dopasować do żadnego z wariantów zostanie wykonana instrukcja umieszczona za słowem default. Nie koniecznie musi to być jedna instrukcja. Tutaj obowiązują takie same zasady jak wcześniej. W związku z tym możesz tam umieścić więcej instrukcji.

instrukcja goto


Instrukcja goto służy do bezwarunkowego skoku w inne miejsce programu. Nazwa oznacza idź do. Po napisaniu instrukcji należy jeszcze określić dokąd ma nastąpić wyskok. Określa się to za pomocą etykiety.

  1. etykietka_1: //definicja etykiety

  2.  

  3. goto etykietka_1;

  4. koniec:

  5.  

  6. instrukcja_1;

  7. instrukcja_2;

Etykieta może mieć dowolną nazwę. Przy dobieraniu nazwy obowiązują te same zasady jak przy zmiennych. Zatem unikanie słów kluczowych oraz niektórych znaków. Mówiłem już o tym przy omawianiu zmiennych. Jak powiedziałem goto powoduje bezwarunkowy skok do wybranej etykiety. Bezwarunkowy oznacza, że skok nastąpi zawsze przy jej napotkaniu. Zastanów się chwilę nad powyższym przykładem. Jak myślisz kiedy wykonają się instrukcje znajdujące się za etykietą koniec? Problem w tym, że nigdy nie zostaną one wykonane :-O Nasuwa się prosty wniosek. Skoro instrukcje kończące program nie wystartują to.. program nigdy się nie zakończy! W przypadku instrukcji if lub switch można było określić kiedy i jaką akcję podjąć. goto takiego wyboru nie daje. Wyskok następuje zawsze i w dodatku w to samo miejsce. Widzisz jak łatwo można tutaj popełnić błąd. Kompilator nie jest w stanie tego wykryć i program będzie działał wadliwie. Jest to główny powód, dla którego nie należy stosować tej instrukcji. Oczywiście można ją umieścić w jakimś bloku if. Wówczas skok staje się uzależniony od pewnych warunków. Jednak to też nie jest eleganckie. Stanowczo odradzam korzystanie z tej instrukcji. Zresztą sam się przekonasz, że istnieją o wiele lepsze i bezpieczniejsze sposoby na wykonanie takiego skoku..



©operacji.org 2019
wyślij wiadomość

    Strona główna