Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

czwartek, 10 lutego 2011

Kurs języka C: instrukcja warunkowa if(...)... else ...


Autor: Dondu

Kurs języka C: Spis treści

Instrukcja if( ) pozwala na sprawdzenie spełnienia się jakiegoś warunku, a w połączeniu z else także niespełnienia warunku. W ten sposób program może realizować różne funkcjonalności w zależności od wyniku sprawdzania warunku. Warunkiem może być definicja, stała, zmienna lub jakieś wyrażenie.

Podstawowe formy wykorzystania instrukcji if(...) ... else ...

if ( warunek ) jakis_kod;
//lub
if ( warunek ) jakis_kod; else inny_kod;

Przykład najprostszej formy instrukcji if( ).

Przykład 1 (w kompilatorze)
  if ( warunek ) a++; //zwiększ zmienną a o jeden, gdy warunek spełniony

Instrukcja else rozdziela sterowanie if( ) na drugi człon wykonywany w przypadku, gdy warunek nie jest spełniony. W ten sposób przejście programu przez if( ) zawsze spowoduje wykonanie jednego z dwóch fragmentów if( ). Poniżej różne fromy zapisu if( ) else.

Przykład 2 (w kompilatorze)
  //--- WERSJA 1 -----------
  if ( warunek ) a++; //zwiększ zmienną a o jeden, gdy warunek spełniony
  else a--;           //w przeciwnym wypadku zmniejsz zmienną o jeden

  //--- WERSJA 2 -----------
  //dla zwiększenia czytelności kodu można tak
  if ( warunek ) 
    a++;
  else 
    a--;

  //--- WERSJA 3 -----------
  //można zapisać także w wersji jednolinijkowej
  if ( warunek ) a++; else a--;


if( ) z blokami { }

Ponieważ często kod wykonywany zależnie od wyniku if( ) ma więcej niż jedną linię, stąd możesz używać znaczników bloku { } na różne sposoby.

Przykład 3 (w kompilatorze)
  //--- WERSJA 1 -----------
  if ( warunek ){
    //gdy warunek spełniony
    a++; 
    b = b + 100;
  }else
    //gdy warunek nie jest spełniony
    c = c - 50;
  


  //--- WERSJA 2 -----------
  if ( warunek ){
    //gdy warunek spełniony
    a++; 
    b = b + 100;
  }else{
    //gdy warunek nie jest spełniony
    c = c - 50;
  }


  //--- WERSJA 3 -----------
  if ( warunek )
    //gdy warunek spełniony
    a++; 
  else{
    //gdy warunek nie jest spełniony
    b = b + 100;
    c = c - 50;
  }


Położenie nawiasów może być też takie:
  if ( warunek )
  {
    //gdy warunek spełniony
    a++;
  }
  else
  {
    //gdy warunek nie jest spełniony
    a--;
  }

Wszystko zależy od indywidualnych przyzwyczajeń.


Zagnieżdżanie

Możliwe jest dowolnie skomplikowane zagnieżdżanie if'ów. Jednak trzeba bardzo uważnie pisać i testować kod.

Przykład 4 (w kompilatorze)
  //--- PRZYKŁAD A -----------
  if ( warunek_1 ) 
    if( warunek_2 ) //warunek_2 jest badany tylko, gdy warunek_1 jest spełniony
      a++; //zwiększ zmienną a o jeden, gdy oba warunki spełnione
    else 
      a--; //zmniejsz zmienną a o jeden, gdy warunek_1 nie jest spełniony
  
  
  
  //--- PRZYKŁAD B -----------
  if ( warunek_1 ) 
  {
    //gdy warunek_1 jest spełniony
    if( warunek_2 ) 
      b+=10; //zwiększ zmienną a o 10, oba warunki spełnione
    else 
      b-=10; //zmniejsz zmienną a o 10, gdy warunek_2 nie jest spełniony
  }
  
  
  
  //--- PRZYKŁAD C -----------
  if ( warunek_1 ) 
  {
    //warunek_1 jest spełniony, badamy warunek_2
    if( warunek_2 ) c+=25; //zwiększ zmienną a o 25, gdy warunek_2 jest spełniony
  }
  else  //warunek_1 nie jest spełniony
    c-=25; //zmniejsz zmienną o 25 gdy warunek_1 nie jest spełniony


else if()

Istnieje możliwość łączenia instrukcji if( ) w łańcuch wzajemnie powiązanych instrukcji z różnymi warunkami. W ten sposób uzyskuje się możliwość wybrania jednego z kliku wzajemnie powiązanych skomplikowanych zależności.

Przykład 5 (w kompilatorze)
  if ( warunek1 ){
    //warunek1 jest spełniony 
    //pozostałe warunki nie są sprawdzane
  }else if(warunek2){
    //warunek1 nie jest spełniony
    //warunek2 jest spełniony
    //warunek3 nie jest sprawdzany
  }else if(warunek3){
    //warunek1 oraz warunek2 nie są spełnione
    //warunek3 jest spełniony
  }else{
    //żaden warunek nie jest spełniony
  }

Powyższy przykład w szczególności warto poćwiczyć w kompilatorze CManiak.


Kurs języka C: Spis treści

19
Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

4 komentarze:

  1. Dopiero tutaj znalazłem dobrze napisane wyjaśnienie jak stosować łańcuch "else if".
    Na tym blogu dostaje to czego potrzebuje:)

    Pozdrawiam, Tomq z elektrody.

    OdpowiedzUsuń
  2. Nie to, że czepiam się szczegółów, ale po prostu dobrze jak wszystko by tu było idealne:P Mianowicie w 4 przykładzie w przykładzie B i C w komentarzach jest "zwiększ zmienną a", no a wiadomo, że powinno być odpowiednio dla przykładu B "zwiększ zmienną b" oraz dla przykładu C "zwiększ zmienną c" :P

    OdpowiedzUsuń
  3. Mam pewien dylemat.
    Czy lepiej stosować zagnieżdżanie if czy (złożony warunek), np

    if(a==5 && b==4){
    kod;
    }

    czy
    if(a==5){
    if(b==4){
    kod;
    }
    }

    OdpowiedzUsuń
    Odpowiedzi
    1. Jeśli tylko takie warunki, to zdecydowanie ten pierwszy. Jeśli bardziej złożone warunki, to ten drugi. Generalnie kompilator i tak zrobi z tego kod maszynowy odpowiednio zoptymalizowany w obu przypadkach.

      Usuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.