Селекција алтернативних грана – switch наредба

Селекција алтернативних грана је управљачка структура код које се од неколико низова наредби бира за извршавање један или ниједан од тих низова наредби. Одабирање се врши на основу једне целобројне вредности.

alternativnaSelekcija2

У језику C не постоји посебна наредба за ову управљачку структуру, већ се користи наредба switch код које се на крај сваког од низа наредби дода наредба break. На тај начин се постиже искакање из наредбе switch на крају сваког алтернативног низа наредби. Ми ћемо под појмом „switch наредба“ подразумевати управо ову структуру!

switch (izraz)
{
     case α: niz_naredbi_1
             break;
     case β: niz_naredbi_2
             break;
     …
     case ω: niz_naredbi_N
             break;
     default: niz_naredbi_0
              break;
}

С обзиром на чињеницу да је сада сваки алтернативни низ наредби потпуно независан од осталих низова, редослед навођења ових низова је потпуно произвољан. Ознака default се обично ставља на крај структуре, за случај да ниједна од раније наведених вредности није била испуњена. Препоручује се стављање наредбе break и на крај последњег алтернативног низа наредби, за случај евентуалног додавања нових низова на крају структуре.

Уколико се ознака default не наведе може се десити да се не изврши ни један од алтернативних низова наредби.

пример: написати switch наредбу која за унети редни број месеца приказује број дана у том месецу:

switch (mesec)
{
     case 1: case 3: case 5: case 7: case 8: case 10: case 12: duzina=31;break; /*za vrednost mesec=1 ili mesec=3 ili mesec=5 ili mesec=7 ili mesec=8 ili mesec=10 ili mesec=12 promenljivoj duzina dodeljuje se vrednost 31, prekida izvrsavanje naredbe switch i prelazi na izvrsavanje prve naredbe posle switch naredbe */
     case 4: case 6: case 9: case 11: duzina=30; break;
     case 2: duzina=28+(godina%4==0 && godina%100!==0 || godina%400==0); break; /* godina je prestupna ako je deljiva sa 4 i ne sa 100. Ali ako je deljiva sa 400 ona je prestupna. */ 
     default: duzina=-1; break;
}

У овом примеру одређује се број дана duzina у месецу mesec у години godina. За случај фебруара логички израз у загради има вредност true (1) ако је година преступна и false (0) ако година није преступна, па се броју 28 додаје 1 или 0 и добија исправан резултат. Ознака default је предвиђена за случај да је број месеца неисправан, тако да се изван наредбе switch може искористити за приказивање поруке типа „унети подаци су неисправни“.

Пример: Написати програм у који уносимо произвољан цео број, а програм штампа име дана:

#include<stdio.h>
main()
{
     int dan;
     printf("unesi dan"); scanf("%d",&dan);
     switch(dan)
     {
          case 1: printf("ponedeljak");break;
          case 2: printf("utorak");break;
          case 3: printf("sreda");break;
          case 4: printf("cetvrtak");break;
          case 5: printf("petak");break;
          case 6: printf("subota");break;
          case 7: printf("nedelja");break;
          default: printf("pogresan unos");break;
     }
}

пример: написати програм који реализује аритметичке операције.

#include<stdio.h>
main()
{
     float operand1,operand2;
      char op; /* znak operacije predstavljamo tipom podataka char, a to je znakovni tip podataka – jedan znak naveden izmedju znakova ' '. U memoriji racunara pamti se pomocu njegovog ASCII koda, tako da pripada celobrojnim tipovima podataka */
      printf("unesite izraz za sabiranje, oduzimanje, mnozenje ili deljenje");
      scanf("%f%c%f",&operand1,&op,&operand2); /* ulazna konverzija za znakovni tip podatka char je %c */
      switch (op)
      {
            case '+': printf("%f",operand1+operand2);break;
            case '-': printf("%f",operand1-operand2);break;
            case '*': printf("%f",operand1*operand2);break;
            case '/': printf("%f",operand1/operand2);break;
            default: printf("pogresan unos");break;
       }
}
Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s