700 likes | 947 Views
Control de Secuencia. Øyvind Mo Edgar Acosta Adrián López. Las Estructuras de Control de Secuencia. Proveen el marco de interacción para la ejecución de operaciones y datos. Controlan el orden de ejecución de las operaciones. Expresiones Instrucciones o grupos de instrucciones
E N D
Control de Secuencia Øyvind Mo Edgar Acosta Adrián López
Las Estructuras de Control de Secuencia • Proveen el marco de interacción para la ejecución de operaciones y datos. • Controlan el orden de ejecución de las operaciones.
Expresiones Instrucciones o grupos de instrucciones Programación Declarativa Subprogramas Implícitas Explícitas Categorias de ECS
Categorías de ECS • Expresiones Aritméticas • Instrucciones o grupos de instrucciones • Programacion Declarativa • Subprogramas
Arboles para representar expresiones • Composición funcional • Operaciones y sus respectivos operandos • Resultados de operaciones forman nuevos operandos • Operaciones representadas por niveles • No se define precedencia en operaciones en el mismo nivel
Ejemplo: Raíz de 2do grado / -B+ B2 – 4 * A * C 2 * A * + _ SQRT 2 A B - ^ * B 2 * C 4 A
Representación Sintáctica • Linealización de arboles. • Notación Prefija (Polaca) • Notación Polaca Cambridge • Notación Postfija • Notación Infija
* + - A B C D Representación Sintáctica : Ejemplo Prefija: *+AB-CD Prefija Cambridge: (*(+AB)(-CD)) Infija: (A+B)*(C-D) Postfija: AB+CD-*
Representación Semántica • Evaluación de expresiones prefijas. • Características • Evaluación en una sola pasada • Necesidad de saber el numero de argumentos por tipo de operación • No hay necesidad de paréntesis • Similitud con llamadas a funciones • Operaciones con cualquier número de operandos • Decodificacion sencilla a secuencias de código
Representación Semántica • Evaluación de expresiones infijas. • Características • Forma común de expresar las expresiones aritméticas • Trabaja con operadores binarios • Funciones y operadores unarios implementados a traves de notación prefija o postfija • Necesidad de uso de paréntesis para evitar ambigüedad • Decodificación compleja a secuencias de código
Jerarquía de operaciones • Orden de precedencia de operadores • Asociatividad • Izquierda • a-b-c evaluado (a-b)-c • Derecha • a^b^c evaluado a^(b^c) • Lenguajes sin Jerarquía de operaciones
Jerarquia de Operaciones : Ejemplo • C A= =B | C= = D evaluado (A= =B) | (C= = D) Precedencia del operador = = sobre | • Pascal A=B | C=D evaluado A=(B | C)=D Precedencia del operador | sobre =
Etapas de traducción • Establecer estructura de árbol • (opcional) decidir el órden óptimo de evaluación
Formas en que se traducen las expresiones en notación infija • Código máquina • Estructura de árbol • Prefija o postfija
Evaluación con las representaciones de árbol de expresiones
* + - a b c a Evaluación glotona Ejemplo: (a+b)*(c-a)
Ejemplo de evaluación glotona que no hace lo que se espera Z+(Y=0?X:X/Y) + IF Z = / Y X 0 Y X
Evaluación apáticaEs prohibitiva para los lenguajes aritméticos
Problema 2. Efectos secundarios a×fun(x)+a • Si a vale 1 inicialmente y fun(x) devuelve 3 y tiene el efecto secundario de modificar el valor de a a 2 el órden de evaluación es crítico: • Evaluando en secuencia: 1 × 3 + 2 = 5 • Evaluando a solamente una vez: 1 × 3 + 1 = 4 • Evaluar fun(x) antes que a: 2 × 3 + 2 = 8
Problema 4. Expresiones Booleanas de corto circuito if ( ( A == 0 ) || ( B / A > C ) ) { . . . } while ( ( L <= UB ) && ( V[L] > C) ) { . . . } Solución de Ada if ( A = 0 ) or else ( B / A > C) then
Categorías de ECS • Expresiones Aritméticas • Instrucciones o grupos de instrucciones • Programacion Declarativa • Subprogramas
Control de secuencia entre instrucciones • Instrucciones básicas • Tipos de control de secuencia a nivel de instrucciones • Control de secuencia explícita • Diseño estructurado de programas
Instrucciones básicas • Instrucciones de asignación • A:=B (PASCAL) • A=B (C, Java) • MOVE A TO B (COBOL) • AB (APL) • (SETQ A B) (LISP) • A += B (C, Java) • ++A • A++
Instrucciones básicas • Instrucciones de entrada y salida. <STDIN>; System.out.println(”Hola”); • Otros instrucciones de asignación. • NEWLINE = TRIM(INPUT) • PadreDe(X,Juan), PadreDe(Y,Juan), not (X=Y).
Tipos de control de secuencia a nivel de instrucciones • Composición • Alternación • Iteración
Control de secuencia explicita • GOTO incondicional • GOTO condicional • BREAK • CONTINUE
Goto : Ejemplo #include <iostream.h> void main() { int n; for(;;) { cout <<“Ingresa un número (0 para terminar): "; cin >> n; cout << n <<" al cubo es: " << n*n*n << "n"; if(n == 0) goto esc; } esc: cout << endl; }
Problemas con Goto en Basic C64 BASIC: 750 ifnv(0)=0thenf=0:goto770 760 goto790 770 ifint(rnd(1)*100+1)<=nthen800 780 nextx:goto1640 790 ifn<>nv(1)andn<>0thennextx:goto1640
Break #include <iostream.h> void main() { int n, count = 0, sum = 0; cout <<"Enter positive integers. Terminate input with 0:n"; for (;;) { cout << "t" <<count + 1 << ": "; cin >> n; if(n ==0) break; ++count; sum += n; } cout <<"The average of the " << count << " numbers is " << (float) sum / count << endl; }
Continue #include <iostream.h> int main() { int n = 0; for(;;) { n++; if (n%7 == 0) continue; cout << "n = " + n; } }
Diseño estructurado de programas • Diseño jerárquico • Representación del diseño en el código del programa • La secuencia textual = la secuencia actual • Un grupo de instrucciones tiene solamente una función • (No usar GOTO)
Control de Secuencia Estructurado • Conjunto de instrucciones de control en un lenguaje de alto nivel • Composición o Agrupamiento • Condicionales o de Alternación • Iteración
Ejemplos: Begin ... End { ... } Agrupamiento • Contienen una o más instrucciones • Actúan como un solo bloque • Las instrucciones contenidas se ejecutan secuencialmente
Condicionales • Expresan la ejecucion alternada de dos instrucciones o la ejecución condicional de una instrucción • La alternativa se controla por medio de una condición.
If condición then instrucción end if Instrucción IF : Ejecución Opcional
Instrucción IF : Ejecución Alternativa • If condición then instrucción1 • else • instrucción2 • end if
Instrucción CASE • Evalúa una condición y compara varios valores hasta encontrar una equivalencia. Case Valor when 0 begin instrucción1; end when 1 begin instrucción2; end when others begin instrucción3; end end case
Iteración • Proveen capacidad de repetición de ejecución de un mismo código • Estructuras básicas contienen un encabezado y un cuerpo • El encabezado controla en número de veces que se iterará • El cuerpo es el conjunto de instrucciones a repetirse
Iteración : Ejemplos • Repetición Simple (Cobol) Perform cuerpo K veces • Repetición mientras se mantiene una condición (C) While <cond> { cuerpo } • Repetición mientras se incrementa un contador (Algol) for I := 0 step 2 until 30 do cuerpo • Repetición controlada por datos (Perl) foreach $X(@Array) { cuerpo } • Repetición indefinida (Ada) Loop ... Exit when <cond> ... end Loop;
Condiciones excepcionales Salidas multiples de loops Do-While-Do Utilizando go to Instrucción 1 If error go to α Instrucción 2 If error go to α ... α: Manejo de errores On Error en VB y Raise en Ada como opción On error go to α Instrucción 1 Instrucción 2 ... α: Manejo de errores Utilizando go to For I := 1 to K do if Vect[I] = 0 then go to α Loop Utilizando go to Loop read(x) if EOF then go to α process(x) End loop; Exit en Ada y Break en C como opción For I = 1 .. K loop exit when Vect[I] = 0 ; End loop; Exit when en Ada e If <cond> Break en C como opción Loop read(x) If EOF break process(x) End loop; Problemas de ECS estructurada • Discusión del Goto
Componentes de un diagrama de flujo Nodo de función Nodo de decisión Nodo de unión
Programas Primos De un nodo De cuatro nodos De tres nodos De dos nodos if ... then ... while ... do ... do ... while ... repeat ... until ... if ... then ... else ... do ... while ... do
Nodos originales Nodos transformados Teorema de estructura
Categorías de ECS • Expresiones Aritméticas • Instrucciones o grupos de instrucciones • Programacion Declarativa • Subprogramas