Instrukcja warunkowa if pozwala na wykonanie jednego z kilku fragmentów kodów zawartego pomiędzy instrukcjami if, elseif, else. Wybór realizowanego kodu zależy od spełnienia odpowiednich wyrażeń warunkowych a gdy żadne z nich nie jest spełnione, wykonywany jest kod występujący za operatorem else. Składnia instrukcji if wygląda następująco:

if wyrażenie_warunkowe_1

    kod_wersja_1

elseif wyrażenie_warunkowe_2

    kod_wersja_2

elseif wyrażenie_warunkowe_3

   kod_wersja_3

......

else

   kod_wersja_N

end

Dla zachowania przejrzystości programu należy zawsze stosować wcięcia w kodzie.



Zadanie (2)

Utwórz m-plik o nazwie pierwiastki.m o następującej zawartości:

%% skrypt oblicza pierwiastki równania kwadratowego

a=1;

b=-5;

c=6;

disp(['badamy liczbe pierwiastkow r-nia ' num2str(a) 'x^2 +' num2str(b) 'x +' num2str(c) ]);

delta=b^2-4*a*c;

if delta > 0

      x1=(-b-sqrt(delta)) / (2*a);

      x2=(-b+sqrt(delta)) / (2*a);

      disp(['rownanie ma dwa pierwiastki: ' num2str(x1) ' oraz ' num2str(x2)]);

elseif delta==0

      x0=-b/(2*a);

      disp(['rownanie ma jeden pierwiastek: ' num2str(x0) ' ale za to podwojny']);

else

      disp('rownanie nie ma pierwiastkow');

end



i uruchom go kilka razy tak dobierając stałe a, b i c, aby wywołać po kolei wszystkie możliwe wyniki działania skryptu. Zaopatrz swój skrypt w odpowiedni komentarz na samej górze.

Jeżeli wartość parametru a wynosi 1, to zapis 1x^2+... nie wygląda zbyt naturalnie (przecież nikt normalny nie pisze jedynki przed x^2...). W powyższym skrypcie, jeszcze przed wykonaniem jakichkolwiek obliczeń, dodaj kolejną instrukcję warunkową, która zmodyfikuje wyświetlanie komunikatu z pierwszego disp:

  • jeżeli a==1, to komunikat nie ma wyświetlać tej jedynki przed x^2,

  • jeżeli a==-1, to komunikat ma wyświetlać tylko sam minus przed x^2,

  • w pozostałych przypadkach należy wyświetlić wartość parametru a przed x^2.

Gdy już uporasz się z (nie)wyświetlaniem jedynki, przerób skrypt w taki sposób, aby pytał użytkownika o podanie liczb a, b i c z klawiatury.

Odpowiedź

%% skrypt oblicza pierwiastki równania kwadratowego

a=input('Podaj parametr a: ');

b=input('Podaj parametr b: ');

c=input('Podaj parametr c: ');

if a==1

      disp(['badamy liczbe pierwiastkow r-nia x^2 +' num2str(b) 'x +' num2str(c) ]);

elseif a==-1

     disp(['badamy liczbe pierwiastkow r-nia -x^2 +' num2str(b) 'x +' num2str(c) ]);

else

     disp(['badamy liczbe pierwiastkow r-nia ' num2str(a) 'x^2 +' num2str(b) 'x +' num2str(c) ]);

end

delta=b^2-4*a*c;

if delta > 0

     x1=(-b-sqrt(delta)) / (2*a);

     x2=(-b+sqrt(delta)) / (2*a);

     disp(['rownanie ma dwa pierwiastki: ' num2str(x1) ' oraz ' num2str(x2)]);

elseif delta==0

     x0=-b/(2*a);

     disp(['rownanie ma jeden pierwiastek: ' num2str(x0) ' ale za to podwójny']);

else

     disp('rownanie nie ma pierwiastkow');

end

 

Zadanie (3)

Utwórz m-plik o nazwie glosowanie.m, który poprosi użytkownika o podanie wieku. Następnie, w zależności od wieku wyświetli odpowiedni komunikat:

  • jeżeli wiek jest ujemny, wypisz na ekran „jeszcze się nie urodziłeś, więc nie możesz głosować”,

  • w przeciwnym razie, jeżeli wiek jest mniejszy niż 18, wypisz na ekran „jesteś za młody aby głosować”,

  • w przeciwnym razie, jeżeli wiek jest mniejszy niż 70, wypisz na ekran „możesz głosować”,

  • w przeciwnym razie, jeżeli wiek jest większy lub równy niż 70 wypisz „możesz głosować, aczkolwiek boję się trochę Twoich poglądów...”.

Czy można zamienić kolejnością te warunki (i dlaczego nie)? Co się wtedy stanie?

Odpowiedź

%% skrypt sprawdza, czy użytkownik może głosować

wiek = input('Ile masz lat? ');

if wiek<0

      disp('Jeszcze sie nie urodziles, wiec nie mozesz glosowac')

elseif wiek<18

      disp('Jestes za mlody, aby glosowac')

elseif wiek<70

      disp('Mozesz glosowac')

else

     disp('Mozesz glosowac, aczkolwiek boje sie troche Twoich pogladow')

end

 

Zadanie (4)

Instrukcje warunkowe można zagnieżdżać. Prześledź działanie tego skryptu (nazwij go przedtem jakoś odpowiednio i zaopatrz w komentarz):


w=input('Podaj swoj wiek: ');

if w<16

    if w<5

       disp('Przedszkolak! Odejdź od komputera!');

    else

       disp('Uczeń. Ucz się dziecko...');

end

else

    if w<67

       disp('Wiek produkcyjny. Produkuj, produkuj cokolwiek!');

    else

       disp('No, teraz to już z górki. Że też jeszcze Ci się chce...');

end

end


Teoretycznie, można robić dowolnie wiele zagnieżdżeń instrukcji warunkowych, ale często utrudnia to późniejsze zrozumienie programu lub jego modyfikację.

Ostatnia modyfikacja: środa, 21.08.2013, 10:32 AM