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ą wielu instrukcji warunkowych if - else, albo skorzystać z wygodnej instrukcji wielokrotnego wyboru switch - case. Konstrukcja wygląda 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 etykieta_1:

	//instrukcje dla opcji o wartości etykieta1

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

case etykieta_2:

	//instrukcje dla opcji o wartości etykieta2

break;

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

case etykieta_n:

	//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 przełączy 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:

Przykład 1

Zadanie. Na wejściu podajemy jedną liczbę całkowitą. Program określa, czy jest to dzień roboczy, czy weekend lub wyświetla komunikat, że podana wartość nie jest numerem dnia tygodnia.

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:".

Przykład 2

Zadanie. Na wejściu pojawi się jeden znak. Jeśli jest to cyfra, program wyświetla jej nazwę, w przeciwnym razie wypisuje komunikat "To nie jest cyfra".

Rozwiązanie:

#include <iostream>
using namespace std;

int main()
{
	char cyfra;
	cout<<"Podaj jeden znak: ";
	cin>>cyfra;
	
	switch(cyfra)
	{
		case '0': //zwróć uwagę na apostrof
			cout<<"zero";
			break;
	case '1': //zwróć uwagę na apostrof
			cout<<"jeden";
			break;
		case '2': //zwróć uwagę na apostrof
			cout<<"dwa";
			break;
		case '3': //zwróć uwagę na apostrof
			cout<<"trzy";
			break;
		case '4': //zwróć uwagę na apostrof
			cout<<"cztery";
			break;
		case '5': //zwróć uwagę na apostrof
			cout<<"piec";
			break;
		case '6': //zwróć uwagę na apostrof
			cout<<"szesc";
			break;
		case '7': //zwróć uwagę na apostrof
			cout<<"siedem";
		case '8': //zwróć uwagę na apostrof
			cout<<"osiem";
			break;
		case '9': //zwróć uwagę na apostrof
			cout<<"dziewiec";
			break;
		default:
			cout<<"Podany znak nie jest cyfrą!";
	}
	return 0;
}

Pamiętaj, że znaki muszą być wpisane w pojedynczym apostrofie.