Вы находитесь на странице: 1из 15

Captulo 5

Instrucciones de decisin

Universidad Nacional San Cristbal de Huamanga Escuela Profesional de Ingeniera Civil Programacin Digital - IC246 Guas de Clase
http://cgedmundo.wordpress.com

La ejecucin del cdigo fuente o ujo de las rdenes de MATLAB se ejecuta secuencialmente, de arriba hacia abajo y de izquierda a derecha, siempre se ejecutan todas las rdenes agrupadas en una funcin o mediante un script ; en ocasiones es necesario decidir que cierto bloque de cdigo fuente se ejecute solamente bajo una determinada condicin o decidir ejecutar un bloque de cdigo fuente dependiendo del estado de una condicin, pudiendo ser la condicin verdadera o falsa, queda asociada las instrucciones respectivas para cada caso o si se dispone muchas alternativas y su ejecucin depende nicamente del estado de la condicin. Por ejemplo, es necesario el uso de las instrucciones de decisin cuando: Dado un polinomio de segundo grado de la forma f pxq ax2 ` bx ` c, y es necesario obtener las races de ste, es decir valores x para las cuales la funcin f pxq se anula (f pxq 0). La solucin se obtendr mediante la frmula cuadrtica y establece que?los va2 lores de la variable x que hacen nulo a la funcin estn dadas por x1,2 b 2ba 4ac , donde la expresin b2 4ac es denominado discriminate () y del valor que tome depende los resultados de la funcin. Las races dependiendo de la discriminate, pueden ser: 1. Si 0 entonces las races ? son nmeros ?reales y distintos entre s, que estn b dados mediante: x1 b` y x 2 2a 2a 2. Si 0 entonces las races son nmeros reales e iguales y est dado por x1 x2 2ba 3. Si 0 las races son nmeros complejos conjugados, las mismas que estn ? ? i i b b dados mediante: x1 2a ` 2a y x2 2a 2a 5

En estos casos la ejecucin del cdigo fuente ya no debe ser secuencial, su ejecucin depender del estado de la condicin, en este caso la condicin es la discriminante, generndose saltos en el orden de la ejecucin del cdigo. Mediante las estructuras de decisin es posible controlar el ujo del programa, siempre dependiendo del resultado de una condicin, en MATLAB existen cuatro estructuras para establecer instrucciones de decisin y son los siguientes: a) Instruccin if - end, estructura de decisin simple, ejecuta las instrucciones asociadas solamente cuando la condicin evaluada es verdadera. b) Instruccin if - else - end, estructura de decisin que ejecuta un conjunto de instrucciones dependiendo dele estado de la condicin, dispone instrucciones asociadas para cada caso, cuando la condicin sea verdadera o falsa. c) Instruccin if - elseif - end, estructura de decisin mltiple, ejecuta las instrucciones asociadas para aquel que la condicin sea verdadera. d) Instruccin switch - case - end, otra estructura de decisin mltiple, solamente ejecuta las instrucciones que se corresponde para la condicin evaluada a verdadero. Las condiciones estn formados por instrucciones donde siempre es necesario el uso de los operadores relacionales y/o los operadores lgicos.

5.1.

Operadores relacionales

Las operadores relacionales se utilizan para comparar variables del mismo tipo, en MATLAB R2013a es posible utilizar las varibles relacionales mostrado en la Tabla 5.1; como resultado del uso de stos operadores se obtendr el valor uno o cero, en correspondencia si es verdadero o falso la relacin entre las variables comparadas, en consecuencia, para MATLAB se dispone de la siguiente relacin: Al comparar dos variables del mismo tipo mediante cualquier operador relacional, mostrado en la Tabla 5.1, es posible obtener dos nicos valores: uno (01) o cero (0). Si la comparacin entre dos variables resulta verdadero, el valor devuelto por MATLAB es uno, en general cualquier valor distinto de cero ser interpretado por MATLAB como verdadero (tipo de dato booleano). Cuando la comparacin entre dos variables resulta falso, el valor devuelto por MATLAB es cero. Los operadores relacionales siempre requieren dos variables para operar sobre ellos y devolver una sola respuesta, es necesario aclarar que stos operadores comparan todos los tipos de datos, incluso tipos de datos distintos, la sintaxis general para su utilizacin queda de la siguiente manera.

Cuadro 5.1: Operadores relacionales Operador > < >= <= == Signicado mayor menor mayor o igual menor o igual igual distinto que que que que que que

1 2 3 4 5 6

% sintaxis general para los operadores relacionales en MATLAB (variable 1) Operador (variable 2) % donde: % variable 1: es una variable % variable 2: es una variable % operador: en este caso son los operadores <, >, <=, >=, ==, ~=

El Cdigo Fuente 5.1 se muestra el uso de los operadores relacionales, se inicia creando y asignando las variables A y B, seguidamente se comparas las variables A y B con cada operador mostrado en la Tabla 5.1, se puede observar que cuando la comparacin de cierta MATLAB devuele uno, caso contrario devuelve cero. Listing 5.1: Uso de las operadores relaciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
>> A=12.4; % crea y asigna variable A >> B=45.98; >> A > B % A es mayor que B? ans = 0 >> A < B % A es menor que B? ans = 1 >> A == B % A es igual que B? ans = 0 >> A >= B % A es mayor o igual que B? ans = 0 >> A <= B % A es menor o igual que B? ans = 1 >> A ~= B % A es distinto que B? ans = 1 >>

5.2.

Operadores lgicos

Los operadores lgicos utilizan solamente variables booleanas1 y devuelve, de igual manera, solamente una variable booleana, es utilizado para tomar una decisin que generalmente depende de varias comparaciones a base de operaciones relacionales.

5.2.1.

Tipos de operadores lgicos en MATLAB

En MATLAB las operaciones lgicos ms usuales estn mostrados en la Tabla 5.2. El operador de disyuncin representado por || (operador lgico o) devuelve un valor booleano falso solamente cuando cuando las dos variables booleanas evaluadas son falsos, caso contrario siempre devuelve uno; al contrario que el operador de conjuncin && (operador lgico i) que devuelve uno (1) cuando ambas variables booleanas evaluadas son nmeros distintos de cero, caso contrario siempre devolver un nmero cero (falso); mientras que el operador de negacin representado po cambia el estado de una variable booleana, si es verdadero(nmero distinto de cero) hace que sea falso (cero) y si es falso la aplicacin del operador sobre sta variable devolver uno; tal como se muestra en la Tabla 5.3. Cuadro 5.2: Operadores lgicos Operador || && Signicado o (operador disyuncin) y (operador conjuncin) negacin

Cuadro 5.3: Tabla de verdad operador conjuncin, disyuncin y negacin X V V F F Y V F V F X F F V V Y F V F V X || Y V V V F X &&Y V F F F xorpX, Y q F V V F

5.2.2.

Sintaxis para su uso

El uso de los operadores lgicos diere sustancialmente por el nmero de datos requeridos, los operadores de disyuncin y conjuncin requieren dos variables booleanas, mientras que el operador de negacin requiere solamente una. La sintaxis para los operadores de disyuncin y conjuncin es el siguiente:

1 En MATLAB las variables tipo boleano (boolean) solamente pueden contener un nico valor, uno o cero.

1 2 3 4 5 6

% sintaxis para los operadores booleanos de conjuncin y disyuncin (boolean 1) Operador (boolean 2) % donde: % boolean 1: es una variable tipo booleano % boolean 2: es una variable tipo booleano % operador: en este caso son los operadores ||, &&

El operador lgico de la negacin, opera solamente sobre una variable tipo booleano y su sintaxis se muestra seguidamente.
1 2 3 4 5
% sintaxis para el operador relacional de negacin Operador (boolean 1) % donde: % boolean 1: es una variable tipo booleano % operador: en este caso es el operador de negacin ~

El Cdigo Fuente 5.2 muestra el uso de los operadores lgicos de disyuncin, conjuncin y negacin.

Listing 5.2: Uso de los operadores lgicos


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
>> A=54.8; % declara y asigna variables >> B=78.2; >> A > B % A es mayor que B? ans = 0 % valor devuelto - equivalente a falso >> ~(A > B) % % A es mayor que B? pero la negacin ~ cambia el estado del valor devuelto de cero a uno ans = 1 >> (A>B) || (A<B) % A es mayor que B ? o A es menor que B? ans = 1 % valor devuelto, equivalente a verdadero >> 1 && 1 % lo mismo que preguntar: verad? y verdad? ans = 1 >> 0 && 1 % lo mismo que preguntar falso? y verdad? ans = 0 >>

5.3.

Instruccin de decisin if - end (si - n)

En MATLAB la instruccin de decisin bsica if - end dispone, para su implementacin, de la sintaxis mostrada seguidamente:
1 2 3 4 5
% Estructura de una instruccin de decisin si - Sintaxis de la instruccin de decisin if - end (si - fin) % otras instrucciones antes del if if condicin procesos end

% ms instrucciones despus de end

El ujo del cdigo se ejecuta de la siguiente manera: Luego que el procedimiento llegue a la lnea del cdigo donde se encuentra if evala la condicin, la condicin es el resultado de comparar variables mediante los operadores relacionases y/o los operadores lgicos. Si la condicin evaluada resulta verdadero, valor del tipo de dato booleano distinto de cero, entonces se ejecuta las instrucciones indicadas en procesos y las instrucciones despus de end, se ejecuta todas las instrucciones contenidas entre if (si) y end (n) y las consideradas despus de end (n). Si la condicin evaluada resulta falso, un valor igual a cero, no se ejecuta las instrucciones contenida en procesos, avanzando la lnea de ejecucin a las instrucciones despus de end (n). Las instrucciones contenida en procesos slo se ejecuta cuando la condicin es evaluada a un valor distinto de cero, si la condicin evaluada es falso no se ejecutar las instrucciones especicadas en procesos.

5.3.1.

Pseudocdigo para la instruccin if end

Una de las formas de expresin de un algoritmo queda establecida mediante un pseudocdigo, para la instruccin de decisin if - end, sin tratar se ser denitivo sino una alternativa al pseudocdigo, para la instruccin actual queda expresada mediante el Pseudocdigo 1, donde muestra todos los campos de acuerdo a la sintaxis de la instruccin de decisin if - end. Algoritmo 1: Pseudocdigo instruccin de decisin if - end Datos: Ingresar datos Resultado: Especicar resultados
1 2 3 4 5

inicio; Si condition Entonces then block Fin n;

5.3.2.

Diagrama de ujo

El algoritmo expresado mediante un diagrama de ujo queda establecido como se muestra en al Figura 5.1, de igual manera, ste diagrama de ujo muestra todos los campos en correspondencia a la sintaxis de la estructura de decisin if - end.

5.3.3.

Ejemplos

La siguiente aplicacin se realiza con nes didcticos y consiste en evaluar la minora de edad de una persona, el Cdigo Fuente 5.3 muestra una funcin que 10

Condicin

S No

Proceso

Figura 5.1: Diagrama de ujo estructura de decisin si - n (if - end) recibe de argumento un nico valor, expresado por A, si el valor de A es mayor o igual a cero y menor a 18 entonces la funcin muestra el mensaje y termina, caso contrario no realiza ninguna accin.

Listing 5.3: Funcin menor de edad


1 function MyEdadd( A ) 2 % Funcin que se ejecuta siempre que el argumento de ingreso sea menor a 18
aos y mayor a cero

3 if (A < 18) && (A>=0) % condicin: 4 mensaje = 'eres menor de edad!'; % se ejcuta si la condicin es
verdadero

5 msgbox(mensaje, 'Mi Edad', 'warn', 'modal'); 6 end 7 end

5.4.

Instruccin de decisin if - else - end (si - en otro caso - n)

Al contrario que la instruccin de decisin if - end, que solamente ejecuta el procedimiento cuando la condicin es evaluada a verdadero, esta estructura de decisin if - else - end (si - en otro caso - n) est implementado para realizar procesos sea la condicin verdadera o falsa, un proceso distinto para cada condicin, la sintaxis en MATLAB es lo que se muestra seguidamente:
1 2 3 4
% Estructura de una instruccin de decisin si - en otro caso / en caso contrario - fin % otras instrucciones antes del if if condicin proceso uno % se ejecuta cuando la condicin es verdadero

11

5 6 7 8

else proceso dos % se ejecuta cuando la condicin es falso end % ms instrucciones despus de end

El ujo del proceso se realiza de la siguiente manera: La estructura, despus de if evala la condicin, sta condicin puede ser cero (falso) o uno (verdad). Cuando la condicin es verdad (true - un nmero distinto de cero) se ejecuta las instrucciones del proceso uno para luego continuar las instrucciones consideradas despus de end (n). Si la condicin es falso, se ejecuta las instrucciones del proceso dos, una vez culminado continua ejecutando las instrucciones despus de end (na). Esta estructura de decisin est implementado para ejecutar procesos distintos asociados a la evaluacin de la condicin.

5.4.1.

Pseudocgo

Teniendo en cuenta la sintaxis de la estructura de decisin if - else - end, el Pseudocdigo 2 reeja todos los campos requeridos, de igual manera est implementado para evaluar la condicin y los proceso asociados en concordancia a la condicin sea verdadera o falsa. Algoritmo 2: Pseudocdigo instruccin de decisin if - else - end Datos: Ingresar datos Resultado: Especicar resultados
1 2 3 4 5 6 7

inicio; Si condition Entonces then block En otro caso else block Fin n;

5.4.2.

Diagrama de ujo

El diagrama de ujo est representado por la Figura 5.2, de igual manera en su elaboracin se tom en cuenta la sintaxis de la estructura if - else - end.

5.4.3.

Ejemplos

La siguiente aplicacin muestra un mensaje de acuerdo al argumento A, la aplicacin inicia evaluando si la variable A es menor a 18, si es verdad crea la variable mensaje conteniendo menor de edad y ejecuta las instrucciones despus de end (n)mostrando el mensaje; si la evaluacin resulta falso crea la variable mensaje 12

Condicin

No

Proceso Condicin No

S
Proceso Condicin S

Figura 5.2: Diagrama de ujo estructura de decisin si - en otro caso (if - else) conteniendo mayor de edad y ejecuta las instrucciones despus de end, que de igual manera muestra el mensaje.

Listing 5.4: Funcin que evala la edad


1 function [ Edad ] = MyEdad( A ) 2 % Funcin que evala la mayora de edad dependiendo del arguemento 3 if A<18 % condicin 4 mensaje = 'eres menor de edad!'; % se ejcuta si la condicin es 5 6 7 8 9
verdadero else mensaje = 'eres mayor de edad'; % se evala si la condicin es falso end msgbox(mensaje, 'Mi Edad', 'warn', 'modal'); % se ejecuta siempre end

5.5.

Instruccin de decisin mltiple if - elseif - end (si - en otro caso - si, n)

Instruccin que permite tomar una decisin entre muchas alternativas o condiciones, la sintaxis utilizada en MATLAB para implementar una estructura de decisin mltiple es la siguiente:
1 2 3 4 5 6 7
% Estructura de una instruccin de decisin si - en otro caso, si caso - fin. Estructura de decisin mltiple. % instrucciones antes de la estructura if if condicin uno proceso uno elseif condicin dos proceso dos elseif condicin tres - en otro

13

8 9 10 11 12 13 14

proceso tres % tantas condiciones sean necesarias else % condicin si no cumple ninguna de las anteriores proceso por defecto end % ms instrucciones despus de end

El ujo de la ejecucin del cdigo en una estructura de decisin mltiple se realiza de la siguiente manera: Evala la condicin que se encuentra despus de if, la condicin uno, en caso la condicin evaluada sea verdadero se ejecuta las instrucciones contenidas por el proceso uno y contina con las instrucciones que se encuentran despus de end; pero si la condicin evaluada es falso contina evaluando las condiciones siguientes de cada elseif hasta encontrar una condicin que se evala en verdadero y ejecuta las instrucciones implementadas correspondientes a dicha condicin, seguidamente contina ejecutando las instrucciones despus de end. Si ninguna de las condiciones evaluadas resulta verdadero, se ejecuta las instrucciones denidas por defecto, los que se encuentran despus de else, para despus continuar la ejecucin de las instrucciones que se implementen despus de end. La instruccin de decisin mltiple if - elseif - end permite elegir una alternativa entre muchas opciones, el proceso ejecutado son las instrucciones correspondientes para el cual la condicin es evaluada a verdadero (nmero distinto de cero) y contina(salta) a las instrucciones despus de end; si ninguna condicin es verdadero se ejecuta las instrucciones establecidas por defecto y contina con las instrucciones despus de end.

5.5.1.

Pseudocdigo

En correspondencia a la sintaxis de la estructura de decisin mltiple if elseif - end, el Pseudocdigo 3 incluye todos los campos requeridos para elegir una condicin entre muchas.

14

Algoritmo 3: Pseudocdigo instruccin de decisin if - elseif - end Datos: Ingresar datos Resultado: Especicar resultados
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

inicio; Si condicin 01 Entonces procedimiento 01; Sin, si condicin 02 Entonces procedimiento 02; Sin, si condicin 03 Entonces procedimiento 03; Sin, si condicin 04 Entonces procedimiento 04; . . .; muchos ms condiciones; . . .; En otro caso se ejecuta si ninguno de las condiciones anteriores es verdadero; Fin n;

5.5.2.

Diagrama de ujo

El diagrama de ujo para una estructura de decisin mltiple queda establecida mediante la Figura 5.3, donde se muestra todos los campos necesarios para una estructura de decisin mltiple.

5.5.3.

Ejemplos

El tipo de ujo de un uido en tuberas queda clasicado de acuerdo al valor tomado por el Nmero de Reynodls (Re), para cuyos lmites se estable los siguientes tipos de ujos: Cuando Re 2100 se considera ujo estacionario, para valores de 2100 Re 10000 se considera ujo transitorio y para Re 10000 ujo turbulento, una funcin creada en MATLAB para clasicar el tipo de ujo tomando en cuenta el Nmero de Reynolds muestra el Cdigo Fuente 5.5.

Listing 5.5: Tipos de ujo en tuberas


1 function Re( re ) 2 % Funcin que clasifica el tipo de flujo de los fluidos en conductos 3 % cerrados de acuerdo al nmero de reynolds 4 % Detailed explanation goes here 5 if (re <= 2100) && (re>=0) % re es menor o igual a 2100 y re es mayor o
igual acero?

6 mensaje = 'Flujo Estacionario'; 7 elseif (re>2100) && (re<=10000) 8 mensaje = 'Flujo Transitorio'; 9 elseif re>10000

15

Condicin 1

Proceso 1

No

Condicin 2

Proceso 2

No

Condicin 3

Proceso 3

No

Proceso por Defecto

Figura 5.3: Diagrama de ujo estructura de decisin mltiple

16

10 11 12 13 14 15

mensaje = 'Flujo Turbulento'; else mensaje = 'Ingrese Re Adecuado'; end msgbox(mensaje, 'Tipo de Flujo', 'warn', 'modal'); % se ejecuta siempre end

La funcin requiere como argumento re, el Nmero de Reynolds, e inicia a vericar las condiciones establecidas, cuando encuentra una condicin que se evala a verdadero ejecuta las expresiones asociadas, en este caso crea y asigna la variable mensaje y contina ejecutando las rdenes despus de end, lo que muestra el mensaje.

5.6.

Instruccin de decisin mltiple switch (cambiar)

Estructura de decisin mltiple que evala un conjunto casos para switch expression cuya sintaxis en MATLAB queda establecido mediante:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
% Estructura de una instruccin de decisin switch % instrucciones antes de la estructura switch switch switch_expression case case_expression 1 process 1 case case_expression 2 process 2 case case_expression 3 process 3 % cuantos casos sean necesarios otherwise % si ninguno de los casos se ejecuta ( de otra manera) process end % instrucciones despus de end

El procedimiento se ejecuta tomando la secuencia siguiente: luego de que el ujo del cdigo llegue hasta switch almacena switch expression y busca su equivalente en cada uno de los casos, si se da el caso que switch expression es igual a case expression 1 entonces ejecuta las instrucciones asociadas a process 1 y contina ejecutando las instrucciones establecidas despus de end; pero si switch expression es distinto a case expression 1 entonces busca su equivalente en el resto de los casos y al encontrarla ejecuta las instrucciones asociadas al proceso correspondiente, para continuar con las instrucciones despus de end, y si switch expression no es equivalente a ningn case expression entonces ejecuta el proceso asociado a otherwise si existiese, dado que este campo es optativo y luego continuar con las instrucciones despus de end. La estructura de decisin mltiple switch solamente ejecuta un proceso y es aquel que se corresponde al caso cuando switch expression es igual a case expression 1, si ningn caso fuera equivalente a switch expression entonces ejecuta las instrucciones por defecto, en todos los casos siempre contina ejecutando las instrucciones despus de end. 17

5.6.1.

Pseudocdigo

Para la estructura de decisin mltiple switch se muestra el Pseudocdigo 4, en el cual se consideran todos los campos en correspondencia a la sintaxis correspondiente. Algoritmo 4: Pseudocdigo instruccin de decisin mltiple switch Datos: Ingresar datos Resultado: Especicar resultados
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

inicio; Seleccionar expresin Hacer Caso expresin 01 accin 01 Caso expresin 02 accin 02 Caso expresin 03 accin 03 Caso expresin 04 accin 04 . . .; Muchas ms casos; . . .; Sin No cumple ninguna de las anteriores accin ejecutado si ninguno de los casos se cumple; Fin Fin n;

5.6.2.

Diagrama de ujo

El diagrama de ujo para la estructura de decisin mltiple switch queda establecida mediante la Figura 5.3, donde se muestra todos los campos requeridos. Se debe tener en cuenta que esta estructura solamente admite el operador relacional de igualdad para evaluar la condicin en cada caso.

5.6.3.

Ejemplo

Con la nalidad de mostrar el uso de la estructura de decisin mltiple switch, se crea una aplicacin desde el entorno de desarrollo de MATLAB, cuya ventana principal se muestra en la Figura 5.4, a la ventana principal se le aade los controles: popupmenu y text, todas las propiedades se aceptan por defecto, excepto la propiedad string del popupmenu que ha sido modicado hasta su sptima la por: Fila 01, Fila 02, . . . , Fila 07. La funcin asociada al evento click del control popupmenu muestra el Cdigo Fuente 5.6.

Listing 5.6: Cdigo fuente para


1
% --- Executes on selection change in popupmenu1.

18

Figura 5.4: Ventana de la Aplicacin


2 function popupmenu1_Callback(hObject, eventdata, handles) 3 % hObject handle to popupmenu1 (see GCBO) 4 % eventdata reserved - to be defined in a future version of MATLAB 5 % handles structure with handles and user data (see GUIDATA) 6 7 % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
contents as cell array contents{get(hObject,'Value')} returns selected item from popupmenu1 % Obtiene la fila seleccioanda A= get(handles.popupmenu1, 'Value'); % inicia proceso de seleccin mltiple switch A case 1 % A es igual a uno? a=1; case 2 % A es igual a dos? a=2; case 3 a=3; case 4 a=4; case 5 a=5; case 6 a=6; otherwise a=7; end % cdigo fuente despus de end % convert to string a= num2str(a); % concatena la cadena de caracteres a=strcat('La fila seleccioanda es: ',a); % muestra set(handles.text1, 'String', a); %

La propiedad Value de un control popupmenu devuelve como un nmero entero la la seleccionada, cada caso son los encargados de asignar un valor correspondiente a la la seleccionada, las expresiones despus de end muestra la la seleccionada en la propiedad String del control text.

19

Вам также может понравиться