124015148.206.53.84/tesiuami/UAM7827.pdf · Informe Final Proyecto Terminal. 3Wd ANTORSLO ~\MR...

42
Grupo IDS 124015 DatosGenerales: Nombre: Jaime FCO. Velasco Samaniego. Matricula:87332945. Lugar de Realización: Universidad Autonoma Metropolitana Iztapalapa. Periodo de Realización: 31 Julio 1991 - 31 Enero - 1992 Unidad: Iztapalapa. Divisibn: Ciencias Básicas e Ingenieria. Licenciatura: Ingenieria Electrónica. Area deConcentracidn:Computacibn. Nombre del proyecto:SEED(Sistema para Enseñanza de Estructuras de Datos) Responsable: Ing.Héctor Lozano Moreno Sistema De Enseñanzade Estructuras de Datos SEED 2

Transcript of 124015148.206.53.84/tesiuami/UAM7827.pdf · Informe Final Proyecto Terminal. 3Wd ANTORSLO ~\MR...

Grupo IDS

1 2 4 0 1 5

Datos Generales:

Nombre: Jaime FCO. Velasco Samaniego.

Matricula: 87332945.

Lugar de Realización: Universidad Autonoma Metropolitana Iztapalapa.

Periodo de Realización: 31 Julio 1991 - 31 Enero - 1992

Unidad: Iztapalapa.

Divisibn: Ciencias Básicas e Ingenieria.

Licenciatura: Ingenieria Electrónica.

Area de Concentracidn: Computacibn.

Nombre del proyecto:SEED(Sistema para Enseñanza de Estructuras de Datos)

Responsable: Ing.Héctor Lozano Moreno

Sistema De Enseñanza de Estructuras de Datos SEED 2

Informe Final Proyecto Terminal.

3Wd ANTORSLO ~ \ M R SAN?XJ~AL Jaime FCO. Velasco Samaniego.

Enero 1992.

0. ul Grupo IDS d 4 Introduccibn. @

El sistema para la enseñanza de las estructuras de datos SEED es un proyecto que pretende util izar las herramientas computacionales más modernas para lograr la enseñanza de esta disciplina de la computación.

En éI se integra el uso de interfases gráficas, programación orientada a objetos y sistemas expertos, con la finalidad de crear una poderosa herramienta tanto para alumnos como para profesores.

Para los alumnos, el sistema contendrá un curso completo a nivel teórico, un graficador de estructuras de datos que permitirá su observación y comprensión conceptual, un lenguaje de programación en español que permitirá crear programas basados en los temas aprendidos, un ambiente integrado de desarrol lo de programas que permitirá escribir los, compilarlos, ligarlos, depurarlos y ejecutarlos paso a paso para observar su funcionamiento, observar graficamente las estructuras a1 mismo t iempo que se van creando, ver graficamente el manejo de la memoria, además de contar con un sistema experto que evalúe sus programas y explique los errores, sugiriendo incluso posibles soluciones.

Para los profesores, el sistema contará con un módulo de evualuación de alumnos que permitirá aplicarles exámenes y proponer calificaciones de acuerdo a criterios establecidos previamente por el mismo profesor, así como llevar el control administrativo y estadístico de las calificaciones del grupo.

Objetivos.

Generales.

1. Aportar una herramienta didáctica que facilite,en gran medida al alumno, el aprendizaje de estructuras de datos y que sirva de apoyo al profesor en la preparación y evaluación del curso, mejorando as¡ el nivel académico de la institución.

2. Que sirva como una motivación para iniciar el desarrollo de software semejante.

S i s tema De Enseñanza de E s t r u c t u r a s de D a t o s SEED 3

f

Grupo IDS Especificos.

1 . Aplicar, de la manera mas completa, los conocimientos adquiridos a Io largo de nuestra formación académica, con el fin de reafirmarlos y constatar su utilidad en la creación de un proyecto mayor.

2. Aprender a trabajar en equipo, cumpliendo responsablemente con las tareas asignadas, para un mejor resultado del proyecto.

3. Usar y manejar adecuadamente nuevas herramientas que facilitan y hacen más poderosa la realización del sistema.

4. Adquirir experiencia en la realización de una investigación formal.

5. Participar activamente en el desarrollo y administración de un proyecto en el cual colabora un grupo numeroso de personas.

Metodologia Utilizada.

Para la realizacibn de SEED se conjunto un equipo de trabajo de 17 integrantes. Se realizo una calendarizacibn de las actividades a realizar por el equipo y se dividio el mismo en subequipos de trabajo para realizar cada uno de los mbdulos que debian de realizarse.

Los integrantes entregaron un reporte de actividades semanales a Io largo de la realizacibn del proyecto. Las reuniones del equipo para el analisis y seguimiento del proyecto se realizaron cada semana correspondiendo los sabados dicha reunion.

Material y recursos.

SDK (SoftwareDevelopment Kit) Quick C c t t SQL (XQL) YACC LEX

Actividades Realizadas.

El trabajo realizado por el prestador a Io largo del periodo es la realizacibn de la interfaz grijfica. La documentacibn que a continuacibn se presenta el la descripcibn de dicha interfaz, la programacibn se realizo en lenguaje C con la herrmamienta denominada SDK (Software Development KIT de Microsoft) y el Optmizing Complier Version 6.0.

Sistema De Enseñanza de Estructuras de Datos SEED 4

Grupo IDS

INTERFAZ GRAFICA.

Dada la posición que ocupa la interfaz gráfica en SEED, primera impresión que se tiene con el sistema, es importante ofrecer una dimensión de l ibertad y facilidad de uso. El objetivo de presentar una interfaz sumamente intuitivo mediante elementos gráficos, creemos se ha cumplido.

Se presenta en todos los niveles de la interfaz gráfica una ayuda y cajas de diálogo que auxilian al usuario a conducirse en el manejo del sistema.

Básicamente se divide en dos niveles que son: Pantalla de Primer Nivel y Pantalla de Segundo Nivel. Ambas pantallas están constituidas por grupos de botones para seleccionar las opciones.

-Pantalla de. Primer Nivel.

Es el punto de entrada a1 sistema y tiene como objetivo permitir al usuario escoger el tema específico con el cual se desea trabajar (tema de estudio), esto mediante el menú principal de los temas de estructuras de datos.

-Pantalla de Segundo Nivel.

Esta pantalla permite seleccionar la herramienta con la cuál se estudiará el tema seleccionado. Las herramientas son: TDA, PROGRAMAR, GRAFICAR y EXAMINAR.

En cada pantalla se presenta un análisis teórico sobre las estructuras de datos con solo presionar el botón central.

Elementos de una ventana.

En cada ventana de la interfaz gráfica y en general de SEED se presentan elementos en común para el manejo de las mismas, sin embargo no todas las ventanas usan todos los elementos. A continuación se describen éstos:

- Caja de control de menú. AI activar esta caja las opciones que aparecen son similares a cualquier otra aplicación de Windows. Ver figura 2.

S i s t e m a D e E n s e ñ a n z a d e E s t r u c t u r a s d e D a t o s SEED 5

XasmaiRo Minimizar

m To ... Ctrl+Esc

Figura 2. Caja de control de menú de una ventana SEED.

- Reesfob/ece/: Recupera el estado anterior de la ventana.

- Move/: Mueve la ventana mediante el uso de las teclas de Flechas.

-h/??UfiO. Ajusta el tamaño de la ventana mediante el uso de las teclas de Flechas.

- Nn/h/zu/: Minimiza la ventana. - Mox/h/Zm Maximiza la ventana. - CemuL Cierra la ventana y termina la instancia de esa

ventana. - Sw/i%h 7 0 , Activa la lista de instancias de Program Manager (Task

List). - /!/ita Activa la lista de instancias de SEED.

La última opción de la caja de menú de control, al activarse, presenta la caja de diálogo de "Lista de Temas" como se muestra en la f igura 3. La caja "Lista de Temas" muestra las instancias abiertas de SEED y permite realizar operaciones sobre las mismas. Pasar el foco o terminar una instancia por ejemplo.

1-1 ~~ ~~~

Figura 3. Caja de lista de temas.

Sistema De Enseñanza de Estructuras de Datos SEED 6

Grupo IDS - Botones.

Un botón se compone de una imagen gráfica (ícono), un marco y un texto. Los íconos representan de la mejor manera la opción a seleccionar. El marco da el efecto tridimensional al botón al ser presionado y el texto especifica el tema, (Figura 4).

I

4

Figura 4. Ejemplo de un botón (Botón de ayuda).

- Menú popup.

Un menú popupaparece en la parte superior de un botón activado. La opción a seleccionar aparece resaltada en color inverso. Cada una de las opciones tiene asociada una tecla rápida.

Estos menús pueden aparecer en cascada y cuando esto sucede puede notarse al final de la opción una cabeza de flecha apuntando hacia afuera de la ventana. A continuación se muestra un menú popup.

Figura 5. Ejemplo de un menú popup.

Trabajando con la pantalla de Primer nivel.

Con la ventana de primer nivel se puede seleccionar un tema especifico de trabajo. Aparece cuando se inicia SEED.

El tamaño de la ventana es fijo (no tiene borde) y siempre aparece maximizada.

En la siguiente figura se presenta el aspecto que tiene la pantalla de primer nivel.

Sistema De Enseñanza de Estructuras de Datos SEED 7

~

Grupo IDS

Figura 6. Ventana principal de SEED.

Descripción funcional de sus botones.

AI seleccionar el botón central (ver Figura 6) se activa la ventana de información teórica que presenta una introducción general sobre las estructuras de datos (ver el tema Usundo /u feo[ú de eskucfuru de doto$.

Figura 7. Botón central de la pantalla.

Botón de ayuda

Este botón activa la ventana de ayuda en linea (ver el tema Usundo /u qwdu en h e ) que auxilia al usuario para trabajar con la pantalla de primer nivel.

Sistema De Enseñanza de Estructuras de Datos SEED 8

Grupo IDS

Figura 8. Botón de Ayuda.

Botón de salida

Activa la caja de diálogo para confirmar la salida de SEED. Puede cancelar y continuar trabajando.

Figura 9. Botón de Salida.

Botones de Tema

Los botones que se describen a continuación tienen la función de escoger un tema específico de estructuras de datos. En cada figura se presenta el botón y una descripción esquemática -en forma de árbol- de los temas que se pueden escoger al activar cada uno de ellos.

Figura 10. Botón de Listas Lineales.

Sistema De Ensefianza de Estructuras de Datos SEED 9

""."" ""

Grupo IDS

Figura 11. Botón de Arboles.

Figura 12. Botón de Colas de Prioridad.

. Figura 13. Botón de Listas.

Sistema De Enseñanza de Estructuras de Datos SEED 10

Figura 14. Botón de Búsqueda en Tablas.

Figura 15. Botón de Grafos.

Trabajando con la pantalla de Segundo nivel.

La pantalla de segundo nivel se activa después de haber seleccionado un tema específico de estructuras de datos en la pantalla de primer nivel. Esta pantalla permite la selección de cualquier herramienta con que se desea estudiar el tema. A continuación se muestra el aspecto de esta ventana.

Como puede notarse el aspecto de esta ventana es muy similar a1 que presenta la ventana de primer nivel, el tamaño es f i jo (no t iene borde) y siempre aparece maximizada. Para seleccionar cualquiera de los botones de ésta pantalla, ya sea con el ratón o el teclado se sigue el m ismo procedimiento de selección descrito en la pantalla de primer nivel en los temas: Pusundo e/ foco enhe bofones y hcog/endo un temo.

I

Sistema De Ensefianza de Estructuras de Datos SEED 11

1 2 4 0 1 5

Grupo IDS El titulo de la ventana corresponde al tema específico seleccionado en el nivel anterior. El manejo de ésta ventana se sigue de la misma filosofía empleada para la ventana de primer nivel.

Botones de Tema.

Los botones descritos a continuación, tienen la función de escoger una herramienta de trabajo. AI activar cualquiera de estos botones pasamos al ambiente especifico de cada herramienta.

Botón de TDA.

Esta herramienta tiene la función de visualizar el código que implementa al TDA del tema elegido. Igualmente tiene la posibilidad de ejecutarlo en sus tres formas diferentes (ejecución en código, gráfico y memoria).

- Botón de Programar.

Activa el ambiente de programación que contiene: editor de programas, lenguaje de programación LED, compilador y depurador.

Sistema De Enseñanza de Estructuras de Datos SEED 12

Grupo IDS Botón de Graficar.

Activa el ambiente de edición gráfico que nos permite dibujar y diseñar las estructuras de datos que soporta el sistema SEED.

Botón de Examinar.

Esta herramienta activa el ambiente que realiza exámenes al usuario para evaluar su rendimiento.

Resultaoos,Conclusiones y Metas Alcanzadas.

Debido a la notoria carencia de recursos disponibles para la realización de un proyecto de la complejidad de SEED, la fecha de terminación se postergó, pese a Io cual consideramos que el desarrollo del proyecto ha satisfecho nuestras metas y propósitos fundamentales. Hubiesemos querido contar con un poco de apoyo de parte del área para haber obtenido resultados un poco más espectaculares. Dado que es imposible que 17 personas trabajen en una sola computadora con acceso restringido a las áreas de trabajo, el proyecto debió dividirse en dos etapas, la primera que denominamos Versión 1.0 y que estará terminada el día 1 o. de Agosto de 1992, y la Versión 2.0 que deberá arrancar inmediatamente después, gracias al entusiasmo y colaboración de todos los participantes.

Sistema De Enseñanza de Estructuras de Datos SEED 13

Grupo IDS Los módulos que se están desarrollando en este momento son:

lnterfaz gráfica. .Editor de textos. Editor gráfico. Traductor a C. Traductor a Pascal. Traductor a Modula. Compilador.

Los modulos que faltan por desarrollarse son:

Interprete. Depurador. Administrador de bases de datos.

Recomendaciones.

Para Futuras version es necesario contar con mayor apoyo ya que los resultados se obtinen con base en los recursos a los cuales se tiene acceso.

Bibliografia.

Microsoft Corp. Microsoft Windows Users Guide. Versibn '3.0 1985 - 1990.

MicroSoft Corp. Microsoft Windows Software Development Kit. Guide to Programing. Tools.

Reference. Vols. I y I I . Schildt Herbert Programacibn en Turbo C. Trad. Javier

Correla. Ed. McGraw Hill. México 1989.

Sistema De Enseñanza de Estructuras de Datos SEED 14

Grupo IDS Anexo 1. Módulos componentes de SEED.

EDITOR DE TEXTO

El editor de textos es un módulo que forma parte del sistema de SEED, el cual es empleado para manipular y crear archivos ASCII. La pantalla correspondiente a1 Editor de Textos es la siguiente:

Dentro del editor se pueden realizar funciones sobre caracteres, cadenas y líneas completas, tales como insertar, borrar, reemplazar, modif icar y hacer búsquedas; empleando los comandos del editor de textos de SEED.

Los archivos a ser editados pueden ser programas fuente (aplicación) ó cualquier otro t ipo de texto.

Las operaciones sobre archivos son las de crear, cargar un archivo del directorio, salvar, salvar una copia del archivo con otro nombre.

Las entradas y salidas del Editor son:

Entrada: El tema especif ico que el usuario ha elegido.

Salida: Un archivo en disco o memoria.

Los módulos con los que se comunica son:

- Módulo de compilador. - Módulo de traductor. - Módulo de Ejecución. - Módulo de lnterfaz gráfica.

Sistema De Enseñanza de Estructuras de Datos SEED 15

Grupo IDS

Ya que el editor de textos forma parte del sistema integral de Programación en el que el usuario puede escribir, compilar y ejecutar programas del tema elegido.

En general el programa del editor de textos se divide en procedimientos que se encargan de procesar mensajes e inicializar funciones, funciones que definen la clase de la ventana, funciones que se encargan de crear ventanas (padre e hijo), módulos para el manejo de ventanas, módulo para inicial izar menú, funciones que invocan cajas de diálogo, rutinas para manejo de impresora, rutinas de mensajes de error y procedimientos que son invocados,por medio de las funciones de procesamiento de mensajes, para realizar una operación específica.

Para la elaboración de este módulo se hizo uso de programación modular, ya que el problema involucra otros de tal manera que se puede dividir por módulos.

También se llevó a cabo programación orientada a objetos (OOP), por medio de las funciones de SDK, pués para el manejo de la pantalla de edición y otras funciones más, resulta transparente al programador la manera como guarda la información para la manipulación de estos datos, dejando la opción de uti l izarlas como objetos.

Para crear la pantalla Programar se abre una ventana padre, la cual contiene las diferentes opciones del menú principal (Archivos, Editar, Compilar, Ejecutar, etc.) y para el texto en edición se hace uso de una ventana hijo.

El esquema completo de la función Programar se puede ver en la f igura 16 donde se muestran las funciones que realiza la opción Programar.

Figura 16. Diagrama de bloques Programar.

Sistema De Enseñanza de Estructuras de Datos SEED 16

" ~- - -~ ~ " " ~~ - - " ~

Grupo IDS En el editor solo se contemplan las funciones de Archivos y Editar, las operaciones que realiza la opción de Archivos se pueden ver en el diagrama de la figura 17, así como las operaciones de Editar se muestran en el diagrama de la figura 18.

Figura 17. Diagrama de bloques de Archivos.

La opción de Editar se divide en dos partes, una que se refiere a operaciones sobre bloques de texto y otra a la de búsquedas y reemplazos (figura 18) las opciones de cada una se muestran en las f iguras 19 y 20 respectivamente.

CFI Editar

U Bbsquedas y Reemplazos

Figura 18. Diagrama de bloques de Editar.

Operaciones sobre bloques.

""

Figura 19. Diagrama de operaciones sobre bloques.

Sistema De Ensefianza de Estructuras de Datos SEED 17

Grupo IDS

Y Busquedas y Reemplazos

Figura 20.Diagrama de búsquedas y reemplazos.

En general el programa del editor de textos se divide en procedimientos que se encargan de procesar mensajes e inicializar funciones, funciones que definen la clase de la ventana, funciones que se encargan de crear ventanas (padre e hijo), módulos para el manejo de ventanas, módulo para inicializar menú, funciones que invocan cajas de diálogo, rutinas para manejo de impresora, rutinas de mensajes de error y procedimientos que son invocados, por medio de las funciones de procesamiento de mensajes, para realizar una operación especifica.

EDITOR GRAFICO

El editor gráfico nos permite una representación visual de estructuras de datos tales como :

- Grafos ( dirigidos y no dirigidos ). - Arboles ( binarios, B, AVL, etc. ). - Tablas de dispersión. - Arreglos ( M x N ).

Las operaciones que se pueden realizar sobre éstas estructuras gráficas son las mismas que se realizan sobre una estructura de datos en memoria a saber:

- Creación . - Modificación ( inserción y eliminación de nodos ). - Almacenamiento y recuperación en archivo. - Alteración de la información de una estructura. - Destrucción.

Sistema De Enseñanza de Estructuras de Datos SEED 18

~ ~~ ~ _ ~ " ~. . - ~~

Grupo IDS

A continuación se muestra la pantalla correspondiente al Editor Gráfico.

En una estructura gráfica, la inserción y eliminación de modificación de su información dependen de la posición del pantalla. Cuando se modifica la información, por ejemplo, el

un nodo o la cursor sobre la cursor se ubica

sobre el nodo cuya información será cambiada, el programa recupera las coordenadas del cursor y en base a esas coordenadas deberá localizar al nodo en memoria y cambiar su campo de información.

De Io anterior se desprende que el almacenamiento de los nodos se debe realizar en base a su posición en la pantalla; es por esta razón que se utiliza como estructura de almacenamiento una tabla de dispersión en la cual la función de distribución depende de las coordenadas del nodo sobre la pantalla.

La función de dispersión es:

División = Coord/Div F(dispersi6n) = División / 2

donde:

Coord : X o Y del nodo, dependiendo de la tabla en la cuál va a ser insertado el nodo (X para TablaX y para TablaY).

Div : AnchoCanal para la TablaX, AltoCanal para TablaY.

Sistema De Enseñanza de Estructuras de Datos SEED 19

Grupo IDS

DESCRIPCION DE LA CLASE DE NODOS UTILIZADA POR LA TABLA

Los nodos que son insertados en esta tabla pueden ser de grafos, árboles, apuntadores o celdas de un arreglo, por Io tanto la manipulación que se hace de estos nodos durante su inserción, eliminación, etc varía según el t ipo de estructura que se está representando.

El tipo de los nodos manejados en la tabla es REGNODO :

1 struct REGNODO

int Tipo; int Numero;

int X; int Y;

int Listalnios[ MAXINFO 3;

struct REGPARIENTES *ApANodo; struct REGNODO *SigX, *SigY, *ListaLigas[LIMAP];

1; Tipo : Define el tipo de nodo que se está representando y puede ser :

- apuntador - árbol - grafo - celda

Numero : Cuando se utilizan arreglos, este campo sirve para ordenar de manera secuencia1 los nodos.

X : Coordenada X ( absoluta ) del nodo .

Y : Coordenada Y ( absoluta ) del nodo

Listalnfos : Información que contiene el nodo .

ApANodo : Lista de nodos que apuntan hacía este nodo .

SigX : Apuntador a1 siguiente nodo en la TablaX ( 1 )

Sistema De Ensefianza de Estructuras de Datos SEED 20

I I

- .'"_.. . . . . "_

SigY : Apuntador al siguiente nodo en la TablaY (1) .

ListaLigas : Lista de nodos a los que apunta este nodo

( 1 ) Se util izan dos tablas de dispersión ( TablaX y TablaY ) para facilitar el scroll sobre una gráfica ( Ver sección de scroll de la pantalla en este manual ).

INSERCION DE UN NODO

La pantalla es dividida por m canales verticales y por n horizontales tal y como se muestra en la figura 2; el ancho de cada canal esta dado por las variables globales GLBAnchoCanal para los canales verticales y GLBAltoCanal para los horizontales.

Un nodo sólo puede ser insertado en aquellas regiones de la pantalla donde se intersectan un canal impar vertical y un canal impar horizontal, quedando cualquier otra zona de la pantalla inhibida para la inserción de los nodos. la razón de esto es evitar que el usuario pueda colocar nodos juntos o encimados y construya de este modo estructuras de datos no válidas.

Una vez que se apunta a algún lugar en la pantalla donde se desea insertar un nodo, se recuperan las coordenadas de pantalla donde se desea insertar el nodo y se lleva a cabo el siguiente proceso :

- Se convierten las coordenadas de pantalla obtenidas ( coordenadas relativas ) a coordenadas absolutas. - El programa verifica si ese lugar es válido. - Se realiza una búsqueda en una de las tablas para averiguar si el no do aún no ha sido insertado. - Si el lugar es válido y el nodo aún no existe, éste es insertado tanto en la TablaX como en la TablaY.

ELlMlNAClON DE UN NODO

Una vez que un nodo ha sido marcado para ser el iminado de una gráfica, se ejecuta la siguiente secuencia de pasos :

- Se recuperan las coordenadas de pantalla del nodo, se convierten a coordenadas absolutas y con estas se localiza la dirección del nodo en la tabla.

- Se almacena la dirección del nodo en una variable auxiliar, y éste se el imina tanto de la TablaX como de la TablaY.

Sistema De Enseñanza de Estructuras de Datos SEED 21

1 2 4 0 1 5

Grupo IDS

- Todas las ligas del campo Listaligas del nodo son apuntadas a NULL.

- Para cada dirección de la l ista ApANodo ( la cual contiene las direcciones de los nodos de la gráfica que apuntan hacía ese nodo), se recorre el campo Listaligas de esa dirección y la liga que apunta al nodo que va a ser borrado se reapunta a BASURA.

- Se libera la variable auxiliar.

SCROLL DE LA PANTALLA

La justificación del uso de dos tablas de dispersión aparece cuando se hace algún scroll sobre el contenido de la pantalla. Cuando se pulsa el mouse entre el thumb ( selector ) y alguna de las flechas de una barra de scroll, la gráfica que se encuentra sobre la pantalla se mueve una página, en dirección contraria al movimiento del thumb sobre la barra. Para realizar este corrimiento sobre la gráfica, supongase que se trata de un scroll en la direccion horizontal hacía la izquierda

- Se le resta un desplazamiento del largo de la pantalla a la coordenada XRel (1).

- Con esta nueva XRel, se localiza la cubeta que corresponde a esta coordenada en TablaY, y se le asigna a cubeta inicial .

- A partir de cubeta inicial y hasta el número máximo de cubetas que caben en la pantalla, se redibuja la TablaY. Cuando el requerimiento de scroll se hace sobre la barra vertical, el anterior procedimiento se ejecuta sobre la TablaY. Cuando el mouse es pulsado sobre la flechas de una barra de scroll, se realiza un corrimiento sobre la pantalla utilizando la función ScrollWindow() del SDK y se dibujan las dos primeras cubetas de la tabla del extremo de la pantalla donde se hizo el scroll.

MOVIMIENTO DE LAS LIGAS

AI crearse el nodo, todas sus ligas son apuntadas a BASURA. Cuando se selecciona una liga de un nodo para ser apuntada hacía otro lugar, se ejecuta el siguiente procedimiento:

- Se recuperan las coordenadas de pantalla de la liga a mover y se convierten a coordenadas absolutas.

- Con estas coordenadas absolutas se realiza una inserción.

Sistema De Enseiianza de Estructuras de Datos SEED 22

-

Grupo IDS 1

- Se recupera la dirección del nodo al cuál pertenece la liga (nodo origen) as¡ como el número de liga que fue seleccionado ( 1 - 4,N.liga).

- Una vez apuntada la liga hacía otro nodo, se recupera la dirección de ese nodo (nodo destino).

- Finalmente, del campo Listaligas det nodo origen, se selecciona el apuntador Listaligas[N.liga] y se apunta a la dirección del nodo destino.

MOVIMIENTO DE LOS NODOS

El proceso seguido para el movimiento de los nodos sobre la pantalla es :

- Se marcan todos los nodos que van a ser movidos.

- Cuando un nodo es marcado, se almacena su dirección en ListaNodosMarcados.

- Cuando se realiza el movimiento, todos los nodos cuyas direcciones estan en ListaNodosMarcados son reinsertados en las tablas de dispersión en base a su nueva posición sobre la pantalla.

- Por último, son redibujadas las tablas de dispersión.

i) Reinserción

- Se toma una dirección almacenada en ListaNodosMarcados y a las coordenadas de ese nodo se les agrega el desplazamiento desde su posición original a la actual.

- De acuerdo a sus nuevas coordenadas, se evaluan en la función de dispersión, tanto para l a TablaX como para la TablaY, de este modo se obtienen sus nuevas CubetaX y CubetaY para ese nodo.

- Utilizando las nuevas cubetas, el nodo es insertado en ambas tablas.

- Utilizando las cubetas de la posición original, el nodo es eliminado de ambas tablas.

- El mismo proceso se sigue con todas las direcciones almacenadas en Lis taNodosMarcados.

Sistema De Ensefianza de Estructuras de Datos SEED 23

MODlFlCAClON DE LA INFORMACION EN UN NODO

AI ser apuntado un nodo para modif icarle su información :

Grupo IDS I

- Se recuperan las coordenadas de pantalla del nodo, se convierten a coordenadas absolutas y con estas se localiza la dirección del nodo en la tabla.

- Se despliega la caja de info.

- Obtenida la dirección de ese nodo, a su campo info se le asigna el nuevo valor obtenido desde la caja de modif icar info.

ALMACENAMIENTO Y RECUPERACION DE ESTRUCTURAS DE DATOS DESDE ARCHIVOS

Para almacenar una estructura en un archivo, se realiza un recorrido por la TablaX y los campos de cada nodo que contienen la clase a la que pertenece ( árbol, grafo, arreglo, etc.) así como su información se almacenan en una variable temporal del tipo ficha. Por otro lado, a partir de el campo Listal lgas ( Ver I ' Descripción de la clase de nodos usados por la tabla ' I ) se recuperan las coordenadas de los nodos a los que apunta este nodo y son almacenados en el campo lista de la variable auxiliar. Una vez realizado Io anterior, se almacena la variable auxiliar en el archivo.

Para recuperar una estructura a partir de un archivo, se realizan dos lecturas al archivo. En la primer lectura se lee la información de cada nodo en una variable del tipo ficha y con los campos Número, Tipo, X, Y, Listalnfos se crea el nodo y es insertado en la Tabla. Posteriormente, durante la segunda lectura, mediante X y Y se localiza al nodo en la tabla y en base a las coordenadas contenidas en el campo Lista de la variable auxiliar, se construye la lista de nodos a los que apunta el nodo localizado.

MANEJO DEL MOUSE

Cuando el mouse es movido sobre la pantalla, las coordenadas x,y de su posición son regresadas en IParam. Las coordenadas son procesadas para averiguar si el cursor está en una posición válida, si es así, cambia el ícono que representa a1 cursor (dependiendo el nuevo ícono de la herramienta util izada en ese momento ), de otra manera se conserva el cursor estandar .

Sistema De Ensefianza de Estructuras de Datos SEED 24

Grupo IDS

Si el cursor está sobre una posición válida y el botón izquierdo del mouse es pulsado, se verifica que el tipo del nodo esté definido. Cuando el botón izquierdo es soltado de nuevo se ejecutan algunas de las siguientes acciones dependiendo de NumHerramieta :

NumHerramienta

HERNODO

HERRINFO

Inserta un nodo.

Presenta la caja de diálogo para info y modif ica la info del nodo apuntado.

HERRNIL Apunta una liga a nil.

HERRARREGLO Crea un arreglo.

HERRMOVER Mueve todos los elementos de ListaNodoMarcados

HERRBORRA Elimina un nodo.

HERRAPUNT Inserta un apuntador en la tabla.

I

Sistema De Enseñanza de Estructuras de Datos SEED 25

COMPllADOR Grupo IDS

Este módulo es el encargado de compilar los programas escritos en lenguaje LED (Lenguaje de Estructura de Datos), cuya gramática se muestra posteriormente; en las reglas de producción los símbolos terminales están escritos con mayúsculas mientras que los no terminales comienzan con mayúscula.

La gramática es la siguiente:

Programa : ROGRAMA IDENTIFICADOR DefMacros Importaciones DeclTipos DecIVariabIes ListaDef CuerpoProc;

DefMacros : MACRO ListaMacros;

ListaMacros : Macro I ; ’

I ListaMacros Macro I ; ’ ;

Macro : IDENTIFICADOR Parametros ’ = I Exp;

Parametros I (’ ListaParamMacro I ) ’ ;

ListaParamMacro : IDENTIFICADOR I ListaParamMacro IDENTIFICADOR;

Importaciones 1 Importaciones Importacion;

lmportacion : DE IDENTIFICADOR IMPORTA ListaNomDef ’;’ ;

ListaNomDef : IDENTIFICADOR I ListaNomDef IDENTIFICADOR ;

DeclTipos I TIPO ListaTipos ;

ListaTipos : DefTipo I ; ’

I ListaTipos DefTipo I ; ’ ;

DefTipo : IDENTIFICADOR ’ = I TipoPermitido;

Sistema De Enseñanza de Estructuras de Datos SEED 26

TipoPermitido

lndice

Cam pos

DeclVariables

Va rs

ListaDef

Def

Proced

Funcion

Grupo IDS APUNTADOR Tipo * f REGISTRO Campos F I N ARREGLO ’[’ lndice ’1’ DE Tipo MATRIZ ’[’ lndice lndice ’ 3 ’ DE Tipo ENTERO;

NUMERO I IDENTIFICADOR;

: Listaldent I : ’ Tipo ’;’ I Campos Listaldent I : ’ Tipo I ; ’ ;

I VAR Vars;

: Listaldent ’:’ Tipo I ; ’

Vars Listaldent I : ’ Tipo I ; ’ ;

ListaDef Def;

: Proced I Funcion;

: PROCEDIMIENTO IDENTIFICADOR DeclVariables ListaDef CuerpoProc;

: FUNCION IDENTIFICADOR ’(’ ListParamFunc ’)’ I : ’ Tipo

CuerpoFunc; DeclTipos DeclVariables ListaDef

ListParamFunc I Listparam;

ListParam : Params I Listparam I ; ’ Params;.

Params : VAR Listaldent I : ’ Tipo 1 Listaldent ’:’ Tipo;

Listaldent : IDENTIFICADOR I Listaldent IDENTIFICADOR;

i

Sistema De Enseñanza de Estructuras de Datos SEED 27

Tipo

CuerpoProc

ListalnstProc

CuerpoFunc

ListalnstFunc

InstFunc

OtroFunc

InstProc

OtroProc

lnst

Asignacion

: IDENTIFICADOR I ENTERO;

: COMIENZA ListalnstProc FIN;

: InstProc I ; ’

I ListaInstProc InstProc I ; ’ ;

: COMIENZA ListalnstFunc FIN;

: InstFunc I ; ’

I ListalnstFunc InstFunc I ; ’ ;

: lnst I REGRESA ’ ( I Exp ’ ) I

I SI Condicion ENTONCES CuerpolnstFunc OtroFunc;

: OTRO CuerpolnstFunc I ; : lnst

1 SI Condicion ENTONCES CuerpolnstProcOtroProc;

OTRO CuerpolnstProc

Invoca Asignacion MIENTRAS Condicion HAZ CuerpolnstProc REPITE ListalnstProc HASTA Condicion PARA Asignacion HASTA Exp POR Exp

HAZ CuerpolnstProc PARA Asignacion HASTA Exp

HAZ CuerpolnstProc LEEENTERO I ( ’ ldent I ) ’

ESCRIBECADENA ’ ( I Exp I , ’ Exp CADENA ’)’

ESCRIBEENTERO I ( ’ Exp Exp ’ , I

Exp ’ ) I ;

ldent ’=’ Exp;

Sistema De Enseñanza de Estructuras. de Datos SEED 28

Condicion

ExpBooleana

Comparacion

Termino

Factor

. Grupo IDS

: ’ ( I ExpBooleana ’)’ 1 NO ’(’ ExpBooleana I ) ’ ;

: ’(’ ExpBooleana I ) ’ Conect ’(’ ExpBooleana 9’ I ’(’ ExpBooleana I ) ’ Conect NO ’ ( I

ExpBooleana I ) ’

ExpBooleana ’)’

ExpBooleana ’)’

I NO ’(’ ExpBooleana ’)’ Conect ’ ( I

I NO ’(’ ExpBooleana I ) ’ Conect NO ‘ ( I

I Comparacion;

: Exp OperRel Exp;

: Termino 1 I - ’ Termino 1 Exp OperAd Termino 1 NULO ;

: Factor I Termino OperMul Factor;

: ldent I Invoca I NUMERO 1 ’ ( I Exp I ) ’ ;

Invoca : IDENTIFICADOR ‘ ( I ParamActuales I ) ’ ;

ParamActuales I ListaExp;

ListaExp : Exp 1 ListaExp ’,’ Exp ;

OperRel : ’<’ I ’>’ I IGUALIGUAL I MAYOROIGUAL I MENOROIGUAL I ’ # I ;

Sistema De Enseñanza de Estructuras de Datos SEED 29

Conect

OperAd

OperMul

” -

Grupo IDS

CuerpolnstFunc : InstFunc 1 CuerpoFunc;

CuerpolnstProc : InstProc I CuerpoProc;

ldent : IDENTIFICADOR Listald;

Listald : ’ [ I Exp ‘3’ Listald I ’ [ I Exp ’,’ Exp ’1’ Listald I ’.’ IDENTIFICADOR Listald I ‘ A ’ Listald

Como se puede observar en la gramática, LED es un lenguaje estructurado.

El Único tipo básico de LED es el entero y los tipos compuestos son: Arreglos, Matrices, Registros y Apuntadores.

Una de las características distintivas de LED respecto a los lenguajes comunes es que no se permite el uso de variables globales. La ventaja principal de esto, es que el programador se adiestre en el manejo de parámetros, tanto por valor como por referencia, sin perder generalidad en el desarrol lo de programas y evitar el uso inadecuado de variables globales.

Entre las facilidades que LED ofrece se encuentra la definición de MACROS y TIPOS de acuerdo a los requerimentos del programa.

En cuanto a1 tratamiento de errores en los programas, la compilación se detiene cuando encuentra el primer error, indicando el t ipo del mismo. Cuando se corrige el error es necesario recompilar el programa.

Sistema De Enseñanza de Estructuras de Datos SEED 30

Grupo IDS

Para su desarrollo el compilador fue dividido en las siguientes etapas:

1 .- Análisis y Diseño de la Gramática. Durante esta etapa se diseñó la gramática de LED de acuerdo a los objetivos establecidos para SEED.

2.- Preprocesador. Su proposito es realizar la substitución de macrodefiniciones y la detección de errores lexicográficos. Para su desarrollo se uso LEX y YACC.

3.- Analizador lexicográfico. En esta etapa se escribió un archivo de especificación para LEX, generandose el analizador lexicográfico del compilador.

4.- Analizador sintáctico. Se escribió u n archivo de especificación de entrada para YACC de acuerdo a la gramática de LED, para generar el analizador sintáctico del compilador.

5.- Analizador semántico. Se realizó mediante la adición de acciones semánticas al archivo de especificación para YACC, por tratarse de un compilador dirigido por sintaxis. En esta etapa se realizó la definición de las estructuras de datos, requeridas para la tabla de símbolos la cual consta básicamente de pilas y listas generales, así también se llevó a cabo la definición de las funciones para el manejo de dicha tabla.

6.- Generación de código. Esta es la etapa final del compilador y aquí se lleva a cabo la generación de código intermedio de tres direcciones mediante la adición de acciones semánticas al archivo de especificación para YACC.

INTERPRETE

SEED cuenta con un intérprete, el cual, actualmente se encuentra en fase de análisis y programación.

Con relación a la fase de análisis, se está estudiando el código intermedio, y con base en éste, se elaborará la estructura de datos correspondiente.

La fase de programación ha cubierto hasta el momento la realización de las funciones correspondientes para la ejecución de algunas de las intrucciones existentes en el programa que se esté analizando.

Se tiene pensado terminar el intérprete en las próximas dos semanas y posteriormente se pasará a la elaboración de su respectivo manual técnico.

Sistema De Enseñanza de Estructuras de Datos SEED 31

Grupo IDS

lnt imamente relacionado con SEED, manejaremos un mapeo en memoria, este mapeo se encuentra actualmente en fase de programaciÓnSe maneja para su efecto, una estructura de "lista de registros", la cual representará las diversas localidades existentes en memoria y, cuyo contenido será precisamente los nombres y valores de las variables dinámicas que se emplearán en el programa.

Dicho mapeo se controlará desde: el programa (PROGRAMA FUENTE) por medio el uso del depurador y, desde el editor de gráficos, para que, posicionándose en un determinado nodo (representado gráficamente) el usuario pueda reconocer el área de memoria asignada a1 nodo en cuestión así como el contenido de éste.

TRADUCTORES

En este módulo es posible traducir un programa escrito en lenguaje LED a otro en PASCAL, MODULA o C, según Io requiera.

i

De esta manera el usuario aprovecha las ventajas que brinda el sistema SEED, en la realización de programas y cuando Io requiera puede traducir su programa a cualquiera de estos tres lenguajes, con la ventaja de saber que éste funciona correctamente.

Los traductores se realizaron usando los programas LEX y YACC, debido a las facilidades que brinda para este tipo de trabajo.

El archivo de entrada para YACC contiene la especificación de la gramática de LED y las acciones correspondientes para escribir en el archivo donde queda el programa traducido, además de l lamadas a procedimientos para guardar nombres de las funciones, de los parámetros, o bien llamadas a procedimientos para indentar el texto.

Sistema De Enseñanza de Estructuras de Datos SEED 32

Grupo IDS

Ejemplo del traductor a MODULA

Programa ejemplo escrito en LED:

PROGRAMA Lista TIPO

ApEntero = APUNTADOR ENTERO;

ApNodo = APUNTADOR Nodo;

Nodo = REGISTRO Info: ENTERO; Ligalzq,LigaDer: ApNodo;

FIN;

Matriz = MATRIZ [5,5] DE ENTERO; ArregloReg = ARREGLO [5] DE Matriz;

VAR Lista:ApNodo; Cont:ApEntero; Mat:Matriz;

PROCEDIMIENTO Inserta( VAR C0nt:ApEntero;VAR Lista:ApNodo;Elem:ENTERO) VAR

Celda,ApAux:ApNodo;

PROCEDIMIENTO CreaNodo(E1em:ENTERO;VAR Celda:ApNodo) COMIENZA

CREA(Ce1da); Celda ̂ .Info = Elem; Celda -.Ligalzq = NIL; Celda -.LigaDer = NIL; Reg.Campo1 = 2; Mat[ 1,3]= 2;

FIN { CreaNodoi

Sistema De Enseñanza de Estructuras de Datos SEED 33

Grupo IDS COMIENZA 1 iNSERTA 1

PARA Ap=l HASTA 10 POR -2 HAZ COMIENZA

CreaNodo(Elem,Ceida); ApAux = Lista; MIENTRAS NO(ApAux == NIL) HAZ COMIENZA ApAux = ApAuxA.LigaDer; SI ( ApAux == NIL) ENTONCES COMIENZA

ApAux"-.LigaDer = Celda; APAux = Lista;

FIN; FIN;

CeldaA.Ligalzq = ApAux; FIN; ArrReg[3]=ArrReg[ I]; Suma = Suma t 1;

FIN { Inserta

FUNCION Fin():ENTERO VAR

Resp : CHAR;

ESCRIBECADENA( 5, 5, ' Continuas S/N '); Lee( Resp);

SI ((Resp == S) @ (Resp == S)) ENTONCES

COMIENZA

REGRESA(O)

REGRESA( I);

OTRO COMIENZA

Ap = Ap tl; FIN;

FIN

COMIENZA REPITE

Inserta(Lista,5); Inserta(Lista,7);

HASTA (Fin() == 1) ; FIN 1 EOF 1

Sistema De Enseñanza de Estructuras de Datos SEED 34

Grupo IDS Programa ejemplo traducido a modula:

MODULE Lista ;

FROM InOut IMPORT Readlnt, Writelnt, Writestring ;

FROM Storage IMPORT ALLOCATE, DEALLOCATE ;

TYPE ApEntero = POINTER TO INTEGER; ApNodo = POINTER TO Nodo; Nodo = RECORD

Info : INTEGER; Ligalzq, LigaDer : ApNodo;

END; Matriz = ARRAY[ 1 ..5],[ 1 ..5] OF INTEGER; ArregloReg = ARRAY[I ..5] OF Matriz; VAR

Lista : ApNodo; Cont : ApEntero; Mat : Matriz;

PROCEDURE Inserta (VAR C0nt:ApEntero;VAR Lista: ApNodo; Elem: INTEGER);

VAR Celda, ApAux : ApNodo;

PROCEDURE CreaNodo (E1em:INTEGER;VAR Ce1da:ApNodo);

BEGIN NEW (Celda ); CeldaA.lnfo := Elem; Celda-.Ligalzq := NIL; CeldaA.LigaDer := NIL; Reg.Campo1 := 2; Mat [ l ,3 ] := 2;

END CreaNodo ;

Sistema De Enseñanza de Estructuras de Datos SEED 35

BEGIN FOR Ap := 1 TO 1 O BY (-2) DO

CreaNodo(Elem,Celda); ApAux := Lista; WHILE NOT (ApAux = NIL) DO

ApAux := ApAuxA.LigaDer; IF (ApAux = NIL) THEN

ApAuxA.LigaDer := Celda; APAux := Lista;

END ; END ; CeldaA.Ligalzq := ApAux;

END ; ArrReg[3] := ArrReg[l]; Suma := Suma t 1;

END Inserta ;

PROCEDURE Fin() : INTEGER ; VAR

Resp : CHAR;

BEGIN GOTOXY( 5,5 ); Writestring( Continuas S/N ’ ); Lee(Resp); IF ( (Resp = S) OR (Resp = S)) THEN

ELSE RETURN (1 ); Ap := Ap t 1 ;

RETURN (O );

END ; END Fin ;

BEGIN REPEAT

Inserta(Lista,5); Inserta(Lista,7);

UNTIL (Fin() = 1 ) ; END Lista .

Grupo IDS

I

Sistema De Enseñanza de Estructuras de Datos SEED 36

Grupo IDS Programa ejemplo escrito en LED:

PROGRAMA Lista TIPO

ApEntero = APUNTADOR ENTERO;

ApNodo = APUNTADOR Nodo;

ApCelda x APUNTADOR Celda;

Nodo = REGISTRO Info: ENTERO; Ligalzq,LigaDer: ApNodo;

FIN;

Celda REGISTRO 1nfo:ENTERO; Liga:ApCelda;

FIN;

Matriz = MATRIZ [5,5] DE ENTERO; ArregloReg = ARREGLO [5] DE Matriz;

VAR Lista:ApNodo; Cont:ApEntero; Mat:Matriz;

PROCEDIMIENTO Inserta( VAR Lista:ApNodo;Elem:ENTERO) VAR

Celda,ApAux:ApNodo; Casilla:ApCelda;

Sistema De Enseñanza de Estructuras de Datos SEED 37

Grupo IDS PROCEDIMIENTO CreaNodo(E1em:ENTERO;VAR Ce1da:ApNodo) VAR

Reg:Matriz;

COMIENZA CREA(Ce1da); Celda ̂ .Info = Elem; Celda A.Ligalzq = NULO; Celda -.LigaDer = NULO; Reg.Campo1 = 2; Mat[ 1,3]= 2; ESCRIBEENTERO(5,7,(o*lO)); LIBERA(Ce1da);

FIN { CreaNodoI

COMIENZA { iNSERTA 1 PARA Ap=l HASTA 1 O HAZ

FIN

COMIENZA CreaNodo(E1em;Celda); ApAux = Lista; MIENTRAS NO(ApAux == NULO) HAZ COMIENZA ApAux = ApAuxA.LigaDer; SI ( ApAux == NULO) ENTONCES COMIENZA

ApAux-.LigaDer = Celda; ApAux = Lista;

FIN; FIN;

CeldaA.Ligalzq = ApAux; FIN; ArrReg[J]=ArrReg[ I ] ; Suma = Suma t 1; CREA(Casi1la);

{ Inserta 1 LEEENTERO(AP);

Sistema De Enseñanza de Estructuras de Datos SEED 38

Grupo IDS FUNCION Fin():ApNodo VAR

Resp : CHAR;

ESCRIBECADENA( 5, 5, Continuas S/N I ) ;

Lee(Resp); SI ( A * ( S u m t l ) == varsum) ENTONCES COMIENZA

COMIENZA

SI (((Resp == S) @ (Resp == S)) & (Resp == N )) ENTONCES REGRESA(O)

OTRO COMIENZA

REGRESA( 1); Ap = Ap + I ;

FIN; FIN;

FIN

COMIENZA REPITE

1nserta(Lista;5); Inserta(Lista;-i);

HASTA (Fin() == 1 ) ; FIN I EOF I

Sistema De Ensefianza de Estructuras de Datos SEED 39

Grupo IDS Programa ejemplo traducido a C:

#include <stdio.h> #include <stdlib.h> #include <alloc.h>

char Lugar[30]; /* Variable necesaria para ESCRIBEENTERO */

typedef int *ApEntero; typedef struct RegNodo 1

int Info; struct RegNodo *Ligalzq,*LigaDer;

[Nodo; typedef Nodo *ApNodo; typedef struct RegCelda {

int Info; struct RegCelda *Liga;

[Celda; typedef Celda *ApCelda; typedef int Matriz[5][5]; typedef Matriz ArregloReg[5];

ApNodo Fin();

ApNodo Lista; ApEntero Cont; Matriz Mat:

do I

Inserta(&Lista,5); Inserta(&Lista,5);

1 Iwhile!(Fin()==l);

Sistema De Enseñanza de Estructuras de Datos SEED 40

"""_ I". . "" "" " " .. "

Grupo IDS Inserta(ApNodo **Lista,int Elem) I

ApNodo Celda,ApAux; ApCelda Casilla;

for(Ap= 1 ;Ap<= 1 O;) I

CreaNodo(Elem,&Celda); ApAux=(**Lista); while!(ApAux==NULL)

1 ApAux=ApAux->LigaDer; if(ApAux==NULL)

{

1

ApAux->LigaDer=Celda; ApAux=(**Lista);

1

I Celda->Ligalzq=ApAux;

ArrReg[3]=ArrReg[ 11; Suma=Sumat 1 ; Casillo=malloc(sizeof(struct RegCelda)); scanf("%d",&Ap);

I

CreaNodo(int Elem,ApNodo **Celda) {

Matriz Reg;

(**Celda)=malloc(sizeof(struct RegNodo)); (**Celda)->lnfo=Elem; (**Celda)->Ligalzq=NULL; (**Celda)->LigaDer=NULL; Reg.Campol=2; Mat[1][3]=2;

itoa((a*IO),Lugar,IO); puts(Lugar); free((**Celda));

gotoxy(5J);

1

Sistema De Enseñanza de Estructuras de Datos SEED 41

Grupo IDS ApNodo Fin()

CHAR Resp; I

gotoxy(5,5); puts("' Continuas S/N " I ) ;

Lee(&Resp); i f (A*(Sumt l )==varsum)

1 if(((Resp==s)(/(Resp==S))&&(Resp==N))

return(0); else

I

I

return( I); Ap=Ap t 1 ;

I I

Sistema De Enseñanza de Estructuras de Datos SEED 42