Różnice pomiędzy instrukcjami wyboru
Za pomocą instrukcji warunkowej if możemy określić dokładnie co ma się wydarzyć w zależności od stanu jednej lub kilku zmiennych. Instrukcja if daje nam pełną kontrolę nad przebiegiem programu. Jest jednak dostępna również instrukcja wielokrotnego wyboru switch. W przypadku niej możemy wykonywać decyzje tylko i wyłącznie na podstawie wartości jednej zmiennej. Możliwości instrukcji switch są nieporównywalnie mniejsze, jednak używanie jej w niektórych przypadkach jest znacznie korzystniejsze dla szybkości działania programu i estetyki kodu niż użycie instrukcji if. Stąd też warto przyjrzeć się bliżej niniejszej instrukcji.
Źródło: Jakub Piskorowski
Instrukcja switch pozwala na wybór jednej z kilku możliwych ścieżek działania programu w zależności od wartości zmiennej lub wyrażenia. Działa poprzez porównanie tej wartości z określonymi przypadkami (tzw. case), a gdy któryś z nich pasuje, wykonywany jest odpowiadający mu blok kodu. Jeśli żadna wartość nie pasuje, opcjonalnie może zostać wykonana sekcja default, która obsługuje sytuacje, gdy żaden z przypadków nie spełnia warunku.
Poniżej został przedstawiony schemat blokowy działania instrukcji switch:
Źródło: Jakub Piskorowski
Instrukcja switch w C++ umożliwia wybór jednej z wielu ścieżek wykonania kodu w zależności od wartości zmiennej. Jest to wygodniejsza forma zapisu, gdy mamy do czynienia z kilkoma warunkami, które są porównywane do jednej zmiennej.
Składnia:
switch( zmienna ) {
case wartosc_1:
// Blok kodu, jeśli zmienna == wartosc_1
break;
case wartosc_2:
// Blok kodu, jeśli zmienna == wartosc_2
break;
// Inne przypadki...
case wartosc_n:
// Blok kodu, jeśli zmienna == wartosc_n
break;
default:
// Blok kodu, jeśli zmienna nie pasuje do żadnej z wartości
break;
}
Działanie:
Zmiennej podanej w switch przypisywana jest wartość, którą program następnie porównuje z wartościami wymienionymi po case.
Bloki case są porównywane z wartością zmiennej.
Jeśli zmienna jest równa wartosc_1, zostanie wykonany blok kodu dla case wartosc_1, a następnie program zakończy działanie tej instrukcji przy użyciu break.
Jeśli zmienna jest równa wartosc_2, zostanie wykonany blok kodu dla case wartosc_2 i tak dalej.
Instrukcja break jest kluczowa. Jej brak spowoduje tzw. 'przepływ' (ang. fall-through), czyli wykonanie wszystkich kolejnych bloków kodu, niezależnie od wartości zmiennej. break przerywa działanie struktury switch, dzięki czemu po znalezieniu odpowiedniego przypadku program przestaje wykonywać dalsze bloki kodu.
Blok default działa jak opcja domyślna – zostanie wykonany, gdy żadna z wartości case nie pasuje do wartości zmiennej.
W poniższym przykładzie zmienna dzien przyjmuje wartość liczby całkowitej, reprezentując dzień tygodnia. Instrukcja switch wyświetla nazwę dnia tygodnia na podstawie wartości zmiennej. Dla numerów od 1 do 5 są to dni robocze, a wszystkie inne numery są interpretowane jako weekend.
int dzien;
cout << "Podaj numer dnia tygodnia (1-7): ";
cin >> dzien;
switch(dzien) {
case 1:
cout << "Poniedziałek" << endl;
break;
case 2:
cout << "Wtorek" << endl;
break;
case 3:
cout << "Środa" << endl;
break;
case 4:
cout << "Czwartek" << endl;
break;
case 5:
cout << "Piątek" << endl;
break;
default:
cout << "Weekend" << endl;
break;
}
Działanie:
Zmienna 'dzien' przyjmuje wartość od 1 do 7, która jest wprowadzana przez użytkownika.
W zależności od wartości zmiennej, odpowiednia nazwa dnia tygodnia zostanie wyświetlona.
Numer 1 do 5 odpowiada dniom roboczym od poniedziałku do piątku.
W przypadku wartości innych niż od 1 do 5, instrukcja default wyświetli komunikat 'Weekend'.
Wynik działania programu:
Jeśli użytkownik poda wartość 3, program wypisze:
Środa
Jeśli użytkownik poda wartość 7, program wypisze:
Weekend
W poniższym przykładzie zmienna miesiąc przyjmuje wartość liczby całkowitej, reprezentującą miesiąc w roku. Instrukcja switch wyświetla nazwę pory roku na podstawie wartości zmiennej. Miesiące od 1 do 12 są przypisywane do odpowiednich pór roku (zima, wiosna, lato, jesień), a wszystkie inne wartości są traktowane jako nieprawidłowy miesiąc.
int miesiac;
cout << "Podaj numer miesiąca (1-12): ";
cin >> miesiac;
switch(miesiac) {
case 12:
case 1:
case 2:
cout << "Zima" << endl;
break;
case 3:
case 4:
case 5:
cout << "Wiosna" << endl;
break;
case 6:
case 7:
case 8:
cout << "Lato" << endl;
break;
case 9:
case 10:
case 11:
cout << "Jesień" << endl;
break;
default:
cout << "Nieprawidłowy miesiąc!" << endl;
break;
}
Działanie:
Zmienna miesiąc przyjmuje wartość od 1 do 12, która jest wprowadzana przez użytkownika.
W zależności od wartości zmiennej miesiąc, program przypisuje odpowiednią porę roku.
Miesiące grudzień (12), styczeń (1), luty (2) przypisane są do zimy.
Miesiące marzec (3), kwiecień (4), maj (5) przypisane są do wiosny.
Miesiące czerwiec (6), lipiec (7), sierpień (8) przypisane są do lata.
Miesiące wrzesień (9), październik (10), listopad (11) przypisane są do jesieni.
W przypadku wartości innej niż 1-12, instrukcja default wyświetli komunikat 'Nieprawidłowy miesiąc!'.
Wynik działania programu:
Jeśli użytkownik poda wartość 3, program wypisze:
Wiosna
Jeśli użytkownik poda wartość 11, program wypisze:
Jesień
W poniższym przykładzie zmienna znakowa znak przyjmuje wartość znaku wprowadzonego przez użytkownika, reprezentującą opcję menu. Instrukcja switch wyświetla odpowiedni komunikat w zależności od wybranego znaku, który reprezentuje jedną z czterech opcji: 'a', 'b', 'c', 'd'. Wszystkie inne znaki są traktowane jako nieznana opcja.
char znak;
cout << "Wybierz opcję menu (a, b, c, d): ";
cin >> znak;
switch(znak) {
case 'a':
cout << "Wybrałeś opcję A" << endl;
break;
case 'b':
cout << "Wybrałeś opcję B" << endl;
break;
case 'c':
cout << "Wybrałeś opcję C" << endl;
break;
case 'd':
cout << "Wybrałeś opcję D" << endl;
break;
default:
cout << "Nieznana opcja!" << endl;
break;
}
Działanie:
Zmienna znak przyjmuje wartość znaku wprowadzonego przez użytkownika (np. 'a', 'b', 'c', 'd').
W zależności od wartości zmiennej znak, program wyświetla odpowiedni komunikat odpowiadający wybranej opcji.
W przypadku wprowadzenia innego znaku niż 'a', 'b', 'c', 'd', instrukcja default wyświetli komunikat 'Nieznana opcja!'.
Wynik działania programu:
Jeśli użytkownik poda wartość 'b', program wypisze:
Wybrałeś opcję B
Jeśli użytkownik poda wartość 'd', program wypisze:
Wybrałeś opcję D
Napisz program, który wczyta od użytkownika dwie liczby całkowite oraz znak działania (+, -, *, /). Program powinien wykonać odpowiednie działanie matematyczne na podanych liczbach w zależności od wprowadzonego znaku działania. W przypadku podania nieznanego znaku, program powinien wyświetlić odpowiedni komunikat o błędzie.
Kroki do wykonania:
Program wczytuje dwie liczby całkowite oraz znak działania matematycznego od użytkownika.
Na podstawie wprowadzonego znaku działania program wykonuje odpowiednią operację (dodawanie, odejmowanie, mnożenie, dzielenie).
Jeśli zostanie podany nieznany znak działania, program wyświetla komunikat o błędzie.
Po poprawnym wprowadzeniu wartości oblicza wynik i wyświetla go.
Wynik działania programu:
Podaj pierwsza liczbe: 8
Podaj druga liczbe: 2
Podaj znak dzialania (+, -, *, /): *
Wynik: 16
Napisz program, który poprosi użytkownika o wprowadzenie temperatury w stopniach Celsjusza oraz wybór jednostki, do której ma zostać przeliczona (Kelvin, Fahrenheit). Program powinien dokonać odpowiedniego przeliczenia temperatury na podstawie wyboru użytkownika. Użyj instrukcji switch do obsługi dwóch opcji: K dla Kelvina i F dla Fahrenheita. W przypadku podania nieprawidłowej opcji, program powinien wyświetlić odpowiedni komunikat.
Działanie programu:
Program wczytuje temperaturę w stopniach Celsjusza od użytkownika.
Na podstawie wyboru użytkownika (K lub F), program przelicza temperaturę na wybraną jednostkę:
Dla opcji K (Kelvin): temperatura w Kelwinach jest równa temperaturze w Celsjuszach plus 273.15.
Dla opcji F (Fahrenheit): temperatura w Fahrenheitach to wynik działania (Celsjusz * 9/5) + 32.
Jeśli użytkownik wprowadzi inną literę niż K lub F, program wyświetla komunikat o błędzie.
Wynik działania programu:
Podaj temperature w stopniach Celsjusza: 25
Wybierz jednostke docelowa (K - Kelvin, F - Fahrenheit): F
Temperatura w stopniach Fahrenheita: 77
Napisz program, który poprosi użytkownika o wprowadzenie liczby godzin parkowania oraz rodzaju pojazdu. Program powinien wyliczyć opłatę za parkowanie na podstawie liczby godzin i rodzaju pojazdu. Użyj instrukcji switch, aby obsłużyć trzy rodzaje pojazdów: samochód osobowy (S), motocykl (M) oraz autobus (A). Opłaty za parkowanie są naliczane w następujący sposób:
Samochód osobowy: 5 zł za każdą godzinę.
Motocykl: 3 zł za każdą godzinę.
Autobus: 10 zł za każdą godzinę.
Działanie programu:
Program wczytuje liczbę godzin parkowania oraz typ pojazdu od użytkownika.
Na podstawie wprowadzonego typu pojazdu, program wylicza całkowitą opłatę za parkowanie:
Samochód osobowy (S): 5 zł za każdą godzinę.
Motocykl (M): 3 zł za każdą godzinę.
Autobus (A): 10 zł za każdą godzinę.
W przypadku wprowadzenia nieznanego typu pojazdu, program powinien wyświetlić odpowiedni komunikat.
Wynik działania programu:
Podaj liczbe godzin parkowania: 4
Podaj rodzaj pojazdu (S - samochod, M - motocykl, A - autobus): S
Oplata za parkowanie: 20 zl