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:

  1. Placeringen av end på rätt plats för var och en if ä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.
  2. Positionen för det else uttalandet är också avgörande, eftersom vi måste veta i vilket if (och det kan finnas flera av dem) vi vill göra något om uttrycket är false .

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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow