Kurs: Kurs wstępu do programowania KONKURS

Lekcja: Instrukcja warunkowa if

Część programistyczna: Instrukcja warunkowa if

Jak dotychczas programy, które pisaliśmy, wypisywały jedynie proste komunikaty lub działały jak kalkulator: pozwalały obliczać wyniki prostych działań. Wprowadzimy teraz instrukcję warunkową, która pozwoli programowi podejmować decyzję o tym, jakąś czynność wykonać, w zależności od tego, czy dany warunek jest spełniony, czy nie.


Zobacz tekst nagrania

Warunki w instrukcji if

Zobacz tekst nagrania

Instrukcje złożone

W ramach instrukcji if mogą występować także tzw. instrukcje złożone, czyli składające się z kilku pojedynczych instrukcji. Wśród tych pojedynczych instrukcji mogą występować np. wczytywania, wypisywania, kolejne instrukcje warunkowe if, a także instrukcje, które poznamy w kolejnych lekcjach. Instrukcję złożoną otacza się nawiasami klamrowymi { } i może ona występować w dowolnym bloku if czy w bloku else (może też być w kilku z nich - nie ma tu ograniczeń). W najprostszej postaci wygląda to tak:

if (warunek1) {
    instrukcja1;
    instrukcja2;
    ...
    instrukcja7;
} else
    instrukcja8;

Uwaga: Niektórzy programiści piszą obie klamry w instrukcji złożonej na tej samej wysokości w kodzie źródłowym, żeby zachować pewną symetrię:

if (warunek1)
{
    instrukcja1;
    instrukcja2;
    ...
    instrukcja7;
} else
    instrukcja8;
Przypomnijmy jednak ponownie, że dla kompilatora nie ma to zupełnie znaczenia, jak podzielimy nasz kod na wiersze.

Przykłady zastosowania instrukcji złożonych będziemy przedstawiać w kolejnych lekcjach.

Komentarz: Dziedzina algorytmiczna

W pierwszej lekcji wspomnieliśmy postać Al-Chwarizmiego, od nazwiska którego pochodzi słowo algorytm. Al-Chwarizmi zajmował się między innymi metodami (algorytmami) rozwiązywania równań kwadratowych. Równanie kwadratowe to równanie postaci:

\((\star)\quad ax^2 + bx + c = 0\),

gdzie \(a\), \(b\), \(c\) to liczby rzeczywiste, przy czym liczba \(a\) musi być różna od zera. W zależności od wartości \(a\), \(b\) i \(c\) równanie \((\star)\) może mieć różne rozwiązania. Dla przykładu, jeśli \(a = 1\), \(b = 0\) i \(c = 0\), to równanie przyjmuje postać \(x^2 = 0\) i posiada dokładnie jedno rozwiązanie \(x = 0\). Jeśli teraz weźmiemy \(a = 1\), \(b = 0\) i \(c = 1\), to otrzymamy równanie postaci \(x^2 + 1 = 0\), które jest równoważne równaniu \(x^2 = -1\). Takie równanie nie ma rozwiązania w liczbach rzeczywistych, ponieważ kwadrat każdej liczby rzeczywistej jest nieujemny. Rozważmy jeszcze przypadek, w którym \(a = 1\), \(b = 3\) i \(c = -4\). W tym przypadku możemy łatwo sprawdzić, że rozwiązaniem równania \((\star)\) są liczby \(-4\) i \(1\). Naszym celem będzie teraz znalezienie ogólnej metody (algorytmu) wyznaczania rozwiązania równania kwadratowego, która mogłaby być realizowana automatycznie, np. z użyciem komputera.


Zobacz tekst nagrania

W językach programowania odpowiednikami dziedzin algorytmicznych są typy danych. I tak, typy całkowite w C++ zostały już omówione w poprzedniej lekcji. W C++ są trzy typy rzeczywiste: float, double i long double. Jest też dostępna operacja obliczania pierwiastka kwadratowego z liczby: sqrt. Więcej o typach rzeczywistych powiemy w lekcji 8.

Część techniczna: Błędne odpowiedzi cz. 1

Tym razem zastanowimy się nad tym, co robić, kiedy napisany przez nas program nie działa poprawnie. Chodzi o to, że nasz program kompiluje się, ale gdy uruchamiamy go na jakimś teście, otrzymujemy wynik niezgodny z oczekiwaniami. Najprostszą rzeczą, jaką możemy wtedy zrobić, jest przeczytanie programu dokładnie, wiersz po wierszu. Warto zwrócić szczególną uwagę na instrukcje, których znaczenia nie jesteśmy pewni, potencjalnie jeszcze raz o nich przeczytać lub posłuchać.

Gorszą sytuacją jest, gdy nasz program nie działa i nie wiemy, dla jakich danych się to dzieje. Ma to miejsce np. wówczas, gdy wysyłamy program do systemu MAIN 2 i dostajemy informację, że program dał błędną odpowiedź, ale nie widzimy konkretnych danych testowych. Warto na początku upewnić się, czy program wypisuje dane dokładnie tak, jak to zostało opisane w treści zadania. Np. jeśli program ma wypisać jakieś liczby w jednym wierszu, nie mogą one być umieszczone w różnych wierszach. Nie są też tolerowane żadne dodatkowe komunikaty na wyjściu. Jedyne dopuszczalne odstępstwo to dodatkowe spacje na samym końcu wiersza lub dodatkowe puste wiersze na końcu wyjścia.

Jeśli upewniliśmy się, że nie popełniliśmy żadnego z tych podstawowych błędów, musimy znaleźć jakieś inne wyjście z sytuacji. Jak opisaliśmy wyżej, warto przeczytać kod źródłowy programu - a nuż uda nam się w tej sposób wychwycić usterkę. Jeśli nie, powinniśmy spróbować znaleźć jakieś dane testowe, dla których program nie działa poprawnie. Możemy spróbować wpisać jakieś dane do programu i mieć nadzieję, że akurat uda się wychwycić usterkę. Dużo pewniejszą drogą jest próba systematycznego przejrzenia różnych typów danych wejściowych (zazwyczaj nie da się sprawdzić wszystkich możliwych danych wejściowych, gdyż jest ich zbyt dużo).

Prześledźmy to na przykładzie.


Zobacz tekst nagrania

Zadania

W tej lekcji mamy dla Ciebie do rozwiązania cztery zadania dotyczące instrukcji warunkowej if.
Zadania przypisane do tej lekcji:
1. Maksimum
2. Ćwiartka
3. Trójkąt
4. Stół (*)