Curso de Programación Estructurada

Slides:



Advertisements
Presentaciones similares
Análisis de Algoritmos
Advertisements

Ing. Albino Goncalves. Mayo 2007 Algoritmo Definiciones: – Consiste en una secuencia de pasos que hay que seguir para obtener resultados. – Consiste en.
METODOS DE PROGRAMACION I Ing. Vania Flores Pinto.
Funciones, expresiones y control en Alice
Análisis de los algoritmos Unidad 7. Análisis La resolución práctica de un problema – algoritmo o método de resolución – y por otra un programa o codificación.
Ciclos disponibles en Visual Basic Nury Capera Tovar.
PROGRAMACIÓN I CENTRO DE ESTUDIOS INTEGRADOS EL MARISCAL - CEIM Ing. Luisa Fernanda Arenas Castañeda Feb 6 de 2016.
Fundamentos de Programación de Computadores Módulo de Análisis y Diseño de Algoritmos.
ALGORITMOS, DIAGRAMAS DE FLUJO ING. DIANA CRUZ. QUÉ ES UN ALGORITMO ALGORITMO PARA UNA RECETA DE COCINA ETAPAS PARA SOLUCIONAR UN PROBLEMA PROPIEDADES.
ITESCO – Arquitectura Computadoras L. S. C. A. Raúl Monforte Chulin - MORCH Systems 1.1. Arquitectura básica y sus operaciones. Objetivo: El estudiante.
1 LENGUAJES DE PROGRAMACIÓN. Son aplicaciones específicas diseñadas para crear otras aplicaciones o programas. Son programas para crear programas. 2.
Resolución de problemas utilizando computaoras
Universidad autónoma del estado de México
Estructuras de Control en Visual Basic.net
Operadores Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.
Estructuras de Control.
Actividad #2 Los algoritmos
Introducción a la Programación Multimedial
. Primera Open Class Asignatura: Programación Estructurada Tema:
ROBERTO PINEDA FLORES. ALEXIS JULIAN VELAZQUEZ NAVA.
Olimpiadas Chilenas de Informática - Formación
Conceptos básicos de programación
Fundamentos de programación
Métodos en Java.
Estructuras de Datos Recursividad.
ALGORITMOS, LENGUAJES Y TECNICAS DE PROGRAMACION
Introducción a la Programación
Diagramas de flujo Estructuras de Control
Tema 4 Elementos para el Desarrollo de Algoritmos
Bucles y estructuras de decisión
Tema 6. Conceptos básicos de programación Clase 1
Infografía. Estructura de Datos.
Procedimientos y Funciones
Ingeniería en Sistemas computacionales Fundamentos de programación
Las herramientas Case Julian madrigal.
ALGORITMOS Un procedimiento o método para resolver un problema que cumpla con unos requisitos se dice que es un algoritmo. Se puede dar por tanto la siguiente.
ALGORITMOS Y PSEUDOCÓDIGO
Estructuras de control en PHP
PROGRAMACIÓN 1 INTRODUCCIÓN
Fundamentos de Programación. Estructuras de Control
Curso de iniciación al trabajo con MatLab 7.0
ESTRUCTURAS DE CONTROL EN VISUAL BASIC.NET Prof.: Rafael Mourglia.
FunciÓn PotenciaL, exponencial y logarÍtmica.
Fundamentos de programación
Tema 6 Clasificación de algoritmos
¿Qué son Los Lenguajes de Programación?
Tema 9. Estructuras de repetición. Clase 2
CURSO PROGRAMACIÓN BÁSICA SEMANA 2
Fundamentos de la Programación I
Metodología de la Programación
Tema 5 Representación y Técnicas de Diseño de Algoritmos
Programación básica.
Introducción a los algoritmos
FUNDAMENTOS DE PROGRAMACION
Tema 3: Operadores Antonio J. Sierra.
Bucles y estructuras de decisión
Introducción a la Estadística Informática
INTRODUCCIÓN A LA PROGRAMACIÓN ABRAHAM SOPLA MASLUCÁN MAESTRO EN CIENCIAS DE LA COMPUTACIÓN INSTITUTO TECNOLÓGICO DE MONTERREY.
Estructuras de Control
MC Beatriz Beltrán Martínez Verano 2018
Diego Hernández R Algoritmos Diego Hernández R
Recursividad 1 Análisis de algoritmos. Matrushka La Matrushka es una artesanía tradicional rusa. Es una muñeca de madera que contiene otra muñeca más.
Informática Ingeniería en Electrónica y Automática Industrial
Sentencias de control JAVA.
Programación Estructurada
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Tema 8. Estructuras de decisión. Clases 1 y 2.
Tema 8. Estructuras de decisión. Clases 3 y 4.
UNIDAD V ESTRUCTURA REPETITIVA (Repetir Hasta Que)
Macros EN EXCEL.
Transcripción de la presentación:

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.

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!

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

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.

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 .

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.

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”

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

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)

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

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.

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

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

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.

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

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

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.

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

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)

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

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!

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

Análisis y Diseño de Algoritmos

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.

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

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.

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.

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

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 …

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

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] 1 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 1 Total 4n  1

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

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

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.

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

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

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

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

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.

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 1 + 2 + …+ (n) 1 + 2 + …+ (n  1) n 1

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

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

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

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.