La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Curso de Programación Estructurada

Presentaciones similares


Presentación del tema: "Curso de Programación Estructurada"— Transcripción de la presentación:

1 Curso de Programación Estructurada
Maestría en Robótica y Manufactura Avanzada Curso de Programación Estructurada Dra. L. Abril Torres Méndez Saltillo Clase 2: - Técnicas de Programación - Análisis y diseño de algoritmos Periodo: Sept.-Dic, 2010.

2 Técnicas de Programación
¿Para qué utilizarlas? Si no se sigue una metodología en el diseño de un programa, éste puede funcionar, pero como es sólo un conjunto de instrucciones, las consecuencias pueden ser las siguientes: Rigidez en el programa Codificación personalizada Documentación final difícil adaptación a diferentes configuraciones Dificulta la interpretación a terceros Extremadamente difícil!

3 Técnicas de Programación
Programación no Estructurada Programación Procedural Programación Modular Programación Estructurada Programación Orientada a Objetos

4 Programación No Estructurada
Un solo programa principal. Las variables y datos son globales en todo el programa. programa principal datos globales Programa Desventajas: - difícil de seguir cuando el programa se hace lo suficientemente grande, - repetición de secuencia de instrucciones.

5 Programación Procedural
El código del programa se divide en programa principal y procedimientos. Estos procedimientos son “llamados” desde el programa principal, desde otros procedimientos o dentro de ellos mismos (aplicaciones de recursividad). Programa principal Proc. x Proc. z Proc. y .

6 Programación Procedural
Ventajas: Al introducir parámetros (variables que pasan datos a los procedimientos), así como procedimentos dentro de procedimientos (subprocedimientos), los programas son escritos de manera más estructurada, minimizando así los errores. Ej. si un procedimiento ya es correcto, éste producirá resultados correctos cada vez que es usado. En caso de errores, la búsqueda se reduce a sólo procedimientos que no han sido revisados.

7 Programación Modular Para que diferentes programas puedan utilizar procedimientos generales o grupos de procedimientos, éstos deben estar disponibles en forma separada, en módulos. Procedimientos con una funcionalidad común son agrupados en módulos separados. Cada módulo es analizado, codificado y puesto a punto por separado Pone en práctica el dicho: “divide y vencerás”

8 Programación Modular Programa A Programa B Programa principal datos
Módulo 1 datos+datos1 Proc 1 Módulo 2 datos+datos2 Proc 2 Proc 3 Programa A Programa principal datos Módulo 1 datos+datos1 Proc 1 Programa B datos B+datos2

9 Programación Modular Nombres: subrutinas en Basic, Fortran; procedimientos en Pascal, secciones en COBOL; funciones en C,C++, Java, etc. Ventajas: Los módulos son independientes y pueden ser trabajados por diferentes programadores a la vez. Un módulo puede ser modificado sin afectar a los demás módulos ni su función principal Se ahorra tiempo en el diseño de algoritmos y codificación. Consideraciones: Tamaño de cada módulo (idealmente una página)

10 Programación Estructurada
Ha evolucionado en las últimas décadas …para bien, claro! La productividad de un programa se incrementa de manera considerable y se reduce el tiempo de codificación, depuración y mantenimiento de programas. Conjunto de técnicas que incorporan: Diseño descendente (top-down) Estructuras básicas

11 Diseño descendente (Top-Down)
Es un estilo de programación. Se refiere a iniciar con una descripción de alto nivel de lo que se supone hará el programa y luego descomponerlo en piezas (niveles) más simples. La metodología consiste en crear una relación entre las etapas de estructuración. La interrelación se da mediante los datos de entrada y salida.

12 Estructuras básicas Un programa puede ser escrito utilizando sólo tres tipos de estructuras de control. Secuenciales Selectivas (bifurcación) Repetitivas (ciclos) Estructuras de control: determinan la secuencia de ejecución de las instrucciones

13 Estructuras de control básicas
no Bifurcación condicional Secuencia Ciclo

14 Estructura Secuencial
Una acción (instrucción) sigue a otra. La salida de una es la entrada de la otra y así sucesivamente. Son utilizadas para tomar decisiones lógicas. Se evalúa una condición y de acuerdo al resultado el algoritmo opta por una de las alternativas.

15 Tipos de estructuras selectivas
Alternativa simple (si-entonces/if-then) Inicio Variables Cond. Acción S1 F V If<condición> then <acción S1> end_if Alternativa doble (si-entonces-sino/if-then-else) Inicio Variables Cond. Acción S1 Acción S2 F V If <condición> then<acción> else<acción S2> end_if

16 Tipos de estructuras selectivas
Alternativa múltiple (caso de/case) case expresión of [e1]: acción S1 [e2]: acción S2 . [en]: acción Sn otherwise acción Sx end_case Inicio Variables case S3 S1 S2 S4 S5

17 Estructuras Repetitivas
El diseño de las computadoras está hecho especialmente para aplicaciones en las que una operación o conjunto de operaciones deben repetirse muchas veces. La estructura del algoritmo es entonces importante. Bucles: estructuras que repiten una secuencia de instrucciones un número determinado de veces. Iteración: el hecho de repetir la ejecución de una secuencia de acciones.

18 Tipos de estructuras repetitivas
Estructura mientras (“while”) El cuerpo del bucle se repite mientras se cumple una determinada condición. Ciclo mientras: Bucle que nunca se ejecuta - puede estar bien así Bucles infinitos - mal diseño While (condición) do acción

19 Tipos de estructuras repetitivas
Estructura repetir (“repeat”) El cuerpo del bucle se repite mínimo una vez antes de que la condición de repetición sea cumplida o se compruebe. Ciclo repetir: do acción repeat (condición)

20 Tipos de estructuras repetitivas
Estructura desde/para (“for”) Muchas veces conocemos el número de veces que se deben ejecutar las acciones en un bucle. Ciclo “for”: operación Valor final? For var= valor inicial to valor final acción endfor incremento Valor inicial Si No

21 Otras estructuras Estructuras de decisión anidadas
Estructuras repetitivas anidadas Instrucción ir_a (“goto”) Da sensación de libertad de acción, pero tiene el terrible inconveniente de perder con facilidad el seguimiento del programa. Existe en algunos lenguajes de alto nivel, pero mejor no utilizarla!

22 Programación Orientada a Objetos
Muy popular en la actualidad…el concepto ya tiene más de 25 años con la creación del lenguaje Simula. Su resurgimiento se debe al lenguaje C++, creado por Bjarne Stroustrup. Componentes de POO: Abstracción Encapsulamiento Modularidad Clases y objetos Herencia Polimorfismo

23 Análisis y Diseño de Algoritmos

24 Tiempo de ejecución La mayoría de los algoritmos “transforman” los objetos de entrada en objetos de salida. El tiempo de corrida o ejecución típicamente aumenta de manera proporcional al tamaño de la entrada. El tiempo del caso promedio es difícil de determinar por lo general. Por lo que nos enfocamos en el tiempo del peor caso: Más fácil de analizar Crucial para aplicaciones como juegos, financieros y de robótica.

25 Estudios experimentales
Si implementamos un algoritmo, lo corremos con diferentes tamaños de la entrada, medimos el tiempo exacto de ejecución y graficamos los resultados

26 Limitaciones Se necesita primero implementar el algoritmo en algún lenguaje y correrlo! Los resultados del tiempo de ejecución pueden depender también a otras entradas/factores independientes a las del algoritmo Para poder comparar dos algoritmos, se debe utilizar el mismo hardware y software.

27 Análisis Teórico Utiliza una descripción del algoritmo de alto nivel en lugar de la implementación El tiempo de ejecución se establece como una función del tamaño de entrada, n. Toma en cuenta todas las entradas posibles. Nos permite evaluar la velocidad de un algoritmo independientemente del hardware/software.

28 Pseudocódigo Descripción de alto nivel de un algoritmo
Ejemplo: encontrar el máximo elemento de un arreglo Descripción de alto nivel de un algoritmo Más estructurado que una oración en Español Menos detallado que un programa Se utiliza la notación similar a la que se usará en el programa Esconde los aspectos de diseño de programación Algoritmo arregloMax(A, n) Entrada arreglo A de n enteros Salida maximo elemento de A Maximo  A[0] for i  1 to n  1 do if A[i]  Maximo then Maximo  A[i] return Maximo

29 Detalles del Pseudocódigo
Llamada a una función var.funcion (arg [, arg…]) Valor de regreso return expresion Expresiones Assignación (como el  en Java) Signo de igualdad (como el  in Java,C) n2 Superíndices y otros formatos matemáticos son permitidos Flujo de Control if … then … [else …] while … do … repeat … until … for … do … Indentación en lugar de [ ] Declaración de la función: Algoritmo funcion (arg [, arg…]) Input … Output …

30 Operaciones Primitivas
Cálculos básicos a ejecutar en un algoritmo. Fáciles de identificar en un pseudocódigo Independientes del lenguaje de programación La definición exacta es irrelevante Se asume que toman una cantidad constante de tiempo en un modelo RAM. Ejemplos: Evaluar una expresión Asignar un valor a una variable Indexar en un arreglo Llamar a un procedimiento/función Regresar del procedimiento/función

31 Contando operaciones primitivas
Al analizar el pseudocódigo podemos determinar el número máximo de operaciones primitivas ejecutadas por un algoritmo, en función del tamaño de entrada Algoritmo arregloMax(A, n) # operaciones Maximo  A[0] for i  1 to n  1 do n if A[i]  Maximo then (n  1) Maximo  A[i] (n  1) { incrementa contador i } (n  1) return Maximo Total 4n  1

32 Estimado el tiempo de ejecución
Algoritmo arregloMax ejecuta 4n  1 operaciones primitivas en el peor caso. Definir: a = Tiempo que toma la operación primitiva más rápida b = Tiempo que toma la operación primitiva más lenta Si T(n) es el tiempo del peor caso de arregloMax, entonces a(4n  1)  T(n)  b(4n  1) Por lo que, el tiempo de ejecución T(n) está limitado por dos funciones lineales

33 La tasa de crecimiento del tiempo de ejecución
Al cambiar el hardware/software: Afecta T(n) por un factor constante, pero No altera la tasa de crecimiento de T(n) La tasa de crecimiento lineal del tiempo de ejecución T(n) es una propiedad intrínsica del algoritmo arregloMax

34 Funciones importantes
Siete funciones que frecuentemente se utilizan en el análisis de algoritmos: Constante  1 Logarítmica  log n Lineal  n N-Log-N  n log n Cuadrática  n2 Cúbica  n3 Exponencial  2n En una gráfica log-log, la pendiente de la línea corresponde a la tasa de crecimiento de la función.

35 Factores Constantes La tasa de crecimiento no se ve afectada por
Factores constantes o Términos de bajo orden Ejemplos 102n es una función lineal 105n n es una función cuadrática

36 Notation O(n) “Big-Oh”
Dadas las funciones f(n) y g(n), decimos que f(n) es O(g(n)) si hay constantes positivas c y n0 tal que f(n)  cg(n) para n  n0 Ejemplo: 2n + 10 es O(n) 2n + 10  cn (c  2) n  10 n  10/(c  2) Asignando c = 3 y n0 = 10

37 Ejemplo La función n2 no es O(n) n2  cn n  c
La igualdad no se puede cumplir dado que c debe ser una constante

38 Más ejemplos 7n-2 3n3 + 20n2 + 5 3 log n + 5

39 Ejemplo: Calculando promedios prefijos
El promedio del i-ésimo prefijo de un arreglo X es el promedio de los primeros (i + 1) elementos de X: A[i] = (X[0] + X[1] + … + X[i])/(i+1) Calcular el arreglo A de los promedios prefijos de otro arreglo X tiene aplicaciones de análisis financiero.

40 Algoritmo V.1 Algoritmo PromediosPrefijos1(X, n)
Input arreglo X de n enteros Output arreglo A de los promedios prefijos de X #operaciones A  nuevo arreglo de n enteros for i  0 to n  1 do s  X[0] for j  1 to i do s  s + X[ j] A[i]  s / (i + 1) return A n n + 1 n …+ (n) …+ (n  1) n 1

41 Progresión Aritmética
El tiempo de ejecución de PromediosPrefijos1 es O( …+ n) La suma de los primeros n enteros es n(n + 1) / 2 Hay una prueba visual simple de esto Entonces, el algoritmo es the orden O(n2).

42 Algoritmo V.2 Algoritmo PromediosPrefijos2(X, n)
Input arreglo X de n enteros Output arreglo A de los promedios prefijos de X #operaciones A  nuevo arreglo de n enteros s  0 for i  0 to n  1 do s  s + X[ i] A[i]  s / (i + 1) return A n 1 n + 1 n n 1 Algoritmo PromediosPrefijos2 corre en O(n).

43 Matemáticas a repasar Propiedades de los logaritmos:
Sumatorias Logaritmos y exponentes Técnicas de prueba Probabilidad básica Propiedades de los logaritmos: logb(xy) = logbx + logby logb (x/y) = logbx - logby logbxa = alogbx logba = logxa/logxb Propiedades exponenciales: a(b+c) = aba c abc = (ab)c ab /ac = a(b-c) b = a logab bc = a c*logab

44 Tarea para entregar próxima clase
Realizar el pseudocódigo del algoritmo que dado n números, regresa el mínimo. Puedes realizar tantas versiones se te ocurran para resolver este problema. Realizar el análisis de las diferentes versiones del algoritmo e indicar su tiempo de ejecución para cada uno en notación O(n) (Big-Oh). Nota: Se deberá entregar al inicio de clase.


Descargar ppt "Curso de Programación Estructurada"

Presentaciones similares


Anuncios Google