METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH ĆWICZENIE NR 9 WYRAŻENIA LOGICZNE, INSTRUKCJE WARUNKOWE I INSTRUKCJE ITERACYJNE W PROGRAMIE KOMPUTEROWYM MATLAB Dr inż. Sergiusz Sienkowski
ĆWICZENIE NR 9 Wyrażenia logiczne, instrukcje warunkowe i instrukcje iteracyjne w programie komputerowym Matlab 9.1. Cel ćwiczenia Celem ćwiczenia jest opanowanie umiejętności tworzenia i wywoływania skryptów zawierających wyrażenia logiczne, instrukcje warunkowe i instrukcje iteracyjne w programie komputerowym Matlab. 9.2. Wyrażenia logiczne Wyrażeniami logicznymi nazywamy konstrukcje logiczne składające się z operatorów logicznych i operatorów relacyjnych. W wyrażeniach logicznych mogą występować również stałe i zmienne, operatory arytmetyczne, operator przypisania i wywołania funkcji zwracających wynik. Operatory logiczne to operatory, które działając na operandach zwracają w wyniku wartości logiczne. Operandami mogą być skalary, wyrażenia logiczne, wektory oraz macierze. W poniższej tabeli przedstawiono wykaz operatorów logicznych bitowych stosowanych w programie komputerowym Matlab. Operator Opis I & Suma logiczna bitowa, jeżeli a 0 lub b 0, to a I b=1, jeżeli a=0 i b=0, to a I b=0 Iloczyn logiczny bitowy, jeżeli a=0 lub b=0 lub a=0 i b=0, to a & b=0, jeżeli a 0 i b 0, to a & b=1
168 Metody komputerowe w obliczeniach inżynierskich ~ Negacja bitowa, jeżeli a 0, to ~a=0, jeżeli a=0, to ~a=1 I I && Suma logiczna, jeżeli a jest prawdziwe lub b jest prawdziwe, to a II b jest prawdziwe, jeżeli a jest fałszywe i b jest fałszywe, to a II b jest fałszywe Iloczyn logiczny, jeżeli a jest fałszywe lub b jest fałszywe lub a jest fałszywe i b jest fałszywe, to a && b jest fałszywe, jeżeli a jest prawdziwe i b jest prawdziwe, to a && b jest prawdziwe Operatory relacyjne to operatory umożliwiające porównanie operandów o tych samych rozmiarach. W poniższej tabeli przedstawiono wykaz operatorów relacyjnych stosowanych w programie komputerowym Matlab. Operator Opis == Sprawdzenie czy a jest równe b ~= Sprawdzenie czy a jest różne od b < Sprawdzenie czy a jest mniejsze od b > Sprawdzenie czy a jest większe od b <= Sprawdzenie czy a jest mniejsze równe od b >= Sprawdzenie czy a jest większe równe od b Uzyskany z zastosowaniem operatorów wynik porównania skalarów jest liczbą całkowitą i przyjmuje wartość jeden, jeżeli warunek porównania
Ćwiczenie 9. Wyrażenia logiczne, instrukcje warunkowe... 169 jest prawdziwy i zero, w przeciwnym przypadku. Jeżeli porównywane są wektory lub macierze, to wynik porównania będzie wektorem lub macierzą jedynek i zer uzyskanych w wyniku porównania, element po elemencie, wektorów lub macierzy. 9.3. Instrukcje warunkowe Instrukcja warunkowa to element języka programowania umożliwiający porównanie operandów. Instrukcje warunkowe w Matlabie buduje się w oparciu o kwantyfikatory if (jeżeli), else (w przeciwnym przypadku), elseif (w przeciwnym przypadku jeżeli) i (koniec instrukcji). W poniższej tabeli przedstawiono sposoby konstruowania instrukcji warunkowych. Instrukcja if warunek Instrukcje; if warunek_1 II warunek_2 Instrukcje; if warunek_1 && warunek_2 Instrukcje; Opis Jeżeli warunek następujący po kwantyfikatorze if jest prawdziwy, to realizowane są instrukcje między kwantyfikatorami if i Jeżeli pierwszy lub drugi warunek następujący po kwantyfikatorze if jest prawdziwy, to realizowane są instrukcje między kwantyfikatorami if i Jeżeli oba warunki następujące po kwantyfikatorze if są prawdziwe, to realizowane są instrukcje między kwantyfikatorami if i
170 Metody komputerowe w obliczeniach inżynierskich if warunek Instrukcje_1; else Instrukcje_2; if warunek_1 Instrukcje_1; elseif warunek_2 Instrukcje_2; if warunek_1 Instrukcje_1; elseif warunek_2 Instrukcje_2; else Instrukcje_3; Jeżeli warunek następujący po kwantyfikatorze if jest prawdziwy, to realizowane są instrukcje między kwantyfikatorami if i else, w przeciwnym przypadku realizowane są instrukcje między kwantyfikatorami else i Jeżeli warunek następujący po kwantyfikatorze if jest prawdziwy, to realizowane są instrukcje między kwantyfikatorami if i elseif, w przeciwnym przypadku, jeśli prawdziwy jest warunek następujący po kwantyfikatorze elseif, to realizowane są instrukcje między kwantyfikatorami elseif i Jeżeli warunek następujący po kwantyfikatorze if jest prawdziwy, to realizowane są instrukcje między kwantyfikatorami if i elseif, w przeciwnym przypadku, jeśli prawdziwy jest warunek następujący po kwantyfikatorze elseif, to realizowane są instrukcje między kwantyfikatorami elseif i else, w przeciwnym przypadku realizowane są instrukcje między kwantyfikatorami else i
Ćwiczenie 9. Wyrażenia logiczne, instrukcje warunkowe... 171 Przykład. Utworzenie i uruchomienie skryptu skrypt9_1.m umożliwiającego porównanie wartości dwóch liczb rzeczywistych. Przykład. Utworzenie i uruchomienie skryptu skrypt9_2.m umożliwiającego porównanie znaków dwóch, różnych od zera, liczb rzeczywistych. W Matlabie możliwe jest również zastosowanie instrukcji warunkowych wielowariantowego wyboru. Taką instrukcję buduje się w oparciu o kwantyfikatory switch (zwrotnica wielokierunkowa), case (wariant), otherwise (w przeciwnym przypadku) i (koniec instrukcji) według następującego schematu
172 Metody komputerowe w obliczeniach inżynierskich switch warianty case wariant_1 Instrukcje_1; case wariant_2 Instrukcje_2;... otherwise Instrukcje_k; Wyrażenie, które występuje za kwantyfikatorem switch może być liczbą lub łańcuchem znaków. Takie wyrażenie porównywane jest po kolei z wyrażeniami, które występują za kwantyfikatorami case. Jeżeli, któryś z wyników porównania będzie prawdziwy, to realizowane są odpowiednie instrukcje i następuje opuszczenie całej instrukcji, w przeciwnym wypadku realizowane są instrukcje występujące po kwantyfikatorze otherwise. Przykład. Utworzenie i uruchomienie skryptu skrypt9_3.m umożliwiającego wykonanie wybranej operacji arytmetycznej.
Ćwiczenie 9. Wyrażenia logiczne, instrukcje warunkowe... 173 9.4. Instrukcje iteracyjne Instrukcja iteracyjna to pętla umożliwiająca wykonywanie w sposób cykliczny zawartych w niej instrukcji. W programie komputerowym Matlab stosuje się instrukcje iteracyjne oparte na kwantyfikatorach for oraz while. Takie instrukcje nazywa się krótko pętlami for oraz while. Pętla for ma następującą postać for zmienna=wektor_wierszowy Instrukcje; W powyższej pętli po kwantyfikatorze for następuje przypisanie zmiennej wektora wierszowego zawierającego elementy, których liczba określa liczbę iteracji pętli. Działanie pętli for należy rozumieć w ten sposób, że w pierwszym kroku zmienna przyjmuje wartość pierwszego elementu wektora, a następnie wykonywane są instrukcje zawarte wewnątrz pętli. W kolejnym kroku zmienna przyjmuje wartość kolejnego elementu wektora i wykonywany jest ponownie ten sam zestaw instrukcji. Pętla wykonywana jest tle razy, ile elementów ma wektor wierszowy. W praktyce pętlę for stosuje się w następujący sposób
174 Metody komputerowe w obliczeniach inżynierskich for zmienna=min:max Instrukcje; lub for zmienna=min:krok:max Instrukcje; W pierwszym przypadku instrukcje zawarte wewnątrz pętli zostaną wykonane (max-min+1) razy, natomiast w drugim przypadku (floor((maxmin)/krok)+1) razy. Przykład. Utworzenie i uruchomienie skryptów skrypt9_4.m i skrypt9_5.m demonstrujących działanie pętli for. W powyższym skrypcie w każdym kroku pętli for zwiększana jest o jeden wartość liczby k, której początkowa wartość jest równa zero. W ten
Ćwiczenie 9. Wyrażenia logiczne, instrukcje warunkowe... 175 sposób wyznaczona zostaje liczba iteracji pętli. Uzyskana liczba iteracji jest zestawiona z obliczoną na podstawie wzoru. Uwaga, wartość zmiennej i występującej w pętli po kwantyfikatorze for zmienia się tylko w obrębie pętli (skrypt skrypt9_5.m). Po opuszczeniu pętli taka zmienna przyjmuje wartość (min+krok floor((max-min)/krok)). Pętla while ma następującą postać while warunek_przerwania_petli Instrukcje; W czasie działania pętli, występujący po kwantyfikatorze while warunek przerwania wykonywania pętli może przyjąć wartość zero lub jeden. Działanie pętli while należy rozumieć w ten sposób, że dopóki warunek przerwania wykonywania pętli nie przyjmie wartości zero, to instrukcje zawarte wewnątrz pętli będą wykonywane.
176 Metody komputerowe w obliczeniach inżynierskich Przykład. Utworzenie i uruchomienie skryptu skrypt9_6.m demonstrującego działanie pętli while. W przykładzie, pętla while jest wykonywana dopóki i<5, przy czy zmienna i w ciele pętli przyjmuje wartości od zera do czterech (i=0, 1, 2, 3, 4). W przedostatnim kroku, przed przerwaniem działania pętli (i=4), sprawdzany jest warunek przerwania wykonywania pętli (i=4<5), następnie wykonywane są instrukcje wewnątrz pętli, w tym następuje zwiększenie o jeden warności zmiennej i (i=5), po czym pętla przechodzi do kolejnego kroku. W ostatnim kroku następuje ponowne sprawdzenie warunku przerwania działania pętli (i=5<5). Ponieważ taki warunek przyjmuje wartość zero, to działanie pętli zostaje natychmiast przerwane, a instrukcje znajdujące się wewnątrz pętli nie są już wykonywane. Działanie pętli for i while można kontrolować z zastosowaniem instrukcji break oraz continue. Instrukcja break powoduje natychmiastowe przerwanie wykonywania pętli, natomiast instrukcja continue umożliwia pominięcie wykonywania wskazanych kroków pętli. Obie instrukcje umieszcza się w ciałach pętli. Wystąpienie tych instrukcji oznacza, że wszystkie następujące po nich instrukcje nie zostaną wykonane.
Ćwiczenie 9. Wyrażenia logiczne, instrukcje warunkowe... 177 Przykład. Utworzenie i uruchomienie skryptu skrypt9_7.m prezentującego możliwości kontrolowania działania pętli for z zastosowaniem instrukcji break i continue. W skrypcie z powyższego przykładu wykonywane są trzy pętle for. W ciele pierwszej pętli następuje zwiększenie wartości liczby k o jeden w każdym kroku pętli. Pętla wykonana jest tyle razy ile elementów zawiera wektor wierszowy podstawiany do zmiennej i występującej po kwantyfikatorze for. W drugiej pętli instrukcja break natychmiast przerwa działanie pętli, gdy i>0. Przerwana zostanie również inkrementacja k. W trzeciej pętli nie zostanie wykonany wybrany krok pętli, to jest taki, w którym i=2. Nie zostanie również wtedy zwiększona wartości liczby k, a pętla przejdzie do wykonywania następnego kroku.
178 Metody komputerowe w obliczeniach inżynierskich 9.5. Program ćwiczenia 1. Utworzyć w Matlabie skrypt o nazwie skrypt9_1.m, który po uruchomieniu porówna wczytane z klawiatury do skryptu informacje o danych osobowych w postaci imienia i nazwiska osoby z podgrupy laboratoryjnej. Porównanie informacji polegać ma na ustaleniu długości łańcuchów znaków imienia, a następnie nazwiska i wyświetlaniu informacji o tym, która z danych ma dłuższy łańcuch znaków. Wskazówka. W celu porównania długości łańcuchów znaków odpowiadających wprowadzonym danym zastosować funkcję length. 2. Zapisać skrypt z punktu pierwszego pod nazwą skrypt9_2.m. Zmodyfikować zawartość skryptu tak, aby umożliwiał leksykalne porównanie wprowadzonych danych osobowych. Wskazówka. W celu leksykalnego porównania łańcuchów znaków odpowiadających wprowadzonym danym zastosować funkcję strcmp. 3. Utworzyć w Matlabie skrypt o nazwie skrypt9_3.m, który po uruchomieniu sprawdzi czy wprowadzona z klawiatury do skryptu liczba rzeczywista a jest dodatnia, ujemna, czy równa zero. 4. Utworzyć w Matlabie skrypt o nazwie skrypt9_4.m, który po uruchomieniu sprawdzi czy liczba rzeczywista a należy do przedziału [b, c]. Liczbę a i końce przedziału b i c należy wprowadzać do skryptu z klawiatury.
Ćwiczenie 9. Wyrażenia logiczne, instrukcje warunkowe... 179 5. Utworzyć w Matlabie skrypt o nazwie skrypt9_5.m, który po uruchomieniu wyświetli wynik odpowiadający uzyskanemu na wyjściu WY układu bramek logicznych OR (suma logiczna), AND (iloczyn logiczny) i NOT (negacja) z poniższego rysunku. ab OR OR AND AND NOT WY AND Stany logiczne a i b bramek przyjmują wartości 0 lub 1 i mają być wprowadzane do skryptu z klawiatury. Operacje wykonywane na danych są operacjami bitowymi. 6. Utworzyć w Matlabie skrypt o nazwie skrypt9_6.m, który po uruchomieniu sprawdzi czy liczba a jest pierwiastkiem równania (spełnia równanie) z jedną niewiadomą, którego postać jest wprowadzana z klawiatury. Wskazówka. W celu implementacji możliwości wprowadzania równania z klawiatury zastosować skrypt skrypt5_4.m z ćwiczenia 5. 7. Utworzyć w Matlabie skrypt o nazwie skrypt9_7.m, który po uruchomieniu sprawdzi czy liczba a spełnia jedno z poniższych równań lub nierówności a) a 2-3 a-x<1, b) log(a)>x, c) a 2 =x. Wybór równania lub nierówności ma odbywać się za pomocą klawiatury. W tym celu zastosować instrukcje warunkowe wielowariantowego wyboru (switch).
180 Metody komputerowe w obliczeniach inżynierskich 8. Utworzyć w Matlabie skrypt o nazwie skrypt9_8.m, który po uruchomieniu umożliwi rozwiązanie układu równań liniowych at at bt =c, 11 12 1 bt=c, 2 1 2 2 2 metodą wyznaczników, gdzie t 1 i t 2 to niewiadome, a 1, a 2, b 1, b 2, c 1 i c 2 to współczynniki równań. Skrypt umożliwiać ma wprowadzanie współczynników równań z klawiatury, wyświetlenie informacji o wynikach obliczeń, w tym informacji o oznaczoności, nieoznaczoności lub sprzeczności układu. 9. Utworzyć w Matlabie skrypt o nazwie skrypt9_9.m, który po uruchomieniu wyświetli wyniki obliczania a) wartości maksymalnej, b) wartości minimalnej, na podstawie liczb rzeczywistych przechowywanych w wektorze wierszowym wprowadzanym do skryptu za pomocą łańcucha znaków. Do obliczania wskazanych wielkości zastosować instrukcje iteracyjne. 10. Utworzyć w Matlabie skrypt o nazwie skrypt9_10.m, który po uruchomieniu sprawdzi znak po znaku, ile razy wskazana litera występuje w imieniu i nazwisku osoby z podgrupy laboratoryjnej. Imię i nazwisko oraz szukaną literę należy wprowadzać do skryptu za pomocą klawiatury. 11. Utworzyć w Matlabie skrypt o nazwie skrypt9_11.m, który po uruchomieniu sprawdzi ile liczb parzystych i nieparzystych znajduje się w wektorze wierszowym. Liczby do skryptu należy wprowadzić
Ćwiczenie 9. Wyrażenia logiczne, instrukcje warunkowe... 181 z zastosowaniem łańcucha znaków. Wskazówka. W celu sprawdzenia parzystości liczby zastosować funkcję mod. 12. Utworzyć w Matlabie skrypt o nazwie skrypt9_12.m, który po uruchomieniu będzie wyświetlał kody ASCII wprowadzonych z klawiatury znaków lub łańcucha znaków, aż do momentu wybrania z klawiatury wskazanego znaku, który przerwie działanie skryptu. Wskazówka. W celu zamiany znaku bądź łańcucha znaków na kod ASCII lub wektor wierszowy kodów ASCII zastosować funkcję abs. Literatura [1] Luzar M., Metody komputerowe w obliczeniach inżynierskich, Wykład dla Studentów Automatyki i Robotyki, WIEA, UZ, www.issi.uz.zgora.pl [2] Czajka M., MATLAB. Ćwiczenia, Helion 2005 [3] Mrozek B., Mrozek Z., MATLAB i Simulink. Poradnik użytkownika, Helion 2004