38
Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Embed Size (px)

Citation preview

Page 1: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Estructuras de Datos y Algoritmos

Curso 2009

Tecnólogo Informático

Page 2: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Presentación

Docentes:

Teórico: Andrés Pastorini

Práctico y Laboratorio: Marcelo Torterolo

Page 3: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Presentación

Segundo curso de Programación de Computadoras

Métodos y lenguajes de programación

Orientado a aplicaciones de tamaño medio

Page 4: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Presentación

Previas

Curso de Principios de Programación Curso de Matemática Discreta y Lógica 1.

Page 5: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Objetivo

Avanzar en el aprendizaje de la programación :

Recursión Estructuras Dinámicas (punteros) Tipos Abstractos de Datos Módulos Técnicas de ensayo de programas

Page 6: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Temario

Tipos abstractos de datos. Diseño de programas, módulos de programa. Implementación de módulos en lenguaje C/C++. Algoritmos de búsqueda y ordenación. Introducción al análisis de algoritmos:

eficiencia en tiempo de ejecución y espacio de almacenamiento.

Concepto de recurrencia. Implementación de tipos de datos recurrentes:

concepto y manipulación de punteros. (ej: Implementación de listas).

Page 7: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Temario

Implementación de funciones recurrentes.

Diseño de programas mediante abstracción de datos. Refinamiento de funciones y datos.

Abstracciones de datos básicas: Estructuras lineales (listas, pilas, colas, dobles-

colas). Árboles (árboles binarios de búsqueda, árboles

generales, estructuras arborescentes).

Page 8: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Bibliografía

Estructuras de datos y algoritmos Wirth, N. Algoritmos y Estructuras de Datos. Prentice-Hall.

1987. Weiss, M. A. Estructuras de Datos y Algoritmos. Addison-

Wesley Iberoamericana. 1995. Aho, A. V., J. E. Hopcroft y J. D. Ullman. Estructuras de

Datos y Algoritmos. Addison-Wesley Iberoamericana. 1988.

Lenguaje de programación C/C++ Kernighan, B. W. y D. M. Ritchie. El lenguaje de

programación C. Prentice-Hall. 1991. Deitel, H. M. y P. J. Deitel. Cómo programar en C/C++.

Prentice-Hall. 1998.

Page 9: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Metodología

16 Créditos 4 hs. Clase Teórica 5 hs. Clase Práctica 7 hs. Dedicación domiciliaria

Prácticos Laboratorio

Pruebas Parciales Trabajo de Laboratorio

Page 10: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Estrategia

Clarificar el concepto "programa de computadora" Lenguaje de programación (C/C++)

Tipos de Datos (int,float,char)Registros Uniones

Estructuras Dinámicas(Punteros) Módulos

Compilación separada

Page 11: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Estrategia

Estudiar cómo construir programas que resuelvan problemas dados.

Metodología de Programación Recurrencia Listas y Árboles Tipos Abstractos de Datos Ensayo de Programas

Page 12: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Autómatas Maquinas de estado

Los lógicos (matemáticos) en la década del '30 buscaron "modelos universales" de programas.

En cada momento, la máquina está en un cierto estado El conjunto de estados se especifica precisamente

Hay un conjunto de acciones (transiciones) que son las formas de operar la máquina. Las transiciones cambian el estado de la máquina Ejemplos:

Cisterna Componentes:

tanque (conteniendo cierta cantidad de agua) llave de paso (abierta/cerrada)

(ver analogía con variables Pascal) Estados:

combinaciones de los estados del par de componentes (tanque, llave de paso) Acciones:

tirar la cisterna ...

Page 13: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Autómatas Maquinas de estado

Otro ejemplo: Calcular el máximo de dos números

Componentes: int x, y, max;

Transición: if (x >= y) max = x; else max = y ;

Efecto dado un estado inicial, la transición cambia ese estado de tal

modo que en el estado final la variable max contiene el máximo de x e y

Efecto del programa consiste en el cambio de estado

Page 14: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Maquinas de estado programables

Los ejemplos vistos son programas individuales ¿ Cómo sería una máquina programable capaz de ejecutar CUALQUIER PROGRAMA ?  

Noción universal de Programa (Programa para la máquina universal)  

Idea: Programa + indicador de hasta dónde se ha ejecutado Esto forma parte del estado (están almacenados en la

máquina)  

Page 15: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Maquinas de estado programables

Esquema: Componentes:

Memoria Lista de casillas identificadas Cada casilla puede contener un símbolo, de una lista

dada. Las casillas se usan para almacenar:

instrucciones datos

Punto de control - “program counter" Señala al lugar de memoria donde se encuentra la siguiente instrucción a ejecutar

Page 16: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Maquinas de estado programables

Instrucciones: hay un conjunto de instrucciones precisamente especificado En general, cada instrucción modifica el estado de la

máquina

Máquina de Turing 1936 - Modelo de "procedimiento computable"

¿ Es decidible mecánicamente si un enunciado matemático es verdadero o

falso ?

Page 17: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Maquinas de estado programables

Computadora Electrónica Realización del modelo de Turing (~1945) Las celdas pueden contener sólo 0 ó 1 (Bits) Instrucciones y datos codificados en secuencias de bits

(código binario) ¡ La noción abstracta de PROGRAMA antecedió a las

computadoras electrónicas! (Más aún: constituyó la base de su diseño)

Resultados inesperados de investigaciones altamente teóricas

Page 18: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Maquinas de estado programables

Lenguajes de Programación de Computadoras Lenguaje de Máquina

Las instrucciones son secuencias de bits:

1100111011...1 que se interpretan.

El conjunto de instrucciones y el formato esta dado por la arquitectura de la maquina (add, mov,…).

Ejemplo:

-1100 (significa sumar)

-111011...1 (operandos)

Page 19: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Programa de Computadora

Programas Difícil de definir, podríamos decir que:

instrucciones que la CPU de una computadora puede entender y ejecutar.

Conjunto de pasos para resolver un problema dado. Buscamos

acordar una noción (más) objetiva de programa

Acordar reglas para escribir programas

notación, sintaxis significado, semántica

 

Page 20: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Abstracción

Metodologías de Programación

Partición Refinamiento

Sinónimo de problema: ESPECIFICACION. El problema especifica qué debe satisfacer el programa buscado, el conjunto de programas aceptables Partición

Descomponer la especificación inicial en subproblemas Verificar que la estructura obtenida resuelve el problema, asumiendo que los componentes están resueltos correctamente.

Refinamiento Proceder de la misma forma con los componentes Aún no implementados

Page 21: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Abstracción

Queremos los programas de computadora para resolver problemas

En el enunciado de los problemas se manejan conceptos "abstractos" Ej: número entero, matriz de reales, cliente

Construir programas para resolver problemas dados involucra representar conceptos abstractos en términos del lenguaje de programación

Complejidad de la Programación inherente a los problemas proceso de construcción de los programas

Page 22: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Abstracción

El proceso sigue refinando conceptos "abstractos" hasta alcanzar el nivel del lenguaje de máquina. Ciertas clases de estos refinamientos pueden realizarse Automáticamente. Entonces es posible definir lenguajes de programación más abstractos Lenguajes de alto nivel (de abstracción) donde son primitivos ciertos conceptos abstractos. Hay un programa (compilador) que produce representaciones de esos conceptos.

Page 23: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Paradigmas de Programación

Lenguajes de Programación Existen docenas de lenguajes de programación, y se sigue

creando nuevos. Cada uno tiene sus propias preferencias en cuanto al estilo

de programación

Page 24: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Paradigmas de Programación

Cualidades de un Lenguaje Expresividad (que el numero máximo de problemas se

puedan expresar con este lenguaje) Facilidad del aprendizaje Portabilidad (que pueda compilar en maquinas de bajo costo,

en diferentes SO) Cualidad de la implementación Factores económicos Tipo y cantidad de paradigmas que soporta.

Page 25: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Paradigmas de Programación

Programación Imperativa Es el paradigma que surgió mas naturalmente al desarrollo

de las computadoras : las maquinas están físicamente construidas para ejecutar series de instrucciones maquinas Se concibieron abstracciones de esas instrucciones o combinaciones de ellas para dar lugar a lenguajes de mas alto nivel. La idea central es el estado del programa que va cambiando por las operaciones que se ejecutan.

Page 26: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Paradigmas de Programación

Programación Procedural Para cumplir una tarea dada, descomponemos todo en sub-

tareas de calculo que se cumplen sucesivamente para alcanzar la meta (procedimientos, funciones).

Mas modularidad, permite mejor re-utilización del código.

Ejemplo: C, Basic...

Page 27: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Paradigmas de Programación

Programación Funcional

En la programación funcional, como lo indica su nombre, la entidad básica es la función. Se intenta evitar referencias a variables.

Ejemplos de Lenguajes : Lisp, Haskell, ...

Utilizado en IA.

Page 28: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Paradigmas de Programación

Programación Lógica En este paradigma, se consideran principalmente predicados

y reglas lógicas que alimentan una base de conocimientos. Ejecutar un programa, en este caso, es evaluar o un predicado o dar valores para que un predicado es verdadero.

Page 29: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Paradigmas de Programación

Programación Orientada a Objetos

La Programación Orientada a Objetos (POO , OOP) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento

Page 30: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Lenguajes de Programación

En lenguaje de programación se puede clasificar también según la forma de ejecución de los programas escritos en el.

Interpretado

Compilado

Page 31: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Lenguajes de Programación

En un lenguaje interpretado, el código es convertido en instrucciones ejecutables por el microprocesador al momento mismo de la ejecución. Necesita un programa interprete. La CPU ejecuta las instrucciones del interprete.Ejemplos : Python, JavaScript, prolog, Java,…

En un lenguaje compilado, el código es traducido eninstrucciones ejecutables una vez por todas. Ejemplos : C( pero existen también versiones interpretadas),Pascal, Modula-2,….

Page 32: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Compilación

Compilador Programa informático que traduce un programa escrito en un

lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es código máquina, pero también puede ser simplemente texto. Este proceso de traducción se conoce como compilación.

Page 33: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Compilación

Permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje máquina).

El programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.

Page 34: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Compilación

Principio de compilación separada: A menudo, los programas usan componentes que son

construidos en forma totalmente independiente Ej: funciones de biblioteca

Si cambiamos la implementación de una función de biblioteca, no queremos tener que recompilar todos los programas que usan esa función

El programa y (ciertos) componentes auxiliares son compilables separadamente

Page 35: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Compilación

Page 36: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Compilación en C/C++

-El preprocesador, trabaja con el código fuente y lo preprocesa.(Está fase esta presente en el lenguaje C/C++ y no en todos los lenguajes)

-El compilador transforma el código fuente y genera código ensamblador (Assembly).

-El ensamblador convierte el código assembler en lenguaje de maquina obteniendo un archivo objeto (.o)

-El linker combina varios archivos objeto para generar el ejecutable.

Page 37: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

Referencias

http://www.fing.edu.uy/inco/cursos/prog2

http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos

http://es.wikipedia.org/wiki/Compilador

www.cimat.mx/~jbhayet

Wirth, N. Algoritmos y Estructuras de Datos. Prentice-Hall. 1987.

Page 38: Estructuras de Datos y Algoritmos Curso 2009 Tecnólogo Informático

FIN

¿Preguntas?