Sie sind auf Seite 1von 12

Tema 4.

Estructuras selectivas

4.1
4.2
4.3
4.4
4.5

Seleccin simple
Seleccin doble
Seleccin mltiple
Anidacin de selecciones
Aplicaciones

Introduccin

Algoritmos ms complicados que una


secuencia simple de instrucciones

Posibles alternativas resultantes de evaluar


una determinada condicin

En funcin del resultado se ejecuta una


opcin u otra

booleana
Condicin

valor
numrico

Seleccin
simple/doble
Seleccin
mltiple

4.1 Seleccin simple

ejecuta una
determinada
accin slo
cuando se cumple
una determinada
condicin.

instruccin1
instruccin2
if condicin
instruccin3
instruccin4
end
instruccin5
instruccin6

Ejemplo
function pts = precio(dist, dias)
%precio
precio de un viaje (ida y vuelta)
%
precio(dist,dias) calcula el precio del billete
%
segn la distancia (2.5 pts/km) y los das
%
de estancia, con reduccin del 30% si
%
la estancia supera los 7 das, y la distancia
%
los 800 km
pts = dist * 2 * 2.5;
if (dias > 7) & (dist > 800)
pts = pts * 0.7;
end

Otro ejemplo
function m = mayor(a, b)
%MAYOR
elige el mayor de dos nmeros
%
MAYOR(a,b) devuelve el mayor de los
%
dos parmetros.
m = a;
if a < b
m = b;
end

4.2 Seleccin doble

Permite elegir
entre dos
alternativas en
funcin del
cumplimiento de
una determinada
condicin.

instruccin1
instruccin2
if condicin
instruccin3
instruccin4
else
instruccin5
instruccin6
end
instruccin7

Ejemplo
function m = mayor(a, b)
%MAYOR
Elige el mayor de dos nmeros
%
MAYOR(a,b) devuelve el mayor de los
%
dos parmetros.
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

Encadenamiento de selecciones dobles

Permite elegir
entre varias
alternativas en
funcin del
cumplimiento de
diferentes
condiciones.

if condicin1
instruccin1
elseif condicin2
instruccin2
elseif condicin3
instruccin3
elseif condicin4
instruccin4
elseif condicin5
instruccin5
end
instruccin6

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

4.3 Seleccin mltiple

Permite elegir
entre varias
alternativas en
funcin del
valor de una
determinada
expresin.

instruccin1
switch expresin
case valorA
instruccin2
instruccin3
case valorB
instruccin4
instruccin5
case valorC
instruccin6
instruccin7
case {valorD, valorE}
instruccin8
instruccin9
otherwise
instruccin10
end
instruccin11

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

4.4 Anidacin de selecciones

Nada impide que las


intrucciones, dentro
de una seleccin,
sean nuevas
estructuras
selectivas, y as
sucesivamente

instruccin1
if condicin1
instruccin2
instruccin3
if condicin2
instruccin4
instruccin5
else
instruccin6
end
else
instruccin7
instruccin8
end
instruccin9
instruccin10

Ejemplo
function m = mayor3(a, b,c)
%MAYOR3
Elige el mayor de tres nmeros
%
MAYOR3(a,b,c) devuelve el mayor de los
%
tres parmetros.
if a > b
if a >
m =
else
m =
end
else
if b >
m =
else
m =
end
end

c
a;
c
c
b;
c;

Diseos alternativos
function m = mayor3(a, b, c)
%MAYOR3
Elige el mayor de tres nmeros
%
MAYOR3(a,b,c) devuelve el mayor de los
%
tres parmetros.
d = mayor(a,b);
m = mayor(d,c);

function m = mayor3(a, b, c)
%MAYOR3
Elige el mayor de tres nmeros
%
MAYOR3(a,b,c) devuelve el mayor de los
%
tres parmetros.
m = mayor(mayor(a,b),c);

Otro ejemplo ms
function cnt = central(a, b, c)
%CENTRAL
Elige el nmero central.
% CENTRAL(a,b,c) devuelve el valor
% central de los tres parmetros.
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

4.5 Aplicacin: ecuacin de segundo grado


function [x1,x2,n] = eq2(a,b,c)
%EQ2 Ecuacin de segundo grado
%
[x1,x2,n] = EQ2(A,B,C) calcula las soluciones
%
reales de la ecuacin de segundo grado
%
A*x^2 + B*x + C = 0. Devuelve en x1 y x2 los
%
valores, y en n el nmero 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

Aplicacin: clculo 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 da siguiente en formato (da, mes, ao)
% al da especificado.
ds = d + 1;

function n = NumeroDias(m,a)
%Numerodias
Nmero de das de un mes.
%
n = NumeroDias(m,a) calcula el nmero
%
de das del mes m (1-12) del ao 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 ao es bisieto.
% b = bisiesto(a) devuelve verdadero (1) si
% el ao es bisiesto y falso (0) en caso
% contrario.

10

function m = multiplo(a,b)
%MULTIPLO
Determina si un nmero es
%
mltiplo de otro.
% m = multiplo(a,b) devuelve verdadero
% (1) si a es mltiplo de b y falso (0)
% en caso contrario.

Aplicacin: validacin de fechas


function v = FechaValida(d,m,a)
%FechaValida
Determina si una fecha es vlida.
% v = FechaValida(d,m,a) devuelve verdadero
% (1) si el dia, mes y ao de la fecha son
% congruentes,o falso (0) en caso contrario.

11

Bibliografia

L. Joyanes. Fundamentos de Programacin: Algoritmos y


Estructuras de Datos. McGraw-Hill, 1992. Captulo 3.
J. Biondi, G. Clavel. Introduccin a la Programacin 1.
2 edicin. Mason, 1988. Captulo 3.
J. Garca de Jaln y otros. Aprenda Matlab 5.3 como si
estuviera en primero. Madrid, Febrero 2001.

12