Curso de Programaci - PowerPoint PPT Presentation

About This Presentation
Title:

Curso de Programaci

Description:

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 – PowerPoint PPT presentation

Number of Views:44
Avg rating:3.0/5.0
Slides: 45
Provided by: CINVE
Category:

less

Transcript and Presenter's Notes

Title: Curso de Programaci


1
Curso de Programación Estructurada
Maestría en Robótica y Manufactura Avanzada
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

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.
  • 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).

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
datos Bdatos2
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
si
Bifurcación condicional
Ciclo
Secuencia
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
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
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

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

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

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 actualidadel 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
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


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 ? A0 1
  • for i ? 1 to n ? 1 do n
  • if Ai ? Maximo then (n ? 1)
  • Maximo ? Ai (n ? 1)
  • incrementa contador i (n ? 1)
  • return Maximo 1
  • 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 105 es una función lineal
  • 105n2 108n 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
Big-Oh y la Tasa de Crecimento
  • La notación Big-Oh nos da un límite superior
    sobre la tasa de crecimiento de la función
  • El enunciado f(n) es O(g(n)) signfica que la
    tasa de crecimiento de f(n) no es mayor que la
    tasa de crecimiento de g(n)
  • Podemos utilizar la notación big-Oh para asignar
    una categoría a las funciones de acuerdo a su
    tasa de crecimiento.

f(n) es O(g(n)) g(n) es O(f(n))
g(n) crece más Si No
f(n) crece más No Si
Mismo crecimiento Si Si
40
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
  • Ai (X0 X1 Xi)/(i1)
  • Calcular el arreglo A de los promedios prefijos
    de otro arreglo X tiene aplicaciones de análisis
    financiero.

41
Algoritmo V.1
Algoritmo PromediosPrefijos1(X, n) Input arreglo
X de n enteros Output arreglo A de los promedios
prefijos de X
operaciones
n
A ? nuevo arreglo de n enteros for i ? 0 to n ?
1 do s ? X0 for j ? 1 to i do
s ? s X j Ai ? s / (i 1) return A

n 1
n
1 2 (n)
1 2 (n ? 1)
n
1
42
Progresión Aritmética
  • El tiempo de ejecución de PromediosPrefijos1 es
  • O(1 2 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).

43
Algoritmo V.2
Algoritmo PromediosPrefijos2(X, n) Input arreglo
X de n enteros Output arreglo A de los promedios
prefijos de X
operaciones
n
A ? nuevo arreglo de n enteros s ? 0 for i ? 0
to n ? 1 do s ? s X i Ai ? s / (i
1) return A
1
n 1
n
n
1
  • Algoritmo PromediosPrefijos2 corre en O(n).

44
Matemáticas a repasar
  • 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(bc) aba c
  • abc (ab)c
  • ab /ac a(b-c)
  • b a logab
  • bc a clogab

45
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.
Write a Comment
User Comments (0)
About PowerShow.com