Title: Curso de Programaci
1Curso 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.
2Té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
3Técnicas de Programación
- Programación no Estructurada
- Programación Procedural
- Programación Modular
- Programación Estructurada
- Programación Orientada a Objetos
4Programació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.
5Programació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).
6Programació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.
7Programació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
8Programación Modular
datos Bdatos2
9Programació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)
10Programació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
11Diseñ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.
12Estructuras 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
13Estructuras de control básicas
no
si
Bifurcación condicional
Ciclo
Secuencia
14Estructura 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.
15Tipos de estructuras selectivas
16Tipos 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
17Estructuras 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.
18Tipos 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
19Tipos 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
20Tipos 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
21Otras 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!
22Programació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
23Análisis y Diseño de Algoritmos
24Tiempo 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.
25Estudios 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
26Limitaciones
- 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.
27Aná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.
28Pseudocó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
29Detalles 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
30Operaciones 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
31Contando 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
32Estimado 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
33La 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
34Funciones 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.
35Factores 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
36Notation 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
37Ejemplo
- 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
38Más ejemplos
39Big-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
40Ejemplo 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
42Progresió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).
44Matemá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
45Tarea 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.