Tema 4. Estructuras selectivas 4.1 4.2 4.3 4.4 4.5 Selección simple Selección doble Selección múltiple Anidación de selecciones Aplicaciones Introducción • Algoritmos más complicados que una secuencia simple de instrucciones • Posibles alternativas resultantes de evaluar una determinada condición • En función del resultado se ejecuta una opción u otra booleana Condición valor numérico Selección simple/doble Selección múltiple 1 4.1 Selección simple ejecuta una determinada acción sólo cuando se cumple una determinada condición. instrucción1 instrucción2 if condición instrucción3 instrucción4 end instrucción5 instrucción6… Ejemplo function pts = precio(dist, dias) %precio precio de un viaje (ida y vuelta) % precio(dist,dias) calcula el precio del billete % según la distancia (2.5 pts/km) y los días % de estancia, con reducción del 30% si % la estancia supera los 7 días, y la distancia % los 800 km pts = dist * 2 * 2.5; if (dias > 7) & (dist > 800) pts = pts * 0.7; end 2 Otro ejemplo function m = mayor(a, b) %MAYOR elige el mayor de dos números % MAYOR(a,b) devuelve el mayor de los % dos parámetros. m = a; if a < b m = b; end 4.2 Selección doble Permite elegir entre dos alternativas en función del cumplimiento de una determinada condición. instrucción1 instrucción2 if condición instrucción3 instrucción4 else instrucción5 instrucción6 end instrucción7 … 3 Ejemplo function m = mayor(a, b) %MAYOR Elige el mayor de dos números % MAYOR(a,b) devuelve el mayor de los % dos parámetros. if a > b m = a; else m = b; end Otro ejemplo function ab = absoluto(n) %ABSOLUTO Valor absoluto. % ABSOLUTO(n) devuelve el valor % absoluto de n. if n >= 0 ab = n; else ab = -n; end 4 Encadenamiento de selecciones dobles Permite elegir entre varias alternativas en función del cumplimiento de diferentes condiciones. if condición1 instrucción1 elseif condición2 instrucción2 elseif condición3 instrucción3 elseif condición4 instrucción4 elseif condición5 instrucción5 end instrucción6 … Ejemplo function [x1,x2,n] = eq2(a,b,c) ... d = b^2 - 4*a*c; if (d > 0) ... n = 2; elseif (d == 0) ... n = 1; else n = 0; end 5 4.3 Selección múltiple Permite elegir entre varias alternativas en función del valor de una determinada expresión. instrucción1 switch expresión case valorA instrucción2 instrucción3 case valorB instrucción4 instrucción5 case valorC instrucción6 instrucción7 case {valorD, valorE} instrucción8 instrucción9 otherwise instrucción10 end instrucción11 Ejemplo function mes = nombremes(n) %NOMBREMES Nombre del mes. % NOMBREMES(n) devuelve la cadena % de caracteres correspondiente % al nombre del mes n (1-12). switch case 1 mes case 2 mes case 3 mes case 4 mes case 5 mes n = ’Enero'; = 'Febrero'; = 'Marzo'; = 'Abril'; = 'Mayo'; case 6 mes = 'Junio'; case 7 mes = 'Julio'; case 8 mes = 'Agosto'; case 9 mes = 'Septiembre'; case 10 mes = 'Octubre'; case 11 mes = 'Noviembre'; case 12 mes = 'Diciembre'; otherwise mes = ‘Error'; end 6 4.4 Anidación de selecciones Nada impide que las intrucciones, dentro de una selección, sean nuevas estructuras selectivas, y así sucesivamente… instrucción1 if condición1 instrucción2 instrucción3 if condición2 instrucción4 instrucción5 else instrucción6 end else instrucción7 instrucción8 end instrucción9 instrucción10 … Ejemplo function m = mayor3(a, b,c) %MAYOR3 Elige el mayor de tres números % MAYOR3(a,b,c) devuelve el mayor de los % tres parámetros. if a > b if a > m = else m = end else if b > m = else m = end end c a; c c b; c; 7 Diseños alternativos function m = mayor3(a, b, c) %MAYOR3 Elige el mayor de tres números % MAYOR3(a,b,c) devuelve el mayor de los % tres parámetros. d = mayor(a,b); m = mayor(d,c); function m = mayor3(a, b, c) %MAYOR3 Elige el mayor de tres números % MAYOR3(a,b,c) devuelve el mayor de los % tres parámetros. m = mayor(mayor(a,b),c); Otro ejemplo más function cnt = central(a, b, c) %CENTRAL Elige el número central. % CENTRAL(a,b,c) devuelve el valor % central de los tres parámetros. if a > b if b > c cnt = b; else if a > c cnt = c; else cnt = a; end end else if a > c cnt = a; else if b > c cnt = c; else cnt = b; end end end 8 4.5 Aplicación: ecuación de segundo grado function [x1,x2,n] = eq2(a,b,c) %EQ2 Ecuación de segundo grado % [x1,x2,n] = EQ2(A,B,C) calcula las soluciones % reales de la ecuación de segundo grado % A*x^2 + B*x + C = 0. Devuelve en x1 y x2 los % valores, y en n el número de soluciones. d = b^2 - 4*a*c; if (d > 0) x1 = (-b + sqrt(d)) / (2*a); x2 = (-b - sqrt(d)) / (2*a); n = 2; elseif (d == 0) x1 = -b / (2*a); n = 1; else n = 0; end Aplicación: cálculo de fechas function [ds,ms,as] = FechaSig(d,m,a) %FECHASEG Calcula la fecha siguiente. % [ds,ms,as] = FechaSig(d,m,a) calcula la fecha % del día siguiente en formato (día, mes, año) % al día especificado. ds = d + 1; 9 function n = NumeroDias(m,a) %Numerodias Número de días de un mes. % n = NumeroDias(m,a) calcula el número % de días del mes m (1-12) del año a. switch m case {1,3,5,7,8,10,12} n = 31; case {4,6,9,11} n = 30; case 2 otherwise n = -1; end function b = bisiesto(a) %BISIESTO Determina si el año es bisieto. % b = bisiesto(a) devuelve verdadero (1) si % el año es bisiesto y falso (0) en caso % contrario. 10 function m = multiplo(a,b) %MULTIPLO Determina si un número es % múltiplo de otro. % m = multiplo(a,b) devuelve verdadero % (1) si a es múltiplo de b y falso (0) % en caso contrario. Aplicación: validación de fechas function v = FechaValida(d,m,a) %FechaValida Determina si una fecha es válida. % v = FechaValida(d,m,a) devuelve verdadero % (1) si el dia, mes y año de la fecha son % congruentes,o falso (0) en caso contrario. 11 Bibliografia L. Joyanes. Fundamentos de Programación: Algoritmos y Estructuras de Datos. McGraw-Hill, 1992. Capítulo 3. J. Biondi, G. Clavel. Introducción a la Programación 1. 2ª edición. Mason, 1988. Capítulo 3. J. García de Jalón y otros. Aprenda Matlab 5.3 como si estuviera en primero. Madrid, Febrero 2001. 12