Buscar..


Sintaxis

  • si expresión ... fin
  • si expresion ... lo demas ... fin
  • si expresión ... elseif expresión ... fin
  • if expresión ... elseif expresión ... else ... fin

Parámetros

Parámetro Descripción
expresión Una expresión que tiene un significado lógico.

Condición de si

Las condiciones son una parte fundamental de casi cualquier parte del código. Se utilizan para ejecutar algunas partes del código solo en algunas situaciones, pero no en otras. Veamos la sintaxis básica:

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

Salida:

Not OK

En este ejemplo, vemos que el if consta de 2 partes: la condición y el código que se ejecutará si la condición es verdadera. El código es todo lo escrito después de la condición y antes del end de ese if . La primera condición no se cumplió y, por lo tanto, el código que contiene no se ejecutó.

Aquí hay otro ejemplo:

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

La condición anterior siempre será verdadera y mostrará la salida ¡ It's true! .

También podemos escribir:

a = 5;
if a == a+1    % "==" means "is equal to", it is NOT the assignment ("=") operator
    disp('Equal')
end

Esta vez la condición siempre es falsa, por lo que nunca obtendremos la salida Equal .

Sin embargo, las condiciones que siempre son verdaderas o falsas no son muy útiles, porque si siempre son falsas, simplemente podemos eliminar esta parte del código, y si siempre son verdaderas, entonces la condición no es necesaria.

Condición IF-ELSE

En algunos casos, queremos ejecutar un código alternativo si la condición es falsa, para esto utilizamos la else parte opcional:

a = 20;
if a < 10
    disp('a smaller than 10')
else
    disp('a bigger than 10')
end

Aquí vemos que debido a que no es menor que 10 la segunda parte del código, después de else se ejecuta else , obtenemos a bigger than 10 resultado a bigger than 10 . Ahora veamos otro intento:

a = 10;
if a > 10
    disp('a bigger than 10')
else
    disp('a smaller than 10')
end

En este ejemplo, se muestra que no verificamos si a es realmente menor que 10, y recibimos un mensaje incorrecto porque la condición solo verifica la expresión tal como es, y CUALQUIER caso que no sea verdadero ( a = 10 ) causará que Segunda parte a ser ejecutada.

Este tipo de error es un error muy común tanto para los principiantes como para los programadores experimentados, especialmente cuando las condiciones se vuelven complejas y siempre se debe tener en cuenta.

Condición IF-ELSEIF

Usando else podemos realizar alguna tarea cuando la condición no se cumple. Pero qué pasa si queremos verificar una segunda condición en caso de que la primera fuera falsa. Podemos hacerlo de esta manera:

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

Esto también se conoce como "condición anidada" , pero aquí tenemos un caso específico que puede mejorar la legibilidad del código y reducir la posibilidad de error y error: podemos escribir:

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

utilizando el elseif podemos verificar otra expresión dentro del mismo bloque de condición, y esto no está limitado a un intento:

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

Un cuidado especial debe ser tomado al elegir utilizar elseif en una fila, ya que sólo uno de ellos se ejecutará de todo el if a end de bloque. Así, en nuestro ejemplo, si queremos visualizar todos los divisores de a (de las que comprobar explícitamente) el ejemplo anterior no será bueno:

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

no solo 3, sino también 5 es un divisor de 15, pero la parte que verifica la división por 5 no se alcanza si alguna de las expresiones anteriores era verdadera.

Finalmente, podemos agregar uno else (y solo uno ) después de todas las condiciones de elseif para ejecutar un código cuando no se cumple ninguna de las condiciones anteriores:

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

Condiciones anidadas

Cuando usamos una condición dentro de otra condición, decimos que las condiciones están "anidadas". La opción elseif proporciona un caso especial de condiciones anidadas, pero existen muchas otras formas de utilizar las condiciones anidadas. Examinemos el siguiente código:

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 

Para a=2 , la salida será a is even , lo que es correcto. Para a=3 , la salida será a is odd , lo que también es correcto, pero no se comprueba si 3 es un divisor de a . Esto se debe a que las condiciones están anidadas, por lo que solo si la primera es true , entonces nos movemos hacia la interna, y si a es impar, ninguna de las condiciones internas se verifica. Esto es algo opuesto al uso de elseif donde solo si la primera condición es false que la que verificamos en la siguiente. ¿Qué hay de comprobar la división por 5? solo un número que tenga 6 como divisor (tanto 2 como 3) se verificará para la división entre 5, y podemos probar y ver que para a=30 la salida es:

a is even
3 is a divisor of a
5 is a divisor of a

También debemos notar dos cosas:

  1. La posición de la end en el lugar correcto para cada if es crucial para el conjunto de condiciones para trabajar como se esperaba, por lo que la sangría es más que una buena recomendación aquí.
  2. La posición de la declaración else también es crucial, porque necesitamos saber en qué if (y puede haber varios) queremos hacer algo en caso de que la expresión sea false .

Veamos otro ejemplo:

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

Y la salida será:

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

vemos que solo tenemos 6 líneas para 6 números, porque las condiciones están anidadas de manera que se garantiza una sola impresión por número y también (aunque no se pueden ver directamente desde la salida) no se realizan comprobaciones adicionales, por lo que si un número ni siquiera tiene ningún punto para verificar si 4 es uno de sus divisores.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow