Instrukcja warunkowa w języku C++
Wprowadzenie Przeczytaj
Prezentacja mul medialna Sprawdź się
Dla nauczyciela
Jedną z najważniejszych własności współczesnych komputerów jest możliwość wykonywania różnych czynności w zależności od postawionego warunku.
Wyobraźmy sobie sytuację, w której chcemy skalkulować koszt biletów lotniczych. W wielu wypadkach podawana jest cena podstawowa biletu, a następnie naliczane są dodatkowe opłaty, m.in. za bagaż czy ubezpieczenie. Jak zatem napisać program, który poda nam koszt zakupu kilku biletów?
Twoje cele
Poznasz składnię instrukcji warunkowej w języku C++.
Dowiesz się, jak zapisać warunki wielokrotnie złożone.
Wykorzystasz instrukcję warunkową do rozwiązywania prostych problemów.
Instrukcja warunkowa w języku C++
Źródło: Javier Allegue Barros, licencja: CC 0.Przeczytaj
Instrukcje warunkowe mają różne postacie. Wyobraźmy sobie taką sytuację: bilet lotniczy kosztuje 210 zł – osoby, które chcą przewieźć bagaż cięższy niż 5 kg, muszą do ceny podstawowej dopłacić 80 zł.
Kryterium to jest warunkiem i można zapisać go takim zdaniem: jeśli osoba podróżuje z bagażem cięższym niż 5 kg, to cena biletu wzrasta o 80 zł. Moglibyśmy zatem zapisać ten warunek za pomocą pseudokodu:
jeśli waga_bagażu > 5 to do_zaplaty = cena + 80
W języku C++ powyższy pseudokod zapiszemy:
if (waga_bagazu > 5) { do_zaplaty = cena + 80;
}
Zapis ten oznacza, że jeśli wartość zmiennej waga_bagazu jest większa niż 5, to do wartości zmiennej cena dodamy 80.
Definiowanie warunków
Warunek może przyjąć dwie wartości logiczne: prawda (true) lub fałsz (false). Często oznaczane także 1 (prawda) i 0 (fałsz).
Operacje zawarte w instrukcji warunkowej wykonają się tylko wtedy, kiedy postawiony warunek przyjmie wartość true.
Jedną z podstawowych operacji wykorzystywanych do tworzenia warunków, podobnie jak w przypadku naszego programu obliczającego cenę, jest operacja porównania. W zależności od wyniku działania zwracana jest odpowiednia wartość logiczna, np.
int x = 5;
std::cout << (x == 5) << std::endl; // wyświetli 1 (true) std::cout << (x != 5) << std::endl; // wyświetli 0 (false) std::cout << (x == 7) << std::endl; // wyświetli 0 (false) std::cout << (x > 2) << std::endl; // wyświetli 1 (true) std::cout << (x < 5) << std::endl; // wyświetli 0 (false) std::cout << (x <= 5) << std::endl; // wyświetli 1 (true) std::cout << (x >= 5) << std::endl; // wyświetli 1 (true)
Ważne!
Do przypisania wartości do zmiennej używa się operatora =, natomiast do porównania ze sobą dwóch elementów służą operatory relacyjne. Podwójny znak równości == wskaże, czy dwa elementy są sobie równe. Operator „różne od” zapisujemy jako !=. Do silnych nierówności wykorzystamy > i <,
natomiast do słabych >= i <=.
Warunki złożone
Choć warunki można zagnieżdżać, to istnieją metody, które ułatwiają zapisywanie złożonych warunków.
Załóżmy, że chcemy rozwinąć przykład z zakupem biletu i dopłatami. Pasażerowie mogą dodatkowo ubezpieczyć swój bagaż za 50 zł, ale jeśli dopłacają już za nadbagaż, to ubezpieczenie kosztuje tylko 35 zł.
Osoby podróżujące klasą biznesową w cenie biletu mają już ubezpieczenie i opłatę za nadbagaż.
Korzystając z samej instrukcji warunkowej, musielibyśmy stworzyć szereg warunków:
do_zaplaty = cena;
if (klasa_biznes == false) { if (waga_bagazu > 5) { do_zaplaty = cena + 80;
}
if (ubezpieczenie == true) { do_zaplaty += 50;
if (waga_bagazu > 5) { do_zaplaty -= 15;
} }
}
W języku C++ mamy do dyspozycji zestaw trzech operatorów logicznych.
Koniunkcję wyrażamy za pomocą operatora &&. Zwróci on wartość true wtedy i tylko wtedy, gdy wszystkie argumenty mają wartość true.
Operator || reprezentuje alternatywę. Zwróci on wartość true, gdy przynajmniej jeden argument ma wartość true.
Istnieje również jednoargumentowy operator negacji !. Zwróci on wartość true dla argumentu o wartości false i false dla argumentu o wartości true.
bool t = true;
bool f = false;
bool wynik;
wynik = t && t; // wynik = true wynik = t && f; // wynik = false wynik = f && t; // wynik = false wynik = f && f; // wynik = false wynik = t || t; // wynik = true wynik = t || f; // wynik = true wynik = f || t; // wynik = true wynik = f || f; // wynik = false wynik = !t; // wynik = false wynik = !f; // wynik = true
Wykorzystując operatory logiczne, możemy znacznie uprościć kod obliczający cenę biletu:
do_zaplaty = cena;
if (klasa_biznes == false && waga_bagazu > 5) { do_zaplaty = cena + 80;
}
if (klasa_biznes == false && ubezpieczenie == true) { do_zaplaty += 50;
if (waga_bagazu > 5) { do_zaplaty -= 15;
} }
Język C++ ma również dwie dodatkowe instrukcje: else oraz else if. Pierwsza pozwala wykonać alternatywny blok kodu, kiedy kryterium instrukcji warunkowej nie zostanie spełnione. Druga jest połączeniem obu wspomnianych instrukcji, a więc wykona blok kodu, jeśli instrukcja warunkowa nie zostanie spełniona, ale jeśli zostanie spełniony nowy warunek. Możemy zatem jeszcze raz zmodyfikować nasz program:
if (klasa_biznes == false && ubezpieczenie == true && waga_bagazu > 5) { do_zaplaty = cena + 115;
} else if (klasa_biznes == false && waga_bagazu > 5) { do_zaplaty = cena + 80;
} else if (klasa_biznes == false && ubezpieczenie == true) { do_zaplaty = cena + 50;
} else {
do_zaplaty = cena;
}
Ważne!
Koniunkcja i alternatywa mają niższy priorytet od operatorów relacyjnych. Oznacza to, że najpierw wykonane zostanie porównanie wartości ze sobą, a dopiero potem operacja logiczna. Dlatego nie musimy dodawać nawiasów, aby kontrolować kolejność działań.
Słownik
zagnieżdżenie
umieszczenie jednej operacji wewnątrz drugiej operator logiczny
operator pozwalający na wykonywanie podstawowych operacji algebry Boole'a, takich jak koniunkcja, alternatywa czy negacja
Prezentacja mul medialna
Polecenie 1
Przeanalizuj prezentację, a następnie przedstaw wynik działania tego warunku, używając danych o dowolnej osobie z twojego otoczenia. Doprowadź wszystkie działania obok instrukcji if, else if oraz else do momentu, w którym będą one miały wartość true lub false.
Sprawdź się
Ćwiczenie 1 Ćwiczenie 2 Ćwiczenie 3
Dla nauczyciela
Autor: Zespół Gromar.eu Przedmiot: informatyka
Temat: Instrukcja warunkowa w języku C++.
Grupa docelowa: III etap edukacyjny, liceum, technikum Podstawa programowa:
zakres podstawowy
I. Rozumienie, analizowanie i rozwiązywanie problemów. Uczeń:
2) stosuje przy rozwiązywaniu problemów z różnych dziedzin algorytmy poznane w szkole podstawowej oraz algorytmy:
a) na liczbach: badania pierwszości liczby, zamiany reprezentacji liczb między pozycyjnymi systemami liczbowymi, działań na ułamkach z wykorzystaniem NWD i NWW.
II. Programowanie i rozwiązywanie problemów z wykorzystaniem komputera i innych urządzeń cyfrowych. Uczeń:
1) projektuje i programuje rozwiązania problemów z różnych dziedzin, stosuje przy tym: instrukcje wejścia/wyjścia, wyrażenia arytmetyczne i logiczne, instrukcje warunkowe, instrukcje iteracyjne, funkcje z parametrami i bez parametrów, testuje poprawność programów dla różnych danych; w szczególności programuje algorytmy z punktu I.2).
Kształtowane kompetencje kluczowe:
kompetencje w zakresie rozumienia i tworzenia informacji;
kompetencje w zakresie wielojęzyczności;
kompetencje matematyczne oraz kompetencje w zakresie nauk przyrodniczych, technologii i inżynierii;
kompetencje cyfrowe.
Cele operacyjne:
Uczeń:
poznaje składnię instrukcji warunkowej w języku C++;
wykorzystuje instrukcję warunkową do rozwiązywania prostych problemów;
potrafi zapisać warunki wielokrotnie złożone.
Strategie nauczania:
konstruktywizm.
Metody i techniki nauczania:
rozmowa kierowana;
dyskusja;
burza mózgów;
mapa skojarzeń;
analiza kodu;
programowanie.
Formy pracy:
praca indywidualna;
praca w parach;
praca całego zespołu klasowego.
Środki dydaktyczne:
komputery z głośnikami i dostępem do internetu, słuchawki;
zasoby multimedialne zawarte w e‑materiale;
środowisko programistyczne C++;
tablica interaktywna/tablica, pisak/kreda.
Przebieg zajęć:
Faza wstępna
1. Nauczyciel podaje temat i cele zajęć oraz wspólnie z uczniami ustala kryteria sukcesu.
2. Burza mózgów. Uczniowie odpowiadają na pytania: „Co to jest instrukcja warunkowa? W jakich językach programowania występuje?”. Zapisują swoje propozycje w formie mapy skojarzeń. Po fazie twórczej następuje weryfikacja pomysłów i sformułowanie wniosków.
Faza realizacyjna
1. Praca w parach. Uczniowie zapoznają się z informacjami na temat definiowania warunków. Następnie chętne/wybrane pary przedstawiają wnioski na forum klasy. Pozostali weryfikują i w miarę potrzeby uzupełniają wypowiedzi kolegów i koleżanek.
2. Podczas rozmowy kierowanej uczniowie omawiają warunki złożone i działanie operatorów logicznych.
Dyskusja i przedstawienie wniosków.
3. Praca z multimedium bazowym – prezentacja przedstawia analizę działania warunku złożonego.
Uczniowie powinni zwrócić szczególną uwagę na to, które warunki są spełnione oraz jaka jest kolejność ich weryfikowania. Następnie wykonują polecenie.
4. Uczniowie piszą algorytmy, które są od razu sprawdzane.
Faza podsumowująca
1. Wybrani uczniowie podsumowują zajęcia, zwracając uwagę na nabyte umiejętności. W razie konieczności nauczyciel zadaje pytania pomocnicze, np.
W jakich sytuacjach instrukcja warunkowa nie jest potrzebna?
W jakich sytuacjach instrukcja warunkowa jest konieczna?
W jakiej sytuacji kolejność występowania warunków ma znaczenie?
2. Nauczyciel omawia przebieg zajęć, wskazuje mocne i słabe strony pracy uczniów, udzielając im tym samym informacji zwrotnej.
Materiały pomocnicze:
Dokumentacja dla C++.
Wskazówki metodyczne opisujące różne zastosowania multimedium:
Prezentację multimedialną można wykorzystać w nauczaniu wyprzedzającym. Uczniowie przed lekcją przygotowują indywidualnie lub w grupach narrację i prezentują ją podczas zajęć.