Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 1 Tabla de contenido Introducción .................................................................................................................................. 2 Estructuras secuenciales ............................................................................................................... 2 Asignación ................................................................................................................................. 2 Entrada de datos básica ............................................................................................................ 3 Salida de datos básica ............................................................................................................... 4 Estructuras condicionales o de selección ...................................................................................... 7 Selección Simple ........................................................................................................................ 7 Selección Múltiple ..................................................................................................................... 8 Estructuras repetitivas o cíclicas ................................................................................................... 9 Ciclo Fijo o contado ................................................................................................................... 9 Ciclo condicional...................................................................................................................... 10 Recuerda ..................................................................................................................................... 11 Ejercicios ...................................................................................................................................... 12 Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 2 INTRODUCCIÓN El lenguaje de programación de Matlab permite las estructuras de control típicas de los lenguajes estructurados: • Estructuras secuenciales. • Estructuras condicionales o de selección. • Estructuras repetitivas o cíclicas. A continuación pasaremos a describir cada una de ellas junto con ejemplos de su utilización. ESTRUCTURAS SECUENCIALES Las estructuras de control secuencial son aquellas en las que las instrucciones se ejecutan una a continuación de otra en el orden en el que están escritas. Existen tres estructuras de control secuencial como son la operación de asignación, operación de entrada de datos y la de salida de datos. Asignación La operación de asignación (=) permite ir cambiando el valor de las variables que utiliza el programa. Este operador se ha comentado en la práctica anterior, y su sintaxis es la siguiente: Donde el valor que representa la expresión se almacenará en la variable. La operación de asignación es destructiva, es decir, la variable pierde el valor que tuviera almacenado. Esto determina que hay veces en las que el orden en que se realice la asignación es importante. Ejemplo. Supongamos las siguiente secuencia de asignaciones: x = 6; y = 9; z = 12; x = y; y = z; Tras la ejecución de las mismas, comprobad que los valores finales para las variables son: x = 9; y = 12; z = 12; Si cambiamos el orden de ejecución de la siguiente forma: x = 6; y = 9; z = 12; y = z; <identificador> = <expresión>; Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 3 x = y; Comprobemos que ahora el resultado cambia: x = 12; y = 12; z = 12; Entrada de datos básica Una de las instrucciones básicas de Matlab para la entrada o lectura de datos desde el teclado es la siguiente: Dicha instrucción muestra en pantalla el texto escrito en la misma y a continuación el cursor permanece en espera para que introduzcamos un valor a través del teclado. Tecleamos el valor que queramos introducir y al pulsar la tecla intro, dicho valor se almacena en la variable indicada a la izquierda de la asignación. Ejemplo. Tecleemos la siguiente instrucción: >> lado = input(‘Introduce el tamaño del lado: ’); Se mostrará en pantalla el mensaje y el cursor queda esperando que tecleemos un valor: Introduce el tamaño del lado: Si pulsamos 45 y luego intro: >> Introduce el tamaño del lado: 45 A la variable lado se le asigna el valor que hemos introducido: >> lado = 45 Si el valor que queremos introducir es un carácter o cadena de caracteres, podemos hacerlo de dos formas: 1. Usando la misma instrucción input, pero el valor que introducimos lo escribimos entre comillas. Ejemplo. Tecleemos la siguiente instrucción: >> nombre = input(‘Introduce el nombre de la asignatura: ’); Se escribirá en pantalla el mensaje y el cursor queda esperando que tecleemos un valor: Introduce el nombre de la asignatura: Ahora pulsamos I for ática : >> Introduce el nombre de la asignatura: ‘Informática’ Y a la variable nombre se le asigna dicha cadena >> nombre = <identificador> = input ( te to ); Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 4 Informática 2. Añadiendo un parámetro más a la función input: <identificador> = i put ( te to , s ); Ejemplo. Tecleemos la siguiente instrucción: >> nombre= input(‘Introduce el nombre de la asignatura: ’,’s’); Se escribirá en pantalla el mensaje y el cursor queda esperando que tecleemos un valor: Introduce el nombre de la asignatura: Ahora tecleamos Informática (sin comillas) y pulsamos intro: >> Introduce el nombre de la asignatura: Informática Y a la variable nombre se le asigna dicha cadena: >> nombre = Informática Se pueden introducir también listas de números. Para ello debemos dar los números separados por comas o espacios en blanco y entre corchetes, y toda la lista se almacenará en la variable puesta en la instrucción input. Ejemplo. Tecleamos la siguiente instrucción: >> lista= input(‘Introduce la secuencia de números: ’); Se escribirá en pantalla el mensaje y el cursor queda esperando que tecleemos un valor: Introduce la secuencia de números: Ahora tecleamos [1, 2, 7] y pulsamos intro: >> Introduce la secuencia de números: [1, 2, 7] Y a la variable lista se le asigna la lista de valores [1, 2, 7] >> lista = 1 2 7 Salida de datos básica Una de las instrucciones básicas de Matlab para la salida o escritura de datos en pantalla es la siguiente: Dicha instrucción muestra en pantalla el resultado de evaluar la expresión dada como argumento o el texto dado entre comillas. Ejemplo. Si tecleamos lo siguiente: >> area= 12; >> disp(‘El área es ’), disp(area); Se escribe en pantalla: disp (<expresión>); disp ( te to ); Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 5 >>El área es 12 En la instrucción también se pueden concatenar salidas de tipo cadena. Ejemplo. >> nombre=’Juan’; >> disp([‘Hola ’,nombre]); se escribe en pantalla: >> Hola Juan Si queremos concatenar con datos de tipo numérico, previamente se han de transformar a cadena mediante la función num2str. Ejemplo. Si tecleamos: >> area= 12; >> disp([‘El área es ’,num2str(area)]); Se escribe en pantalla lo siguiente: >>El área es 12 También se puede utilizar en Matlab, una instrucción de salida de datos con un formato similar al usado en el lenguaje de programación C: fprintf(‘texto %control1,%control2,...’, variable1, variable2,..) Ejemplo. Escribamos en pantalla: >> area= 12; >> fprintf(‘El área es %i’, area); Y se escribe en pantalla: >>El área es 12 >> Si añadimos \n se produce un salto de línea: >> fprintf(‘Elárea es %i \n’, area); Ahora se muestra el mensaje y el cursor pasa a la línea siguiente: >>El área es 12 >> Los controles representan los diferentes tipos de datos: Control Tipo %i, %d Entero %c Carácter Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 6 %f Real %s Cadena de caracteres Con los tres tipos de estructura secuencial vistos, asignación, entrada y salida de datos, se pueden resolver ciertos tipos de problemas, algo más complejos que los que hemos visto hasta ahora. A continuación vamos a plantear algunos problemas y mostraremos el programa que los resuelve utilizando las estructuras vistas. En los programas vamos a introducir comentarios que aclaren el problema resuelto. Ejemplo. Dado el radio de una circunferencia implementa un programa que calcule el perímetro de la misma. % Programa Calculo_perimetro % Entradas: el radio de una circunferencia % Salidas: el perímetro de la circunferencia % Constantes pi=3,1416 % Variables : radio, perimetro: REAL % Instrucciones del Programa radio=input(‘Introduce la medida del radio: ’); perimetro=2*pi*radio; disp(‘El perímetro de la circunferencia mide ’); disp(perimetro); Ejemplo. Dado el tamaño del lado de un cuadrado implementa un programa que calcule su área. % Programa Area_cuadrado % Entradas: el tamaño del lado de un cuadrado % Salidas: el área del cuadrado % Variables : lado, area: REAL % Instrucciones del Programa lado= input(‘Introduce la medida del lado: ’); area=lado^2; disp(‘El área es ’); disp(area); Ejercicio. Realiza un programa que pida el valor de 3 artículos y muestre el total y la media. Intenta formatear el resultado para que se muestren los valores con dos decimales. Ejercicio. En un hospital existen tres áreas: Ginecología, Pediatría y Traumatología. El presupuesto anual del hospital se reparte conforme a la siguiente tabla. Área Porcentaje del presupuesto: a. Ginecología 40% b. Traumatología 30% Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 7 c. Pediatría 30% Para un presupuesto dado, obtener la cantidad de dinero que recibirá cada área. ESTRUCTURAS CONDICIONALES O DE SELECCIÓN Las estructuras de control condicionales o de selección permiten decidir qué conjuntos de instrucciones ejecutar en función de la evaluación de una expresión. Selección Simple Esta estructura abre dos posibles caminos de ejecución ante la evaluación de una expresión lógica. Su sintaxis en Matlab es la siguiente: Se evalúa la expresión lógica y si el valor es VERDAD se ejecuta el bloque de instrucciones 1, mientras que si el valor es FALSO se ejecuta el bloque de instrucciones 2, aunque tengamos en cuenta que la parte else (el camino de ejecución cuando la condición es FALSA) es opcional. Ejemplo. Queremos implementar un programa que dado un número devuelva el valor absoluto del mismo. % Programa Absoluto % Entradas: un número % Salidas: el valor absoluto de dicho número % Variables : num, absoluto: REAL % Instrucciones del Programa num=input(‘Introduce un número: ’); absoluto=num; if (absoluto<0) absoluto=-absoluto; end disp(‘El valor absoluto es ’); disp(absoluto) Ejercicio. Implementa un programa que lea tres números y determine cuál es mayor de los tres. Ejercicio. Implementa un programa que lea un número entero y determine si es par o impar. if (expresión lógica) <Bloque instrucciones 1> else <Bloque instrucciones 2> end Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 8 Selección Múltiple Esta estructura de selección múltiple abre varios caminos de ejecución en función del valor que tome una expresión. Su sintaxis en Matlab es: Se compara el valor de la expresión con todos los literales empezando por el primero. En el momento en que sus valores coincidan, se ejecuta el bloque de instrucciones correspondiente y se para el proceso. Si el valor de la expresión no coincide con ninguno de los literales, se ejecuta el bloque de instrucciones por defecto, parte otherwise, aunque es opcional. Ejemplo. Queremos implementar un programa que simule una calculadora capaz de sumar, restar, multiplicar o dividir dos números dados por teclado. % Programa Calculadora % Entradas: dos números y el operador % Salidas: el resultado de aplicar el operador leído a los números % Variables : a, b, res: REAL; op: CARACTER % Instrucciones del Programa a=input(‘Introduce el primer operando: ’); b=input(‘Introduce el segundo operando: ’); op=input(‘Introduce el operador: ’,’s’); switch (op) case ‘+’ res=a+b; disp(res) case ‘-’ res=a-b; disp(res) case ‘*’ res=a*b; disp(res) case ‘/’ res=a/b; disp(res) otherwise disp(‘El operador no es válido’); end switch (expresión) case <literal 1> <Bloque 1> case <literal 2> <Bloque 2> …. case {<literal n>, <literal n>,… } <Bloque n> otherwise <Bloque por defecto> end Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 9 Ejercicio. Resuelve la siguiente función definida por intervalos: f(x) = 1 si x= 0 4 si x= 1 2x+2 en otro caso Ejercicio. Implementa un programa que dada una fecha (día, mes y año) determine si es válida o no. Suponemos que la fecha es válida si el día es válido según el mes, el mes está en el intervalo (1, 12) y el año es positivo. Consideramos que un año es bisiesto cuando sea múltiplo de 4. ESTRUCTURAS REPETITIVAS O CÍCLICAS Las estructuras repetitivas permiten que un conjunto de instrucciones se ejecute varias veces. Vamos a ver dos tipos de estructuras repetitivas, una en la que el número de veces que se ejecutan las instrucciones queda determinado al construirla y otro tipo en el que el número de ejecuciones depende de la evaluación de una expresión lógica. Ciclo Fijo o contado Este ciclo ejecuta un conjunto de instrucciones un determinado número de veces que se prefija al construir el ciclo. Su sintaxis en Matlab es: Si se toma la primera forma del ciclo, la variable de control toma el valor inicial y si no sobrepasa el valor final, se ejecuta el bloque de instrucciones y pasa a incrementarse en el valor dado por el incremento. Esto se repite hasta que el valor de la variable sobrepasa el valor final. Si en la parte de incremento no se escribe el valor de incremento, la variable se incrementará de 1 en 1 cada vez que el cuerpo se ejecute. Si la variable se iguala a una lista o secuencia de valores, el ciclo se ejecuta tantas veces como valores haya en la lista y en cada ejecución la variable va tomando el siguiente elemento de la lista. for variable = lista <Bloque instrucciones> end valorInicial : [valorIncremento ] : valorFinal Iista [valor , valor , …] Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 10 Ejemplo. Queremos implementar un programa que dado un número entero imprima la tabla de multiplicar de dicho número. % Programa TablaMultiplicar % Entradas: un número entero % Salidas: la tabla de multiplicar del número dado como entrada % Variables : num, i: ENTERO % Instrucciones del Programa num=input(‘Introduce un número entero: ’); for i=1:10 disp([num2str(num),’*’, num2str(i),’=’, num2str(num*i)]) ; end Ejemplo. Implementa un programa que calcule el cuadrado de tres números leídos por teclado. % Programa Cuadrados % Entradas: tres números % Salidas: el cuadrado de los números leídos % Variables: numeros, i, cuadrado: ENTERO % Instrucciones del Programa numeros=input(‘Introduce la lista de números: ’); for i=numeros cuadrado=i^2; disp(cuadrado) ; end Ejercicio. Existen muchos métodos capaces de proporcionar aproximaciones numéricas de π. Uno de ellos es el siguiente: 1 2 6 =i i =π Crea un programa que lea el grado de aproximación (número de términos de la sumatoria) y devuelva un valor aproximado de π. Ciclo condicional El ciclo condicional ejecuta un conjunto de instrucciones un número de veces variable, el número de veces depende de una expresión lógica. Su sintaxis en Matlab es: El bloque de instrucciones se ejecuta mientras la expresión lógica sea verdadera. while (expresión lógica) <Bloque instrucciones> end Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 11 Ejemplo. Queremos implementar un programa que dado un número entero positivo nos diga si el número es o no primo. % Programa Primo % Entradas: un número entero positivo % Salidas: mensaje indicando si el número leído es o no primo % Variables : num, i: ENTERO; es: LOGICO % Instrucciones del Programa num=input(‘Introduce un número entero positivo: ’); es=true; % empezamos suponiendo que es primo i=2; while (i<num && es) if (mod(num,i)==0) % si es divisible ya no es primo es=false; else i=i+1; end end if es disp(‘El número es primo’) ; else disp(‘El número no es primo’) ; end Ejercicio. Escribe un programa que calcule el valor de S para un número real X dado, utilizando la siguiente serie: + ! X + ! X + ! X +X+=S 432 1 432 El valor de S se calculará hasta que la diferencia absoluta entre dos términos consecutivos sea menor que 0.0001. RECUERDA Cuando implementamos un programa es aconsejable incluir comentarios, al menos indicando sus entradas y sus salidas. De esta forma al abrirlo veremos rápidamente el problema que resuelve. En Matlab el operador = se utiliza para asignar valores a variables. Podemos usar la instrucción input() para asignar desde el teclado un valor a una variable. Para mostrar resultados en pantalla podemos utilizar la instrucción disp(). Cuando queremos seleccionar entre distintos caminos de ejecución utilizaremos las estructuras condicionales, if-else y switch. Para repetir conjuntos de instrucciones utilizaremos las estructuras de control cíclicas, for y while. Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 12 EJERCICIOS Queremos conocer los datos estadísticos de una consulta médica de 3 doctores. Necesitamos saber cuántos pacientes han pedido cita para el Doctor1, el Doctor2 y el Doctor3. Además, necesitamos preguntar cuál es el precio de la consulta para el Doctor1, el Doctor2, y el Doctor3. Una vez introducidos estos datos, calcular y devolver al usuario los resultados de calcular: a) El tanto por ciento de pacientes que han ido a cada uno de los doctores. b) La cantidad de dinero que ha ganado cada doctor. c) La media de dinero que gana cada doctor por paciente en la clínica en general. 1. Un equipo de futbol ha tenido una buena campaña y desea premiar a sus jugadores con un aumento del salario para la siguiente campaña. Los sueldos deben ajustarse de la siguiente forma: Sueldo actual Aumento correspondiente 0-6.000 20% 6.000-7.900 10% 7.900-12.000 5% más de 12.000 0% Diseñar un algoritmo que lea el salario de un jugador y que a continuación muestre el tanto por ciento de aumento, el sueldo actual y el sueldo aumentado. 2. Diseñar un algoritmo para leer los dos conjuntos de coeficientes (a, b, c, y d, e, f) del siguiente sistema de ecuaciones, e imprimir los valores que son solución para x e y: ax + by = c dx + ey = f puede resolverse utilizando las siguientes fórmulas: x ce bf ae bd y af cd ae bd Diseñar un algoritmo para leer los coeficientes a, b, c, d, e, f, y calcular los valores de x e y. Hay que tener en cuenta aquellos casos que no tienen solución, esto ocurre cuando las rectas representadas por las ecuaciones son paralelas (la solución al sistema de ecuaciones es el punto donde se cortan las dos rectas). 3. Escribe un programa que calcule la letra del NIF a partir del número del DNI que se pida por pantalla. La letra se obtiene calculando el resto de la división del número del DNI por 23. A cada resultado le corresponde una letra: 0=T; 1=R; 2=W; 3=A; 4=G; 5=M; 6=Y; 7=F; 8=P; 9=D; 10=X; 11=B; 12=N; 13=J; 14=Z; 15=S; 16=Q; 17=V; 18=H; 19=L; 20=C; 21=K; 22=E. 4. Diseñar un algoritmo que lea las longitudes de los tres lados de un triangulo (L1, L2, L3) y determine qué tipo de triangulo es, de acuerdo a los siguientes casos. Suponiendo que A determina el mayor de los tres lados y B y C corresponden con los otros dos, entonces: Si A>=B + C No se trata de un triángulo Si A2 = B2 + C2 Es un triangulo rectángulo Si A2 > B2 + C2 Es un triangulo obtusángulo Grado en Ingeniería Industrial GUIÓN DE PRÁCTICAS 2: ESTRUCTURAS DE CONTROL 13 Si A2 < B2 + C2 Es un triangulo acutángulo 5. Pide al usuario el día del mes en el que estamos y en qué día empezó dicho mes, es decir que diga si fue lunes, martes, miércoles, jueves, viernes, sábado o domingo. Entonces devolverá el día de la semana en que estamos. Por ejemplo, si el usuario dice que hoy es día 10 y el mes empezó en lunes, entonces el sistema devolverá: Miércoles. Si el usuario dice que hoy es día 23 y el mes empezó en jueves, entonces el sistema devolverá que hoy es viernes. Observación: En este ejercicio se requiere usar dos estructuras switch, una para decidir el desplazamiento dependiendo del día de la semana, y otra para devolver la respuesta dependiendo del resto. 6. Implementa un programa que muestre por pantalla los cuadrados de los 100 primeros números enteros positivos. Modifícalo para que muestre también la suma de dichos valores. 7. Implementa un programa que calcule el factorial de un número entero positivo si éste está e el ra go … . Si el ú ero o está e di ho ra go el progra a de e i di arlo volver a pedir otro número hasta que sea válido para realizar el cálculo. 8. Implementar un programa que lea n notas y calcule la nota media. 9. Implementa un programa que calcule la suma de los siguientes 100 términos de la serie: 1 - 1/2 + 1/4 - 1/6 + 1/8 - 1/10 + 1/12 - ... 10. Implementa un programa que calcule el producto de dos números enteros positivos sin utilizar el operador producto, es decir, que tenemos que resolverlo a base de sumas.
Compartir