Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Programación Estructurada Bucles y otras cosas liantes Grupo ISCyP1 Departamento de Ingeniería de la Información y las Comunicaciones Universidad de Murcia 10 de octubre de 2018 (11:28h) 1Erratas y sugerencias a ldaniel@um.es. La imagen está descargada de internet y si tuviera derechos de autor/distribución conocidos, por favor, avisen. Índice de Contenidos 1 ¿Qué vamos a estudiar? 2 Estructuras de control 3 Expresiones booleanas 4 Estructuras condicionales o selectivas 5 Estructuras repetitivas 6 Estructuras Anidadas Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 2 27 Desarrollo 1 ¿Qué vamos a estudiar? 2 Estructuras de control 3 Expresiones booleanas 4 Estructuras condicionales o selectivas 5 Estructuras repetitivas 6 Estructuras Anidadas Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 3 27 Elementos de un Lenguaje de Programación Instrucción. Responde a una acción que puede entender y ejecutar el lenguaje de programación: • Expresiones. P.e. las aritméticas. 2 + 3 * 5; • Declaración y uso de variables. int a=2; Estructuras. Determina qué instrucciones o estructuras deben realizarse. • Sentencias de control. if (cierto) then { print("hola");} Función o procedimiento. Es un conjunto de instrucciones (y funciones) que se agrupan bajo un nombre para realizar una tarea concreta. • Funciones del lenguaje. print("hola"); • Funciones de librería (o biblioteca). import Stat; mean([2,3,4]); • Funciones de usuario. real miSuma (a,b) { return a+b; } Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 4 27 Desarrollo 1 ¿Qué vamos a estudiar? 2 Estructuras de control 3 Expresiones booleanas 4 Estructuras condicionales o selectivas 5 Estructuras repetitivas 6 Estructuras Anidadas Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 5 27 Paradigmas de programación • La programación imperativa describe un programa en términos del estado del programa y sentencias que cambian dicho estado. Utiliza variables y “goto”. • La programación modular abstrae un conjunto de instrucciones como una función que define el programador. Las funciones se comunican entre sí a través de sus parámetros. (Se estudiará en el siguiente tema) • La programación estructurada utiliza únicamente subrutinas o funciones y tres estructuras: secuencial, condicional y repetitiva. El teorema del programa estructurado, propuesto por Böhm-Jacopini, que demuestra que todo programa puede escribirse utilizando únicamente las tres estructuras de control siguientes: • Estructura secuencia. Está formada por una secuencia de llamadas a instrucciones del lenguaje o funciones del programador. • Estructura condicional. Es aquella que ejecuta una estructura si se cumple una condición booleana. • Estructura iterativa con condición. Es aquella que ejecuta una estructura una y otra vez si se cumple una condición booleana. Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 6 27 Un ejemplo Entre dos números dados, sumar los pares y multiplicar los impares que hay entre ambos. 1 Almacenar en n y m, n<m, valores dados por el usuario. Variables de entrada. 2 Asignar actual igual a n. 3 Asignar suma igual a 0. 4 Asignar producto igual a 1. 5 Mientras que actual sea menor o igual a m hacer los siguiente 1 Imprimir el valor actual. 2 Si actual es par, hacer 1 Sumar actual con suma para actualizar suma. 3 Si actual es impar, hacer 1 Multiplicar actual con producto para actualizar producto. 4 Actualizar actual al siguiente número. 6 Mostrar el valor de suma. 7 Mostrar el valor de producto. • Observa los tres tipos de estructura: secuencia, condicional, iterativa. • Las condicionales e iterativa tienen condiciones. Las condiciones viene dadas por expresiones booelanas. Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 7 27 Desarrollo 1 ¿Qué vamos a estudiar? 2 Estructuras de control 3 Expresiones booleanas 4 Estructuras condicionales o selectivas 5 Estructuras repetitivas 6 Estructuras Anidadas Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 8 27 Expresiones booleanas Son las que determinan las condiciones de las estructuras Una expresión booelana es aquella que retorna un valor booleano, {true, false}. • Operadores condicionales: • Igualdad: a == b No confundir con a = b. • Mayor estricto que: a > b • Mayor o igual que: a >= b • Menor estricto que: a > b • Menor o igual que: a <= b • Operadores booleanos: • NOT !a = { true , si a es false false , si a es true • AND a && b = { true , si a y b son simultaneamente verdaderos (true) false , en otro caso • OR a || b = { true , si a o b es verdadero (true) false , en otro caso Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 9 27 Ejemplos Ejemplo • n == int(n/2) * 2, permite saber si n es par. • n %2 != 0, permite saber si n es impar. • (n %2 == 0) && !(m %2 != 0), permite saber si n y m son pares. • (n %2 == 0) || (m %2 == 0), permite saber si n o m es par. • !( (n %2 == 0) || (m %2 == 0) ), permite saber si n y m son imapres. Ejercicio 1 • ¿Cuál es la expresión booleana que determina si dos puntos coinciden en alguna coordenada? • ¿Cuál es expresión para comprobar si un número está en un intervalo? • El teorema de la desigualdad del triángulo establece que la suma de dos lados del triángulo siempre es mayor que la medida del tercer lado. Si esto resulta ser verdad para todas las tres combinaciones de las sumas, entonces se tiene un triángulo. ¿Cuál es la expresión lógica para determinar cuando una figura forma un triángulo, dados sus lados? Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 10 27 Desarrollo 1 ¿Qué vamos a estudiar? 2 Estructuras de control 3 Expresiones booleanas 4 Estructuras condicionales o selectivas 5 Estructuras repetitivas 6 Estructuras Anidadas Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 11 27 Estructuras condicionales Denotamos por condicion a cualquier expresión Booleana. • Condicional simple 1 if (condicion) { // Si se cumple la condición 2 instrucciones // haz estas instrucciones 3 } • Condicional doble 1 if (condicion) { // Si se cumple la condición 2 instrucciones // haz estas instrucciones 3 } else { // y si no se cumplen 4 instrucciones // haz estas otras 5 } • Expresión general de un condicional 1 if (condicion) { // Si se cumple la condición 2 instrucciones // haz estas instrucciones 3 } [ else { // [Opcionalmente], y si no se cumplen 4 instrucciones // haz estas otras 5 } ] Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 12 27 Ejercicios de Estructuras Condicionales Ejemplos if() Ejercicio 2 1 Comprobar si un número es par. 2 Solicita dos números e indica si son iguales. 3 Calcula el inverso de un número. 4 Calcula el producto de dos números naturales y muestra el resultado si el producto es múltiplo de 7. 5 Calcular el cociente y resto de una división (evitando dividir por cero). 6 Dados dos valores en las variables min y max, garantiza que min<max. 7 Haz que una bola rebote por la pantalla gráfica, cambiando de color en cada choque. 8 Comprobar si dos círculos están solapados. Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 13 27 Ejercicios de Estructuras Condicionales Ejemplos if()else{} Ejercicio 3 1 Genera dos números naturales. Indica si son iguales o distintos. 2 Calcula el inverso de la suma de dos números, mostrando un error si se divide por cero. 3 Si un número es par dibuja un cuadrado, en otro caso dibuja un círculo. 4 Aplica un descuento del 25 % a un amigo y de un 10 % a los demás. 5 Informa si una persona puede conducir. 6 Indica si dos círculos están solapados o no, usando if()else y un solo if(). Grupo ISCyP(DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 14 27 Desarrollo 1 ¿Qué vamos a estudiar? 2 Estructuras de control 3 Expresiones booleanas 4 Estructuras condicionales o selectivas 5 Estructuras repetitivas 6 Estructuras Anidadas Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 15 27 Estructuras repetitivas Una instrucción iterativa o repetitiva, también conocida como bucle, tiene la misión de ejecutar las mismas instrucciones de código una y otra vez mientras que se cumpla una determinada condición. 1 Inicialización. 2 MIENTRAS (condición) HACER { 3 Cuerpo 4 } 5 Finalización. • MIENTRAS-HACER es la sentencia iterativa y consta de cero o más iteraciones. Una iteración es un proceso formado por las siguientes acciones: 1 Comprobar el valor de la expresión booleana condición de control. • La condición dependerá de una variable de control (que no siempre es booleana). 2 Si condición == true ejecutar el Cuerpo • Cuerpo, conjunto de instrucciones que se ejecutan mientras que condición == true. • Es imprescindible que en el cuerpo haya alguna instrucción que modifique para el siguiente ciclo la expresión booleana (de no modificarse nunca la variable de control, el bucle no tendría fin). 3 Si condición == false ir a Finalización. • Cuando condición == false se tiene la condición de terminación. Las iteraciones son las ejecuciones continuas del Cuerpo. • Inicialización, instrucciones que inicializan las variables que participan de la iteración. En particular a la variable de control. • La finalización es el conjunto de instrucciones que se ejecutarán cuando las iteraciones (o bucle) terminan. Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 16 27 Variables de Control Los patrones más usuales para la condición de la estructura repetitiva son: • Condición basada en un contador . Se sabe cuántas veces hacer. 1 int contador=0; 2 MIENTRAS (contador < 10) HACER { ... contador = contador + 1; ...} • Condición basada en un acumulador . El resultado de una expresión debe alcanzar un valor. 1 int suma=0; int producto=1; 2 MIENTRAS (suma < max) HACER { ... suma = suma + f(n); ...} 3 MIENTRAS (suma < max) HACER { ... producto = producto * g(n); ...} • Condición basada en centinela . No se sabe exactamente cuántas. 1 int peso=datoUsuario(); 2 MIENTRAS (peso != terminación) HACER { ... peso=datoUsuario(); ...} 3 tipos de valores-centinela (algunos ideales para la condición de terminación): • Indiscutiblemente válidos. Son valores imposibles que un dato tome. peso=-10. • Posiblemente válidos. Son valores que previsiblemente no tomará el dato. peso=500 • Inválidos. Son valores que muy probablemente deberían ser procesados y, por tanto, no son válidos para la condición de terminación. peso=15. • Condición basada en variable bandera . Otra forma de ver las centinelas. 1 boolean flag=true; 2 MIENTRAS (flag) HACER { ... if (algo) flag=false; ...} Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 17 27 Estructuras repetitivas en Processing • Estructura pre-condicional 1 Inicialización. 2 while (condición) { 3 Cuerpo 4 } 5 Finalización. • Estructura post-condicional 1 Inicialización. 2 do { 3 Cuerpo 4 } while (condición); // Punto y coma 5 Finalización. • Estructura iterativa exacta (se puede hacer con while(){}) 1 Inicialización. 2 for (P. de Inicialización; P. de iteración; P. de incremento) { 3 // P.e. for (int varControl=0; varControl<n; varControl++) 4 Cuerpo 5 } 6 Finalización. Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 18 27 Ejercicio Ejercicio 4: WHILE 1 Suma de los n-primeros números naturales. 2 Suma los números entre dos números dados. 3 Mientras que no se obtenga un número real aleatorio múltiplo de 5, muestra dicho número. Indica cuántos números aleatorios has mostrado. 4 Mientas que la distancia de un punto aleatorio al centro de la ventana gráfica no sea mayor que medio lado de la ventana gráfica, dibujar el punto. 5 Sumar los valores dados por el usuario mientras que sean positivos. Al finalizar muestra la media. Ejercicio 5: FOR 1 Suma los números entre dos números dados. 2 Calcula 2n usando únicamente productos. 3 Muestra la tabla de multiplicar del número n. 4 Dibuja en la ventana gráfica un grid, formada por un mosaico de “cuadrados”. Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 19 27 Desarrollo 1 ¿Qué vamos a estudiar? 2 Estructuras de control 3 Expresiones booleanas 4 Estructuras condicionales o selectivas 5 Estructuras repetitivas 6 Estructuras Anidadas Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 20 27 Anidamiento de condicionales Denotamos por condicion a cualquier expresión Booleana. 1 if (condicionA) { 2 [ 3 if (condicionB) { 4 } [else { mas instrucciones } ] 5 ] 6 }[ else { 7 [ 8 if (condicionC) { 9 } [else { mas instrucciones } ] 10 ] 11 }] • Los anidamientos en el if se suelen transformar en expresiones booleanas conjuntivas si las anidadas no tienen sentencias else. • Los anidamientos en el else se expresan como else if. 1 if (condicionA && condicionB) { 2 ... 3 } else if (condicionC) { 4 ... 5 } Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 21 27 Ejercicios de Estructuras Condicionales Anidadas Ejemplos Ejercicio 6 1 Comprobar si un número está en un intervalo. 2 Haz que una bola rebote por la pantalla gráfica, cambiando de color en cada choque. 3 Indica si un número es positivo, negativo o nulo. 4 A partir del radio, calcula el diámetro, el perímetro o el área de un círculo. 5 Solicita dos números al usuario e indica si son iguales o no. • Si son iguales indica si son pares o no. • Si son diferentes indica cuál es par y cuál es impar. 6 Construye una cadena alfanumérica que represente a un número binario de 3 bits para cualquier número natural entre 0 y 7. 7 Determinar el número de días que tiene un mes. Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 22 27 Condicional Múltiple Si existen muchos else if se puede utilizar switch-case Recuerda: expresion solo puede ser uno de estos tipos int, char o String. 1 switch (expresion) { 2 case constante1: 3 conjunto de sentencias que se ejecutarán 4 si expresion == constante1 es cierto. 5 break; 6 case constante2: 7 conjunto de sentencias que se ejecutarán 8 si expresion == constante2 es cierto. 9 break; 10 ... 11 case constanteK: 12 conjunto de sentencias que se ejecutarán 13 si expresion == constanteK es cierto. 14 break; 15 default: 16 conjunto de sentencias que se ejecutarán 17 si expresion no retorna un valor coincide 18 con ninguna de las constantes anteriores. 19 } Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 23 27 Ejemplos Típicos de Condicional Múltiple Random Walker 1 int direccion = floor(random (4)); 3 switch (direccion) { 4 case 1: x = x + 1; break; 5 case 2: x = x - 1; break; 6 case 3: y = y + 1; break; 7 case 4: y = y - 1; break; 8 default: error 9 } Cómo hacer un menú 1 String menu = "1. xxx\n2. yyy\n 3. zzz\n"; 2 menu = menu + "4. www\n"; 4 int opcion = int ( pideUnDatoAlUsuario( menu ) ); 6 switch (opcion) { 7 case 1: instrucciones 8 break; 9 case 2: instrucciones 10 break; 11 .... 12 default: instrucciones 13 } Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 24 27 Ejercicios de Condicional Múltiple Ejemplos Ejercicio 7: Usando switch-case • Determinar el número de días que tiene un mes. • Calcular el diámetro, perímetro o área de un círculo con un menú. • Indica la calificación de un alumno a partir de su nota numérica. • Solicita dos números al usuario para a continuación mostrar en un menú qué operación aritmética se quiere realizar con ellos. Muestra el resultado. Simula la solicitud de una operación aritmética yla de dos números mediante la generación de números aleatorios. Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 25 27 Anidamientos en Estructuras repetitivas • Cualquier bucle puede contener en el cuerpo estructuras de control de cualquier tipo. • Cualquier estructura de control puede contener a un bucle. • Las estructuras contenidas se llaman estructuras anidadas. • Los anidamientos de estructuras repetitivas se llaman bucles anidados. • Los anidamientos de estructuras condicionales se llaman condicionales anidados. Ejemplo. Adivina qué hace Haz la tabla de seguimiento del siguiente programa: 1 float x = 0.0, y = 0.0; 2 float k = 2.0; 3 float delta =1; // El incremento 4 while (x<k) { 5 y=0.0; 6 while (y<k) { 7 print("("); print(x); print(","); print(y); println(")"); 8 y += delta; 9 } 10 x += delta; 11 } Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 26 27 Ejercicios de Estructuras Anidadas Ejemplos Ejercicio 8 1 Con switch-case, indica si un número representa un día laborable (toma un valor entre 1 y 5) o fin de semana (toma el valor 6 o 7). 2 Calcular la suma y el producto de todos los múltiplos de un número en un rango. 3 Contar el número de divisores que tiene un número natural. 4 Muestra todos los números que hay a partir de un número dado n, siempre que el número sea divisible por K . Repite el proceso mientras que los números no sean mayores que el triple de n. Indica cuántos números has mostrado. 5 Muestra las tablas de multiplicar de 10 números consecutivos. 6 Recorre todos los pixels de la ventana gráfica y dibuja un círculo centrado en él si la suma de sus coordenadas es múltiplo de 13. 7 Juego de adivinación: el humano debe adivinar el número pensado por el ordenador. Si se falla se indica si el número pensado es mayor o menor al dado. Además, por cada intento extra gana la mitad del premio para ese intento. Se empieza por mil euros. 8 Realizar un número K de veces las siguientes acciones. Se selecciona un natural aleatorio, n, y se busca el natural más cercano, m, y mayor que él tal que sea múltiplo de 17 o 27. Entonces se suman todos los múltiplos de 3 comprendidos entre n y m. Grupo ISCyP (DIIC. Univ. de Murcia) Prog. Estructurada 10 de octubre de 2018 (11:28h) 27 27 ¿Qué vamos a estudiar? Estructuras de control Expresiones booleanas Estructuras condicionales o selectivas Estructuras repetitivas Estructuras Anidadas
Compartir