Programowanie i algorytmy

Instrukcja wielokrotnego wyboru switch case

Wyobraźmy sobie sytuację, że mamy do napisania program, który będzie wykonywał pewną czynność  zależną od wybranej opcji. Zadanie to można zrealizować za pomocą instrukcji warunkowej, ale może to być dość uciążliwe.  Z pomocą idzie nam instrukcja wielokrotnego wyboru. Konstrukcja jest następująca:

switch(opcja)  // ta część przełącza nas w odpowiednie miejsce,

// w zależności jaką wartość ma zmienna opcja

{ //klamra otwierająca blok switch

case etykieta1:

instrukcje dla opcji o wartości etykieta1

break; // to słowo kluczowe przerywa dalsze wykonywanie instrukcji i wychodzi z bloku switch

case etykieta2:

instrukcje dla opcji o wartości etykieta2

break;

......................

case etykietan:

instrukcje dla opcji o wartości etykietan

break;

default: // ta część instrukcji switch jest opcjonalna

instrukcje, które wykonają się w przypadku, gdy podana opcja nie istnieje

 

} //klamra zamykająca blok switch

Zasada działania jest bardzo prosta. Tworzymy zmienną (w przykładzie powyżej jest to zmienna opcja), której nadajemy wartość. Instrukcja switch przekieruje nas w odpowiednie miejsce, gdzie wartość zmiennej jest równa wartości etykiety. Można opcjonalnie dodać alternatywę w postaci słowa kluczowego default. Gdy dana etykieta nie istnieje, program przeskoczy właśnie w to miejsce.

Jeśli chcemy zmienić zasięg zmiennych, można wstawić nawiasy klamrowe:

........

case etykietan:

{

instrukcje dla opcji o wartości etykietan

break;

}

........

Słowo kluczowe break przerywa działanie instrukcji switch. Jeśli jednak chcemy, aby kilka etykiet zostało podpiętych pod jeden ciąg instrukcji, wtedy omijamy słowo break. Prześledźmy przykład:

 

Zadanie. Podajemy dzień tygodnia, program określa, czy jest to dzień roboczy, czy weekend.

Rozwiązanie:

#include <iostream>
using namespace std;
 
int main()
{
  unsigned short dzien;
 
  cout<<"Podaj nr dnia tygodnia: ";
  cin>>dzien;
 
  switch(dzien)
  {
    case 1:  
    case 2: 
    case 3:
    case 4:
    case 5:
      cout<<"Podany dzień jest dniem roboczym";
      break;
    case 6:
    case 7:
      cout<<"Mamy weekend";
      break;
    default:
      cout<<"Nie ma takiego dnia";
  }
 
  return 0;
}
 

 

Przeanalizujmy powyższy program. Gdy np. zmienna dzien przyjmie wartość 2, to instrukcja switch przełączy nas w miejsce "case 2:", a następnie będzie przeskakiwać w dół do momentu napotkania słowa kluczowego break. W tym przypadku zatrzyma się dopiero po instrukcjach dla "case 5:".