Lekcja 5. Instrukcje warunkowe (if, else, switch)
PodstawowyPo co się tego uczymy?
Program, który zawsze robi dokładnie to samo niezależnie od danych wejściowych, jest mało użyteczny — instrukcje warunkowe to pierwszy krok w stronę programu, który REAGUJE na różne sytuacje, tak jak zrobi to każda prawdziwa aplikacja, którą zbudujesz w tym kursie.
Teoria
Instrukcje warunkowe pozwalają programowi podejmować DECYZJE — wykonać różny kod w zależności od tego, czy jakiś warunek jest prawdziwy.
if — wykonuje blok kodu TYLKO jeśli warunek jest prawdziwy:
if (wiek >= 18) { ... }
if-else — jedna z dwóch ścieżek, zawsze któraś się wykona:
if (warunek) { ... } else { ... }
if-else if-else — łańcuch wielu warunków sprawdzanych po kolei, pierwszy prawdziwy "wygrywa":
if (ocena >= 5) { ... } else if (ocena >= 3) { ... } else { ... }
switch — czytelniejsza alternatywa dla długiego łańcucha if-else if, gdy porównujesz JEDNĄ zmienną z wieloma konkretnymi wartościami:
switch (dzien) { case 1: ...; break; case 2: ...; break; default: ...; break; }
Słowo kluczowe break jest konieczne na końcu każdego case — bez niego wykonanie "przeleci" do kolejnego przypadku (tzw. fall-through), co w C# w większości przypadków jest błędem kompilacji, jeśli case nie jest pusty.
Schemat
if (warunek)
│
├── TAK → wykonaj blok "if"
│
└── NIE → sprawdź "else if" (jeśli jest) → w końcu "else"
switch (zmienna)
│
├── case A: → wykonaj, potem break
├── case B: → wykonaj, potem break
└── default: → gdy żaden case nie pasuje
Przykład z życia
Każdy system logowania sprawdza warunkiem if, czy podane hasło zgadza się z zapisanym — to dokładnie ta sama instrukcja, tylko zastosowana do prawdziwego, ważnego problemu.
Kod (C#)
using System;
class Program
{
static void Main()
{
int ocena = 4;
if (ocena >= 5)
{
Console.WriteLine("Bardzo dobrze!");
}
else if (ocena >= 3)
{
Console.WriteLine("Wystarczająco.");
}
else
{
Console.WriteLine("Musisz to powtórzyć.");
}
int dzienTygodnia = 3;
switch (dzienTygodnia)
{
case 1:
Console.WriteLine("Poniedziałek");
break;
case 2:
Console.WriteLine("Wtorek");
break;
case 3:
Console.WriteLine("Środa");
break;
default:
Console.WriteLine("Inny dzień");
break;
}
}
}
Komentarz i wyjaśnienie kodu
Warunki w łańcuchu if-else if-else są sprawdzane PO KOLEI, od góry — gdy pierwszy pasujący warunek zostanie znaleziony, reszta łańcucha jest pomijana. Dlatego kolejność warunków ma znaczenie: ocena >= 5 musi być sprawdzone PRZED ocena >= 3, inaczej ocena 5 też "wpadłaby" w drugi warunek.
Ćwiczenie samodzielne
Napisz program sprawdzający instrukcją if-else, czy podana na sztywno liczba jest dodatnia, ujemna czy równa zero.
Plac zabaw — wypróbuj online
Poniższy kod wykonuje się od razu w Twojej przeglądarce — nic nie trzeba instalować. Zmień kod i kliknij „Uruchom”.
Zadania do pracy własnej
Napisz program klasyfikujący wiek osoby (na sztywno wpisany) na: dziecko (do 12 lat), nastolatek (13-17), dorosły (18+).
Napisz program używający
switchdo wypisania nazwy miesiąca na podstawie jego numeru (1-12).Napisz program klasyfikujący trójkąt na podstawie długości trzech boków (wpisanych na sztywno): czy w ogóle może istnieć (suma dwóch boków musi być większa od trzeciego), a jeśli tak — czy jest równoboczny, równoramienny czy różnoboczny.
Typowe błędy
Częsty błąd to zapomnienie break w instrukcji switch — C# w większości przypadków zgłosi błąd kompilacji, co jest akurat pomocne (w przeciwieństwie do niektórych innych języków, które po cichu "przelecą" dalej). Drugi błąd: używanie wielu niezależnych if zamiast else if tam, gdzie warunki się wykluczają — działa, ale program niepotrzebnie sprawdza wszystkie warunki, nawet gdy pierwszy już był prawdziwy.
Nawiązanie do egzaminu zawodowego
To realizacja efektu INF.04.4.4 ("stosuje wyrażenia, instrukcje i biblioteki") w zakresie instrukcji warunkowej i instrukcji wyboru — jeden z najbardziej podstawowych elementów programowania strukturalnego wymaganego w całym INF.04.