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.
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ćzagnieżdżeniezagnieżdżać, to istnieją metody, które ułatwiają zapisywanie złożonych warunków.
Warunki zagnieżdżone:
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 3. using namespace std średnik.
Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły.
Linia 6. otwórz nawias klamrowy.
Linia 7. int x znak równości 5 średnik.
Linia 9. if otwórz nawias okrągły x otwórz nawias ostrokątny 10 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 10. if otwórz nawias okrągły x zamknij nawias ostrokątny 3 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 11. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Liczba jest większa niż 3 i mniejsza niż 10 cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik.
Linia 12. zamknij nawias klamrowy.
Linia 13. zamknij nawias klamrowy.
Linia 14. zamknij nawias klamrowy.
#include <iostream>
using namespace std;
int main()
{
int x = 5;
if (x < 10) {
if (x > 3) {
std::cout << "Liczba jest większa niż 3 i mniejsza niż 10" << std::endl;
}
}
}
W języku C++ mamy do dyspozycji zestaw trzech operatorów logicznychoperator logicznyoperatoró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.
Linia 1. bool t znak równości true średnik.
Linia 2. bool f znak równości false średnik.
Linia 3. bool wynik średnik.
Linia 5. wynik znak równości t ampersant ampersant t średnik prawy ukośnik prawy ukośnik wynik znak równości true.
Linia 6. wynik znak równości t ampersant ampersant f średnik prawy ukośnik prawy ukośnik wynik znak równości false.
Linia 7. wynik znak równości f ampersant ampersant t średnik prawy ukośnik prawy ukośnik wynik znak równości false.
Linia 8. wynik znak równości f ampersant ampersant f średnik prawy ukośnik prawy ukośnik wynik znak równości false.
Linia 10. wynik znak równości t kreska pionowa kreska pionowa t średnik prawy ukośnik prawy ukośnik wynik znak równości true.
Linia 11. wynik znak równości t kreska pionowa kreska pionowa f średnik prawy ukośnik prawy ukośnik wynik znak równości true.
Linia 12. wynik znak równości f kreska pionowa kreska pionowa t średnik prawy ukośnik prawy ukośnik wynik znak równości true.
Linia 13. wynik znak równości f kreska pionowa kreska pionowa f średnik prawy ukośnik prawy ukośnik wynik znak równości false.
Linia 15. wynik znak równości wykrzyknik t średnik prawy ukośnik prawy ukośnik wynik znak równości false.
Linia 16. wynik znak równości wykrzyknik f średnik prawy ukośnik prawy ukośnik wynik znak równoś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
Warunki połączone operatorami:
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 3. using namespace std średnik.
Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły.
Linia 6. otwórz nawias klamrowy.
Linia 7. int x znak równości 5 średnik.
Linia 9. if otwórz nawias okrągły x otwórz nawias ostrokątny 10 ampersant ampersant x zamknij nawias ostrokątny 3 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 10. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Liczba jest większa niż 3 i mniejsza niż 10 cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik.
Linia 11. zamknij nawias klamrowy.
Linia 12. zamknij nawias klamrowy.
#include <iostream>
using namespace std;
int main()
{
int x = 5;
if (x < 10 && x > 3) {
std::cout << "Liczba jest większa niż 3 i mniejsza niż 10" << std::endl;
}
}
Instrukcja else oraz else if
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.
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 3. using namespace std średnik.
Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły.
Linia 6. otwórz nawias klamrowy.
Linia 7. int x znak równości 11 średnik.
Linia 9. if otwórz nawias okrągły x otwórz nawias ostrokątny 10 ampersant ampersant x zamknij nawias ostrokątny 3 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 10. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Liczba jest większa niż 3 i mniejsza niż 10 cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik.
Linia 11. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 12. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Liczba jest mniejsza lub równa 3 lub większa lub równa 10 cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik.
Linia 13. zamknij nawias klamrowy.
Linia 14. zamknij nawias klamrowy.
#include <iostream>
using namespace std;
int main()
{
int x = 11;
if (x < 10 && x > 3) {
std::cout << "Liczba jest większa niż 3 i mniejsza niż 10" << std::endl;
} else {
std::cout << "Liczba jest mniejsza lub równa 3 lub większa lub równa 10" << std::endl;
}
}
Przykładowy problem
Przyjrzyjmy się bardziej rozbudowanemu przykładowi. Wyobraźmy sobie taką sytuację: pewna uczelnia prowadzi roczne kursy przygotowawcze dla przyszłych studentów. Nie są one obowiązkowe, jednak w rekrutacji dają pewną przewagę nad osobami, które w nich nie uczestniczyły. Uczelnia oblicza punkty rekrutacyjne w taki sposób, że wynik egzaminu maturalnego na poziomie rozszerzonym mnoży przez 3, a podstawowym przez 2. Finaliści olimpiad zdobywają dodatkowe 100 punktów, a laureaci 150.
Osoby uczestniczące w kursie niezależnie uczestnictwa w olimpiadach oraz od poziomu, na jakim zdają egzamin maturalny ze wskazanego przedmiotu, mnożą jego wynik przez 3 oraz otrzymują dodatkowo 150 punktów.
Korzystając z samej instrukcji warunkowej, musielibyśmy stworzyć szereg warunków:
Linia 1. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 2. wynik znak równości punkty średnik.
Linia 4. if otwórz nawias okrągły kurs znak równości znak równości false zamknij nawias okrągły otwórz nawias klamrowy.
Linia 5. if otwórz nawias okrągły rozszerzenie znak równości znak równości true zamknij nawias okrągły otwórz nawias klamrowy.
Linia 6. wynik znak równości punkty asterysk 3 średnik.
Linia 7. zamknij nawias klamrowy.
Linia 9. if otwórz nawias okrągły rozszerzenie znak równości znak równości false zamknij nawias okrągły otwórz nawias klamrowy.
Linia 10. wynik znak równości punkty asterysk 2 średnik.
Linia 11. zamknij nawias klamrowy.
Linia 13. if otwórz nawias okrągły olimpiada znak równości znak równości true zamknij nawias okrągły otwórz nawias klamrowy.
Linia 14. wynik plus znak równości 100 średnik.
Linia 16. if otwórz nawias okrągły olimpiadaLaureat znak równości znak równości true zamknij nawias okrągły otwórz nawias klamrowy.
Linia 17. wynik plus znak równości 50 średnik.
Linia 18. zamknij nawias klamrowy.
Linia 19. zamknij nawias klamrowy.
Linia 20. zamknij nawias klamrowy.
Linia 22. if otwórz nawias okrągły kurs znak równości znak równości true zamknij nawias okrągły otwórz nawias klamrowy.
Linia 23. wynik znak równości punkty asterysk 3 plus 150 średnik.
Linia 24. zamknij nawias klamrowy.
Linia 25. zamknij nawias klamrowy.
int main() {
wynik = punkty;
if (kurs == false) {
if (rozszerzenie == true) {
wynik = punkty * 3;
}
if (rozszerzenie == false) {
wynik = punkty * 2;
}
if (olimpiada == true) {
wynik += 100;
if (olimpiadaLaureat == true) {
wynik += 50;
}
}
}
if (kurs == true) {
wynik = punkty * 3 + 150;
}
}
Wykorzystując operatory logiczne, możemy znacznie uprościć kod obliczający wynik rekrutacji:
Linia 1. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 2. wynik znak równości punkty średnik.
Linia 4. if otwórz nawias okrągły kurs znak równości znak równości false ampersant ampersant rozszerzenie znak równości znak równości true zamknij nawias okrągły otwórz nawias klamrowy.
Linia 5. wynik znak równości punkty asterysk 3 średnik.
Linia 6. zamknij nawias klamrowy.
Linia 8. if otwórz nawias okrągły kurs znak równości znak równości false ampersant ampersant rozszerzenie znak równości znak równości false zamknij nawias okrągły otwórz nawias klamrowy.
Linia 9. wynik znak równości punkty asterysk 3 średnik.
Linia 10. zamknij nawias klamrowy.
Linia 12. if otwórz nawias okrągły kurs znak równości znak równości false ampersant ampersant olimpiada znak równości znak równości true ampersant ampersant olimpiadaLaureat znak równości znak równości false zamknij nawias okrągły otwórz nawias klamrowy.
Linia 13. wynik plus znak równości 100 średnik.
Linia 14. zamknij nawias klamrowy.
Linia 16. if otwórz nawias okrągły kurs znak równości znak równości false ampersant ampersant olimpiada znak równości znak równości true ampersant ampersant olimpiadaLaureat znak równości znak równości true zamknij nawias okrągły otwórz nawias klamrowy.
Linia 17. wynik plus znak równości 150 średnik.
Linia 18. zamknij nawias klamrowy.
Linia 20. if otwórz nawias okrągły kurs znak równości znak równości true zamknij nawias okrągły otwórz nawias klamrowy.
Linia 21. wynik znak równości punkty asterysk 3 plus 150 średnik.
Linia 22. zamknij nawias klamrowy.
Linia 23. zamknij nawias klamrowy.
int main() {
wynik = punkty;
if (kurs == false && rozszerzenie == true) {
wynik = punkty * 3;
}
if (kurs == false && rozszerzenie == false) {
wynik = punkty * 3;
}
if (kurs == false && olimpiada == true && olimpiadaLaureat == false) {
wynik += 100;
}
if (kurs == false && olimpiada == true && olimpiadaLaureat == true) {
wynik += 150;
}
if (kurs == true) {
wynik = punkty * 3 + 150;
}
}
Wykorzystując instrukcje else oraz else if, otrzymamy taki kod:
Linia 1. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 2. wynik znak równości punkty średnik.
Linia 4. if otwórz nawias okrągły kurs znak równości znak równości false ampersant ampersant rozszerzenie znak równości znak równości false ampersant ampersant olimpiada znak równości znak równości true zamknij nawias okrągły otwórz nawias klamrowy.
Linia 5. wynik znak równości punkty asterysk 2 plus 100 średnik.
Linia 6. if otwórz nawias okrągły olimpiadaLaureat znak równości znak równości true zamknij nawias okrągły otwórz nawias klamrowy.
Linia 7. wynik plus znak równości 50 średnik.
Linia 8. zamknij nawias klamrowy.
Linia 9. zamknij nawias klamrowy else if otwórz nawias okrągły kurs znak równości znak równości false ampersant ampersant rozszerzenie znak równości znak równości false ampersant ampersant olimpiada znak równości znak równości false zamknij nawias okrągły otwórz nawias klamrowy.
Linia 10. wynik znak równości punkty asterysk 2 średnik.
Linia 11. zamknij nawias klamrowy else if otwórz nawias okrągły kurs znak równości znak równości false ampersant ampersant rozszerzenie znak równości znak równości true ampersant ampersant olimpiada znak równości znak równości true zamknij nawias okrągły otwórz nawias klamrowy.
Linia 12. wynik znak równości punkty asterysk 3 plus 100 średnik.
Linia 13. if otwórz nawias okrągły olimpiadaLaureat znak równości znak równości true zamknij nawias okrągły otwórz nawias klamrowy.
Linia 14. wynik plus znak równości 50 średnik.
Linia 15. zamknij nawias klamrowy.
Linia 16. zamknij nawias klamrowy else if otwórz nawias okrągły kurs znak równości znak równości false ampersant ampersant rozszerzenie znak równości znak równości true ampersant ampersant olimpiada znak równości znak równości false zamknij nawias okrągły otwórz nawias klamrowy.
Linia 17. wynik znak równości punkty asterysk 3 średnik.
Linia 18. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 19. wynik znak równości punkty asterysk 3 plus 150 średnik.
Linia 20. zamknij nawias klamrowy.
Linia 21. zamknij nawias klamrowy.
int main() {
wynik = punkty;
if (kurs == false && rozszerzenie == false && olimpiada == true) {
wynik = punkty * 2 + 100;
if (olimpiadaLaureat == true) {
wynik += 50;
}
} else if (kurs == false && rozszerzenie == false && olimpiada == false) {
wynik = punkty * 2;
} else if (kurs == false && rozszerzenie == true && olimpiada == true) {
wynik = punkty * 3 + 100;
if (olimpiadaLaureat == true) {
wynik += 50;
}
} else if (kurs == false && rozszerzenie == true && olimpiada == false) {
wynik = punkty * 3;
} else {
wynik = punkty * 3 + 150;
}
}
Słownik
operator logiczny
operator logiczny
operator pozwalający na wykonywanie podstawowych operacji algebry Boole'a, takich jak koniunkcja, alternatywa czy negacja