Está en la página 1de 46

Introduccin

Qu es una Estructura de Datos? Cuando hablamos de tipos de datos bsicos nos referimos a un conjunto de valores ms sus operaciones asociadas, por ejemplo, dentro del computador un nmero entero se representa con un par de bytes (16 bits), con ello, slo puede almacenar valores en un rango de [-2 16/2, +216/2] y disponer de los operadores aritmticos: +, -, *, / y mod. Extendiendo el concepto, si agrupamos un conjunto de valores de igual o distinto tipo de dato bsico y enseguida definimos la manera de cmo operar sobre ellos, es decir, sus mtodos de acceso, estaramos en presencia de una ESTRUCTURA DE DATOS. La definicin de una Estructura de Datos posee un primer nivel de abstraccin en donde simplemente se identifica la coleccin de elementos a agrupar y sus operaciones de acceso. En un segundo nivel, el de implementacin, ya pensamos en un lenguaje de programacin especfico y es ah donde surgen preguntas como cul es la estructura ptima? o qu funciones y/o procedimientos definir? Ejemplo: Suponga que se necesita implementar un juego entretenido para 2 jugadores. Nivel #1:Lgico o de abstraccin.

Si sugerimos el famoso juego del "El Gato" pensemos en un nivel abstracto que se trata de una coleccin de casilleros en donde se deber marcar X O a medida que el jugador le toque su turno. Ya tenemos la coleccin de elementos X O y la operacin marcar (X O segn sea el caso).

Nivel #2:De Implementacin

A nivel de implementacin qu estructura sera factible en este caso?. Por las caractersticas del juego, (despus de analizar ventajas y desventajas) concluimos que una arreglo bidimensional de 3 x 3 de tipo carcter sera una solucion mas factible.Netcyrus Pgina 2 15/06/2011 Type TableroGato = Array [1..3, 1..3] of char; Var TableroJuegoEntretenido:TableroGato;

A este arreglo se le podra asociar Define otros para poder jugar ms tarde!

el

procedimiento

MarcaJugador(turno:

integer)

Arreglos
Qu son los arreglos? Son una agrupacin de datos homogneos, es decir, con un mismo tipo de dato bsico asociado. Se almacenan en forma contigua en la memoria y son referenciados con un nombre comn y una posicin relativa.

Ejemplos: Arreglo Lineal (1 dimensin vector) Vista grfica

[1]

[2]

[3]

[4]

[5]

Definicin de tipo

Type Linea:Array [1..5] of TipoBasico; Var MiArreglo:Linea; Arreglo Bidimensional (matriz) Vista grfica [1,1] [1,2] [1,3] [2,1] [2,2] [2,3] [3,1] [3,2] [3,3] Para pensar Para pensarlo... [1,4] [2,4] [3,4] Definicin de tipo Type TipoTabla:Array[1..3,1..4] of TipoBasico; Var MiTabla: TipoTabla;

Determina el mecanismo de acceso a cada posicin de las estructuras definidas. Existirn arreglos de ms de 2 dimensiones? Investgalo o pinsalo, dibuja su grfica y constryele ladefinicin de tipo con tu grupo de trabajo.

Para implementar Para implementar...

Recorre la diagonal secundaria de un arreglo bidimensional. Almacena los antecedentes bibliotecarios en un arreglo tridimensional.(NombreLibro, Cdigo Libro, FechaPublicacin, Autor(es))

Registros (TDU)
Qu son los registros? Son un tipo de datos formado por una coleccin finita de elementos no necesariamente homogneos. El acceso se realiza a travs del nombre del registro seguido del campo especfico al que se desea acceder. Supongamos la sgte. vista grfica de un registro cualquiera: Ao Marca Precio

1997

OPEL 1.4

CORSA

SWING

4.150.000

Definicin de tipo asociada: TYPE TipoAuto = RECORD ao: integer; marca: string[35]; precio: longint; (*Para que soporte valores > MAXINT*) END; Var AUTOMOVILES: TipoAuto; Cmo acceder a los campos individuales de un registro? Para acceder a cada uno de los campos se utiliza la siguiente funcin de acceso: NombreRegistro.nombre del campo Para el registro AUTOMOVILES revisado anteriormente se tiene que el acceso a cada uno de sus campos se realiza como sigue: AUTOMOVILES.ao AUTOMOVILES.marca AUTOMOVILES.precio La principal ventaja del uso de registros es que posibilitan modelar objetos que contienen varias caractersticas y acceder a ellas mediante un nombre nico. Para Implementar 1. 2. 3. Definir la estructura de datos que represente las cuentas bancarias para 500 clientes del Banco Della Plaza. Ellas deben contener un saldo cuenta corriente y otro en lnea de crdito. Identifica las operaciones bsicas asociadas a la estructura. Definir la estructura de datos que represente un hotel 5 estrellas de 5 pisos y 10 habitaciones por piso. Identifica las operaciones bsicas asociadas a la estructura. Definir una estructura de datos para representar una agenda diaria. Plantear la solucin esttica y dinmica. Identificar las operaciones bsicas asociadas a la estructura.

Alternativa solucin Cajero Automtico (1):

Operaciones bsicas

Procedure Giro (var Clientes:Cta;tipocuenta,indice:integer;Monto:real) {*Extrae dinero desde alguna de las cuentas*} Procedure Deposito (var Clientes:Cta;tipocuenta,indice:integer;Monto:real) {*Abona a alguna de las cuentas*} Procedure Inicializacion (var Clientes:Cta;tipocuenta,indice:integer; Monto:real) {*Almacena los montos iniciales para cada cliente*} Procedure Transferencia (var Clientes:Cta;sentido,indice:integer; Monto:real) {*Transfiere dinero entre cuentas de un mismo cliente*}

Asignacin de Memoria Dinmica


Mtodos de Asignacin de Memoria Cules son los mtodos de asignacin de memoria utilizados por el S.O.? Cabe destacar que el almacenamiento y procesamiento de todos los datos es realizado en memoria RAM, en un segmento destinado a ello (DS), por ello, es importante conocer los mtodos de asignacin de memoria utilizados para su almacenamiento. Por un lado, se tiene la asignacin esttica de memoria en donde se reserva la cantidad necesaria para almacenar los datos de cada estructura en tiempo de compilacin. Esto ocurre cuando el compilador convierte el cdigo fuente (escrito en algn lenguaje de alto nivel) a cdigo objeto y solicita al S.O. la cantidad de memoria necesaria para manejar las estructuras que el programador utiliz, quien segn ciertos algoritmos de asignacin de memoria, busca un bloque que satisfaga los requerimientos de su cliente. Por otro lado se tiene la asignacin dinmica en donde la reserva de memoria se produce durante la ejecucin del programa (tiempo de ejecucin). Para ello, el lenguaje Pascal cuenta con dos procedimientos: NEW() y DISPOSE() quienes realizan llamadas al S.O. solicitndole un servicio en tiempos de ejecucin. El procedimiento NEW ,por su parte, solicita reserva de un espacio de memoria y DISPOSE la liberacin de la memoria reservada a travs de una variable especial que direccionar el bloque asignado o liberado segn sea el caso.

Ejemplo : Cuando se compilan las sgtes. lneas de cdigo se produce una asignacin esttica de memoria:

var linea: string [80]; (*Se solicita memoria para 80 caracteres --> 80 bytes) operatoria: Array[1..100,1..100] of real; (*Se solicita memoria para 100x100 reales -> 100 x 100 x 4 bytes) interes : integer; (*Se solicita memoria para 1 entero --> 2 bytes) Cuntos bytes se reservaran para:? datos: array [1..25] of double; Para explicar con mayor detalle el concepto de memoria dinmica es necesario conocer el concepto PUNTEROS!

Punteros
Qu son los Punteros? Son tipos de datos simples capaces de almacenar la posicin de una variable en memoria principal. Se dice que ellos direccionan a otras variables.

Ejemplo:

Se dice que las variables ubicadas en las posiciones 1003 y 1006 son punteros, pues direccionan o "apuntan a" las posiciones 1000 y 1007 respectivamente. Definicin de Tipo Type Puntero = ^TipoDato; Expresa que los valores de tipo Puntero son punteros a un tipo de dato bsico o estructurado Type puntero = ^Automoviles; Var pauto1, pauto2: puntero; Expresa que Puntero un tipo de dato capaz de direccionar al Registro Automoviles (definido en el tpico anterior) y que pauto1, pauto2 son dos variables de tipo puntero) Asociado al concepto de punteros est el de nodo de memoria que habamos enunciado en el tema de asignacin dinmica. Este nodo cuenta con la siguiente vista grfica:

Cuya definicin de tipo es: Type TAuto=Record anho:integer; marca:string[30]; preciobruto:longint; End; puntero = ^nodo; {*Expresa que puntero es capaz de direccionar a un nodo.*} nodo = RECORD; {*Definicin del nodo.*} info:TAuto; {*Contenido informativo*} sgte:puntero; {*Enlace al sgte. nodo de la estructura*} End;

Estos nodos de memoria son la base para la construccin de estructuras de datos dinmicas que, como ya recordarn, son aquellas para las cuales no se asigna inmediatamente memoria, en lugar de ello, se utiliza el concepto de asignacin dinmica a travs de procedimientos incorporados al lenguaje. As, el campo enlace mostrado en la grfica direccionar a otro nodo que contiene a su vez informacin relacionada a un nuevo automvil y as sucesivamente.

Cmo acceder a los campos individuales de un nodo? Para referenciar a los componentes individuales de un nodo es necesario, sin duda, que exista un puntero libre direcionndolo de manera de hacerlo a travs de l.

Para acceder a cada uno de los campos se utiliza la siguiente funcin de acceso: NombrePuntero^.nombre del campo Para este caso: Inicio^.TAuto.anho : Hace referencia al ao de fabricacin del vehculo. Inicio^.TAuto.marca : Hace referencia a la marca del vehculo. Inicio^.TAuto.preciobruto : Hace referencia al precio del vehculo. Inicio^.enlace : Corresponde a la posicin en MP del prximo nodo de la estructura (conteniendo datos sobre otro vehculo). Notar que en este caso se hace doble referencia por tratarse de un registro anidado. Convenciones:

Para Pensar Investiga con tu grupo de trabajo Cules son los procedimientos de asignacin dinmica y cmo se utilizan para Lenguaje Pascal y Lenguaje C ?

PILAS O COLAS LIFO


Definicin Qu es una Pila? Imagina un montn de platos "apilados" o bien fichas de domin formando una torre e intenta eliminar una desde el centro, qu ocurre?, naturalmente esta operacin no est permitida si queremos mantener intactos a los platos o a la torre construida. Por esta razn, una pila se asocia a una estructura de datos LIFO (LAST IN FIRST OUT). En base a lo anterior, construye la definicin de una PILA y disctela con el profesor. En general, podemos definir para cada una de las estructuras de datos una representacin esttica y otra dinmica segn el mtodo de asignacin de memoria utilizado.

CLASIFICACIN
Definicin Pila esttica Cmo representar estticamente una pila? Sin duda tendremos que utilizar arreglos o registros que como ya sabemos son la base para estructuras de datos ms complejas. Considera la siguiente figura: Vista grfica

Suponiendo que Dato pertenece a un mismo tipo de datos y CuentaDato corresponde a un entero que se incrementa a medida que un nuevo elemento se incorpora a la pila. Intenta construir la definicin de tipo para la estructura Pila. TYPE ______________________________ ______________________________ ______________________________ END;

Pila Dinmica

Cmo representar dinmicamente una pila? Sin duda tendremos que utilizar nodos con punteros. Considera la siguiente figura:

Suponiendo que los punteros que aparecen en la figura son capaces de apuntar a un nodo y que Dato pertenece a cualquiera de los tipos bsicos o estructurados, la definicin de tipo sera: TYPE Puntero=^NodoPila; NodoPila=Record Info:AlgunTipo; sgte:Puntero; End; Var tope:Puntero; Para Pensar Establece la diferencia entre el puntero tope y el puntero sgte ubicado denntro del NodoPila.

Cul es la relacin entre el puntero Tope y el entero CuentaDatos de la representacin Esttica? Cules son los mecanismos de acceso a los datos almacenados en una pila?

Operaciones Bsicas

Inicializacin Verificar si la pila est llena Verificar si la pila est vaca Empilamiento o PUSH Desempilamiento o POP

A continuacin presentaremos las operaciones bsicas para la representacin dinmica de una pila. Haz lo mismo para la esttica. Grafica las operaciones a un costado del algoritmo. procedure InicializaPila(var s: puntero); begin s:= nil; end; function pilavacia( s: puntero):boolean; begin

10

pilavacia:=(s=nil);(La funcin asume el valor de verdad de la condicin*) end; function pilallena:boolean; begin pilallena:=(sizeof(nodo) >MAXAVAIL); end; Donde sizeof(nodo) devuelve el tamao en bytes que ocupa la estructura del tipo nodo y MAXAVAIL contiene el bloque de tamao mximo disponible para ser asignado. procedure push (var s: puntero; nuevoelemento:tipo); var p:_puntero; begin if not pilallena(s) then begin new(p); p^.info := nuevoelemento; p^.sgte:= nil; if pilavacia(s) then(*Creando el primer nodo de la pila*) s:=p; end else(*Anexando un nuevo nodo a la pila*) p^.sgte:=s; s:=p; end; else write ('Overflow'); end; procedure pop (var s: puntero; var viejoelemento:tipo); var p:puntero; begin if PilaVacia(s) write('Underflow') else begin viejoelemento:= s^.info; p:= s; s:= s^.sgte; dispose(p); end; End; Un concepto por introducir es el de encapsulamiento, que significa que una vez definida la estructura e implemetadas las operaciones bsicas, uno se remite a utilizarlas sin importar su codificacin interna, es decir, las llamadas a PUSH(pila, x) o POP(pila, y) empilarn a x o desempilarn en y sin importar cmo lo hagan. Investiga que mecanismo encapsulamiento. ofrecen los lenguajes para implementar el concepto de

Listas Enlazadas
Qu es una lista enlazada ? Corresponde a una estructura lineal compuesta por una coleccin de datos homogneos con alguna relacin entre ellos. Dicha estructura se crea a travs del mtodo dinmico de memoria.

11

En una lista enlazada el orden de los elementos est determinado por un campo enlace (puntero) explcito en cada elemento, por ejemplo: pilas y filas dinmicas. La representacin de lista enlazada es la ms ptima debido a que cualquier proceso de actualizacin (modificacin insercin o eliminacin) se realiza en base a reasignacin de punteros. En este captulo trataremos slo con las listas enlazadas ya que las listas secuenciales ya son bien conocidas por ustedes.

Tipos de Listas Enlazadas

Listas Listas Listas Listas

lineales simplemente enlazadas Circulares doblemente enlazadas mltiplemente enlazadas

Listas Simplemente Enlazadas Una lista lineal simplemente enlazada es una estructura en la que el cada elemento enlaza con el siguiente. El recorrido se inicia a partir de un puntero ubicado al comienzo de la lista. El ltimo elemento (nodo) de la lista apunta a una direccin vaca que indica el fin de la estructura.

Donde p=^Nodolista (apunta al sgte. nodo de la lista) Definicin de tipo Lista simplemente enlazada Type puntero = ^NodoLista; NodoLista = Record info: AlgunTipo; siguiente: puntero; end;

12

Cabe destacar que en una lista lineal enlazada, slo es posible acceder a los elementos sucesores pero no antecesores, adems, siempre es necesario mantener un puntero a la cabeza de la lista para acceder a los dems elementos Listas Circulares Una lista circular es una lista lineal en la que el ltimo elemento enlaza con el primero. Entonces es posible acceder a cualquier elemento de la lista desde cualquier punto dado.

Donde p=^Nodolista (apunta al sgte. nodo de la lista) La definicin de tipo es equivalente a la anterior slo se debe modificar la direccin a la que apunta el enlace ubicado en el ltimo nodo. Las operaciones sobre una lista circular resultan ms sencillas. Cuando recorremos una lista circular, diremos que hemos llegado al final de la misma cuando nos encontremos de nuevo en el punto de partida; suponiendo que en este punto se deja un puntero fijo. Otra solucin al problema anterior sera ubicar en cada lista circular un elemento especial identificable, como lugar de parada. Este elemento especial recibe el nombre de cabeza de la lista. Esto presenta la ventaja de que la lista circular no estar nunca vaca.

Ejemplo: Realizaremos la suma de ecuaciones algebraicas o polinmicas de las variables x, y, z. Por ejemplo: (2x3y + 4xy3 - y4 ) + ( 2xy3 - xy) Cada polinomio ser representado como una lista cuyos nodos representan los trminos no nulos, como se indica a continuacin: Coeficiente A B C p

Donde coeficiente corresponde al coeficiente del trmino xAyBzC. suponiendo que los coeficientes y exponentes estn dentro de los rangos permitidos. La notacin A B C se utilizar

13

para representar el campo ABC de cada elemento tratado como un nmero entero. El ABC y Exponente sern siempre positivos, el campo signo indicar de esta manera el signo de cada trmino. Los elementos de la lista aparecern sobre la misma en orden decreciente del campo ABC, siguiendo la direccin de los enlaces. Ahora bien, podra indicar grficamente como quedara representado el polinomio (2x3y + 4xy3 - y4) ? Listas Doblemente Enlazadas

Una lista doblemente enlazada es una lista lineal en la que cada elemento tiene dos enlaces, uno al elemento siguiente y otro al elemento anterior. Esto permite recorrer la lista en cualquier direccin.

Donde p =^Nodolista (apunta al sgte. nodo de la lista) Donde q =^Nodolista (apunta nodo anterior de la lista) Definicin de tipo Lista Doblemente enlazada Type puntero = ^NodoLista NodoLista = Record info: AlgunTipo; siguiente: puntero; anterior: puntero; End; Las operaciones sobre una lista doblemente enlazada se realizan sin ninguna dificultad. Sin embargo, casi siempre es mucho ms fcil la manipulacin de las mismas, cuando se aade un elemento de cabeza y existe un doble enlace entre el ltimo elemento y el primero. Esta estructura recibe el nombre de lista circular doblemente enlazada. Listas Mltiplemente Enlazadas

Este tipo de listas contiene ms de dos enlaces por nodo, los que tienen la posibilidad de apuntar a ms de dos listas enlazadas.

14

Vista grfica de un nodo p p Dato p p

Donde p=^nodo Intenta construir su definicin de tipo considerando la vista grfica. Type _________________________ _________________________ _________________________ _________________________ _________________________ _________________________ End;

Operaciones Basicas

Crear una lista vaca. Recorrer la lista. Buscar un elemento en la lista. Insertar nuevos elementos. Eliminar elementos ya existentes.

Crear una lista Inicio:=NIL; (*Inicializar Lista*)

Recorrer la Lista p:=inicio; (*El puntero p es ubicado al principio de la lista*) while p<>NIL do begin write(p^.info); (*Se vaca todo el contenido de la lista por pantalla*) p:=p^sgte; end; Bsqueda de un Elemento (*Del nodo con info = x*) p:=inicio;Encontrado:=FALSE;

15

while (p<>NIL) and (NOT ENCONTRADO) do begin if p^.info = x then ENCONTRADO:=TRUE; p:=p^sgte; end; busqueda:= p Esta funcin devuelve un puntero a la primera ocurrencia de nodo con campo info = x o en su defecto apuntando a NIL. Incorporar Elementos (* Antes del nodo apuntado por inicio*, estrategia LIFO) new(p); p^.sgte:=inicio; inicio:= p; (* En otro punto de la lista, antes de nodo con info=x y con el puntero p ubicado antes del punto de insercin*) begin new(t); t^.sgte:=p^.sgte; p^.sgte:=t; end; (* Despus del ultimo elemento*, estrategia FIFO) p:=inicio; while (p^.sgte<>NIL) do begin p:=p^sgte; (*Ubica a p en el ltimo nodo*) end; new(t); t^.sgte:=p^.sgte; end; Eliminar Elementos Existentes (*Nodo con info=x*) Busqueda(p);(*Deja el puntero p un nodo antes del que ser eliminado*) t:= p^.sgte; p^.sgte:= t^.sgte; dispose(t);

(*Verificar si est vaca o llena*) EstaVaca:= (Inicio=NIL); EstaLlena:= (sizeof(nodo)>MAXAVAIL); Esta funcin devuelve un TRUE o un FALSE dependiendo del valor de verdad de cada expresin

16

RECURSIVIDAD
Tcnica que permite definir un procedimiento o funcin en trminos de s mismo, en otras palabras, se dice que un subprograma es recursivo si para cumplir su labor realiza una llamada a s mismo dentro del cdigo. Del latn:

recur re- = volver (back)+ currere = a ejecutar (to run)

Caractersticas

- Cara en trminos de tiempo de ejecucin, debido a los sucesivos empilamientos de variables y direcciones de retorno. - En ciertos casos reemplaza a los ciclos repetitivos debido a su caracter sinttico. Soportada slo por lenguajes que manejan asignacin dinmica de memoria.

Interatividad V/S Recursividad


El problema del factorial de un Entero + Seguimiento Problema del FACTORIAL DE UN ENTERO Solucin Iterativa function factorialIterativa (n: integer): integer; var

17

fact, contador: integer ; (*no negativo*) BEGIN fact := 1; for contador := 2 to n do fact : = fact * contador; factorialIterativa: = fact END; Solucin Recursiva function factorialRecursiva (n: integer): integer; BEGIN if n=0 then factorialRecursiva := 1 else (* para N>0*) factorialRecursiva : = n * factorialRecursiva (n-1) END; Seguimiento Iterativo (Factorial) n 4 contador 2 3 4 Fact 1 2 6 24 Seguimiento Recursivo (Factorial) n salida 24 Factorial Iterativo

4 4*fact(3) 3 4*(3*fact(2)) 2 4*(3*2*fact(1)) 1 4*(3*2*1*fact(0)) 0 4*(3*2*1*1)

18

Problema de la Potencia de 2 numeros enteros positivos + seguimiento Problema de la POTENCIA pot(a,b) Solucin Iterativa function PotenciaIterativa (a,b: integer): integer; Begin var p:integer; p:=1; if b=0 then PotenciaIterativa:= 1 else begin for i:=1 to b do p:= p*a end PotenciaIterativa:= p end End; Solucin Recursiva function PotenciaRecursiva (a,b: integer): integer; Begin var p:integer p:=1; if b=0 then PotenciaRecursiva:= 1 else begin PotenciaRecursiva:= a * PotenciaRecursiva(a,b-1) end End; Seguimiento Iterativo (Potencia) Potencia a 2 b 3 i 1 2 3 p Iterativa 2 4 8 8

19

Seguimiento Recursivo (Potencia) a b Salida 2 3 2*pot(2,2) 2 2 2*(2*pot(2,1)) 2 1 2*(2*2*pot(2,0)) 2 0 2*(2*2*1) Podrn implementarse procedimientos recursivos para resolver ambos problemas? Desarrllalos y comntalos con el profesor.

Cmo verificar una funcin o procedimiento recursivo? Metodo de las 3 preguntas Cmo determinar si un problema puede resolverse recursivamente?. Para verificar funciones y procedimientos recursivos utilizaremos el mtodo de las tres preguntas: La pregunta caso-base: Hay una salida no recursiva para el procedimiento o funcin? la rutina funciona correctamente para este caso base? La pregunta valor ms pequeo: Cada llamada recursiva al procedimiento o funcin se refiere a un caso ms pequeo del problema original? La pregunta caso general: Suponiendo que las llamadas recursivas funcionan correctamente Funciona correctamente todo el procedimiento o funcin? (puede verificarse a travs de un procedimiento) Para el ejemplo de la funcin factorial:

Condicin caso base : n = 0 Condicin caso general: n > 0 Funciona correctamente? S, ya lo demostramos.

RBOLES
Introduccin Es una estructura de datos no lineal que posee raz, ramas y hojas, tcnicamente constituye un grafo finito y sin ciclos. Un rbol define ciertos niveles jerrquicos precedidos por la raz (1er. nivel), en donde las hojas constituyen el nivel ms bajo. Componentes

20

Raz: Nodo que constituye la nica entrada a la estructura (por ello es necesario tener un puntero sobre l). Ramas o Arcos: Conexin entre dos nodos del rbol que representa una relacin de jerarqua. Hojas: Nodo sin hijos. Caractersticas Nivel o profundidad de un nodo: Longitud del camino para ir desde la raz al nodo. Por definicin la raz est en el nivel 0. Por ejemplo: profundidad(Y)=2, profundidad(raz)=0, profundidad(rbol)= profundidad(hoja ms profunda).

Altura de un nodo: Longitud del camino ms largo desde el nodo a una hoja. Por ejemplo: Altura(X)=1, Altura(Y)=0, Altura(arbol)=Altura(raz)=profundidad(rbol) Grado de nodo: Cantidad de hijos de un nodo cualquiera. Grado de rbol: Cantidad mxima de hijos posibles de asociar a un nodo del rbol Clasificacin Segn Nmero de Hijos

21

Segn Estructura de Niveles

Arbol completo: Es un rbol binario en el cual cada nodo es una hoja o posee exactamente 2 hijos. Arbol lleno: Es un rbol binario con hojas en a lo ms dos niveles adyacentes l-1 y l, en las cuales los nodos terminales se encuentran ubicados en las posiciones de ms a la izquierda del rbol.

Si un rbol binario es completo, necesariamente es lleno

Segn Funcionalidad

22

Arbol binario de bsqueda (ABB) Arbol binario de expresin

Arboles Binarios de Bsqueda Definicin de un ABB Un rbol binario de bsqueda es un rbol ordenado. Las ramas de cada nodo estn ordenadas de acuerdo con las siguientes reglas: para todo nodo X, las claves ubicadas en el subrbol izquierdo son menores que la clave de X, y todas las claves del subrbol derecho de X son mayores que la clave de X. Un rbol de estas caractersticas permite determinar si una clave determinada existe o no, de manera muy simple. Por ejemplo, si observamos la siguiente figura, localizar la clave 12 es aplicar la definicin de rbol de bsqueda, esto es, si la clave buscada es menor que la clave del nodo en el que estamos, se recorrer el subrbol izquierdo o de lo contrario el subrbol derecho. Este proceso contina hasta encontrar la clave o hasta llegar a un subrbol vaco cuya raz tiene un valor NIL.

Para Completar

23

Operaciones Bsicas

Crear un ABB vaco. Insertar nuevos elementos al ABB. Eliminar elementos ya existentes. Recorrer el ABB.

Definamos en primer lugar la estructura que soportar a este rbol: ------------------------------------------------------------------------

TYPE TipoPuntero = ^TipoNodoABB; TipoNodoABB = RECORD info : TipoInfo; izquierdo : TipoPuntero; derecho: TipoPuntero; End; ------------------------------------------------------------------------

Crear un ABB vaco.

24

Procedure InicializaArbol(var RaizArbol: TipoPuntero); Begin RaizArbol := NIL; End; ------------------------------------------------------------------------

Insertar nuevos elementos al ABB.

Procedure Insertar_arbol_binario( var Raizarbol: TipoPuntero;InfoNodo: TipoInfo); Var NuevoNodo: TipoPuntero; (*puntero para nodo nuevo*) Ptr, Anterior:TipoPuntero; (* usado para buscar en el ABB*) ClaveNueva: TipoClave;(* clave del nuevo nodo a insertar*) BEGIN (* Crear un nuevo nodo*) New(NuevoNodo); NuevoNodo^.izquierdo:= NIL; NuevoNodo^.derecho:= NIL; NuevoNodo^.info:= InfoNodo; (* Buscar el lugar de insercin*) ptr: = RaizArbol; Anterior: = NIL; While ptr <> NIL Do begin anterior : = ptr; if ptr^.info.clave > ClaveNueva then ptr := ptr^.izquierdo else ptr := ptr^.derecho end; if anterior = NIL then raizarbol = NuevoNodo else if anterior^.info.clave > ClaveNueva then anterior^.izquierdo: = Nuevonodo else anterior^.derecho: = Nuevonodo END; ------------------------------------------------------------------------

Eliminar elementos ya existentes.

(a)Eliminacin de un nodo hoja slo consiste en anular el puntero de su nodo padre (b)Eliminacin de un nodo con un hijo, es necesario reasignar el puntero del padre hacia el hijo. (c)Eliminacin de un nodo con dos hijos : Reemplazar el nodo que deseamos suprimir con el nodo de valor ms prximo al valor del nodo suprimido. As ser posible hacer el reemplazo por "El mayor ms cercano" o "El menor ms cercano", dependiendo de qu subrbol sea escogido el nodo. Procedure Suprimir (Var RaizArbol: TipoPuntero;ValorClave: TipoClave); (* Suprime el valor que contiene ValorClave del rbol, apuntado por RaizArbol, supondremos que este nodo existe en el rbol*) Var ptr, anterior: TipoPuntero; BEGIN

25

ptr := RaizArbol; anterior:= NIL; While ptr ^.info.clave<> ValorClave Do begin anterior : = ptr; if ptr^.info.clave > ValorClave then ptr := ptr^.izquierdo else ptr := ptr^.derecho end; (* Suprimir nodo apuntado por ptr*, anterior apunta al padre de este nodo*) SuprimirNodo(RazArbol, ptr, Anterior) END; Procedure SuprimirNodo (Var RazArbol : Tipo_Puntero; ptr, anterior: Tipo_ Puntero); (* Suprime el nodo apuntado por Ptr sobre el rbol binario con puntero RaizArbol, Anterior es un puntero al nodo padre ( NIL si el nodo a suprimir es el nodo Raiz)*) Var temp: Tipo_Puntero; BEGIN (*Caso b.1 Supresin de una hoja*) if(ptr^.derecho = NIL) AND (ptr^.izquierdo = NIL) then IF Anterior = NIL then (*Nodo(ptr) es el ltimo en el rbol) RaizArbol:= NIL else if anterior^.derecho = Ptr then anterior^.derecho : = NIL else anterior^.izquierdo: = NIL else (* Caso b.3 supresin de nodo con dos hijos*) if(ptr^.derecho <> NIL) AND (ptr^.izquierdo <> NIL) then begin (* Encontrar el valor para reemplazar, valor ms prximo al eliminado*) anterior: = ptr; temp := ptr^.izquierdo; While temp^.derecho<> NIL Do begin anterior:= temp; temp : = temp^.derecho end; (* Copiar la informacin a reemplazar en el nodo*) ptr^.info:= temp^.info; if anterior = Ptr then anterior^.izquierdo:= temp^.izquierdo else anterior^.derecho:= temp^.izquierdo; ptr:= temp; end else (* Caso b.2 Nodo con un hijo*) (* Inicializa uno de los campos punteros de nodo (anterior) dependiendo si el nodo que se est suprimiendo tiene un hijo a la derecha o izquierda*) if ptr^.derecho <>NIL then (* Hay un hijo derecho*) if anterior = NIL then RaizArbol:= Ptr^.derecho else if anterior^.derecho=ptr then anterior^.derecho := ptr^.derecho else anterior^.izquierdo := ptr^.derecho else(* hay un hijo izquierdo*) if anterior = NIL then RaizArbol:= Ptr^.izquierdo else

26

if anterior^.derecho=ptr then anterior^.derecho := ptr^.izquierdo else anterior^.izquierdo := ptr^.izquierdo; dispose (ptr); END; ------------------------------------------------------------------------

Recorrer un ABB( extensible a cualquier rbol binario)

Procedure InOrden (ptr: Tipo_puntero); Begin (* CASO BASE: SI PTR ES nil, no hacer nada*) if Ptr <>NIL then begin(* Caso general*) InOrden(ptr^.izquierdo); writeln(ptr^.info); InOrden(ptr^.derecho); end End; Procedure Preorden(ptr: Tipo_puntero); Begin (* CASO BASE: SI PTR ES nil, no hacer nada*) if Ptr <>NIL then begin(* Caso general*) writeln(ptr^.info); PreOrden(ptr^.izquierdo); PreOrden(ptr^.derecho); end End; Procedure PostOrden (ptr: Tipo_puntero); Begin (* CASO BASE: SI PTR ES nil, no hacer nada*) if Ptr <>NIL then begin(* Caso general*) PostOrden(ptr^.izquierdo); PostOrden(ptr^.derecho); writeln(ptr^.info); end End; Arboles de Expresin Definicin Un rbol de expresin es una estructura que representa una operacin aritmtica conteniendo dentro de su campo info un operando (numrico) o bien sus operadores asociados. Si pensamos que los nodos del rbol contienen algunos de los operadores +,-,x y / debemos intuir que se trata de un rbol binario de expresin como el que se indica en la figura:

27

Cmo obtener la expresin aritmtica a partir de un AE? Resp: Recorre el rbol en Inorden y parentiza cada subexpresin as obtendrs lo que necesitas.

ORDENAMIENTO Y BUSQUEDA
Ordenamiento Un mtodo de ordenamiento consiste en un algoritmo que recibe como entrada a un conjunto de datos que son necesarios de ordenar segn cierto(s) criterio(s). El objetivo fundamental de stos mtodos es el de facilitar la bsqueda de datos segn estos mismos criterios. Clasificacin de Mtodos Segn lugar fsico donde residen los datos

Ordenamiento Interno: Es aquel que ocurre sobre estructuras de datos residentes en memoria principal. Entre otros se tiene al de Insercin directa, Seleccin directa, Shell Sort, Bubble Sort, Quick Sort, Merge Sort, Heap Sort. Ordenamiento Externo: Es aquel que ocurre sobre estructuras de datos residentes en memoria secundaria. Entre otros se tiene al mtodo de Intercalacin, Mezcla directa, Mezcla Equilibrada.

Segn movimientos de claves de ordenamiento

Ordenamiento Estable: Es aquel que una vez efectuado mantiene el orden relativo de dos o ms registros cuyo criterio de ordenamiento es el mismo. Es beneficioso para ordenamientos en donde se utilice ms de un criterio de ordenamiento. Ordenamiento No estable: Es aquel que una vez efectuado pierde el orden relativo de dos o ms registros cuyo criterio de ordenamiento es el mismo.

28

Comparacin de los Mtodos de Ordenamiento Una alternativa sera comparar tiempos de ejecucin, sin embargo, esto slo sera una medida de eficiencia sobre un computador en particular. (dependiendo la arquitectura de la mquina, set de instrucciones etc.). Mayor validez tendra aislar la operacin bsica realizada en el algoritmo y determinar el n de veces que se realiza. Por ejemplo, si estuviramos sumandos los elementos de un arreglo podramos contabilizar el n de operaciones realizadas para un arreglo de tamao n, as como en este caso el nmero de operaciones realizadas es funcin del nmero de elementos del arreglo. Usualmente se utiliza la notacin O( ) para indicar el grado u orden del algoritmo que est dado en trminos de comparaciones realizadas. Esto representa cuantitativamente la complejidad de un algoritmo. Las complejidades ms usuales son O(n), O(n2), O(n3), O(log2n). Para que se entienda mejor: O(n):LLenar un arreglo lineal O(n2):Llenar un arreglo bidimensional O(n3):Llenar un arreglo Tridimensional O(log2n):Recorrer un rbol binario de bsqueda Tabla comparativa de eficiencia entre algoritmos de ordenacin Orden de Magnitud Mejor Caso O(n2) O(n2) O(n) O(nlog2n) O(nlog2n) Media O(n2) O(n2) O(n2) O(nlog2n) O(nlog2n) Peor Caso O(n2) O(n2) O(n2) O(n2) O(n2) (depende de orden de divisin) Ord_Shell Bsqueda Secuencial Comenzando desde el inicio de la lista se busca registro a registro (elemento a elemento) hasta encontrar el elemento buscado o en su defecto terminar de revisar toda la estructura. Este tipo de bsqueda es aplicable a listas secuenciales(arreglos) y listas enlazadas. El siguiente algoritmo realiza la bsqueda de un campo clave sobre un arreglo de registros. O(n2) O(n2) O(n2)

Mtodo de Ordenacin Seleccin directa Burbuja Burbuja_Mejorado Ord_Mezcla Ord_Rpida

Procedure Busqueda_Secuencial(Lista: Tipo_array;Numelementos: integer; Valclave: Tipo_clave; var posicion: integer); Var indice: integer; Encontrado: boolean;

29

Begin Indice:=1; Encontrado:= FALSE; While NOT ENCONTRADO AND indice <= Numelementos do begin if lista[indice].clave = valclave then ENCONTRADO:= TRUE else indice:=indice+1; end; if ENCONTRADO then Posicion :=indice else posicion:=0; End; Consideraciones

En el peor de los casos, deberamos buscar en el ltimo registro de la lista o sobre uno no existente. O(N) En promedio, si supusiramos igual probabilidad de bsqueda para cualquier item, se haran N/2 comparaciones (mitad de la lista) Si la lista estuviese ordenada (en base al campo clave) la eficiencia del algoritmo anterior se vera mejorada ya que detendramos nuestra bsqueda cuando se haya sobrepasado su posicin lgica dentro de la lista.

Bsqueda Binaria Este tipo de bsqueda se basa en el hecho que la estructura se encuentra originalmente ordenada en base a su campo clave. La idea es la siguiente: Si deseamos buscar al un tal Sr. Donoso, abriremos la gua, supuestamente en la mitad y al notar que los nombres empiezan por M, que es mayor que D, haremos una bsqueda binaria desde A hasta M, con ello, volvemos al punto medio y por el hecho que los nombres empiezan con G, que es mayor que D, rehacemos la bsqueda binaria entre A y G. Este tipo de bsqueda es aplicable a estructuras estticas como los arreglos y dinmicas como los ABB.

-----------------------------------------------------------------------Procedure Busqueda_Binaria(Lista: Tipo_array;Numelementos: integer; Valclave: Tipo_clave; var posicion: integer); Var indice: integer; puntomedio, primero, ultimo: integer; Encontrado: boolean; Begin ENCONTRADO:= FALSE; primero:= 1;ultimo:= numelementos; While (primero<= ultimo) AND NOT ENCONTRADO do begin puntomedio:=(primero+ultimo) DIV 2; if lista[puntomedio] = valclave then encontrado:= TRUE

30

else begin if lista[puntomedio] > valclave then ultimo:=puntomedio-1 else primero:= puntomedio +1; end; end; if ENCONTRADO then Posicion :=puntomedio else posicion:=0; End; Bsqueda Hash Cmo poder mejorar la eficiencia de los algoritmos antes mencionados?, ser posible encontrar un algoritmo ms eficiente que de O(log2 n) ? Supongamos que se tiene una lista de empleados con el campo RUT como clave sera factible tener un arreglo con 15.000.000 posiciones?. Lo lgico sera tener un arreglo con el tamao realmente necesario (por ejemplo 0..99) y ordenar los elementos en base a los dos ltimos dgitos del RUT. Por ejemplo, al empleado con RUT 10905867 le correspondera la posicin 67 del arreglo y a otro con RUT 18632655 la posicin 55. De esta forma, sera posible decir que los elementos se encuentran ordenados en base a una funcin aplicada sobre el campo clave. Dicha funcin tiene dos objetivos, el primero: ser utilizada como un medio de direccionamiento mediante la cual es posible ordenar la lista (es decir, decidir en qu lugar del arreglo se almacenar un elemento determinado) y el segundo: ser utilizada como mtodo de acceso al registro. A esta funcin se le denomina Funcin HASH o de Hashing, para el caso anterior la funcin sera f(clave) = clave MOD 100, donde el remanente del cuociente entre la clave y 100 genera la posicin de almacenaje.

Las funciones de Hashing ms comunes utilizan el mtodo de la divisin (MOD) para calcular las direcciones transformadas. La forma general es:

31

DireccionHash := Clave MOD TamaoLista (o DireccionHash := Clave MOD (tamaoLista+1)) cuando el ndice de la tabla comienza en 1 y no en 0) Otro mtodo ms sofisticado es dividir la clave, en notacin binaria, en varios trozos y concatenarlos mediante un XOR (OR exclusivo). Supongamos que deseamos construir una funcin de HASH que nos genere ndices entre 0 y 255 y la representacin interna de la clave es de 32 bits., se necesitan 68 bits para representar los 256 valores de ndices. Por ejemplo, para la clave 618403, cuya representacin binaria es 00000000000010010110111110100011, dividindola en grupos de 8 bits se obtendra: 00000000 00001001 01101111 10100011 O exclusivo entre la primera y la ltima, las centrales y los resultados de stas resulta 11000101 que representa el nmero decimal 197, por lo cual se transforma en el ndice 197.

Colisiones

Cabe destacar que este esquema no garantiza unicidad de ndices ya es posible que para dos RUT distintos la funcin devuelva la misma posicin dentro del arreglo de registros. A este problema se le denomina colisin, en la prctica es imposible evitarla en un 100%, sin embargo, es posible minimizarlas y manejarlas.

Aumento tamao de la estructura

Una de las formas que se tiene para minimizar las colisiones es utilizar una estructura de datos que tenga ms espacio que el realmente necesario, con la intencin de ampliar la funcin de hashing. Por ejemplo si se mantiene e una serie de registro sobre un arreglo que contiene el doble de espacio que empleados, se tendrn la mitad de colisiones que si se tuviera la misma cantidad. (Otra de las formas de minimizar estas colisiones es cuando el tamao de la lista es primo.)

Encadenamiento

Otra solucin es mantener por cada elemento un puntero para generar (eventualmente) una lista enlazada con todos aquellos elementos para los cuales la funcin Hash devuelve la misma posicin. (Se debe mantener un arreglo de punteros)

32

Rehashing

Una tercera solucin llamada Rehashing, se utiliza una direccin transformada como entrada a la funcin Rehash y se calcula una nueva direccin. Si [clave mod 100]est ocupada, podemos utilizar la funcin (Direccion +1) mod100 para producir una nueva direccin. En nuestro primer ejemplo la clave 10567804 genera la direccin 4 que ya se encuentra ocupada, as, aplicando la funcin Rehash (04+1) MOD 100 =5, si est desocupado almacenamos el nuevo elemento all sino nuevamente utilizamos la funcin Rehash con entrada 5. Para la funcin Rehash podemos utilizar: (clave +constante) MOD numero de espacios Mientras constante y nmeros de espacios sean primos entre s (1 como nico divisor comn) esta funcin producir sucesivas transformaciones que cubrirn eventualmente todo el arreglo.

ARCHIVOS
Introduccin Definicin y Componentes Es una es estructura de datos que reside en memoria secundaria o almacenamiento permanente (cinta magntica, disco magntico, disco ptico, disco lser, etc.). La forma de clasificacin ms bsica se realiza de acuerdo al formato en que residen estos archivos, de esta forma hablamos de archivos ASCII (de texto) y archivos binarios. En este captulo nos centraremos en estos ltimos. Definicin archivo binario:

Estructura de datos permanente compuesto por registros (filas) y stos a su vez por campos (columnas). Se caracteriza por tener un tipo de dato asociado, el cual define su estructura interna. Definicin archivo texto:

33

Estructura de datos permanente no estructurado formado por una secuencia de caracteres ASCII.

Ejemplo: Definicin y creacin de un archivo en Pascal. Type {Definicin de la estructura del registro} Reg_archivo = Record Key : Integer; {Campo clave o identificador} data : String[20] ;{Campo de datos} End; Var R : reg_archivo; {Declaracin de variables asociadas al archivo} A : File of reg_archivo; {Nombre lgico del archivo} Program prueba; Type Reg_archivo = Record Key : Integer; Data : String[20]; End; Var R : reg_archivo; A : File of reg_archivo; I : Integer; Begin Assign(a,'archivo.dat'); {se asigna el nombre lgico a al archivo} Rewrite(a); {se crea el archivo, si ste existe borra el contenido, dejndolo listo para el ingreso registros} For i:= 1 to 10 do Begin Write('ingrese clave ',i:2,':'); readln(r.key); Write('Ingrese datos: '); readln(r.data); {se ingresa la informacin correspondiente al registro utilizado por el programa} write(a,r) {se traspasa el registro al archivo definido (al buffer asociado)} End; reset(a); {se posiciona un puntero en el primer registro del archivo} For i:= 1 to 10 do Begin

34

read(a,r); {se lee del archivo a el registro indicado por el puntero, traspasando los datos al registro r y el puntero avanza al siguiente registro} writeln(r.key,' ',r.data); End; close(a) {se cierra el archivo traspasando, si fuera necesario, el buffer al archivo} End.

Investiga otras funciones y procedimientos para el manejo de archivos.

Tipos de Acceso a los Archivos


Secuencial Se accesan uno a uno los registros desde el primero hasta el ltimo o hasta aquel que cumpla con cierta condicin de bsqueda. Se permite sobre archivos de Organizacin secuencial y Secuencial Indexada. Random Se accesan en primera instancia la tabla de ndices de manera de recuperar la direccin de inicio de bloque en donde se encuentra el registro buscado. (dentro del rea primaria o de overflow). Se permite para archivos con Organizacin Sec.Indexada. Dinmico Se accesan en primera instancia la tabla de ndices de manera de recuperar la direccin de inicio de bloque en donde se encuentra el registro buscado. (dentro del rea primaria o de overflow). Se permite para archivos con Organizacin Sec.Indexada. Directo Es aquel que utiliza la funcin de Hashing para recuperar los registros. Slo se permite para archivos con Organizacin Relativa. Clasificacin de los Archivos Segn su Uso La siguiente tabla resume las distintas denominaciones dadas a los archivos segn la utilizacin dada: Tipo Maestros Definicin Ejemplo Perduran durante todo el ciclo de Archivo de empleados en vida de los sistemas. un sistema de Remuneraciones.

Transaccionales Se utilizan para actualizar otros Archivo de ventas diarias archivos. Pueden ser eliminados en un sistema de ventas. al trmino de este proceso o conservados como respaldos. De respaldo De paso Son copias de seguridad de otros archivos Son creados y eliminados entro de un proceso computacional.

35

Histricos

Registran acontecimientos a travs del tiempo.

De referencia

Corresponden a los archivos de consultas de parmetros.

Registros de movimientos diarios de CC en un Sistema Bancario de CC. Registro % imposiciones % descuentos isapre, etc.

Informes o Reportes

Son respuestas del sistema Planillas de sueldos en computacional cuyos contenidos un sistema de deben ser interpretados por Remuneraciones. personas. Pueden ser en forma escrita, por pantalla e incluso hacia algn archivo con formato editable.

Organizaciones Bsicas de Archivos


Secuencial Es la organizacin ms comn. Los registros se almacenan uno tras otro por orden de llegada. Para accesar un registro determinado se deben leer todos los registros que estn almacenados antes que l. Se recomienda: para archivos de procesamiento batch (aquellos para los cuales se debe realizar la misma operacin sobre la mayor parte de sus registros) Secuencial Indexada Los registros son almacenados en una distribucin tal que permiten ser consultados a travs de ndices. En ellos se distinguen 3 reas de almacenamiento: 1.De ndices: Mecanismo de acceso a los registros de datos. 2.Primaria o de datos: En donde se encuentran los datos propiamente tal. 3.De overflow: Encargada de recibir aquellos registros que no pueden ser almacenados en el rea primaria. Se recomienda : Para archivos de consulta Relativa Existe una relacin directa entre la ubicacin lgica de un registro y su ubicacin fsica. Para ello necesita una funcin matemtica que asigne a un valor de clave una direccin fsica nica. El encontrar una Fh ptima es tarea compleja por lo que esta organizacin es poco utilizada. Se recomienda: Para archivos en donde sea crucial minimizar tiempos de acceso.

Operaciones Bsicas de Archivos


Consiste ordenar el archivo a partir de uno o ms criterios impuestos sobre sus campos. Es normal que los archivos estn ordenados por clave o por algn campo alfabtico ascendente o descendentemente

36

Concatenacin Consiste en unir 2 ms archivos en uno (uno a continuacin del otro). Antes de...

Despus de...

Intercalacin Consiste en generar un archivo ordenado segn algn criterio preestablecido a partir de dos ms archivos que pueden o no encontrarse en la misma secuencia.

37

Antes de...

Despus de...

Pareamiento Consiste en ubicar registros correspondientes entre 2 ms archivos. Consiste en ubicar aquellos pares de registros pertenecientes a dos archivos diferentes que cumplen una cierta relacin de correspondencia. Edicin Consiste en preparar los datos que constituyen a uno ms archivos para que sean interpretados por personas. Se asocia generalmente a la generacin de listados en papel impreso.

38

Validacin Consiste en asegurar la veracidad e integridad de los datos que ingresan a un archivo. Existen numerosas tcnicas de validacin tales como: Dgito verificador, chequeo de tipo, chequeo de rango. Actualizacin Consiste en agregar y eliminar registros desde un archivo, as como tambin modificar el valor de uno ms campos. Tambin se conoce como mantencin de uno o ms archivos.

Bases de Datos

Una base de datos es un conjunto de archivos o tablas relacionadas almacenados en forma estructurada. Est formada adems por consultas e ndices. Existen ciertos enfoques para el diseo de BD: Relacional, Jerrquica y de Red. Las aplicaciones que permiten administrar una base de datos se denominan DBMS (Data Base Manager System), entre ellos podemos citar a: Access, SQL Server, ORACLE Server etc. Estas ltimas se conocen tambin como RDBMS (Relational Data Base Manager System) ya que siguen el enfoque relacional. En empresas de gran envergadura, se habla de Base de Datos Corporativa conformada por mltiples modelos de bases de datos pertenecientes a distintas instancias e interrelacionados entre s. En general, el diseo de las bases de datos se rige segn ciertas normas, algunas creadas por E. Codd permiten evitar redundancias, e inconsistencias como consecuencia del proceso de actualizacin. Estas reglas son las denominadas FORMAS NORMALES.

Ejemplo: Esquema fsico relacional

P: Primary Key F: Foreing Key Notar que existe una relacin entre las tablas reparacin y producto representada la tabla relacin prod_reparpor, debido a que en una reparacin se pueden utilizar varios productos como insumos y stos a su vez pueden participar en ms de una reparacin.

39

Formas Normales Las formas normales definidas en la teora de bases de datos relacionales representan lineamientos para el diseo de registros. Las reglas de normalizacin estn dirigidas a la prevencin de anomalas de actualizacin y de inconsistencias en los datos. Ellas no reflejan ninguna consideracin de rendimiento. En cierta forma, pueden ser visualizadas como orientadas por el supuesto de que todos los campos no-clave sern actualizados frecuentemente. No hay obligacin de normalizar completamente todas las relaciones cuando se deben considerar aspectos de rendimiento (tiempo de acceso por consulta). Finalmente, podemos decir que estas formas normales tambin son aplicables al diseo de archivos tradicionales con clave, con lo que abarcaramos todos los sistemas. Aqu enunciamos las 2 primeras FN: PRIMERA FORMA NORMAL: Bajo la primera formal normal, todas las ocurrencias de un registro deben contener el mismo nmero de campos. La primera forma normal excluye campos de repeticin variable. Ejemplo: Archivo = LIBROS Registro = Reg_libros Cod_lib Nom_lib Autor Num_cop Materia Idioma Precio

Este registro transgrede la primera forma normal, debido a que pueden existir varios autores para un mismo libro (igual sucede con el campo materia). Una solucin a este problema separa los campos "conflictivos", agrupndolos en otras tablas: Cod_lib Nom_lib Num_cop Materia Idioma Precio

Cod_lib

Autor

SEGUNDA FORMA NORMAL: Todo campo no clave debe depender directamente del campo clave. Ejemplo: Articulo Bodega Cantidad Direc_bod

La clave est compuesta de 2 campos ARTICULO y BODEGA, sin embargo, DIRECCIONBODEGA, est relacionado exclusivamente con BODEGA. Los problemas bsicos de diseo son: La direccin de la bodega se repite en cada registro para cada parte almacenada en esa bodega (redundancia).Si la direccin de la bodega cambia, cada registro que se refiera a una parte almacenada en esa bodega debe ser actualizado. Debido a la redundancia, los datos pueden llegar a ser inconsistentes, con diferentes registros indicando diferentes direcciones para la misma bodega (integridad). Si en algn momento no hubiera partes almacenadas en alguna bodega, no habra un registro para anotar la direccin de la bodega (anomala).

40

BIBLIOGRAFA
Utilizada

Susan Lily & Nell Dale, Estructuras de Datos, Mc Graw Hill, 1995 Cair & Guardati, Pascal y Estructuras de Datos, Mc. Graw Hill 2 edicin, 1989 Niklaus Wirth, Algoritmos + Data Structures = Programs, Prentice Hall, 1976 Joyanes, Programacin en Turbo/Borland Pascal 7, 3 Edicin, 1997

Recomendada

Susan Lily & Nell Dale, Estructuras de Datos, Mc Graw Hill, 1995 Luis Joyanes, Problemas de Metodologas de Programacin 2a edicin, Mc. Graw Hill, 1989 Cair & Guardati, Pascal y Estructuras de Datos, Mc. Graw Hill 2a edicin, 1989 Niklaus Wirth, Algoritmos + Data Structures = Programs, Prentice Hall, 1976 Joyanes, Programacin en Turbo/Borland Pascal 7, 3a. Edicin, 1997

INTERNET
[Estructuras de Datos en general]

http://dgicii.mty.itesm.mx:8095/%7Empadilla/Estructura/abstrac.htm http://guiafe.com.ar/aedd/teoria.htm http://www.programmersheaven.com/

[Estructuras de Datos PILAS y FILAS]

http://dgicii.mty.itesm.mx:8095/%7Empadilla/Estructura/EJ_PILAS.HTM

[Recursividad]

http://dgicii.mty.itesm.mx:8095/%7Empadilla/Estructura/recursiv.htm http://193.145.249.7/Informat2/clases/list_vincs/sld0003.htm

[Arboles Binarios]

http://dgicii.mty.itesm.mx:8095/%7Empadilla/Estructura/EJ_ARBIN.HTM

[Ordenamiento]

http://dgicii.mty.itesm.mx:8095/%7Empadilla/Estructura/sorts.htm http://www.cc.ece.ntua.gr/%7Egkaval/applets/sortdemo.html

41

Glosario
a
ASCII: "Cdigo Americano de Normalizacin para el Intercambio de Informacin". Un sistema de codificacin para convertir caracteres del teclado e instrucciones en el cdigo de nmero binario, el que entiende el computador.

b
Biblioteca: Es el archivo que contiene las funciones estndares que se pueden usar en los programas. Estas funciones incluyen todas las operaciones de entrada/salida (E/S), manejo de pantalla en modo texto o modo grfico as como otras rutinas tiles.

Bit: La porcin ms pequea de informacin "representable" en un computador. Es un 0 1. Mediante el lenguaje de los computadores se interpretan series de 1 y 0's para formar smbolos, signos de puntuacin, caracteres y nmeros.
Byte: Corresponde a un set de 8 bits que representa un caracter de dato. Es la unidad ms pequea "referenciable" en un computador.

c
Cach: Una porcin de memoria en donde se ubica la informacin utilizada con mayor frecuencia para permitir un acceso ms rpido. CASE: "Computer Aided Software Design". Herramienta Computacional que apoya a alguna de las fases del desarrollo del Sw Chip (o Ship): Pastilla de silicona quer contiene circuitos elctricos en miniatura que pueden almacenar millones de bits de informacin. Ciber Espacio: Parte de la sociedad y cultura humana que existe en los sistemas de computadores conectados en red, a diferencia de las comunidades con una ubicacin fsica definida. Cliente: Usuario de una aplicacion en red ejecutada desde un servidor. Una arquitectutra cliente servidor permite un gran nmero de individuos conectados a la vez. El componente principal de programa reside en un servidor centralizado, con componentes ms pequeos (interfaz del usuario) en cada cliente. Cdigo Fuente: Es el texto que un usuario puede leer. Normalmente considerado como el programa. Cdigo Objeto:Es la traduccin del cdigo fuente de un programa a cdigo mquina, que es el que la Computadora puede leer y ejecutar directamente. El Cdigo Objeto es la entrada al enlazador. Cuadro de dilogo: Ventana que aparece y requiere entrada de datos por parte del usuario (las ms bsicas muestran slo un mensaje). Cuando el usuario completa la informacin necesaria o hace click en los botones correctos, el cuadro de dilogo desaparece.

42

DML: Data Manipulanting Language. Lenaguaje provisto por los Administradores de bases de Datos para la manipulacin de las tablas que conforman una Base de Datos.Por ejemplo: SQL Dominio: En Internet, conjunto de computadores cuyos nombres comparten sufijo comn, el nombre del dominio. (Lo que est despus de la arroba en una direccin de correo electrnico). Por ejemplo: ...@duoc.cl, ..@ing.udec.cl, ..@sunderland.uk DVD (Digital Video Disk): Disco digital de capacidad 7 veces al de un CD convencional.

e
Eficacia:Se dice que un proceso es eficaz, si capaz de cumplir sus objetivos. Eficiencia:Se dice que un proceso es eficiente, si es eficaz y adems utiliza una mnimo de recursos. Enlazador: Es un programa que enlaza funciones compiladas por separado para producir un solo programa (Combina las funciones de biblioteca estndar con el cdigo que se ha escrito). La salida del Enlazador es un programa ejecutable. E-mail: Mensajes, memos, carta, enviados electrnicamente entre los computadores conectados en red que pueden estar a lo largo de la oficina o alrededor del mundo.

f
FTP (File Transfer Protocol): "Protocolo de Transferencia de Archivos". Mecanismo para descargar archivos desde Internet.

g
Giga Byte (GB): 1024 x 1024 x 1024 bytes

h
HTML (Hipertext Markup Language) Lenguaje estndar para la creacin de documentos en World Wide Web.

l
Identificador :Nombre asignado a una variable, procedimiento o funcin dentro del cdigo fuente. IEEE:Instituto de Ingenieros Elctricos y Electrnicos. Reconocido por el desarrollo de estndares para la industria de la electrnicia y comunicaciones.

m
Mega Byte (MB): 1024 x 1024 bytes. MICROSOFT Una de las ms grandes compaas editoras de software, fundada en 1975 por Bill Gates. Creadora de Windows, Word, Excel y otras maravillas. MICROSOFT WINDOWS 98 Sistema operativo basado en microprocesadores Intel 80386DX, 486 y Pentium. Est diseado para correr aplicaciones de Windows, incluyendo aplicaciones multimedia. Con un diseo GUI (graphic user interface), permite un fcil mantenimiento y uso. Entre otras, algunas de sus innovaciones son los nombres largos de archivos, sistema de flders

43

y discos de 32 bits, soporte para el Microsoft Network e Internet y atributos generales de proteccin para el disco duro. Como ayuda para la complicada tarea de instalar nuevos componentes de hardware, Windows 95 usa los atributos del Plug and Play que permiten una instalacin y configuracin casi automtica de accesorios compatibles. MODEM: Aparato que le permite a una computadora comunicarse con otras a travs de la lnea telefnica. Pueden ser internos y externos. Los internos se encuentran dentro de las computadoras y usted conecta la lnea telefnica a la parte trasera. MULTIMEDIA:Tecnologa que combina sonido, textos, grficos y animacin en su computadora.

o
Online: Disponible al "instante" desde un computador al cual se est conectado. Por Ejemplo, la ayuda en lnea es informacin acerca de un tpico que se puede obtener de inmediato en una ventana en vez de consultar un manual fsico. OOP (Object oriented programming)La programacin orientada a objetos es una modalidad de programacin usada para escribir programas como una coleccin de mdulos y objetos. En lugar de escribir los programas lnea por lnea, se esciben programas con mdulos prescritos. Los mdulos disimulan la complejidad del lenguaje de programacin y facilitan el proceso de copiar las instrucciones de un programa a otro. A pesar de que la programacin orientada a objetos es mucho ms sencilla de aprender y aplicar que otros lenguajes, es comn que estos programas sean un poco ms lentos, aunque con las rpidas computadoras de hoy, la diferencia en velocidad cada vez es menos notoria. OS/2Siglas para Operating System/2. Este sistema operativo fue desarrollado originalmente por Microsoft e IBM en 1987, pero ahora es controlado por IBM. OS/2 cuenta con una interfase grfica muy similar a la de Windows; tambin opera DOS y aplicaciones de Windows, adems de programas diseados expresamente para OS/2; y es un sistema apto para el uso de redes. Adems, para computadoras 386 y 486, toma ventaja de algunos recursos para darle mayor velocidad cuando hay varios programas abiertos. A pesar de su excelencia tecnolgica, OS/2 an est muy retrasado con respecto a Windows y al parecer ah se quedar.

p
Portabilidad [Transportabilidad]: Capacidad que tiene un programa o lenguaje para ser cambiado de plataforma con el mnimo nemro de modificaciones. Tiene relacin directa con la independencia que posee el lenguaje de la mquina. Programacin modular: Los programas complejos se descomponen en mdulos (partes independientes), que estos a su vez se analizan, codifican y se verifican por separado. Su codificacin se realiza mediante programacin estructurada u orientada al objeto. PALETA: Es un programa grfico, la paleta es el men de colores o de patrones para colorear que se ofrece para que el usuario elija al dibujar o disear. PANEL DE CONTROL: En plataforma Windows de Microsoft y en Macintosh, se refiere a una ventana en la cual se pueden hacer selecciones sobre ciertas caractersticas del ambiente en el que se trabaja. Por ejemplo, definir el color del fondo en la pantalla o la velocidad del cursor, as como elegir qu figuras queremos que aparezcan en el monitor mientras la computadora est prendida en los momentos en que no estamos trabajando. PATH: Un mapa que le dice a su computadora dnde encontrar cierta informacin. Usando el sistema operativo DOS, usted puede utilizar esta instruccin para ejecutar un programa desde cualquier directorio sin necesidad de hallarse fsicamente en el directorio donde se encuentra el programa.

44

PIRATERA: El uso de una copia de un programa sin la autorizacin de las compaas que lo desarrollaron. En Estados Unidos es una actividad muy penalizada; pero en Mxico es una de las ms comunes. PLUG AND PLAY: Diseo de tecnologa de software y hardware que permite aadir dispositivos a una computadora sin mucha complicacin para el usuario. Si alguna vez has integrado un mdem, un escner, una tarjeta de audio o algn otro dispositivo a tu computadora, sabes la serie de problemas con los que te puedes enfrentar. Con esta tecnologa del plug and play, conectas el dispositivo y la computadora por s sola define todos los detalles para hacerlo funcionar. POSTCRIPT: Es un lenguaje de descripcin de pgina (PDL) creado por Adobe Systems para controlar la impresin de texto y de grficas. Al utilizarlo el usuario procede como lo hara normalmente: selecciona estilos, mide los textos, elabora dibujos, etc. El sistema postscript trabaja automticamente creando las instrucciones necesarias para formar todos los caracteres y la informacin grfica. Otra ventaja importante de los programas postscript es que los archivos que ah se trabajan son compatibles con un gran rango de impresoras. Esto permite al usuario llevar sus archivos a imprimir, en algn servicio externo de impresin, con alguna resolucin que quizs l no pueda obtener en su propia impresora. POWER MACINTOSH: Cualquier computadora Macintosh que use el microprocesador PowerPC, como la PowerPC 601. PPM (Pginas por minuto): Unidad usada para medir la cantidad de pginas que una impresora es capaz de imprimir por minuto. Ocho pginas por minuto es buen nmero. PROGRAMAS DE UTILERIAS (Utilitarios): Son programas auxiliares que ayudan a manejar archivos, a obtener informacin acerca de la computadora, a diagnosticar o reparar fallas comunes, o bien a mantener el sistema operativo operando eficientemente. Los programas ms populares de este tipo son el PC Tools y el Norton Utilities. PROGRAMA RESIDENTE EN MEMORIA: Conocido tambin como TSR (Terminate-and-stayresident program), es un programa que se mantiene abierto aunque no se est utilizando y que permite abrir otro encima de l. Cuando este segundo programa se abre, slo una porcin pequea del que ya estaba siendo utilizado ocupa memoria. Para cambiar de programas, es necesario oprimir algunas teclas designadas, por lo general ALT o CONTROL. PROTECCIN CON CLAVE DE ACCESO Un mtodo para limitar el acceso a un determinado programa, archivo, computadora o red que requiere de proporcionar una clave para poder entrar. Pero asegrese de llevar un registro de sus claves de acceso, pues muchos usuarios han perdido trabajos completos porque han olvidado su palabra clave. PROTOCOLO:Normas y estndares para transferir informacin entre computadores conectados en red. PRUEBA ALFA: El primer paso de prueba de verificacin para productos de cmputo antes de que stos sean lanzados al mercado. Normalmente, los fabricantes de equipo o bien los encargados de la mercadotecnia de los programas son los responsables de llevar a cabo estas pruebas. Ms adelante, se aplica la prueba beta en la cual ya participa un grupo seleccionado de usuarios. PUERTO PARALELO: Coneccin en la parte trasera de su computador en donde por lo general se instala la impresora. La computadora trasmite datos a mayor velocidad a travs de este puerto. PUERTO SERIAL: Otra coneccin menos veloz, pero que permite trasmitir a distancias mayores por medio de un cable.

45

RAM (random access memory): Cuando usted carga un programa o abre un archivo, la computadora lee la informacin del disco y la copia en la memoria gracias a este acceso; luego utiliza la informacin en RAM para interpretar y dar salida a los comandos que se le solicite. La memoria RAM est hecha de chips que guardan la informacin. Esta se conserva, si no se grava la informacin, slo mientras la computadora est encendida. RED: Dos o ms computadoras unidas por un cable que permite el intercambio de informacin. Existen dos tipos de redes: LAN (Local Area Network), en donde las computadoras se encuentran en una misma oficina o edificio, y WAN (Wide Area Network), donde las computadoras pueden encontrarse a miles de kilmetros de distancia. RESOLUCIN: Trmino que se refiere a la calidad en las impresiones y en el monitor. El texto y las imgenes en el monitor y en las hojas impresas consisten en modelos compuestos por puntos. Por lo general, mientras ms puntos por pulgada (DPI) tenga un documento, mayor la resolucin y ms ntida la imagen. Por ejemplo, una impresora que imprime a 180 puntos por pulgada, tendr menor resolucin que una de 600 puntos. RESPALDAR: Copiar archivos normalmente de un disco duro a cualquier tipo de diskette o cinta. Si los archivos originales se daan por alguna causa, se pueden usar estos respaldos para restaurarlos a su condicin original; por eso es importante tener respaldos actualizados. Algunos programas crean automticamente copias que respaldan los archivos del usuario. Estos respaldos tienen la extensin .bak o .bk! Se graban en el mismo drive y directorio que los archivos originales RUIDO: Seales indeseadas que interfieren con la comunicacin entre hardware y software. El ruido en las computadoras es el equivalente al sonido de esttica que se puede escuchar en la radio. Estos sonidos interfieren con lo que no se quiere escuchar, de la misma manera en que el RUIDO, por ejemplo, dificulta la trasferencia de archivos por va telefnica o a travs de los cables de una red de computadoras.

s
SERVIDOR: Es el computador central de una red que est instalada exclusivamente para alimentar de programas y de informacin a las "computadoras clientes" que conforman dicha red. Normalmente es la computadora ms grande y con ms potencia de toda la red. SHAREWARE: Programas que pueden ser probados de manera gratuita durante un periodo determinado. Despus de ese lapso, el usuario est obligado legalmente a adquirir el programa si desea continuar usndolo. SNDROME DEL TNEL CARPIANO: Enfermedad de reciente aparicin que afecta las muecas a causa del repetitivo tecleo en la computadora. Quienes usamos constantemente un teclado corremos el riesgo de desarrollar esta lesin. Se puede prevenir haciendo constantes pausas durante el trabajo o usando teclados y aditamentos ms cmodos. Sistema Operativo (S.O.): Programa especializado que tienen por objeto tender un puente entre el Hw y el Sw de la mquina. Dentro de sus funciones principales se tienen: Definir la interfaz de usuario y Administrar la CPU y memoria. Ejemplos: Unix, DOS, MacOS SISTEMA REMOTO: La computadora o red a la cual una computadora se conecta por va de un mdem. La computadora que se conecta a un sistema remoto se conoce como terminal remota.SMTPProtocolo de control de transferencia para correo electrnico. SOBREESCRIBIR (Overwrite):Grabar informacin en la misma rea donde otra informacin estaba almacenada, con lo cual queda destruda la informacin original.

46

TCP/IP:Protocolo de control de transferencia de datos establecido en 1982 como estndar de Internet. Tera Byte (TB): 1024 x 1024 x 1024 x 1024 bytes Terminal: Aparato que permite comunicarse con la unidad central de un computador que puede estar a gran distancia (Se trata generalmente de un teclado unido a un monitor -pantalla- ms el sistema de transmisin). de compilacin: Se refiere a lo que se produce durante el proceso de compilacin. Tiempo de ejecucin: Se refiere a lo que sucede mientras el programa se est ejecutando realmente. Normalmente, estos trminos aparecern cuando se consideren posibles errores, encontrndose como "Errores de tiempo de Compilacin" y "Errores de tiempo de ejecucin". Traductor: Se refiere a un programa que se encarga de convertir lenguajes de un nivel superior a otro inferior. Segn el tipo de lenguaje se puede tratar de un traductor:Compilador o un traductor:intrprete. Transceiver: Aparato que recibe y enva seales (p.ej. para conectar un computador a una red). Transistor: Componente electrnico bsico que detiene o deja pasar las seales elctricas dependiendo de las pulsaciones anteriores. Un chip o circuito integrado contiene un gran nmeros de transistores.

u
URL(Localizador de recursos uniformes):Direccin de internet para pginas WEB. UseNet: Red de computadores que intercambian noticias en forma de artculos adscritos a grupos de discusin (newsgroups).

v
Virus:Sofware que se ejecuta en un PC, Mac o servidor sin control del usuario, con el fin de daar la informacin existente. Se auto-reproduce al ejecutarse, multiplicndose as con gran facilidad.

w
World Wide Web (WWW):Red mundial de computadores por la cual se transmiten principalmente archivos hiper y multimediales.

#
4 GL: 4 Generation Language. Tambin conocidos como lenguajes Visuales

47