MATLAB Language
Condiciones
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:
- La posición de la
end
en el lugar correcto para cadaif
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í. - 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 seafalse
.
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.