MATLAB Language
Betingelser
Sök…
Syntax
- om uttrycket ... slut
- om uttryck ... annars ... slut
- om uttryck ... annars om uttryck ... slut
- om uttryck ... annars om uttryck ... annat ... slut
parametrar
Parameter | Beskrivning |
---|---|
uttryck | ett uttryck som har logisk betydelse |
IF tillstånd
Förhållanden är en grundläggande del av nästan alla delar av koden. De används för att köra vissa delar av koden endast i vissa situationer, men inte andra. Låt oss titta på den grundläggande syntaxen:
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
Produktion:
Not OK
I det här exemplet ser vi if
består av två delar: villkoret och koden som ska köras om villkoret är sant. Koden är allt skrivet efter villkoret och innan end
av det if
. Det första villkoret var inte uppfyllt och följaktligen utfördes inte koden i den.
Här är ett annat exempel:
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
Villkoret ovan kommer alltid att vara sant och visar utmatningen It's true!
.
Vi kan också skriva:
a = 5;
if a == a+1 % "==" means "is equal to", it is NOT the assignment ("=") operator
disp('Equal')
end
Den här gången är villkoret alltid falskt, så vi kommer aldrig att få utgången Equal
.
Det används dock inte mycket för villkor som alltid är sanna eller falska, för om de alltid är falska kan vi helt enkelt ta bort den här delen av koden, och om de alltid är sanna, behövs inte villkoret.
IF-ELSE-tillstånd
I vissa fall vill vi köra en alternativ kod om villkoret är felaktigt, för detta använder vi valfri else
del:
a = 20;
if a < 10
disp('a smaller than 10')
else
disp('a bigger than 10')
end
Här ser vi att eftersom a
inte är mindre än 10
den andra delen av koden, efter att den else
har utförts och vi får utdata a bigger than 10
. Låt oss nu titta på ett nytt försök:
a = 10;
if a > 10
disp('a bigger than 10')
else
disp('a smaller than 10')
end
I det här exemplet visar att vi inte har kontrollerat om a
verkligen är mindre än 10, och vi får ett felmeddelande eftersom villkoret bara kontrollerar uttrycket som det är, och ALLT fall som inte är lika med sant ( a = 10
) orsakar andra delen som ska utföras.
Denna typ av fel är en mycket vanlig fallgrop för både nybörjare och erfarna programmerare, särskilt när förhållandena blir komplexa och bör alltid hållas i åtanke
IF-ELSEIF-tillstånd
Om vi använder else
vi utföra någon uppgift när villkoret inte är uppfyllt. Men tänk om vi vill kontrollera ett andra villkor om det första var falskt. Vi kan göra det på detta sätt:
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
Detta kallas också "kapslat tillstånd" , men här har vi ett specielfall som kan förbättra kodläsbarheten och minska risken för anr-fel - vi kan skriva:
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
med hjälp av elseif
vi kan kontrollera ett annat uttryck inom samma tillståndsblock, och detta är inte begränsat till ett försök:
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
Extra försiktighet bör iakttas när man väljer att använda elseif
i rad, eftersom endast en av dem kommer att utföras från alla if
att end
Så i vårt exempel om vi vill visa alla delare av a
(från de som vi uttryckligen kontrollerar) kommer exemplet ovan inte att vara bra:
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
inte bara 3, utan också 5 är en divisor på 15, men den del som kontrollerar divisionen med 5 uppnås inte om något av ovanstående uttryck var sant.
Slutligen kan vi lägga till en else
(och enda) efter alla elseif
förutsättningar att utföra en kod när inget av ovanstående villkor är uppfyllda:
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
Kapslade villkor
När vi använder ett villkor inom ett annat tillstånd säger vi att villkoren är "kapslade". Ett speciellt fall av kapslade villkor ges av elseif
alternativ, men det finns många andra sätt att använda kapslade villkor. Låt oss undersöka följande 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
För a=2
kommer utgången a att vara a is even
, vilket är korrekt. För a=3
kommer utgången a att vara a is odd
, vilket också är korrekt, men missar kontrollen om 3 är en delare av a
. Detta beror på att förhållandena är kapslade, så bara om det första är true
, än vi flyttar till det inre, och om a
är udda, kontrolleras ingen av de inre förhållandena. Detta är något motsatt av användningen av elseif
endast om det första villkoret är false
än vi kontrollerar det nästa. Vad sägs om att kontrollera uppdelningen med 5? endast ett nummer som har 6 som divisor (både 2 och 3) kommer att kontrolleras för divisionen med 5, och vi kan testa och se att för a=30
är utgången:
a is even
3 is a divisor of a
5 is a divisor of a
Vi bör också märka två saker:
- Placeringen av
end
på rätt plats för var och enif
är avgörande för en uppsättning villkor för att fungera som förväntat, så indrag är mer än en bra rekommendation här. - Positionen för det
else
uttalandet är också avgörande, eftersom vi måste veta i vilketif
(och det kan finnas flera av dem) vi vill göra något om uttrycket ärfalse
.
Låt oss titta på ett annat exempel:
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
Och utgången kommer att vara:
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
Vi ser att vi bara fick 6 rader för 6 nummer, eftersom villkoren är kapslade på ett sätt som säkerställer endast en utskrift per nummer, och även (även om det inte kan ses direkt från utgången) är inga extra kontroller förformade, så om ett nummer är inte ens det är ingen mening att kontrollera om 4 är en av dess delare.