MATLAB Language
Warunki
Szukaj…
Składnia
- jeśli wyrażenie ... koniec
- jeśli wyrażenie ... inaczej ... koniec
- if expression ... elseif expression ... end
- jeśli wyrażenie ... elseif wyrażenie ... else ... koniec
Parametry
Parametr | Opis |
---|---|
wyrażenie | wyrażenie, które ma logiczne znaczenie |
JEŻELI warunek
Warunki są podstawową częścią prawie każdej części kodu. Służą do wykonywania niektórych części kodu tylko w niektórych sytuacjach, ale nie w innych. Spójrzmy na podstawową składnię:
a = 5;
if a > 10 % this condition is not fulfilled, so nothing will happen
disp('OK')
end
if a < 10 % this condition is fulfilled, so the statements between the if...end are executed
disp('Not OK')
end
Wynik:
Not OK
W tym przykładzie widzimy if
składa się z 2 części: warunek i kod do uruchomienia, jeśli warunek jest prawdziwy. Kod to wszystko, co napisano po warunku, a przed end
tego, if
. Pierwszy warunek nie został spełniony i dlatego kod w nim nie został wykonany.
Oto inny przykład:
a = 5;
if a ~= a+1 % "~=" means "not equal to"
disp('It''s true!') % we use two apostrophes to tell MATLAB that the ' is part of the string
end
Powyższy warunek zawsze będzie prawdziwy i wyświetli wynik It's true!
.
Możemy również napisać:
a = 5;
if a == a+1 % "==" means "is equal to", it is NOT the assignment ("=") operator
disp('Equal')
end
Tym razem warunek jest zawsze fałszywy, więc nigdy nie otrzymamy wyjścia Equal
.
Nie ma jednak większego zastosowania w przypadku warunków, które zawsze są prawdziwe lub fałszywe, ponieważ jeśli zawsze są one fałszywe, możemy po prostu usunąć tę część kodu, a jeśli zawsze są one prawdziwe, wówczas warunek nie jest potrzebny.
Warunek IF-ELSE
W niektórych przypadkach chcemy uruchomić alternatywny kod, jeśli warunek jest fałszywy, w tym celu używamy opcjonalnej części else
:
a = 20;
if a < 10
disp('a smaller than 10')
else
disp('a bigger than 10')
end
Widzimy tutaj, że ponieważ a
nie jest mniejsze niż 10
druga część kodu jest wykonywana po wykonaniu else
i otrzymujemy wynik a bigger than 10
. Teraz spójrzmy na kolejną próbę:
a = 10;
if a > 10
disp('a bigger than 10')
else
disp('a smaller than 10')
end
W tym przykładzie pokazano, że nie sprawdziliśmy, czy a
jest rzeczywiście mniejsze niż 10, i otrzymujemy zły komunikat, ponieważ warunek sprawdza tylko wyrażenie, jakie jest, i ŻADNY przypadek, który nie jest równy prawdzie ( a = 10
) spowoduje druga część do wykonania.
Ten rodzaj błędu jest bardzo częstą pułapką zarówno dla początkujących, jak i doświadczonych programistów, szczególnie gdy warunki stają się złożone i należy o tym zawsze pamiętać
Warunek IF-ELSEIF
Za pomocą else
możemy wykonać pewne zadanie, gdy warunek nie jest spełniony. Ale co, jeśli chcemy sprawdzić drugi warunek na wypadek, gdyby pierwszy był fałszywy. Możemy to zrobić w ten sposób:
a = 9;
if mod(a,2)==0 % MOD - modulo operation, return the remainder after division of 'a' by 2
disp('a is even')
else
if mod(a,3)==0
disp('3 is a divisor of a')
end
end
OUTPUT:
3 is a divisor of a
Jest to również nazywane „stanem zagnieżdżonym” , ale tutaj mamy przypadek speciel, który może poprawić czytelność kodu i zmniejszyć ryzyko wystąpienia błędu anr - możemy napisać:
a = 9;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
end
OUTPUT:
3 is a divisor of a
za pomocą elseif
jesteśmy w stanie sprawdzić inne wyrażenie w tym samym bloku warunków i nie jest to ograniczone do jednej próby:
a = 25;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
elseif mod(a,5)==0
disp('5 is a divisor of a')
end
OUTPUT:
5 is a divisor of a
Należy zachować szczególną ostrożność, wybierając elseif
z rzędu, ponieważ tylko jeden z nich zostanie wykonany ze wszystkich bloków if
aby end
blok. Tak więc w naszym przykładzie, jeśli chcemy, aby wyświetlić wszystkie dzielniki (z tych, które wyraźnie sprawdzić) powyższy przykład nie będzie dobre: a
a = 15;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
elseif mod(a,5)==0
disp('5 is a divisor of a')
end
OUTPUT:
3 is a divisor of a
nie tylko 3, ale także 5 jest dzielnikiem 15, ale część, która sprawdza podział przez 5, nie jest osiągana, jeśli którekolwiek z powyższych wyrażeń było prawdziwe.
Na koniec możemy dodać else
jeden (i tylko jeden ) po wszystkich warunkach elseif
, aby wykonać kod, gdy żaden z powyższych warunków nie jest spełniony:
a = 11;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
elseif mod(a,5)==0
disp('5 is a divisor of a')
else
disp('2, 3 and 5 are not divisors of a')
end
OUTPUT:
2, 3 and 5 are not divisors of a
Warunki zagnieżdżone
Kiedy używamy warunku w innym warunku, mówimy, że warunki są „zagnieżdżone”. Jeden szczególny przypadek warunków zagnieżdżonych podano w opcji elseif
, ale istnieje wiele innych sposobów korzystania z zagnieżdżonych warunków. Przeanalizujmy następujący kod:
a = 2;
if mod(a,2)==0 % MOD - modulo operation, return the remainder after division of 'a' by 2
disp('a is even')
if mod(a,3)==0
disp('3 is a divisor of a')
if mod(a,5)==0
disp('5 is a divisor of a')
end
end
else
disp('a is odd')
end
Dla a=2
wyjście będzie a is even
, co jest poprawne. Dla a=3
wyjście będzie a is odd
, co również jest poprawne, ale pomija sprawdzenie, czy 3 jest dzielnikiem a
. Wynika to z tego, że warunki są zagnieżdżone, więc tylko jeśli pierwsza jest true
, wówczas przechodzimy do wewnętrznej, a jeśli a
jest nieparzysta, żaden z warunków wewnętrznych nie jest nawet sprawdzany. Jest to nieco przeciwne do użycia elseif
gdzie tylko jeśli pierwszy warunek jest false
, sprawdzamy następny. Co powiesz na sprawdzenie podziału przez 5? tylko liczba, która ma 6 jako dzielnik (zarówno 2, jak i 3), zostanie sprawdzona pod kątem dzielenia przez 5, i możemy przetestować i zobaczyć, że dla a=30
wynikiem jest:
a is even
3 is a divisor of a
5 is a divisor of a
Powinniśmy również zauważyć dwie rzeczy:
- Pozycja
end
we właściwym miejscu dla każdego,if
jest kluczowa dla zestawu warunków do działania zgodnie z oczekiwaniami, więc wcięcie jest więcej niż dobrą rekomendacją. - Pozycja zdania
else
jest również kluczowa, ponieważ musimy wiedzieć, w którymif
(a może być ich kilka) chcemy zrobić coś w przypadku, gdyby wyrażenie byłofalse
.
Spójrzmy na inny przykład:
for a = 5:10 % the FOR loop execute all the code within it for every a from 5 to 10
ch = num2str(a); % NUM2STR converts the integer a to a character
if mod(a,2)==0
if mod(a,3)==0
disp(['3 is a divisor of ' ch])
elseif mod(a,4)==0
disp(['4 is a divisor of ' ch])
else
disp([ch ' is even'])
end
elseif mod(a,3)==0
disp(['3 is a divisor of ' ch])
else
disp([ch ' is odd'])
end
end
Wyjście będzie:
5 is odd
3 is a divisor of 6
7 is odd
4 is a divisor of 8
3 is a divisor of 9
10 is even
widzimy, że mamy tylko 6 wierszy dla 6 liczb, ponieważ warunki są zagnieżdżone w sposób zapewniający tylko jeden wydruk na liczbę, a także (chociaż nie widać bezpośrednio z wyjścia) żadnych dodatkowych kontroli, więc jeśli liczba nie jest nawet nie ma sensu sprawdzać, czy 4 jest jednym z dzielników.