148.206.53.84148.206.53.84/tesiuami/UAM7945.pdf · son similares a cualquier otra aplicación de...

41
Grupo IDS Datos Generale: Nombre: Orestes Francisco Matricula: 87329751. Lugarde Realización:UniversidadAutonomaMetropolitanaIztapalapa. Periodo de Realización: 31 Julio 1994 - 31 Enero - 1992 /" Unidad: Iztapalapa. Division: Ciencias Básicas e Ingenieria. /Licenciatura: lngenleria Elecbnica. AreadeConcentracion:Computacibn. Nombredelproyect85EEDfSistemapara Ensefianza de Estructuras de Datos) Responsable: Ing.Héctor Lozano Moreno Introduccion. El sistemapara la ensefianza de las estructuras de datos SEED es unproyecto que pretende utilizar las herramientas computacionales más modernas para lograr la ensefianza de estadisciplina de la computación. Sistema De Ensefianza de Estructuras de Datos SEED 2

Transcript of 148.206.53.84148.206.53.84/tesiuami/UAM7945.pdf · son similares a cualquier otra aplicación de...

Grupo IDS

Datos Generale:

Nombre: Orestes Francisco

Matricula: 87329751.

Lugar de Realización: Universidad Autonoma Metropolitana Iztapalapa.

Periodo de Realización: 31 Julio 1994 - 31 Enero - 1992 /" Unidad: Iztapalapa.

Division: Ciencias Básicas e Ingenieria.

/Licenciatura: lngenleria Elecbnica.

Area de Concentracion: Computacibn.

Nombre del proyect85EEDfSistema para Ensefianza de Estructuras de Datos)

Responsable: Ing.Héctor Lozano Moreno

Introduccion.

El sistema para la ensefianza de las estructuras de datos SEED es un proyecto que pretende utilizar las herramientas computacionales más modernas para lograr la ensefianza de esta disciplina de la computación.

Sistema De Ensefianza de Estructuras de Datos SEED 2

.. .

lntriago y Loyo Orestes Francisco

Marzo I 993.

1 5 2 4 6 8

Reporte de proyecto terminal.

c c

f Ij t

Grupo IDS 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 espafiol que permitir6 crear programas basados en los temas aprendidos, un ambiente integrado de desarrollo de programas que permitirá escribirlos, compilarlos, ligarlos, depurarlos y ejecutarlos paso a paso para observar su funcionamiento, observar graficamente las estructuras al mismo tiempo 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.

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

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

Especificos.

l. Aplicar, de la manera mas completa, los conocimientos adquiridos a lo 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.

Sistema De Ensefianza de Estructuras de Datos SEED 3

Grupo IDS 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 realizacion 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 modulos que debian de realizarse.

Los integrantes entregaron un reporte de actividades semanales a lo largo de la realizacion 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 lo largo del periodo es la realizacion de la interfaz grafica. La documentacion que a continuacion se presenta el la descripcion de dicha interfaz, la programacion se realizo en lenguaje C con la herrmamienta denominada SDK (Software Development KIT de Microsoft) y el Optmizing Complier Version 6.0.

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 libertad y facilidad de uso. El objetivo de presentar una interfaz sumamente intuitiva mediante elementos gráficos, creemos se ha cumplido.

Sistema De Ensefianza de Estructuras de Datos SEED 4

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 al sistema y tiene como objetivo permitir al usuario escoger el tema especifico 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.

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

Sistema De Ensefianza de Estructuras de Datos SEED 5

Grupo IDS - Reestubhcece/: Recupera el estado anterior de la

ventana. - YoveL Mueve la ventana mediante el uso de

las teclas de Flechas. -7umufia Ajusta el tamaho de la ventana

mediante el uso de las teclas de Flechas.

- kn/h/zuL Minimiza la ventana. - Mux/h/zuL Maximiza la ventana. - Ce//a/: Cierra la ventana y termina la instancia de esa

ventana. - SH/?Ch fi. Activa la lista de instancias de Program Manager (Task

List). - L/>h Activa la lista de instancias de SEED.

La última opción de la caja de menú de control, a1 activarse, presenta la caja de diálogo de "Lista de Temas" como se muestra en la figura 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.

I ' ' I

Figura 3. Caja de lista de temas.

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

Sistema De Ensefianza de Estructuras de Datos SEED 6

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

- Menú popup.

Un menú papupaparece 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.

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

Sistema De Ensefianza de Estru d iura .S de Da1 .os 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 /o femú de esfrucfum 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 /o yudu en her) que auxilia al usuario para trabajar con la pantalla de primer nivel.

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.

Sistema De Ensefianza de Estructuras de Datos SEED 8

Grupo IDS 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.

U

Figura 1 O. Botón de Listas Lineales.

Figura 11. Botón de Arboles.

Sistema De Ensefianza de Estructuras de Datos SEED 9

Grupo IDS

Figura 12. Botón de Colas de Prioridad.

. Figura 13. Botón de Listas.

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

Sistema De Ensefianza de Estructuras de Datos SEED 10

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 al que presenta la ventana de primer nivel, el tamallo es f i jo (no tiene 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 mismo procedimiento de selección descrito en la pantalla de primer nivel en los temas Posondo e/ foco enire boiones y ficog/endo un iema

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.

Sistema De Ensefianza de Estructuras de Datos SEED 1 1

Grupo IDS

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: editar de programas, lenguaje de programación LED, compilador y depurador.

Botón de Graficar.

Activa el ambiente de edición gráfico que nos permite dibujar y disehar 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.

Sistema De Ensefianza de Estructuras de Datos S E E D 12

Grupo IDS

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 dia 10. 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.

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. Version 3.0 1985 - 1990.

Sistema De Ensefianza de Est ruc tu ras de Datos SEED 13

I

Grupo IDS

Microsoft Corp. Microsoft Windows Software Oevelopment Kit. Gulde to Programing. M. Reference. Vols. I y II.

Schildt Herbert Programacion en Turbo C. Trad. Javier Correla. Ed. McGraw Hill. México 1989.

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 al 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, modificar 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 tipo 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:

Sistema De Ensefianza de Estructuras de Datos SEED 14

Entrada: El tema especifico que el usuario ha elegido.

Salida: Un archivo en disco o memoria.

Los módulos con los que se comunica son:

Grupo IDS

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

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 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 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 utilizarlas 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 figura 16 donde se muestran las 'funciones que realiza la opción Programar.

Sistema De Ensefianza de Estructuras de Datos SEED 15

I

Figura 16. Diagrama de bloques Programar.

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 figuras 19 y 20 respectivamente.

'r' Editar

Figura 18. Diagrama de bloques de Editar.

Sistema De Ensefianza de Estructuras de Datos SEED 16

Grupo IDS

Operadones sebre bloques.

I

Figura 19. Diagrama de operaciones sobre bloques.

Busquedas y Reemplazos

I Buscar

Reemplazo butqwdq i

R8petir Reemplazar Repetir

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.

Sistema De Ensefianza de Estructuras de Datos SEED 17

Grupo IDS

- Arreglos ( M x N ).

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

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

En una estructura gráfica, la inserción y eliminación de un nodo o la modificación de su información dependen de la posición del cursor sobre la pantalla. Cuando se modifica la información, por ejemplo, el 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 10 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 corno estructura de almacenamiento una tabla de dispersión en la cual 10

función de distribución depende de las coordenadas del nodo sobre la pantalla.

Sistema De Ensefianza de Estructuras de Datos SEED 18

1 5 2 4 6 8 Grupo IDS

La función de dispersión es:

División = Coord/Div F(dispersión) = 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.

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 lo tanto la manipulación que se hace de estos nodos durante su inserción, eliminación, etc varía según el tipo de estructura que se está representando.

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

jstruct REGNODO

int Tipo; int Numero;

int X; int Y;

int Listalnfos[ MAXINFO 1;

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.

Sistema De Ensefianza de Estructuras de Datos SEED 19

. -~

Grupo IDS

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 al siguiente nodo en la TablaX (1) .

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

Listaligas : Lista de nodos a los que apunta este nodo .

(1) Se utilizan 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.

Sistema De Ensefianza de Estructuras de Datos SEED 20

Grupo IDS ELlMlNAClON DE UN NODO

Una vez que un nodo ha sido marcado para ser ejecuta la siguiente secuencia de pasos :

- Se recuperan las coordenadas de pantalla coordenadas absolutas y con estas se localiza tabla.

eliminado de una gráfica, se

del nodo, se convierten a la dirección del nodo en la

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

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

- Para cada dirección de la lista 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.

Sistema De Ensefianza de Estructuras de Datos SEED 21

Grupo ID $ 5 2 4 6 8 ' 4

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 hacia otro lugar, se ejecuta 4

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.

- Se recupera la dirección del nodo al cuál pertenece la liga (nodo origen) asi 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 del 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

i) Reinserción

- Se toma una dirección coordenadas de ese nodo se original a la actual.

las tablas de dispersión.

almacenada en ListaNodosMarcados y a las les agrega el desplazamiento desde su posición

Sistema De Ensefianza de Estructuras de Datos SEED 22

Grupo IDS I

- De acuerdo a sus nuevas coordenadas, se evaluan en la función de dispersión, tanto para la 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.

MODlFlCAClON DE LA INFORMACION EN UN NODO

AI ser apuntado un nodo para modificarle su información :

- 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 modificar 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 Listallgas ( 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 lo 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.

Sistema De Enseñanza de Estructuras de Datos S E E D 23

,

Grupo IDS 4

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 icono que representa al cursor (dependiendo el nuevo ícono de Io herramienta utilizada en ese momento ), de otra manera se conserva el cursor estandar .

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

HERRNIL

HERRARREGLO

HERRMOVER

HERRBORRA

HERRAPUNT

Inserta un nodo.

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

Apunta una liga a nil.

Crea un arreglo.

Mueve todos los elementos de ListaNodoMarcados

Elimina un nodo.

Inserta un apuntador en la tabla.

COMPllADOR

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:

Sistema De Ensefianza de Estructuras de Datos SEED 24

DefT ipo

TipoPermitido

lndice

Grupo IDS

Programa : ROGRAMA IDENTIFICADOR DefMacros Importaciones DeclTipos DeclVariables 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 ' ; I ;

ListaNomDef : IDENTIFICADOR 1 ListaNomDef ' I ' IDENTIFICADOR ;

DeclTipos 1 TIPO ListaTipos ;

ListaTipos : DefTipo ' ; I

I ListaTipos DefTipo I ; ' ;

: IDENTIFICADOR I = ' TipoPermitido;

APUNTADOR Tipo I REGISTRO Campos FIN I ARREGLO '[I lndice '1' DE Tipo I MATRIZ ' [ I lndice I , ' lndice '1' DE Tipo I ENTERO;

: NUMERO I IDENTIFICADOR;

Sistema De Ensefianza de Estructuras de Datos SEED 25

~.

Campos

DeclVariables

Vars

ListaDef

Def

Proced

Funcion

ListParamFunc

Listparam

Params

Listaldent

Tipo

CuerpoProc

ListalnstProc

CuerpoFunc

M* mAPAlhPA jlBUBT[EA Grupo IDS

: Listaldent I : ' Tipo I ; '

I Campos Listaldent I : ' Tipo I ; ' ;

I VAR Vars;

: Listaldent I : ' Tipo I ; '

I Vars Listaldent I : ' Tipo I; ' ;

I ListaDef Def;

: Proced 1 Funcion;

: PROCEDIMIENTO IDENTIFICADOR DeclVariables ListaDef CuerpoProc;

. FUNCION IDENTIFICADOR ' ( I

ListPararnFunc I)' I : ' Tipo

CuerpoFunc; DeclTipos DeclVariables ListaDef

I Listparam;

: Params I Listparam I ; ' Params;

: VAR Listaldent I : ' Tipo I Listaldent I : ' Tipo;

: IDENTIFICADOR I Listaldent ' , I IDENTIFICADOR;

: IDENTIFICADOR I ENTERO;

: COMIENZA ListalnstProc FIN;

: InstProc I ; '

I ListaInstProc InstProc ' ; I ;

: COMIENZA ListalnstFunc FIN;

Sistema De Ensefianza de Estructuras de Datos SEED 26

ListalnstFunc : InstFunc ' ; I

1 ListalnstFunc InstFunc ' ; I ;

InstFunc : lnst I REGRESA '(I Exp I)'

I SI Condicion ENTONCES CuerpolnstFunc OtroFunc;

OtroFunc : OTRO CuerpolnstFunc I ;

InstProc : lnst 1 SI Condicion ENTONCES

CuerpolnstProcOtroProc;

OtroProc : OTRO CuerpolnstProc I ;

lnst

Asignacion

Condicion

ExpBooleana

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

HAZ CuerpolnstProc I PARA Asignacion HASTA Exp

I LEEENTERO '(I ldent I)'

1 ESCRIBECADENA I(' Exp I l l Exp I l l

CADENA I ) '

I ESCRIBEENTERO ' ( I Exp Exp I l '

Exp I ) ' ;

HAZ CuerpolnstProc

: ldent I= ' Exp;

: '(' ExpBooleana ' ) I

I NO ' ( I ExpBooleana I)' ;

: ' ( I ExpBooleana ')I Conect I(' ExpBooleana 'Y I I ( ' ExpBooleana ')' Conect NO '(I

ExpBooleana I ) '

ExpBooleana ')' 1 NO '(' ExpBooleana ')I Conect '(I

Sistema De Ensefianza de Estructuras de Datos SEED 27

Grupo IDS 1 NO '(' ExpBooleana I)' Conect NO ' ( I

I Comparacion;

Comparacion : Exp OperRel Exp;

ExpBooleana I)'

EXP : Termino I '-' Termino 1 Exp OperAd Termino I NULO ;

Termino : Factor I Termino OperMul Factor;

Factor

Invoca

ParamActuales

: ldent Invoca NUMERO ' ( I Exp I ) ' ;

: IDENTIFICADOR ' ( I ParamActuales I)';

ListaExp;

ListaExp : Exp 1 ListaExp I t ' Exp ;

OperRel : '<' 1 I > ,

I IGUALIGUAL I MAYOROIGUAL I MENOROIGUAL I I # ' ;

Conect

OperAd

OperMul

: '&' I '@I;

Sistema De Ensefianza de Estructuras de Datos SEED 28

Grupo IDS

CuerpolnstFunc : InstFunc 1 CuerpoFunc;

CuerpolnstProc : InstProc I Cuerpoproc;

ldent : IDENTIFICADOR Listald;

Listald : ' [ I Exp '1' Listald I * [ I Exp ',' Exp '1' Listald I l.' IDENTIFICADOR Listald 1 ' A ' Listald

I ;

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 desarrollo 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 tipo del mismo. Cuando se corrige el error es necesario recompilar el programa.

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 disefió 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.

Sistema De Enseñanza de Estructuras de Datos SEED 29

4.- Analizador sintáctico. Se escribió un 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.

Intimamente relacionado con SEED, manejaremos un mapeo en memoria, este mope0 se encuentra actualmente en fase de programación.Se 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

Sistema De Ensefianza de Estructuras de Datos SEED 30

GruJ @ d 6 8 reconocer el área de memoria asignada al 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.

De esta manera el usuario aprovecha las ventajas que brinda el sistema SEED, en la realización de programas y cuando lo 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 llamadas a procedimientos para guardar nombres de las funciones, de los parámetros, o bien llamadas a procedimientos para indentar el texto.

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;

Sistema De Ensefianza de Estructuras de Datos SEED 31

Grupo IDS

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 Ce1da:ApNodo) COMIENZA

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

FIN CreaNodot

COMIENZA I iNSERTA 1 PARA Ap= 1 HASTA 1 O POR -2 HAZ

COMIENZA CreaNodo(Elem,Celda);

ApAux = Lista; MIENTRAS NO(ApAux == NIL) HAZ COMIENZA ApAux = ApAux-.LigaDer; SI ( ApAux == NIL) ENTONCES COMIENZA

ApAuxA.ligaDer = Celda; APAux = Lista;

FIN; FIN;

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

FIN I Inserta 1

FUNCION Fin():ENTERO VAR

Sistema De Ensefianza de Estructuras de Datos SEED 32

Grupo IDS Resp : CHAR;

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

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

COMIENZA

REGRESA(O)

REGRESA(I );

OTRO COMIENZA

Ap = Ap t 1 ; FIN;

FIN

COMIENZA REPITE

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

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

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[1..5] OF Matriz; VAR

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

Sistema De Ensefianza de Estructuras de Datos SEED 33

Grupo IDS PROCEDURE Inserta (VAR C0nt:ApEntero;VAR Lista: ApNodo;

Elem: INTEGER); VAR

Celda, ApAux : ApNodo;

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

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

END CreaNodo ;

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

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

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

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

END ; END ; Celda-.Ligalzq := ApAux;

END ; ArrReg[3] := ArrReg[ 11; 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 (O );

Sistema De Ensefianza de Estructuras de Datos SEED 34

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

END ; END Fin ;

BEGIN REPEAT

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

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

Programa ejemplo escrito en LED:

PROGRAMA Lista TIPO

ApEntero = APUNTADOR ENTERO;

ApNodo = APUNTADOR Nodo;

ApCelda = APUNTADOR Celda;

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

FIN;

Celda = REGISTRO 1nfo:ENTERO; LigaApCelda;

FIN;

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

VAR Lista:ApNodo;

Grupo IDS

Sistema De Ensefianza de Estructuras de Datos SEED 35

Grupo IDS Cont:ApEntero; Mat:Matriz;

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

Celda,ApAux:ApNodo; Casil1a:ApCelda;

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

Reg:Matriz;

COMIENZA CREA(Ce1da); Celda ^.Info = Elem; Celda A.Ligalzq = NULO; Celda A.LigaDer = NULO; Reg.Campo1 = 2; Mat[ 1,3]= 2; ESCRlBEENTERO(5,7,(a*l O)); LIBERA(Celda);

FIN I CreaNodoi

COMIENZA { iNSERTA 1 PARA Ap= 1 HASTA 10 HAZ

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;

Celda^.Ligalzq = ApAux; FIN; ArrReg[J]=ArrReg[ 1 1; Suma = Suma t 1; CREA( Casilla); LEEENTERO(AP);

Sistema De Ensefianza de Estructuras de Datos SED 36

~~~

Grupo IDS FIN [ Inserta [

FUNCION Fin():ApNodo VAR

Resp : CHAR;

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

Lee(Resp); SI ( A*(Sumt l ) == varsum) ENTONCES COMIENZA

COMIENZA

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

REGRESA( I);

OTRO COMIENZA

Ap = Ap t 1 ; FIN;

FIN; FIN

COMIENZA REPITE

Inserta(Lista;5); 1nserta(Lista;7);

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

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 [

int Info; struct RegNodo *Ligalzq,*LigaDer;

[Nodo; typedef Nodo *ApNodo;

Sistema De Ensefianza de Estructuras de Datos SEED 37

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

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

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

I

1

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

1 Celda->Ligalzq=ApAux;

I

Grupo IDS typedef struct RegCelda I

int Info; struct RegCelda *Liga;

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

ApNodo Fin();

main() I

ApNodo Lista; ApEntero Cont; Matriz Mat;

do I

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

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

Inserta(ApNod0 **Lista,int Elem) I

ApNodo Celda,ApAux; ApCelda Casilla;

Sistema De Ensefianza de Estructuras de Datos SEED 38

-

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

I

CreaNodo(int Elem,ApNodo **Celda)

Matriz Reg;

(**Celda)=malloc(sizeof(struct RegNodo)); (**Celda)->Info=Elem; (**Celda)->Ligalzq=NULL; (**Celda)-->LigaDer=NULL; Reg.Campol=2; Mat[1][3]=2; gotoxy(5,7); itoa((a*1O),LugarI1O); puts(Lugar); free((**Celda));

I

ApNodo Fin()

CHAR Resp; I

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

I if(((Resp==s)ll(Resp==S))&&(Resp==N))

return(0); else

I return(1); Ap=Apt 1 ;

Sistema De Ensefianza de Estructuras de Datos S E E D 39

Asesor

Ing. Héctor Lozano Moreno

Coordinador de la Lic. en Ing. Electronica

Yudiel Perez Espejo.

Sistema De Ensefianza de Estructuras de Datos SEED 40