2 2 MODULO SOBRE PROGRAMACION MATLAB ESTRUCTURAS DE DECISION OBJETIVOS Al terminar éste módulo el estudiante estará en condiciones de: Utilizar proposición if para que ejecute una expresión si la condición es verdadera Utilizar estructura if para ramificar a un conjunto de proposiciones basandose en una condición Utilizar estructura if en forma anidadas para ramificar a un conjunto de proposiciones basandose en una condición Utilizar estructura if if en forma anidadas para ramificar a un conjunto de proposiciones basandose en una condición Utilizar ciclos con los condicionales if aritmético e if lógica Escribir los operadores lógicos correlacionandolos con expresiones relacionales Escribir expresiones lógicas INTRODUCCION En el módulo 1: Matlab elemental, se definen y analizan las proposiciones y operadores (aritméticos y lógicos) para poder escribir programas sencillos en Matlab, los cuales consistian en un número reducido de instrucciones que se ejecutaban secuencialmente en orden en el que aparecian en el listado del programa; esto es conocido como ejecución secuencial Una computadora no solo ejecuta instrucciones de forma secuencial fuera así, sería una calculadora de bolsillo Una computadora puede tomar decisiones basadas en pruebas especificas En otras palabras, depio del valor de una o varias variables especificas, cuando el programa es ejecutado, las decisiones pueden dar como resultado que una parte u otro del programa siga ejecutándose Las proposiciones que admiten las pruebas de decisión modifican el control dentro del programa Un concepto relativo es la capacidad que tienen las computadoras para ejecutar automaticamente un grupo de instrucciones una y otra vez, de manera repetitiva Esto es llamado un ciclo( o bucle) de programa En éste módulo estudiaremos las proposiciones en Matlab que alteran el control del programa, que son instrucciones cuyo resultado es una ejecución no secuencial de un conjunto de proposiciones Distinguiremos dos categorias de instrucciones: 1 Instrucciones de repetición -1-
2 Instrucciones de transferncia condicional PROPOSICION if lógica El if lógica es una proposición de transferencia condicional que evalúa una variable o una expresión aritmética y transfiere a una de las proposiciones asignadas, si la condición es verdadera o falsa La forma general para la proposición if lógica es: if expresión lógica Proposición ejecutable X <? La ejecución de la proposición if ocurre en el orden siguiente: 1 La expresión lógica se evalúa verdadera o falsa 2 la expresión lógica es verdadera, se efectúa la proposición ejecutable la proposición es de asignación (o cualquier otra permitida), se ejecuta proposición y el programa continúa con la primera proposición ejecutable despues de la if lógica 3 la expresión lógica es falsa, la corrida prosigue con la primera proposición ejecutable, luego de la if lógica El siguiente programa ejemplo ilustra el uso de esta proposición if EJEMPLO 21 USO CORRECTO DE UNA PROPOSICION if Considérese una situación donde el valor asignado a Y está en función del valor de N y el valor de Z= Y 2 Cuando N es menor o igual 2, Y es igual X N es mayor que 2, Y es igual 2 a 2X En uno u otro caso, Z debe tener un valor igual a Y Con los valores previamente definidos de N y X, el siguiente programa lo ayudará a analizar el uso de la proposición if lógica N<=2 N>2? Y=X Y=2X X=input( valor de X= ) N=input( valor de N= ) if N <= 2 Y=X; if N> 2 Y=2*X; Y,Z Z= Y 2-2-
ANALISIS: De acuerdo al diagrama de flujo, obsérvese que el simbolo de rombo se usa para la proposición if, pero solo dos trayectorias son necesarias para la ramificación Una ruta se identifica con un o verdadero, indicando la trayectoria lógica cuando la expresión lógica es verdadera, mientras que la otra se manifiesta con un o falso, señalando la ruta cuando la expresión es falsa Pueden usarse otras técnicas para alcanzar el mismo objetivo La fig 1 emplea una proposición if lógica y la fig 2 usa un if aritmético para tomar la decisión básica Fig 1 Algoritmo con if lógico Y=2X N 2 Y=X N=input( Valor de N= ) X=input( Valor de X= ) if N<=2 Y=X; Y=2*X; Z=Y 2 Y=2X N-2? Y=X N=input( Valor de N= ) X=input( Valor de X= ) if (N- 2) < 0 Y=X; Y=2*X; Z=Y 2 Fig 2 Algoritmo con if aritmético -3-
La fig 3 muestra un diagrama de flujo del uso incorrecto de la proposición if lógica para el programa Ejemplo 1: N 2 Y=2X Y= X N=input( Valor de N= ) X=input( Valor de X= ) if N<=2 Y=X; Y=2X; Y=2*X; Z= Y 2 Fig 3 Uso incorrecto de una proposición if lógica para el Ejemplo 1 CICLOS CON LA PROPOSICION if ARITMETICO La fig 4 contiene el segmento de programa para éste método Se inicializa un contador entero, N con un valor de 10 y a delta se le asigna su primer valor de 10 Se ejecuta la secuencia de operaciones la primera vez El valor de N se incrementa en 2 con N=N+1 La proposición if aritmética se ejecuta con N=2 y ya que N-2 es igual a cero se(proposición if es verdadera) hace la transferencia a la proposición que le asigna a delta un valor de 01 El valor de N se incrementa una vez más en 2 con N=N+1 Se ejecuta la proposición if aritmético con N=3 y a causa de que la expresión aritmética N-2 es mayor que cero(proposición if es falsa), la secuencia del programa continúa N=1 Delta=1 N= N+1 N-2? N =1; Delta = 1; N = N+1; if (N-2) == 0 Delta = 01; -4-
JERARQUIAS DE OPERACIONES RELACIONALES EN LAS EXPRESIONES LOGICAS En una expresión lógica, como: A + B > C/D^3 primero se evalúan las expresiones aritméticas de uno y otro lado del operador relacional Luego se hace la comparación de la relación entre los dos valores En una expresión que incluye alguno de los operadores & y (AND y OR) como: A + B > C & D < F/67 Las expresiones aritméticas son las primeras que se evalúan, de izquierda a derecha Luego se hace la comparación de cada expresión relacional, de izquierda a derecha Después se hace la comparación con el operador lógico & y una expresión contiene los operadores lógicos & y, las expresiones aritméticas son las primeras que en evaluarse, de izquierda a derecha Después se hace la comparación en cada expresión relacional, de izquierda a derecha, luego se hace la comparación & y al final la comparación (OR) Asi la expresión: A > B C < D & D == 76 tiene el mismo valor lógico que: A > B ( C < D & D == 76) Si se incluye más de un operador & u, se hacen todas las comparaciones & de izquierda a derecha, después se hacen todas las comparaciones de izquierda a derecha Asi la expresión: A > B & B == 75 D ~= E & C > F A ~= G es equivalente a : (( A > B & B == 75 ) ( D ~= E & C > F )) A ~= G Un resumen de la jerarquia de operaciones relacionales y lógicas puede enunciarse en cinco niveles: 1 Paréntesis 2 Evaluación de expresiones aritméticas 3 Comparación con operadores relacionales, de izquieda a derecha 4 Confrontación con el operador lógico &, de iquierda a derecha 5 Comparación con el operador l (OR), de izquierda a derecha Una proposición if ( aritmética o lógica) en un programa indica una decisión importantepor tanto, es de utilidad un comentario explicativo ESTRUCTURAS if Las limitaciones de los procedimientos que se analizaron anteriormente, pueden mejorarse mediante el uso de estructuras if, las cuales consisten en dos o más bloques o conjunto de proposiciones ordenadas de manera que puedan realizar procesos de ramificación más complejos Estas ramificaciones, aunque tienen caracteristicas similares a las de la proposición if lógica, proporcionan más flexibilidad al programador -5-
ESTRUCTURAS if Si la expresión lógica es falsa, de inmediato el control se pasa a la proposición que sigue a Las proposiciones del conjunto 3 se ignoran En caso de que la expresión lógica es verdadera, se realiza el conjunto de proposiciones 3 y se transfiere el control a la proposición que sigue a La forma general de la proposición if es: if (expresión lógica) Conjunto de proposiciones 3 EJEMPLO 22 USO DE LA PROPOSICIÓN if Calcule la raíz cuadrada de 45 Escriba en la línea de comando de Matlab: A = 45; if A>0 Raiz = A^05; Raiz La salida es: Raiz = 21213 ESTRUCTURA if La estructura if, permite al programador controlar el flujo lógico reducio al mínimo el número de transferencias La forma genérica de la estructura if es: if (expresión lógica ) Conjunto de proposiciones 1 Conjunto de proposiciones 2 En esta estructura, la expresión lógica if es identica a la que se usa en la proposición if lógica Los conjuntos de proposición 1 y 2 por lo general consta de una o más proposiciones la expresión lógica es verdadera, el control se pasa a la primera proposición del conjunto 1 y se ejecutan las proposiones entre if y Cuando se termina -6-
la ejecución de las proposiciones del conjunto 1, el control se transfiere a la proposición que sigue a la proposición Las proposiciones del conjunto 2 se ignoran Sin embargo, si la expresión lógica es falsa, las proposiciones del conjunto 1 no se toman en cuenta y el control se pasa a la primera proposición del conjunto 2 Cuando finaliza la ejecución de estas proposiciones, el control se transfiere a la que sigue a la proposición La flexibilidad de la estructura if se ilustra con el cálculo de la raiz cuadrada de la diferencia de dos números, que se muestra en el siguiente programa Ejemplo 23: EJEMPLO 23 Asigne los siguientes valores para A= -32 y B= 78; A= input( Introduzca el valor de A= ) B= input( Introduzca el valor de B= ) if (A-B) >= 0 Raiz = (A-B)^05; fprintf ( La raiz real de (A-B) es %75f\n,Raiz) Raiz =(B-A)^05; fprintf( La raiz cuadrada imaginaria de A-B es %73f\n,Raiz) USO DE LA ESTRUCTURA if ESTRUCTURAS if anidadas Las estructuras if anidadas pueden colocarse en cualquier conjunto de proposiciones de otra estructura if mediante un procedimiento conocido como anidamiento La forma genérica para anidamiento de dos estructuras if es la siguiente: if (expresión lógica) Conjunto de proposiciones 4 if (expresión lógica) Conjunto de proposiciones 5 Conjunto de poposiciones 6 Conjunto de proposiciones 7-7-
En éste módelo genérico, la ejecución se inicia con la primera proposición if lógica, la primera de la estructura if externa la expresión lógica de esta proposición es verdadera, se realizan las proposiciones del conjunto 4, luego se hace una transferencia de control a la primera proposición ejecutable después del último la expresión lógica es falsa, las proposiciones del conjunto 4 se ignoran y el control se pasa a la proposición que sigue al primer que, en esta forma general, es la if lógica de la estructura if interna La ejecución de la estructura if interna ocurre de manera normal y el control de modo eventualmente se transfiere a la primera proposición del conjunto 7 Cuando termina la ejecución de las proposiciones del conjunto 7, el control se transfiere a la primera proposición ejecutable después del último El siguiente programa ejemplo 24 muestra el uso de esta variedad de estructura if en un programa muy sencillo EJEMPLO 24 Asignéle a A y B los valores dados en el recuadro: A = input( Valor de A= ) B = input( Valor de B= ) if A== 0 A B disp( Elcociente de Bdividido entre A es indefinido ) 3 3 if B< A disp( El cociente de B dividido entre A es menor que 1 ) if (A B) >= 0 disp( El cociente de B dividido entre A es 1 ) disp( El cociente de B dividido entre A es mayor que 1 ) USO DE LA PROPOSICIÓN if anidadas La salida del programa es: El cociente de B dividido entre A es 1 El cociente de B dividido entre A es mayor que 1 El cociente de B dividido entre A es menor que 1 El cociente de B dividido entre A es indefinido -8-
ESTRUCTURA if if anidadas Pueden obtenerse mejoras adicionales mediante la proposición if de una estructura if interna para iniciar una estructura if externa La forma general de la estructura if anidadas utilizando la proposición if es: if (expresión lógica) Conjunto de proposiciones 8 if (expresión lógica) Conjunto de proposiciones 9 Conjunto de proposiciones 10 En esta forma general, si la expresión lógica de la estructura if externa es verdadera, se lleva a cabo las proposiciones del conjunto 8 y el control se transfiere a la siguiente proposición ejecutable, después de la expresión lógica de la estructura if externa es falsa, las proposiciones del conjunto 8 se ignoran y el control se pasa a la proposición if La primera del if interno La estructura if interna se ejecuta en la forma normal, utilizando la proposición externa para terminar su ejecución El siguiente programa Ejemplo 25 muestra el uso de esta variedad de estructura if if anidadas EJEMPLO 25 USO DE LA PROPOSICIÓN if if Asignéle a A los valores siguientes: [35 69 124 50 10] A =input( Valor de A= ) if A < 5 & A > 0 fprintf( \n %53f Es menor que 5 pero mayor que 0\n,A) if A< 10-9-
fprintf( \n %53f Es menor que 10 pero mayor que o igual a5\n,a) fprintf( \n %53f Es mayor que o igual a 10\n,A) EJEMPLO 26 Incremento del valor de una variable con un ciclo contador de ciclo clear,clc % Este programa calcula el perimetro y el area % de un ciculo para diferentes valores sucesivos % del diámetro Diam = [1:05:3]ʹ; N =0; Circun = pi*diam; Area = pi*(diam/2)^2; N = N+1; disp( ʹ RESULTADOS FINALESʹ ) disp(ʹ N Diam Circun Area ʹ) disp( [ N, Diam, Circun, Area]) RESULTADOS FINALES N Diam Circun Area 1 1000 31416 07854 2 1500 47124 17671 3 2000 62832 31416 4 2500 78540 49087 5 3000 94248 70686 Otra forma de resolver el problema del circulo es adicionar una variable contadora LVAL en el programa Se proporcionan dos valores en cada arreglo, el segundo valor en todos salvo, en el último arreglo, es cero Mientras que el valor asignado a LVAL es cero, las repeticiones continúan En el último arreglo se da a LVAL un valor mayor que cero Cuando LVAL es mayor que cero, se hace la transferencia a la proposición break El siguiente programa Ejemplo 7 ilustra éste método: -10-
INICIO Abrir Archivo De datos Encabezado de columnas Diam LVAL Circun = pi(diam) Area = pi(diam/2)^2 LVAL,Diam,Circun, Area EJEMPLO 27 USO DE LA VARIABLE CONTADORA % Este programa calcula el perimétro y % el área de un circulo clear,clc Diam = [1:05:3]ʹ; LVAL = [0 0 0 0 1]ʹ; % Comienza el conteo N= 0; % Perimetro del circulo Circun = pi*diam; % Area del circulo Area = pi*(diam/2)^2; % Comienza el primer conteo N = N + 1; % Encabezados de columnas disp(ʹ RESULTADOS FINALESʹ) disp(ʹ LVAL Diam(cm) Circun(cm) Area(cm2) ʹ) disp ([LVAL,Diam,Circun,Area]) % Decision if logica if LVAL >0 break LVAL >0 FIN RESULTADOS FINALES LVAL Diam(cm) Circun(cm) Area(cm2) 0 10000 314159 785398e00-1 0 15000 471239 1767147 0 20000 628318 3141594 0 25000 785398 4908741 1 30000 942478 7068586-11-