Instrukcje warunkowe i skoku. Spotkanie 2 Dr inż. Dariusz JĘDRZEJCZYK Wyrażenia i operatory logiczne Instrukcje warunkowe: if else, switch Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Operatory matematyczne - są te znaki, które wykonują jakieś działanie matematyczne. W C++ są to: + - dodawanie dwóch liczb (zmiennych), - - odejmowanie dwóch liczb (zmiennych), * - mnożenie dwóch liczb (zmiennych), / - dzielenie dwóch liczb (zmiennych), % - reszta z dzielenia liczb całkowitych (zmiennych). 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 3 1
Kolejność wykonywania działań jest taka sama jaka obowiązuje w matematyce: operacja mnożenia i dzielenia, operacja dodawania i odejmowania. Jeśli chcemy zmienić kolejność wykonywania operacji, należy wykorzystać nawiasy zaokrąglone. 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 4 Operatory mogą być prawostronnie lub lewostronnie łączne: Lewostronne - oznacza to, że działa na argumencie stojącym po jego prawej stronie!x Lewostronna łączność operatora + oznacza, że wyrażenie: a + b + c + d + e ((((a + b) + c ) + d) + e) Prawostronna łączność operatora dwuargumentowego = oznacza, że wyrażenie: a = b = c = d = e (a = (b = (c = ( d = e)))) 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 5 Wykonując różne operacje matematyczne, najgroźniejszą operacją dla naszego programu jest dzielenie. Może ona bowiem spowodować zamknięcie krytyczne aplikacji. Należy zwrócić uwagę na: dzielenie przez 0 (zero), dzielenie przez liczbę całkowitą powoduję, że wynik dzielenia jest również liczbą całkowitą, obliczanie reszty z dzielenia spowoduje błąd w przypadku, gdy wartość po znaku % będzie równa 0 (zero). 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 6 2
Dodawanie: x = x + y; x += y; Odejmowanie: x = x - y; x -= y; Mnożenie: x = x * y; x *= y; Dzielenie: x = x / y; x /= y; Reszta z dzielenia: x = x % y; x %= y; 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 7 Inkrementacja - zwiększenie wartości zmiennej o jeden zmienna += 1; // zmienna = zmienna + 1; Dekrementacja - zmniejszenie wartości zmiennej o jeden zmienna -= 1; // zmienna = zmienna - 1; Ponadto można wyróżnic: Preinkrementacja: ++zmienna; zmienna += 1; Postinkrementacja: zmienna++; zmienna += 1; Predekrementacja: --zmienna; zmienna -= 1; Postdekrementacja: zmienna--; zmienna -= 1; 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 8 wyrażenia logiczne - sprawdzanie czy wartość wyrażenia jest prawdą czy fałszem. x > 0 zmienne logiczne bool - sprawdzanie operacji logicznych i zapamiętywanie w obiekcie typu bool. int x; bool niepelnoletnosc; niepelnoletnosc = ( x<18 ); zmienne logiczne int fałsz - w przypadku zmiennej int równej 0, prawda - w przypadku zmiennej int różnej od 0. 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 9 3
Są to wszystkie spójniki klasycznego rachunku zdań. W przypadku języka C++ są to i, lub oraz negacja. && (i) - iloczyn logiczny - wszystkie wartości muszą być prawdziwe, aby została zwrócona prawda. (lub) - suma logiczna - co najmniej jedna z wartości musi być prawdziwa, aby została zwrócona prawda.! (negacja) - zanegowanie wartości - czyli zwrócenie wartości przeciwnej. 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 10 Kolejność wykonywania działań jest następująca: operator negacji, operacje iloczynu logicznego, operacje sumy logicznej. Kolejnością wykonywania operacji można jednak manipulować poprzez zaokrąglone nawiasy - tak samo jak ma to miejsce w przypadku działań arytmetycznych. 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 11 Można wyróżnić następujące operatory porównania (operatory relacji): > -... jest większe od... >= -... jest większe lub równe niż... < -... jest mniejsze od... <= -... jest mniejsze lub równe niż... == -... jest równe...!= -... jest różne od... 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 12 4
Instrukcja if - else if - else Instrukcja switch Wyrażenie warunkowe 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 13 Start Wyrażenia do wykonania Nie if Tak Wyrażenia do wykonania Wyrażenia do wykonania, umieszczone poza instrukcją warunkową Koniec 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 14 01. if ( wyrazenie_logiczne_1 ) 02. { 03. //(...) wyrażenia do wykonania 04. } 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 15 5
Start Wyrażenia do wykonania Nie if Tak Wyrażenia do wykonania Wyrażenia do wykonania Wyrażenia do wykonania, umieszczone poza instrukcją warunkową Koniec 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 16 01. if ( wyrazenie_logiczne_1 ) 02. { 03. //(...) wyrażenia do wykonania 04. }else 05. { 06. //(...) wyrażenia do wykonania 07. } 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 17 Start Wyrażenia do wykonania Nie if Tak Nie if Tak Wyrażenia do wykonania Wyrażenia do wykonania Wyrażenia do wykonania Wyrażenia do wykonania, umieszczone poza instrukcją warunkową Koniec 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 18 6
01. if ( wyrazenie_logiczne_1 ) 02. { 03. //(...) wyrażenia do wykonania 04. }else if ( wyrazenie_logiczne_2 ) 05. { 06. //(...) wyrażenia do wykonania 07. }else 08. { 09. //(...) wyrażenia do wykonania 10. } 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 19 1. if( wyrazenielogiczne == true )... 2. if( wyrazenielogiczne!= true )... 3. if( wyrazenielogiczne )... 4. if(!wyrazenielogiczne )... 5. if( wiek > 100)... 6. if( wiek > 100 wiek < 2 )... 7. if( wiek > 100 && wiek < 102 )... 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 20 if( wyrazenielogiczne == true ) cout<< tekst 1 wypisany przy spełnionym warunku ; cout<< tekst 2 wypisany przy spełnionym warunku ; cout<< tekst 3 wypisany przy spełnionym warunku ; if( wyrazenielogiczne == true ) { cout<< tekst 1 wypisany przy spełnionym warunku ; cout<< tekst 2 wypisany przy spełnionym warunku ; cout<< tekst 3 wypisany przy spełnionym warunku ; } 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 21 7
if( wyrazenie_logiczne_1 ){ // wyrażenia do zrealizowania if(wyrazenie_logiczne_2 ){ // wyrażenia do zrealizowania if(wyrazenie_logiczne_1) // wyrażenie do zrealizowania else // wyrażenie do zrealizowania } } 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 22 if(a > b a == 2 ){ // wyrażenia do zrealizowania } if ((j >= 0 && j <= 4) ( j>6 && j<10 )){ // wyrażenia do zrealizowania } 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 23 if( wyrazenie_logiczne_1 ){ // wyrażenia do zrealizowania if(wyrazenie_logiczne_2 ){ // wyrażenia do zrealizowania if(wyrazenie_logiczne_1); // wyrażenie do zrealizowania else // wyrażenie do zrealizowania }else; // wyrażenie do zrealizowania } 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 24 8
( <warunek> )?<wyrażenie1>:<wyrażenie2>; Jeżeli spełniony jest <warunek> to operator zwróci wartość <wyrażenia1>, w przeciwnym wypadku wartość <wyrażenia2>. UWAGA: <wyrażenie1> nie jest zakończone średnikiem natomiast <wyrażenie2> musi być zakończone średnikiem, gdy wartość zwracana przez operator nie jest przekazywana jako argument. 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 25 Zadanie 1 Napisz program pozwalający na zadanie pytania użytkownikowi dotyczącego ilości lat (podana wartość ma być liczbą całkowitą). Zadanie programu ma polegać na tym, iż powinien on w zależności od podanego wieku wyświetlić jeden z następujących komunikatów: Nie jesteś pełnoletni Jesteś pełnoletni Masz w tym roku 18 lat. 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 26 Zadanie 2 Napisz program, który poprosi o dowolną liczbę całkowitą: jeżeli będzie mniejsza niż 0 odpisze użytkownikowi, że podana liczba jest liczbą ujemną jeżeli będzie większa niż 0 odpisze użytkownikowi, że podana liczba jest liczbą dodatnią jeżeli będzie to jedna z liczb: 1, 9, 3, 5, 7, 28 odpisze użytkownikowi, że podana liczba nie zawiera się w zapamiętanym przez program zbiorze liczb szczególnych. 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 27 9
Start Sprawdzenie zmiennej w warunku Prawda Przypadek 1 Wyrażenia do wykonania Wyjście z przypadku Fałsz Prawda Przypadek 2 Wyrażenia do wykonania Wyjście z przypadku Fałsz Prawda Domyślnie Wyrażenia do wykonania Wyjście z przypadku Wyrażenia do wykonania, umieszczone poza instrukcją warunkową Koniec 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 28 1. switch( wyrazenie_kluczowe ){ 2. case wartosc_1: 3. //(...) instrukcje do wykonania 4. break; 5. case wartosc_2: 6. //(...) instrukcje do wykonania 7. break; 8. default: 9. cout<< "zly parametr wyrazenie_kluczowe"; 10. } 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 29 Słowa kluczowe: switch - służy do podejmowania decyzji wyłącznie na podstawie wartości jednej zmiennej. Zmienna ta musi być typem podstawowym i jednocześnie typem całkowitym. Oznacza to w konsekwencji, że wybór będziemy mogli dokonywać tylko i wyłącznie na podstawie wartości liczby całkowitej czy też kodu znaku ASCII (który również jest liczbą). Zmienną, na której chcemy pracować podajemy w nawiasach zaokrąglonych, które muszą znaleźć się zaraz po wystąpieniu słowa kluczowego switch. Dodatkowo może zostać wykorzystany typ wyliczeniowy enum, który również jest w rzeczywistości liczbą całkowitą. 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 30 10
Słowa kluczowe: case - po tym słowie ustawiony jest przypadek, który w przypadku prawdy spowoduje wykonanie fragmentu kodu umieszczonego w tej części instrukcji warunkowej. Czyli, jeśli wartość zmiennej (występującej po słowie kluczowym switch) będzie równa wartości umieszczonej po słowie kluczowym case, to wykonaj kod (znajdujący się po znaku dwukropka). default - Wejście w kod znajdujący się po słowie kluczowym default nastąpi tylko wtedy, gdy żaden z case'ów nie zostanie spełniony 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 31 Słowa kluczowe: break - oznacza: przerwij wykonywanie obecnej instrukcji sterującej. W tym przypadku instrukcją sterującą jest switch. Użycie słowa kluczowego break ma bardzo duże znaczenie w instrukcji sterującej switch... case. Informuje ona bowiem kompilator, że dany case się wykonał i program ma już opuścić instrukcję sterującą switch. Jeśli zabraknie słowa kluczowego break to program wykona wszystkie instrukcje od momentu spełnienia warunku aż do samego końca switch'a. 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 32 Zadanie 1 Napisz aplikację, która po podaniu numeru dnia wyświetli nazwę dnia tygodnia. 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 33 11
Dziękuję za uwagę i zapraszam na 15 minut przerwy. W dalszej części ćwiczenia do samodzielnego wykonania. 11/3/2016 Katedra Informatyki Stosowanej i Modelowania 34 Zadanie 1 Napisz program pozwalający po podaniu numeru dnia oraz numeru miesiąca wypisać na ekranie ich odpowiedniki tekstowe: 1 - poniedziałek 1 - styczeń Aplikacja powinna pytać użytkownika czy chce wczytać: dzień miesiąc dzień i miesiąc 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 35 Zadanie 2 Napisz program kalkulator, pozwalający na obliczanie operacji: dodawania, odejmowania, mnożenia dzielenia. Program powinien wykonywać się do momentu, w którym użytkownik nie będzie chciał wykonywać operacji matematycznych wymienionych w treści zadania. 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 36 12
Zadanie 3 Napisz program pozwalający na rozwiązanie równania kwadratowego postaci: ax 2 +bx+c = 0. Współczynniki a, b, c podawane są przez użytkownika. Uwaga: Równanie takie może w zależności od parametru delta= b 2-4ac: nie posiadać rozwiązania (delta<0), posiadać jedno rozwiązanie (delta=0): x 0 = -b/2a, posiadać dwa rozwiązania (delta>0): x 1 = (-b-pierwistek(delta))/2a, x 2 = (-b+pierwistek(delta))/2a. 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 37 13