Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porJoão Guilherme Fagundes Brandt Modificado hace 5 años
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.
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.