Fundamentos de Informática Parte III Programación en Matlab Titulación: Ingeniería Técnica Industrial Química Industrial Profesor: José Luis Esteban Escuela Superior de Ciencias Experimentales y Tecnología (ESCET) Universidad Rey Juan Carlos Curso académico 2008-2009 3/12/08 Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 9 1
Tema 9 Sentencias de Selección 9.1. Las sentencias de selección 9.2. La sentencia de selección IF 9.3. La sentencia de selección SWITCH 3/12/08 Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 9 2
Tema 9.1. Las sentencias de selección 3/12/08 Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 9 3
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 depio 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 4
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 depio de que se cumpla la condición especificada. 3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 5
Tema 9.2. La sentencia de selección IF 3/12/08 Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 9 6
La construcción del bloque IF Sintaxis: La estructura de este bloque es: if expresión lógica secuencia de instrucciones 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 3. Si es falso (0), se siguen ejecutando las instrucciones que siguen al 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 - Diagrama verdadero Expresión Lógica falso Secuencia de instrucciones Sentencia común 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 - 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); 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 9
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: Ejemplos utilizando el script raiz: if x > 0 instrucciones if all(x > 0) instrucciones >> 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 3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 10
La construcción del bloque IF general Sintaxis: La estructura de este bloque es: if expresión lógica secuencia de instrucciones 1 secuencia de instrucciones 2 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. 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 - Diagrama verdadero Secuencia de instrucciones 1 Expresión Lógica falso Secuencia de instrucciones 2 Sentencia común 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 - Ejemplo % EsPar: indica si un número es par n = input('introduce un número: '); if mod(n, 2) == 0 disp('par'); disp('impar'); >> espar Introduce un número: 3 impar >> espar Introduce un número: 10 par 3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 13
IF anidados Es posible anidar estructuras IF generales en ambas ramas: if exprlog1 if exprlog2 secuencia_si1_si2 secuencia_si1_no2 if exprlog3 secuencia_no1_si3 secuencia_no1_no3 3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 14
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 15
IF anidados Ejemplo (2/2) % Triangulo: determina si tres lados pueden % formar un triangulo, y de que tipo % Entrada de datos l = input('vector con los tres lados, de la forma [a b c]: '); % Usamos tres variables por claridad del codigo a = l(1); b = l(2); c = l(3); % Operaciones y salida de datos if a+b>c && a+c>b && b+c>a % Es triángulo? if a==b && b==c % Todos los lados iguales? disp('equilátero'); if a~=b && b~=c && a~=c % Todos los lados diferentes? disp('escaleno'); disp('isosceles'); disp('no es un triángulo'); 3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 16
Nota de estilo Sangrados Los sangrados no son obligatorios pero ayudan a enter un programa. Es habitual que cada bloque de instrucciones subordinado vaya desplazado a la derecha con respecto al if- que lo contiene. Compárese la legibilidad del código en estos dos ejemplos: if a+b>c && a+c>b && b+c>a if a==b && b==c disp('equilátero'); if a~=b && b~=c && a~=c disp('escaleno'); disp('isosceles'); disp('no es un triángulo'); if a+b>c && a+c>b && b+c>a if a==b && b==c disp('equilátero'); if a~=b && b~=c && a~=c disp('escaleno'); disp('isosceles'); disp('no es un triángulo'); 3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 17
IF encadenados if (1/2) Cuando se comprueba una serie de condiciones excluyentes entre sí, puede producirse un excesivo anidamiento en las ramas del if. x = input('numero par entre 0 y 100: '); if x < 0 disp('error: Menor que cero'); if x > 100 disp('error: Mayor que 100'); if mod(x, 2) ~= 0 disp('error: No es par'); disp('bravo, por fin'); 3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 18
IF encadenados if (2/2) En este caso es posible encadenar estructuras IF utilizando if: x = input('num par entre 0 y 100: '); if x < 0 disp('error: Menor que cero'); if x > 100 disp('error: Mayor que 100'); if mod(x, 2) ~= 0 disp('error: No es par'); disp('bravo, por fin'); x = input('num par entre 0 y 100: '); if x < 0 disp('error: Menor que cero'); if x > 100 disp('error: Mayor que 100'); if mod(x, 2) ~= 0 disp('error: No es par'); disp('bravo, por fin'); 3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 19
Tema 9.3. La sentencia de selección SWITCH 3/12/08 Ingeniería Técnica Industrial (Química) 2008-09 - "Fundamentos de Informática" - Tema 9 20
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 21
SWITCH Sintaxis (1/2) switch criterio case valor1 Secuencia sentencias 1 case valor2 Secuencia sentencias 2... case valorn Secuencia sentencias N otherwise Secuencia sentencias N+1 3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 22
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 23
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 24
SWITCH Diagrama Valor 1 Valor 2 Criterio Valor N otherwise Secuencia sentencias 1 Secuencia sentencias 2 Secuencia sentencias N Secuencia sentencias N+1 3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 25
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 0 1 a 6 7 a 11 12 13 a 20 21 a 23 24 Otros Parte del día Medianoche Madrugada Mañana Mediodía Tarde Noche Medianoche Error 3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 26
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'); 3/12/08 Ingeniería Técnica Industrial (Química) 2008-2009 - "Fundamentos de Informática" - Tema 9 27