Instrukcja warunkowa if
Instrukcja warunkowa if
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:
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ź
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ę.