Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 93/12/08 1
Fundamentos de InformáticaParte III – Programación en Matlab
Titulación: Ingeniería Técnica Industrial – Química IndustrialProfesor: José Luis Esteban
Escuela Superior de Ciencias Experimentales y Tecnología (ESCET)
Universidad Rey Juan Carlos
Curso académico 2008-2009
Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 93/12/08 2
Tema 9 – Sentencias de Selección
9.1. Las sentencias de selección9.2. La sentencia de selección IF9.3. La sentencia de selección SWITCH
Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 93/12/08 3
Tema 9.1.
Las sentencias de selección
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 4
Las sentencias de selección (1/2)
●Hasta ahora, las instrucciones de nuestros programas se ejecutan de forma secuencial una sola vez y en el orden en que se han escrito Instruccion1 Instruccion2 Instruccion3 ... InstrucciónN
●Las sentencias de selección permiten seleccionar la ejecución de actividades dependiendo de si se cumple o no una condición dada, es decir, alteran el orden secuencial de ejecución y controlan el flujo del programa
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 5
Las sentencias de selección (2/2)
●Ejemplo: SI en el examen de mañana apruebo, haré las maletas me iré de vacaciones SI NO me quedaré en casa estudiaré para el examen de septiembre
●En lenguaje Matlab, estas estructuras tiene una sintaxis propia y permiten elegir qué sentencias se van a ejecutar dependiendo de que se cumpla la condición especificada.
Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 93/12/08 6
Tema 9.2.
La sentencia de selección IF
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 7
La construcción del bloque IF
●Sintaxis: La estructura de este bloque es: if expresión lógica
secuencia de instruccionesend
●Semántica: 1. Se evalúa expresión lógica
El resultado puede ser verdadero (1) o falso (0)2. Si es verdadero (1),
se ejecuta secuencia de instrucciones y después se siguen ejecutando las instrucciones que siguen al end
3. Si es falso (0),se siguen ejecutando las instrucciones que siguen al end
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 8
La construcción del bloque IF - Diagrama
Secuencia de instrucciones
verdadero falso
end
Sentencia común
ExpresiónLógica
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 9
La construcción del bloque IF - Ejemplo
% RAIZ: calcula la raíz cuadrada si el
% número es positivo. Si no, no hace nada
x = input('Introduce un número: ');
if x > 0
x = sqrt(x);
end
disp(x);
>> raiz
Introduce un número: 4
2
>> raiz
Introduce un número: -4
-4
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 10
Expresiones lógicas matriciales● Si la expresión lógica es matricial
➢ el resultado será verdadero cuando lo sea cada elemento del vector lógico resultante.
➢ Si la matriz lógica resultante es vacía, el resultado se trata como falso
● Las construcciones de los dos recuadros son equivalentes:
>> raiz
Introduce un número: [1 2 3 4]
1.0000 1.4142 1.7321 2.0000
>> raiz
Introduce un número: [-1 0 1 2]
-1 0 1 2
if x > 0
instruccionesend
if all(x > 0)
instruccionesend
● Ejemplos utilizando el script raiz:
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 11
La construcción del bloque IF general
●Sintaxis: La estructura de este bloque es: if expresión lógica
secuencia de instrucciones 1else secuencia de instrucciones 2end
●Semántica:1. Se evalúa expresión lógica:
El resultado puede ser verdadero (1) o falso (0)2. Si es verdadero, se ejecuta secuencia de instrucciones 1.3. Si es falso, se ejecuta secuencia de instrucciones 2.4. Después se ejecutan la instrucciones que siguen al end.
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 12
La construcción del bloque IF general - Diagrama
verdadero falso
end
Sentencia común
ExpresiónLógica
Secuencia deinstrucciones 2
Secuencia deinstrucciones 1
else
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 13
La construcción del bloque IF general - Ejemplo
% EsPar: indica si un número es par
n = input('Introduce un número: ');
if mod(n, 2) == 0 disp('par');else disp('impar');end
>> esparIntroduce un número: 3impar>> esparIntroduce un número: 10par
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 14
IF anidados
●Es posible anidar estructuras IF generales en ambas ramas:
if exprlog1if exprlog2
secuencia_si1_si2else
secuencia_si1_no2end
elseif exprlog3
secuencia_no1_si3else
secuencia_no1_no3end
end
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 15
IF anidados – Ejemplo (1/2)
● Enunciado: dadas las longitudes de tres lados (a, b y c), decidir si forman un triángulo y de qué tipo es:➢ Es triángulo si la suma de dos lados
cualesquiera es mayor que el otro lado➢ Es equilátero si los lados son iguales➢ Es isósceles si dos de los lados son iguales➢ Es escaleno si los tres lados son distintos
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 16
IF anidados – Ejemplo (2/2)% Triangulo: determina si tres lados pueden% formar un triangulo, y de que tipo
% Entrada de datosl = input('Vector con los tres lados, de la forma [a b c]: ');% Usamos tres variables por claridad del codigoa = l(1);b = l(2);c = l(3);
% Operaciones y salida de datosif a+b>c && a+c>b && b+c>a % Es triángulo? if a==b && b==c % Todos los lados iguales ? disp('Equilátero'); else if a~=b && b~=c && a~=c % Todos los lados diferentes? disp('Escaleno'); else disp('Isosceles'); end endelse disp('No es un triángulo');end
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 17
Nota de estilo – Sangrados
if a+b>c && a+c>b && b+c>a if a==b && b==c disp('Equilátero'); else if a~=b && b~=c && a~=c disp('Escaleno'); else disp('Isosceles'); end endelse disp('No es un triángulo');end
if a+b>c && a+c>b && b+c>aif a==b && b==cdisp('Equilátero');elseif a~=b && b~=c && a~=cdisp('Escaleno');elsedisp('Isosceles');endendelsedisp('No es un triángulo');end
● Los sangrados no son obligatorios pero ayudan a entender un programa.
● Es habitual que cada bloque de instrucciones subordinado vaya desplazado a la derecha con respecto al if-end que lo contiene.
● Compárese la legibilidad del código en estos dos ejemplos:
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 18
IF encadenados – elseif (1/2)
● Cuando se comprueba una serie de condiciones excluyentes entre sí, puede producirse un excesivo anidamiento en las ramas else del if.
x = input('Numero par entre 0 y 100: ');
if x < 0 disp('Error: Menor que cero');else if x > 100 disp('Error: Mayor que 100'); else if mod(x, 2) ~= 0 disp('Error: No es par'); else disp('Bravo, por fin'); end endend
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 19
IF encadenados – elseif (2/2)
● En este caso es posible encadenar estructuras IF utilizando elseif:
x = input('Num par entre 0 y 100: ');
if x < 0 disp('Error: Menor que cero');else if x > 100 disp('Error: Mayor que 100'); else if mod(x, 2) ~= 0 disp('Error: No es par'); else disp('Bravo, por fin'); end endend
x = input('Num par entre 0 y 100: ');
if x < 0
disp('Error: Menor que cero');
elseif x > 100
disp('Error: Mayor que 100');
elseif mod(x, 2) ~= 0
disp('Error: No es par');
else
disp('Bravo, por fin');
end
Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 93/12/08 20
Tema 9.3.
La sentencia de selección SWITCH
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 21
SWITCH
●Se utiliza para determinar la ejecución de una secuencia de instrucciones entre múltiples alternativas.
●La secuencia de instrucciones a ejecutar se selecciona en función del resultado de evaluar una expresión criterio que puede tomar una colección predefinida de valores numéricos o cadenas de caracteres.
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 22
SWITCH – Sintaxis (1/2)
switch criteriocase valor1
Secuencia sentencias 1case valor2
Secuencia sentencias 2...case valorN
Secuencia sentencias Notherwise
Secuencia sentencias N+1end
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 23
SWITCH – Sintaxis (2/2)
●Criterio puede ser una expresión de tipo numérico o cadena de caracteres➢ Conviene evitar expresiones que produzcan números reales
porque el error de redondeo puede hacer que el resultado nunca coincida con un valor especificado en un case.
●Cada uno de los valor i es uno o más valores posibles que puede tomar el criterio.
●La forma de estos valores puede ser:➢Un único valor➢Una lista de valores entre llaves {v1, v2, v3...}
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 24
SWITCH – Semántica
●Se evalúa la expresión criterio●Si el resultado de evaluar criterio coincide con el valor o
lista de valores de valor1 entonces se ejecuta el conjunto de instrucciones Secuencia sentencias 1
●Si no, si el resultado de evaluar criterio coincide con el valor o lista de valores de valor2 entonces se el conjunto de instrucciones Secuencia sentencias 2
● ... y así sucesivamente con cada CASE●En caso de que expresión no satisfaga ningún valor de los
especificados en alguno de los CASE, se ejecuta el conjunto de instrucciones Secuencia sentencias n+1
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 25
SWITCH – Diagrama
Valor 1
otherwise
end
CriterioValor 2
Secuencia sentencias 2
Valor N
Secuencia sentencias N
Secuencia sentencias N+1
Secuencia sentencias 1
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 26
SWITCH – Ejemplo (1/2)
● En un ciclo de 24, podemos determinar cuál es cada una de las partes del día, según la tabla siguiente. Elaboraremos un script que pida al usuario una hora entera y que devuelva por pantalla el nombre de la parte del día:
Hora Parte del día
01 a 67 a 11
1213 a 2021 a 23
24Otros
MedianocheMadrugada
MañanaMediodía
TardeNoche
MedianocheError
3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 27
SWITCH – Ejemplo (2/2)
h = input('Hora: ');
switch h case {0, 24} disp('Medianoche'); case {1, 2, 3, 4, 5, 6} disp('Madrugada'); case {7, 8, 9, 10, 11} disp('Mañana'); case 12 disp('Mediodia'); case {13, 14, 15, 16, 17, 18, 19, 20} disp('Tarde'); case {21, 22, 23} disp('Noche'); otherwise disp('Error');end