Tecnólogo en Informática Estructura de Datos y Algoritmos ¿Qué es una Estructura de Datos?



Descargar 15,68 Kb.
Fecha de conversión24.03.2017
Tamaño15,68 Kb.

Tecnólogo en Informática

¿Qué es una Estructura de Datos?

  • Una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulación. Un dato elemental es la mínima información que se tiene en un programa.
  • Lo que se pretende con las estructuras de datos es facilitar un esquema lógico para manipular los datos en función del problema que haya que tratar y el algoritmo para resolverlo.
  • En algunos casos la dificultad para resolver un problema radica en escoger la estructura de datos adecuada. Y, en general, la elección del algoritmo y de las estructuras de datos que manipulará estarán muy relacionadas.

Ejemplos de tipos de datos elementales

  • Binarios
    • Bit
    • Byte
  • Numéricos
    • Entero
    • Real
  • Alfanuméricos
    • Caracter
    • Cadena (String)
  • Booleanos

Ejemplos de estructuras de datos

  • Vectores (matriz o array)
  • Listas Enlazadas
  • Pilas (stack)
  • Colas (queue)
  • Árboles
    • Árboles Binarios
  • Conjuntos (set)
  • Grafos
  • Tablas Hash

¿Qué es un Algoritmo?

  • Un algoritmo es una secuencia de instrucciones que realizan una tarea en un periodo de tiempo finito. El algoritmo recibe cero o más entradas y produce al menos una salida.
  • Consiste en instrucciones claras y termina después de un número finito de pasos.
  • Diferente de programa que puede no terminar nunca!!!

¿Cómo se Representa un Algoritmo?

  • Gráfico de Flujo
    • Un Gráfico de Flujo es una representación visual del flujo de control de un algoritmo. Esta representación ilustra las sentencias que se tienen que ejecutar, las decisiones que hay que tomar, el flujo lógico y terminaciones que indican los puntos de entrada y salida.

Gráfico de Flujo

  • Símbolos

Gráfico de Flujo

  • Ejemplo
    • Supongamos que tenemos un algoritmo que inicializa un contador a 0, lee caracteres hasta un caracter de nueva línea (\n). Se incrementa el contador por cada caracter dígito leído, e imprime el valor del contador después de que haya leído el caracter de nueva línea.

Gráfico de Flujo

  • Ejemplo (continuación)

¿Cómo se Representa un Algoritmo?

  • Pseudocódigo
    • Es una representación en modo texto de un algoritmo que se aproxima al código fuente final. El pseudocódigo es útil para una escritura rápida de representaciones de algoritmos. Como la sintaxis no es lo más importante, no hay reglas definidas para escribir pseudocódigo.

Pseudocódigo

  • Ejemplo
  • DECLARE CHARACTER ch
  • DECLARE INTEGER count = 0
  • DO
  • READ ch
  • IF ch IS '0' THROUGH '9' THEN
  • count++
  • END IF
  • UNTIL ch IS '\n'
  • PRINT count
  • END

Compilación

Compilación

  • El principio de la 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

Modularidad

  • La modularidad es la capacidad que tiene un sistema de ser estudiado, visto o entendido como la unión de varias partes que interactúan entre sí y que trabajan para alcanzar un objetivo común, realizando cada una de éstas partes, una tarea necesaria ( e independiente) para conseguir dicho objetivo.

Modularidad

  • Cada una de esas partes en que se encuentre dividido el sistema recibe el nombre de módulo.
  • Idealmente un módulo debe poder cumplir las condiciones de caja negra, es decir, ser independiente del resto de los módulos y comunicarse con ellos (con todos o sólo con una parte) a través de unas entradas y salidas bien definidas

Características de un módulo

  • Cada uno de los módulo de un programa idealmente debería cumplir las siguientes características:
    • Tamaño pequeño.- Facilita aislar el impacto que pueda tener la realización de un cambio en el programa, bien para corregir un error o por rediseño del algoritmo correspondiente.
    • Independencia modular.- Cuanto más independientes son los módulos entre sí más fácilmente se trabajará con ellos, esto implica que para desarrollar un módulo no es necesario conocer detalles internos de otros módulos. Como consecuencia de la independencia modular un módulo cumplirá:
      • Características de caja negra, es decir abstracción.
      • Aislamiento de los detalles mediante encapsulamiento.

Programación Modular

  • Se trata de un paradigma de programación que persigue crear programas modulares (que cumplen o tienen la característica de modularidad).
  • Con esto se consigue desarrollar programas a partir de un conjunto de módulos, cada uno de los cuales desempeña una tarea necesaria para el correcto funcionamiento del programa global.

Programación Modular

  • En el caso de que el conjunto de módulos implicado esté sometido a una jerarquía, estaríamos hablando de un sistema de programación por capas, en la que cada "capa" representaría un nivel en la jerarquía de los módulos.
    • PE: presentación, lógica.

Módulos

  • Los programas de alto nivel usan en general funciones y procedimientos "de biblioteca“.
  • Las bibliotecas se organizan en módulos (de biblioteca).

Módulos

  • Un módulo contiene un número de entidades de exportación.
  • Entidades pueden ser:
    • Tipos
    • Constantes
    • Variables
    • Procedimientos y funciones
  • Exportación: disponibles para ser utilizados (importados) por otros módulos.
  • Cada módulo tiene un nombre.

Módulos

  • Los "programas principales“ (main) en C son llamados también módulos.
  • Se distinguen:
    • Módulos de biblioteca
    • Módulo principal

Compilación y creación del ejecutable ("linking")

Compilación y creación del ejecutable ("linking")

  • [1]El compilador no accede al código objeto de los módulos referenciados.
  • Sólo utiliza declaraciones que permitan verificar el uso correcto de las entidades importadas, desde el punto de vista sintáctico.
  • Por ello, la salida del compilador no está lista para ser ejecutada.

Compilación y creación del ejecutable ("linking")

  • Para construir el ejecutable es necesario completar el código objeto del programa con el correspondiente a las entidades importadas.
  • Esto último lo realiza el “conector“ (linker) accediendo ([2]) otra vez a las bibliotecas.
  • Cada módulo se puede dividir en dos partes:
    • Módulo de definición
    • Módulo de implementación

Módulo de definición

  • Las entidades declaradas son las exportadas por el módulo, y pueden ser:
    • Tipos
    • Constantes
    • Variables
    • Subprogramas  (sólo se declara el cabezal y no el cuerpo)
  • Ejemplo:
    • void readCaracter(char);
  • En general, basta declarar la mínima información necesaria para verificar el uso correcto de la entidad sólo desde el punto de vista sintáctico.

Módulo de implementación

  • Cada entidad declarada en el módulo de definición es implementada en el correspondiente módulo de implementación.
  • En particular, en este último es donde se proveen los cuerpos de los subprogramas exportados.
  • En el proceso de compilación de un módulo principal.
  • El compilador usa la información de los módulos de definición.
  • El linker usa los módulos de implementación.

Ejemplo (módulo de definición)

  • Square.h
  • int square(int);

Ejemplo (módulo de implementación)

  • Square.c
  • #include
  • #include “square.h”
  • int square(int y)
  • {
  • return (y*y);
  • }
  • main()
  • {
  • int x;
  • for (x = 1; x <= 10; x++)
  • printf(“%d ”, square(x));
  • return 0;
  • }

Ejemplo (continuación)

  • Resultado
  • 1 4 9 16 25 36 49 64 81 100

¿Para qué módulos?

  • Abstracción/Descomposición.

¿Para qué módulos?

  • Técnica: Divide & Vencerás
  • Se descompone el programa en módulos.
  • Debe acordarse cuál es la comunicación entre módulos
    • Qué entidades importan/exportan.
    • En el caso de los procedimientos, especificar QUÉ deben hacer (y no es necesario conocer CÓMO).
  • Los módulos pueden desarrollarse y compilarse separadamente.

¿Para qué módulos?

  • Para obtener una versión ejecutable debe efectuarse el proceso de linking.
  • Cambios en la implementación de entidades importadas no obligan a recompilar todo el sistema.
  • Sólo se recompila el módulo de implementación y se reconecta todo el sistema.
  • Naturalmente, los "códigos incompletos" generados por el compilador son también mantenidos en archivos.

El lenguaje C

  • En C los módulos se llaman funciones.
  • Instrucciones operando sobre y modificando estado de : datos (programa = estructura de datos + algoritmos)
  • Estructura de datos
    • Conjunto de variables (de estado)
    • Cada variable puede contener ciertos valores (datos)
    • Estado de una variable x:
      • x tiene valor v (v es un valor permitido de la variable)
      • x está indefinida, no tiene valor

El lenguaje C

  • Expresiones:
    • Variables y constantes denotan (representan) valores
    • Los valores pueden combinarse a través de operaciones para computar otros valores
  • Instrucciones:
    • Estructuras de control
      • Asignación ( x = e)
      • Secuencia
      • Selección
      • Iteración
      • Procedimientos

El lenguaje C

  • Datos:
    • No existe el concepto de “dato” (aislado)
    • Los datos están clasificados en tipo
    • Existe primero el concepto de tipo de datos y, para cada tipo T, tenemos el concepto de dato de tipo T 

Tipos de datos

  • Conocer un tipo de datos es conocer:
    • Cuáles son los valores de tipo T
    • Cuáles son las operaciones (primitivas) que se pueden aplicar a valores de tipo T

Tipos de datos

  • Para definir un tipo de datos deben darse reglas de:
    • Sintaxis
      • Cómo se escriben los valores (literales)
      • Cómo se escribe la aplicación de cada operación
    • Semántica

Tipos Abstractos de Datos

  • Un Tipo Abstracto de Datos (TAD) es un modelo matemático compuesto por una colección de operaciones definidas sobre un conjunto de datos para el modelo.
  • Permiten describir una estructura de datos en función de las operaciones que pueden efectuar, dejando a un lado su implementación.
  • Los TAD mezclan estructuras de datos junto a una serie de operaciones de manipulación de la misma.

Tipos Abstractos de Datos

  • Incluyen una especificación, que es lo que verá el usuario, y una implementación (algoritmos de operaciones sobre las estructuras de datos y su representación en un lenguaje de programación) que el usuario no tiene necesariamente que conocer para manipular correctamente los tipos abstractos de datos.

Tipos Abstractos de Datos

  • Se caracterizan por el encapsulamiento.
    • Es como una caja negra que funciona simplemente conectándole unos cables. Esto permite aumentar la complejidad de los programas pero manteniendo una claridad suficiente que no desborde a los desarrolladores. Además, en caso de que algo falle será más fácil determinar si lo que falla es la caja negra o son los cables.

Tipos Abstractos de Datos

  • Ejemplos
    • Circulo
      • Centro
      • Radio
      • Área
      • Perímetro
    • Cola


La base de datos está protegida por derechos de autor ©absta.info 2016
enviar mensaje

    Página principal