Estructuras de Control Contenido del Tema T E M A 4 4.1. Introducción. 4.2. Expresiones lógicas. 4.3. Estructuras selectivas. 4.3.1. Sentencia de selección simple. 4.3.2. Sentencia de selección binaria. 4.3.3. Sentencia de selección múltiple. 4.3.4. Anidamientos. 4.4. Estructuras repetitivas. 4.4.1. Sentencia repetitiva MIENTRAS. 4.4.2. Sentencia repetitiva REPETIR. 4.4.3. Sentencia repetitiva PARA. 4.4.4. Anidamientos.
Introducción Composición secuencial de sentencias acción1 acción2 acción3 Recurso insuficiente por sí sólo. No permite resolver problemas que exijan una toma de decisión. No permite la ejecución de un conjunto de acciones un número determinado de veces.
Introducción Necesidad de herramientas para alterar el orden lógico de las sentencias Ejecutar unas sentencias u otras Estructura selectiva Ejecutar un número de veces unas acciones Estructura iterativa Capacidad de realizar preguntas sobre objetos del programa Expresiones lógicas
Expresiones Lógicas Condicionales, lógicas, booleanas. Posibles valores una vez evaluadas: VERDADERO FALSO
Expresiones lógicas Construcción: Variable lógica Bool Asignación: Bool=VERDADERO Mediante operadores relacionales:(==,<=,<,>=,>,!=) a>3 Relaciones de comparación combinadas mediante operadores lógicos: Y(conjunción),O(disyunción),NO(negación) (a>3) Y (3+c!=9) Los operandos de los operadores lógicos pueden ser expresiones cuya evaluación sea un resultado lógico (es decir, expresiones lógicas)
Expresiones lógicas Expresiones válidas NO((letra== Q )O(letra== z ))Y(x>=6) (largo==ancho)y NO(x<5) x Y (altura<=5) ((n+m)!=10) O (x<5) Por qué los paréntesis? Orden de precedencia. Cada operador tiene una prioridad. Ejemplo: v= NO x Y y (B v,x,y) x,y son FALSO v==verdadero ó v==falso?
Expresiones lógicas Orden de precedencia + - NO *,/ +,- relacionales igualdad Y, O Si queremos cambiar el orden de ejecución, paréntesis En caso de duda, paréntesis
Expresiones Lógicas Evaluación de expresiones lógicas en CORTOCIRCUITO (ExpLógica) Y (ExpLógica) (ExpLógica) O (ExpLógica) Ejemplo: (100 DIV j<2) Y (j>0) Evaluación??
Expresiones lógicas Equivalencias de algunas expresiones lógicas. Z A,B,C,D NO(A==B) es equivalente a A!=B NO((A==B)O(A==C)) NO((A==B)Y(C>D)) (A!=B)Y(A!=C) (A!=B)O(C<=D) Leyes de De Morgan
Expresiones lógicas Ejemplos: a) Si B valor, cómo se puede poner de otra forma la expresión lógica valor==falso? b) y valor==verdadero? c) B prueba,valor, prueba=valor==falso es correcto? a qué es equivalente?
Expresiones lógicas d) Si Bcierto Z x,y cierto=(x<y)y(y<x) es equivalente a? cierto=(x<=y)o(y<=x)
Estructuras Selectivas Control de selección, alternativas. Ejecutar un bloque de acciones dependiendo de la evaluación de una condición. 3 tipos de sentencias alternativas: Sentencias de selección simple Sentencias de selección binaria Sentencias de selección múltiple
Estructuras Selectivas Sentencia de Selección simple. Sintaxis SI CondControl ENTONCES FINSI accionesdentro accionseguida Ejemplo: probar si un valor es positivo o negativo SI dato>0 ENTONCES Escribir( Incorrecto ) FINSI Escribir(dato)
Estructuras Selectivas Diagrama de Flujo CondControl falso verdad ero Acciones
Estructuras Selectivas Sintaxis Sentencia de selección binaria. SI CondControl ENTONCES accionessi SINO accioneseoc FINSI accionseguida
Estructuras Selectivas Diagrama de Flujo verdad ero CondControl falso AccionesSI AccionesEOC
Estructuras Selectivas Ejemplo: probar si un valor es positivo o negativo SI dato>0 ENTONCES Escribir( Positivo ) SINO Escribir( Negativo o cero ) FINSI Escribir(dato)
Estructuras Selectivas Ejemplo: Algoritmo que lea tres números diferentes e imprima en pantalla los valores máximo y mínimo Ejemplo: Algoritmo que lea de teclado los coeficientes de una ecuación de segundo grado, e imprima las raíces de dicha ecuación. Ejemplo: Algoritmo que lea un número de paquete seguido de un peso en kilos, y que escriba a la salida el número de paquete, seguido de CLASE1 si el peso del paquete es menor de 32 kilos, CLASE2 si va de 32 a 128 kilos y CLASE3 para más de 128 kilos.
Estructuras Selectivas Sentencia de selección múltiple Sintaxis CASO expresión SEA valores 1 : sentencias 1 valores 2 : sentencias 2...... valores n : sentencias n SINO accioneseoc FINCASO accionseguida Selector
Estructuras Selectivas Cómo funciona la sentencia CASO? 1.- Evaluación del selector 2.- Comparación del selector con los valores i 3.- Ejecución de las sentencias correspondientes 4.- Fin de la sentencia. Ejecución de la accionseguida Errores posibles El valor del selector aparece en más de una lista de valores i El selector no es de tipo ordinal
Estructuras Selectivas Ejemplo CASO Mes SEA 1,2,4,5,6,8,9: /*no ejecutamos nada con estos valores*/ 3:Escribir( Cumpleaños de Ana ) 7:Escribir( Aniversario de Carolina ) 11:Escribir( Mi cumpleaños ) Escribir( Habrá que celebrarlo ) FINCASO Mes=1,2,4,5,6,8,9 no ejecuta nada Mes=10, 12 ERROR DE EJECUCIÓN NOTA:es posible incluir un subrango en la lista de valores i 1,2,4..6,8,9
Estructuras Selectivas Anidamientos SI CondControl1 ENTONCES acciones1 SINO SI CondControl2 ENTONCES acciones2 SINO SI CondControl3 ENTONCES acciones3 SINO acciones4 FINSI FINSI FINSI SI CondControl1 ENTONCES acciones1 SINOSI CondControl2 ENTONCES acciones2 SINOSI CondControl3 ENTONCES acciones3 SINO acciones4 FINSI
Estructuras Selectivas Objetivo metodológico: LEGIBILIDAD Realizar un sangrado o indentación Incluir comentarios Ejemplo: SI CondControl ENTONCES /* 1 */ SINO SI CondControl ENTONCES /* 2 */ SINO SI CondControl ENTONCES /* 3 */ SINO FINSI /* 3 */ FINSI /* 2 */ FINSI /* 1 */
Ejemplo: Algoritmo para determinar el mayor de tres valores ALGORITMO MAYOR VAR Z may, a, b, c INICIO Escribir( Introduzca tres numeros ) Leer(a,b,c) SI a>b ENTONCES /*1*/ SI a>c ENTONCES may = a SINO may = c FINSI SINO SI b>c ENTONCES may = b SINO may = c FINSI FINSI /*1*/ Escribir( may ) FIN MAYOR
Estructuras Selectivas Matiz referente a la legibilidad Los siguientes grupos de sentencias ejecutan lo mismo: CASO Operador SEA + : Resultado = a+b - : Resultado = a-b * : Resultado = a*b / : Resultado = a/b SINO Escribir( Operador Indefinido ) FINCASO
Estructuras Selectivas SI Operador == + ENTONCES SINO FINSI Resultado=a+b SI Operador== - ENTONCES SINO FINSI Resultado=a-b SI Operador== * ENTONCES SINO FINSI Resultado= a*b SI Operador== / ENTONCES Resultado=a/b SINO FINSI Escribir( Operador Indefinido ) Insertar los números de las sentencias SI entre comentarios
Estructuras Selectivas (C) if (CondControl) { accionessi } accionseguida if (CondControl) { accionessi } else { } accioneseoc accionseguida
Estructuras Selectivas (C) if (CondControl) { accionessi } else if (CondControl1) { accionescc1 } else if (CondControl2) { accionescc2 } else { accioneselse } accionseguida
Estructuras Selectivas (C) switch (expresion){ } case exp-const: proposiciones break; case exp-const: proposiciones break; case exp-const: proposiciones default break; : proposiciones break;
Estructuras Repetitivas Necesarias en la mayoría de los algoritmos. Estructura repetitiva = bucle = lazo. Iteración Ejecutan un conjunto de operaciones un número determinado o indeterminado a priori de veces. Cuantas veces se ejecutan las instrucciones? Condición de control
Estructuras Repetitivas A) Número de veces indeterminado a priori. Estructura MIENTRAS Sintaxis : MIENTRAS CondControl HACER Acciones FINMIENTRAS
Estructuras Repetitivas Diagrama de flujo CondControl verdad ero falso Acciones
Estructuras Repetitivas Condición de control del bucle = expresión lógica Las sentencias que forman el cuerpo del bucle se ejecutan 0 o más veces. BUCLE PREPRUEBA. Condición verdadero seguirá ejecutando el cuerpo Algunos ejemplos de bucles con nombre: Bucle controlado por contador Bucle controlado por centinela Bucle contador
Estructuras Repetitivas Bucle controlado por contador Se ejecuta un número determinado de veces. Variable de control del bucle inicialización, evaluación, incremento i=1 /*Inicialización*/ MIENTRAS i<10 HACER /*Evaluación*/ acciones i=i+1 FINMIENTRAS /*Incremento*/ Cuantas veces se ejecuta el anterior bucle?
Estructuras Repetitivas Bucle controlado por centinela Centinela = valor especial que controla el final del bucle Es necesario actualizar el centinela en cada iteración LECTURA ADELANTADA Leer(centinela)/*lectura adelantada*/ MIENTRAS centinela!=0 HACER acciones Leer(centinela)/*actualización*/ FINMIENTRAS
Estructuras Repetitivas Bucle contador Útil cuando se quiere contar el número de veces que se ejecuta el bucle. La expresión lógica no depende del contador cont=0 Leer(ch) MIENTRAS ch!=. HACER Escribir(ch) cont=cont+1 Leer(ch) FINMIENTRAS
Estructuras Repetitivas Sintaxis : Estructura REPETIR REPETIR Acciones HASTA QUE CondControl
Estructuras Repetitivas Diagrama de flujo. Acciones verdad ero CondControl falso
Estructuras Repetitivas Condición de control del bucle = expresión lógica Las sentencias que forman el cuerpo del bucle se ejecutan 1 o más veces. BUCLE POSTPRUEBA. Condición falso seguirá ejecutando el cuerpo Menos general que el bucle MIENTRAS.
Estructuras Repetitivas B) Número de veces determinado a priori. Estructura PARA Sintaxis : PARA vcb=vi HASTA vf ( PASO p)hacer acciones FINPARA
Estructuras Repetitivas Cómo se ejecuta? Ejemplo: Suma=0 PARA i= 1 HASTA 10 HACER FINPARA Leer(valor) Escribir(valor)/*Eco*/ Suma=Suma + valor
Estructuras Repetitivas La vcb se incrementa (decrementa) automáticamente. El valor de la vcb puede usarse, pero no cambiarse dentro del bucle. La vcb queda indefinida al salir del bucle. La vcb puede ser de cualquier tipo ordinal. El bucle se ejecuta en su totalidad. Los valores de vi y vf se evalúan una sola vez.
Estructuras Repetitivas Fácilmente podemos diseñar un bucle MIENTRAS equivalente vcb=vi MIENTRAS (vcb<=vf) HACER /*si paso negativo MIENTRAS (vcb>=vf)*/ acciones vcb=vcb + paso FINMIENTRAS Igual podemos construir un bucle REPETIR
Estructuras Repetitivas Ejemplo: Calcular el factorial de un número. ALGORITMO Factorial; VAR Z factorial, n, indice INICIO factorial=1 Leer(n) PARA indice= 2 HASTA n HACER FINPARA factorial=factorial * indice Escribir(factorial) FIN Factorial
Estructuras Repetitivas Ejemplo:Sumar los n ( n>=0 ) primeros números naturales. ALGORITMO Sumanaturales VAR N num,suma,contador INICIO Escribir( Introduzca el número n: ) Leer(num) suma=0 PARA contador= 1 HASTA num HACER suma=suma+contador FINPARA Escribir(suma) FIN Sumanaturales
Estructuras Repetitivas Anidamientos Al igual que en las estructuras selectivas, no hay restricciones en las sentencias del cuerpo del bucle La estructura interna debe de estar incluida en la externa totalmente
Estructuras Repetitivas La vcb toma valores de modo tal que por cada valor de la variable control del bucle del ciclo externo se debe ejecutar totalmente el bucle interno. Ejemplo: PARA i= 1 HASTA 20 HACER PARA j= 1 HASTA 10 HACER FINPARA FINPARA acciones
Sentencias Repetitivas Ejemplo:Algoritmo que escriba un triángulo de números. La altura se introduce como dato y debe ser menor de 10. Con altura=4 quedaría como sigue: Observaciones: 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 Una iteración por cada línea de dígitos Cada línea se realiza en dos mitades:ejemplo:la línea 3 123--21
Estructuras Repetitivas ALGORITMO triangulo CONST C consblanco= VAR Z altura,blancos,fila Z mitad1,mitad2 INICIO Leer(altura) PARA fila=1 HASTA altura HACER PARA blancos=1 HASTA (altura-fila) HACER Escribe(consblanco) FINPARA PARA mitad1=1 HASTA fila HACER Escribe(mitad1) FINPARA PARA mitad2=fila-1 HASTA 1 (PASO -1) HACER Escribe(mitad2) FINPARA Saltar_Linea FINPARA FIN triangulo
Estructuras Repetitivas (C) while (expresion) { } acciones for (expr1;expr2;expr3) { } acciones do { acciones } while (expresion);
Programación Estructurada BOHM Y JACOPINI: 1.965 Bases de la Programación Estructurada "Se demuestra que todo problema que pueda resolverse en un numero finito de pasos puede expresarse usando únicamente 3 tipos de estructuras o bloques fundamentales con una sola entrada y una sola salida para organizar dichos pasos: - Una caja proceso o de tratamiento secuencial. - Un mecanismo de decisión binaria. - Un mecanismo de bucle generalizado."
Bibliografía Programación en C++. Algoritmos, estructuras de datos y objetos. L. Joyanes. McGraw-Hill, 2000 Cómo programar en C/C++. H.M. Deitel, P.J. Deitel. Prentice Hall, 1995 Pascal. Dale/Orshalick. Ed. McGraw Hill 1986 Programación I. José A. Cerrada y Manuel Collado. U.N.E.D. 1993. Fundamentos de Programación. Joyanes Aguilar. McGraw Hill. 2ª Edición, 1996.