Grupo IDS Datos Generale: Nombre:OrestesFrancisco Matricula: 87329751. Lugarde Realización:UniversidadAutonomaMetropolitanaIztapalapa. PeriododeRealización: 31 Julio 1994 - 31 Enero - 1992 /" Unidad:Iztapalapa. Division:CienciasBásicaseIngenieria. /Licenciatura:lngenleria Elecbnica. AreadeConcentracion:Computacibn. Nombredelproyect85EEDfSistemapara Responsable: Ensefianza de Estructuras de Datos) Ing.HéctorLozanoMoreno Introduccion. El sistemapara la ensefianzade las estructuras de datos SEED es unproyecto las herramientascomputacionalesmásmodernaspara quepretendeutilizar lograr laensefianza de estadisciplina de la computación. Sistema De Ensefianza de Estructuras de Datos SEED 2 . . . 152468 Reporte de proyecto terminal. lntriago y Loyo Orestes Francisco Marzo I 993. Grupo IDS En éI se integra el uso de interfasesgráficas,programaciónorientada objetos sistemas y expertos, con la finalidad de crear una poderosa herramienta tanto para alumnos como para profesores. a a nivel teórico,un Para los alumnos,elsistemacontendráuncursocompleto graficador de estructuras de datos que permitirásuobservaciónycomprensión conceptual, un lenguaje de programación en espafiol que permitir6 crear los temas aprendidos, un ambiente integrado de programas basados en desarrollo programas de que permitirá escribirlos, compilarlos, ligarlos, depurarlos y ejecutarlos paso a paso para observar su funcionamiento, observargraficamente las estructuras al mismotiempo quesevancreando, vergraficamente el manejode la memoria,ademásdecontarconunsistema experto queevalúesus programasy explique los errores,sugiriendoincluso posiblessoluciones. c c f Ij t Para los profesores,elsistemacontaráconunmódulodeevualuación de y proponer calificaciones de alumnos que permitirá aplicarles exámenes mismoprofesor, así como acuerdo a criteriosestablecidospreviamenteporel llevarel controladministrativo y estadístico de las calificacionesdelgrupo. Objetivos. Generales. al alumno,el a1 profesor en la mi el nivel académico de la l. Aportarunaherramientadidácticaquefacilite,engranmedida aprendizajedeestructurasdedatosyquesirvadeapoyo preparación y evaluacióndelcurso,mejorando institución. 2. Que sirva como una motivaciónparainiciar el desarrollo de software semejante. Especificos. los conocimientosadquiridos a lolargo de nuestraformaciónacadémica,con el fin de reafirmarlos y constatarsu utilidad en la creación de unproyectomayor. l. Aplicar,de la maneramascompleta, 2. Aprender a trabajar enequipo,cumpliendoresponsablemente asignadas, paraunmejorresultado con las tareas delproyecto. Sistema De Ensefianza de Estructuras deDatos SEED 3 Grupo IDS 3. Usar ymanejaradecuadamentenuevasherramientasquefacilitanyhacen máspoderosa la realizacióndelsistema. 4. Adquirirexperienciaen la realizacióndeunainvestigaciónformal. 5. Participaractivamente en eldesarrolloyadministración el cualcolaboraungruponumeroso de unproyecto en depersonas. MetodologiaUtilizada. Para la realizacionde SEED se conjuntoun equipode trabajo de 17 integrantes. Se realizo las actividades a realizarporelequipoy se dividioel mismo en unacalendarizacibnde subequiposdetrabajopararealizar cadauno de los modulosquedebianderealizarse. Los integrantesentregaron un reportedeactividadessemanales proyecto.Lasreuniones delequipoparaelanalisisyseguimientodel cadasemanacorrespondiendo los sabadosdichareunion. a lo largo de la realizaciondel proyecto serealizaron Material y recursos. SDK (SoftwareDevelopment Kit) Quick C c tt SQL(XQL) YACC LEX ActividadesRealizadas. El trabajorealizadopor el prestador a lo largodelperiodo es larealizacionde la interfaz la descripciondedichainterfaz, grafica. La documentacion que a continuacion sepresentael la programacion serealizoenlenguaje C con la herrmamientadenominada SDK (Software Development KIT de Microsoft) y el OptmizingComplierVersion 6.0. INTERFAZGRAFICA. Dada la posiciónqueocupa la interfazgráfica en SEED, primeraimpresión que se tienecon elsistema, es importanteofrecer unadimensióndelibertad y facilidad deuso. El objetivodepresentarunainterfazsumamenteintuitiva medianteelementosgráficos,creemos se hacumplido. Sistema De Ensefianza de Estructuras de Datos SEED 4 Básicamente se divide en dos niveles queson:Pantalla dePrimer Pantallade Segundo Nivel. Ambas pantallasestánconstituidasporgrupos botonesparaseleccionar las opciones. -PantalladePrimer Nivel y de Nivel. Es el punto de entrada al sistema y tienecomoobjetivopermitir al usuario escoger el temaespecificocon el cual se desea trabajar(tema deestudio), estomedianteelmenúprincipal de los temas de estructuras dedatos. -PantalladeSegundo Nivel. Estapantallapermite seleccionar la herramientacon la cuál seestudiaráel tema seleccionado. Las herramientas son: TDA, PROGRAMAR, GRAFICAR y EXAMINAR. En cadapantallasepresentaunanálisisteóricosobre con solo presionarelbotóncentral. las estructuras de datos Elementosdeunaventana. la interfazgráficayengeneralde SEED se presentan En cadaventanade las elementos en comúnpara el manejo de las mismas,sinembargonotodas ventanasusantodos los elementos. A continuación se describen éstos: Cajadecontrol demenú. AI activarestacaja las opcionesqueaparecen sonsimilares a cualquier otra aplicaciónde Windows.Ver figura 2. - Figura 2. Caja de control de menú de unaventana SEED. Sistema De EnsefianzadeEstructurasdeDatos SEED 5 Grupo IDS - Reestubhcece/: - YoveL -7umufia - kn/h/zuL - Mux/h/zuL - Ce//a/: - SH/?Ch fi. ventana. Recupera el estado anterior de la Mueve la ventana uso mediante el las teclasdeFlechas. de tamaho elAjusta de la ventana mediante eluso de las teclas de Flechas. Minimiza la ventana. Maximiza la ventana. Cierra la ventana y termina la instanciaesade ventana. Activa la lista de instancias de Program Manager (Task List). Activa la lista de instancias de SEED. - L/>h La últimaopción de la caja de menú de control, a1 activarse,presenta la caja de diálogode"Lista de Temas" como se muestra en la figura 3. La caja las instanciasabiertas de SEED y permiterealizar "ListadeTemas"muestra operacionessobre las mismas.Pasarelfoco o terminarunainstanciapor ejemplo. 'I I' Figura 3. Caja de lista de temas. - Botones. Un botón se compone deunaimagengráfica (ícono), unmarco y untexto. Los íconosrepresentande la mejormanera la opciónaseleccionar. El marco da elefectotridimensional al botón al serpresionado y el texto especificael tema, (Figura 4). Sistema De Ensefianza de Estructuras de Datos SEED 6 Grupo IDS Figura 4. Ejemplo de unbotón(Botón - de ayuda). Menú popup. Un menúpapupaparece en la partesuperior a seleccionarapareceresaltadaencolorinverso. tieneasociadaunateclarápida. de unbotónactivado. La opción Cada unade las opciones Estos menús pueden aparecer en cascada cuando y esto sucede puede notarse al final de la opciónunacabezadeflechaapuntandohaciaafuerade la ventana. A continuación se muestraunmenú popup. Figura 5. Ejemplo de unmenú popup. Trabajando con la pantalladePrimer nivel. Con la ventana de primer nivel se puedeseleccionar trabajo. Aparececuando se inicia SEED. En la siguientefigura nivel. se presentaelaspectoquetiene untemaespecifico de la pantalla de primer Sistema De Ensefianza de Estrudiura.S de Da1.os SEED 7 .. Grupo IDS Figura 6. Ventana principal de SEED. Descripciónfuncionaldesusbotones. AI seleccionar botón el 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óncentral de la pantalla. Botón deayuda Este botónactiva la ventana de ayuda en linea(verel tema Usundo /o yudu en her) queauxilia al usuarioparatrabajarcon la pantalla de primer nivel. Figura 8. Botón de Ayuda. Botón desalida Activa la caja dediálogoparaconfirmar Puede cancelar y continuar trabajando. la salidade SEED. Sistema De EnsefianzadeEstructurasdeDatos SEED 8 Grupo IDS Figura 9. Botón de Salida. Botones de Tema Los botonesque se describen a continuacióntienen la función deescogerun tema específico de estructuras de datos. En cadafigura se presentaelbotón y unadescripciónesquemática-en forma deárbolde los temas que se puedenescoger al activarcadauno de ellos. U Figura 1 O. Botón de Listas Lineales. Figura 11. Botón de Arboles. Sistema De Ensefianza de Estructuras de DatosSEED 9 Grupo IDS Figura 12. Botón de Colas dePrioridad. . Figura 13. Botón de Listas. Figura 14. Botón de Búsquedaen Tablas. Sistema De EnsefianzadeEstructurasdeDatos SEED 10 Figura 15. Botón de Grafos. Trabajando con la pantalla de Segundo nivel. La pantalla de segundonivel se activadespuésdehaberseleccionado un tema específico de estructuras de datos en la pantalla de primer nivel. Esta pantallapermite la selección de cualquier herramientacon quesedesea estudiareltema. A continuación se muestra el aspecto de estaventana. es muy similar al que y presenta la ventana de primer nivel, el tamallo es fijo (notieneborde) Para seleccionarcualquierade los botonesde siempreaparecemaximizada. ésta pantalla, ya sea con el ratón o el teclado sigue se el mismo la pantalladeprimernivelen los procedimiento deseleccióndescritoen temas Posondo e/ foco enire boionesy ficog/endo un iema Como puede notarse el aspecto deestaventana El titulo de la ventanacorresponde al temaespecíficoseleccionadoen elnivel anterior. El manejo de ésta ventana se sigue de la misma filosofía empleadapara la ventanadeprimer nivel. Botones de Tema. Los botones descritos a continuación, tienen herramienta de trabajo. AI activarcualquieradeestosbotonespasamos herramienta. la función de escoger una alambienteespecifico decada Botón de TDA. Sistema De Ensefianzade Estructuras de DatosSEED 11 Grupo IDS Esta herramientatiene la función devisualizarelcódigoqueimplementa TDA del tema elegido.Igualmentetiene la posibilidaddeejecutarloen formasdiferentes(ejecución encódigo,gráfico y memoria). al sus tres - BotóndeProgramar. Activa ambiente el de programación que contiene: editar lenguajedeprogramación LED, compilador y depurador. de programas, Botón deGraficar. y disehar las Activael ambiente de edicióngráficoquenospermitedibujar estructuras de datos que soporta el sistema SEED. Botón de Examinar. Esta herramientaactivaelambiente querealizaexámenes al usuario para evaluar surendimiento. Sistema De EnsefianzadeEstructurasdeDatos SEED 12 Grupo IDS Resultaoos,Conclusiones y Metas Alcanzadas. Debido a la notoriacarenciaderecursosdisponiblespara la realizacióndeun proyecto de la complejidad de SEED, la fecha de terminación se postergó, Io cualconsideramosqueeldesarrollodelproyecto ha satisfecho pesea nuestrasmetasypropósitosfundamentales. Hubiesemosquerido contarconun poco deapoyo de parte deláreaparahaberobtenidoresultadosunpocomás espectaculares.Dadoque es imposibleque 17 personastrabajenen una sola computadoraconaccesorestringido a las áreasde trabajo, el proyecto debió dividirse en dosetapas, la primera quedenominamosVersión 1.0 yque estará terminada eldia10.deAgostode 1992, y la Versión 2.0 quedeberá arrancar al entusiasmoycolaboracióndetodos los inmediatamente después,gracias participantes. Los módulosqueseestándesarrollandoenestemomento son: lnterfazgráfica. Editor de textos. Editorgráfico. Traductor a C. Traductor a Pascal. Traductor a Modula. Compilador. Los modulosquefaltanpordesarrollarse son: Interprete. Depurador. Administrador de bases de datos. Recomendaciones. los ParaFuturasversion es necesariocontarconmayorapoyoyaque resultados se obtinenconbaseenlosrecursos a los cualessetiene acceso. Bibliografia. Microsoft Corp. Microsoft Windows Users Guide. Version 3.0 1985 - 1990. Sistema De Ensefianza de Estructuras de Datos SEED 13 I Grupo IDS Microsoft Corp. Microsoft Windows SoftwareOevelopmentKit. Gulde to Programing. M. Reference. Vols. I y II. SchildtHerbertProgramacionenTurbo 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 unmódulo que formaparte del sistema de SEED, el cual es empleadoparamanipular y creararchivos ASCII. La pantallacorrespondiente al EditordeTextos es la siguiente: Dentrodeleditorsepuedenrealizarfuncionessobrecaracteres,cadenas líneas completas,talescomoinsertar,borrar,reemplazar,modificar búsquedas;empleando los comandos del editordetextosde Los archivos a ser editados pueden ser cualquier otro tipo de texto. SEED. y y hacer programas fuente (aplicación) ó Las operaciones sobre archivos son las de crear, cargar un archivo del otro nombre. directorio,salvar,salvarunacopiadelarchivocon Las entradas y salidasdelEditor son: Sistema De Ensefianza de Estructuras de Datos SEED 14 Grupo IDS Entrada: El temaespecifico que elusuario ha elegido. Salida: Unarchivoendisco o memoria. Los móduloscon los que se comunica son: Módulo - Módulo - Módulo - Módulo - decompilador. de traductor. de Ejecución. de lnterfaz gráfica. Ya queeleditor de textosformaparte del sistemaintegral de Programación y ejecutarprogramas del tema en el que el usuariopuedeescribir,compilar elegido. En general el programa del editor de textos se divide en procedimientos que se encargan de procesar mensajes inicializar e funciones, funciones que definen la clasede la ventana,funcionesque se encargandecrearventanas de ventanas,móduloparainicializar (padre e hijo),módulosparaelmanejo menú, funciones que invocan cajas de diálogo, rutinas para manejo de impresora, rutinas mensajes de de error y procedimientos que son invocados,pormedio de las funcionesdeprocesamientodemensajes,para realizarunaoperaciónespecífica. Para la elaboracióndeestemódulo queelproblemainvolucraotros módulos. se hizousodeprogramaciónmodular, de tal manera que se puede dividir ya por a caboprogramaciónorientada a objetos (OOP), pormedio Tambiénsellevó de las funcionesde SDK, puéspara el manejo de la pantalla de edición y otras funcionesmás,resultatransparente al programador la maneracomo guarda la informaciónpara la manipulacióndeestosdatos,dejandolaopción deutilizarlascomoobjetos. la cualcontiene Paracrear la pantallaProgramar seabreunaventanapadre, diferentes las opciones del menú principal (Archivos, Editar, Compilar, Ejecutar,etc.) y parael texto enediciónsehaceusodeunaventanahijo. El esquemacompleto de la funciónProgramar se puedeveren la figura 16 donde se muestran las 'funciones que realiza la opciónProgramar. Sistema De Ensefianza de Estructuras de Datos SEED 15 I Figura 16. Diagrama de bloques Programar. solo se contemplan las funciones de Archivos y Editar, las En el editor operaciones que realiza la opción de Archivossepuedenverenel diagrama de la figura 17, así como las operaciones de Editar se muestran enel diagrama de la figura 18. Figura 17. Diagramadebloquesde Archivos. La opcióndeEditar se divide en dos partes,unaqueserefiere a operaciones sobrebloquesde texto y otra a la debúsquedas y reemplazos(figura 18) las opciones de cada una se muestran en las figuras 19 y 20 respectivamente. Editar 'r' Figura 18. DiagramadebloquesdeEditar. Sistema De EnsefianzadeEstructurasdeDatos SEED 16 Grupo IDS Operadones sebre bloques. I Figura 19. Diagramadeoperacionessobrebloques. Busquedas y Reemplazos Buscar i I butqwdq Figura20.Diagrama R8petir Reemplazar Repetir Reemplazo de búsquedas y reemplazos. En generalelprograma deleditor de textos sedivideen procedimientos que se encargan de procesar mensajes inicializar e funciones, funciones que definen la clase de la ventana,funciones que seencargandecrearventanas (padre ehijo),módulos para el manejo deventanas,móduloparainicializar menú, funciones que invocan cajas de diálogo, rutinas para manejo de y procedimientosquesoninvocados, impresora,rutinas de mensajesdeerror pormedio de las funciones de procesamientodemensajes,pararealizaruna operaciónespecifica. EDITOR GRAFICO El editorgráfico nos permite unarepresentaciónvisualdeestructuras de datos - Grafos ( dirigidos y nodirigidos ). - Arboles ( binarios, B, AVL, etc. ). - Tablas de dispersión. Sistema De Ensefianza deEstructurasdeDatos SEED 17 talescomo : Grupo IDS - Arreglos ( M x N ). Creación . Modificación ( inserciónyeliminacióndenodos - Almacenamientoyrecuperaciónenarchivo. - Alteración de la información deuna estructura. - Destrucción. - - ). A continuación se muestra la pantallacorrespondiente al EditorGráfico. En una estructura gráfica, la inserción y eliminación de un nodo o la modificación de suinformación dependende la posicióndelcursorsobre la pantalla.Cuando se modifica la información,porejemplo,elcursor se ubica las sobre elnodocuyainformaciónserácambiada,elprogramarecupera coordenadasdelcursor y enbase a esascoordenadasdeberálocalizar al nodo en memoria y cambiarsucampo de información. De 10 anterior se desprende que el almacenamientode los nodosse debe la pantalla; es porestarazónqueseutiliza realizarenbase a suposiciónen la cual 10 cornoestructura dealmacenamiento una tabla dedispersiónen función de distribución depende de las coordenadas del nodo sobre la pantalla. Sistema De EnsefianzadeEstructurasdeDatos SEED 18 152468 Grupo IDS La función dedispersió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álva a serinsertado el nodo (X para TablaX y para TablaY). Div : Anchocanalpara la TablaX, AltoCanal para TablaY. DESCRIPCION DE LA CLASE DE NODOS UTILIZADA POR LATABLA Los nodos que soninsertadosenesta tabla puedenserdegrafos,árboles, apuntadores o celdas de un arreglo,por lo tanto la manipulaciónquesehace deestosnodosdurantesuinserción,eliminación,etcvaríasegúneltipode estructura que se estárepresentando. El tipo de los nodosmanejadosen la tabla es REGNODO : jstruct REGNODO int Tipo; intNumero; int X; int Y; int Listalnfos[ MAXINFO 1; struct REGPARIENTES *ApANodo; struct REGNODO *SigX, *SigY, *listaligas[LIMAP]; 1; Tipo : Define el tipo de nodoqueseestárepresentando y puedeser : - apuntador - árbol - grafo celda Numero : Cuando se utilizan arreglos, este manera secuencia1 los nodos. camposirveparaordenar Sistema De EnsefianzadeEstructurasde de Datos SEED 19 -~ . Grupo IDS X : Coordenada X ( absoluta ) delnodo . Y : Coordenada Y ( absoluta ) delnodo . Listalnfos : Información que contieneelnodo . ApANodo : Lista de nodosque apuntan hacíaestenodo SigX : Apuntador al siguientenodo en la TablaX (1) SigY : Apuntador al siguientenodoen . la TablaY (1) . Listaligas : Lista de nodos a los que apuntaestenodo . (1) Se utilizan dos tablasdedispersión ( TablaX y TablaY ) parafacilitar scrollsobre una gráfica ( Ver sección de scroll de la pantallaenestemanual el ). INSERCION DE UN NODO La pantalla es divididapormcanalesverticales y por nhorizontales tal y como se muestra en la figura 2; elanchodecadacanalestadadopor las variablesglobales GLBAnchoCanal para los canalesverticales y GLBAltoCanal para los horizontales. Un nodo sólo puedeser insertado enaquellasregiones de la pantalladonde se intersectanuncanalimparvertical y uncanalimparhorizontal,quedando la inserción de los nodos.la cualquier otra zona de la pantallainhibidapara razón de esto es evitar que usuario el pueda colocar nodos juntos o encimados y construya de estemodoestructuras de datos no válidas. Una vez que seapunta a algúnlugaren la pantalladonde se desea insertar las coordenadasdepantalladonde se desea insertar el un nodo,serecuperan nodo y se lleva a cabo el siguienteproceso : Se convierten las coordenadas de pantallaobtenidas ( coordenadasrelativas ) a coordenadasabsolutas. - El programaverifica si ese lugar es válido. - Se realizaunabúsquedaenunade las tablasparaaveriguar si el no do aúnnohasidoinsertado. - Si ellugar es válidoyelnodoaún no existe,éste es insertadotanto 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 unnodohasidomarcadoparaser : ejecuta la siguientesecuenciadepasos eliminadodeunagráfica, se del nodo, se convierten a la se localiza la direccióndelnodoen - Se recuperan las coordenadas de pantalla coordenadasabsolutas tabla. y conestas - Se almacena la dirección del nodoenunavariableauxiliar, tanto de la TablaX como de la TablaY. - Todas las ligasdel campo Listaligasdelnodo y éste se elimina sonapuntadas a NULL. - Para cadadirección de la lista ApANodo ( la cualcontiene las direcciones ese nodo),se recorre el campo de los nodosdelagráficaqueapuntanhacía y la liga que apunta al nodo que va a ser borrado Listaligasdeesadirección se reapunta a BASURA. - Se libera la variableauxiliar. SCROLL DE LA PANTALLA La justificación delusode dos tablasdedispersiónaparececuando se hace algúnscrollsobre el contenido de la pantalla.Cuando se pulsaelmouseentre el thumb ( selector ) y algunade las flechas de una barra descroll, la gráfica la pantalla se mueve una página, en dirección que se encuentra sobre contraria al movimiento del thumb sobre la barra. Para realizar este corrimientosobre la gráfica, supongase que se trata de unscroll en la direccionhorizontal hacía la izquierda - Se le restaundesplazamientodellargo XRel (1). de la pantalla a la coordenada XRel, se localiza la cubeta que corresponde coordenadaen TablaY, y se leasigna a cubetainicial . - Con esta nueva a esta A partir de cubetainicial y hasta el númeromáximo decubetas que cabenen la pantalla, se redibuja la TablaY. la barravertical, elanterior Cuandoelrequerimiento de scroll sehacesobre - procedimiento se ejecutasobre la TablaY. Cuandoel mouse es pulsadosobre se realizauncorrimientosobre la pantalla utilizando la función ScrollWindow() del SDK y se dibujan las dos primeras cubetas de la tabla del extremo de la pantalladonde se hizoelscroll. la flechasdeunabarradescroll, Sistema De EnsefianzadeEstructurasde Datos SEED 21 $52468 Grupo ID ' 4 MOVIMIENTODE LAS LIGAS AI crearse elnodo,todassusligassonapuntadas selecciona una liga de nodo unpara ser apuntada hacia elsiguienteprocedimiento: a BASURA. Cuandose otro lugar, se ejecuta - Se recuperan las coordenadas de pantalla de la liga a mover se y convierten a coordenadasabsolutas. - Con estascoordenadasabsolutas se realizaunainserción. - Se recupera la dirección del nodo al cuálpertenece la liga(nodoorigen)asi como el número deligaque fueseleccionado (1 - 4,N.liga). Una vez apuntada la ligahacía nodo(nododestino). - otro nodo, se recupera la direcciónde - Finalmente,delcampo Listaligasdelnodoorigen,seselecciona Listaligas[N.liga]yseapunta a la direccióndelnododestino. ese elapuntador MOVIMIENTO DE'LOSNODOS El proceso seguidoparael movimiento de los nodossobre la pantalla es : - Se marcantodos los nodosquevan Cuando nodo un ListaNodosMarcados. - es a sermovidos. marcado, almacena se dirección su en - Cuando se realizaelmovimiento,todos enListaNodosMarcadossonreinsertadosen su nuevaposiciónsobre la pantalla. los nodoscuyasdirecciones estan las tablas de dispersiónenbase a - Por último, sonredibujadas las tablas dedispersión. i) Reinserción - Se toma una dirección coordenadas de ese nodose original a la actual. almacenada en ListaNodosMarcados y les agregaeldesplazamientodesdesuposición Sistema De EnsefianzadeEstructurasdeDatos a las SEED 22 4 Grupo IDS la función de - De acuerdo a sus nuevas coordenadas, se evaluan en la TablaY, de estemodo dispersión, tanto para la TablaX comopara obtienensusnuevas CubetaX y CubetaY para ese nodo. - Utilizando las nuevascubetas,elnodo se es insertadoenambastablas. Utilizando las cubetas de la posición original, el nodo ambastablas. es eliminadode - - El mismoprocesosesiguecontodas taNodosMarcados. Lis las direccionesalmacenadasen MODlFlCAClON DE LA INFORMACION EN UN NODO AI serapuntado unnodoparamodificarlesuinformación : a la - Se recuperan las coordenadas de pantalla del nodo, se convierten coordenadasabsolutas tabla. y conestas selocaliza la direccióndelnodoen - Se despliega la caja de info. - Obtenida la direcciónde ese nodo, a sucampoinfo valorobtenidodesde la caja de modificar info. se leasignaelnuevo ALMACENAMIENTO Y RECUPERACION DE ESTRUCTURAS DE DATOS DESDE ARCHIVOS Paraalmacenar una estructura en un archivo,serealiza un recorridopor la TablaX y los campos decadanodo que contienen la clase a la quepertenece ( árbol,grafo,arreglo,etc.) así comosuinformación se almacenan enuna variabletemporal del tipoficha. Por otro lado, a partir deel campoListallgas ( Ver Descripciónde la clase de nodosusados por la tabla se recuperan las coordenadas de los nodos a los que apuntaestenodo y sonalmacenados enel campo lista de la variableauxiliar. Una vez realizado lo anterior,sealmacenalavariableauxiliarenelarchivo. I' 'I) a partir de un archivo,serealizandoslecturas Pararecuperarunaestructura al archivo, En la primerlectura se lee la información de cadanodoenuna variabledeltipoficha y con los camposNúmero, Tipo, X, Y, Listalnfos se crea elnodoy es insertado en la Tabla. Posteriormente,durante la segundalectura, mediante X y Y se localiza al nodoen la tabla y enbase a las coordenadas la variableauxiliar,se construye la lista de contenidasenelcampoListade nodos a los que apuntaelnodolocalizado. Sistema De EnseñanzadeEstructurasdeDatos SEED 23 I , Grupo IDS MANEJODELMOUSE la pantalla, las coordenadas x,y desu Cuandoel mouse es movidosobre Las coordenadassonprocesadaspara posiciónsonregresadasenIParam. es así, cambiaelicono averiguar si el cursorestá enunaposiciónválida,si que representa al cursor (dependiendo nuevo el ícono de Io herramienta . utilizadaen ese momento ), de otra manera seconservaelcursorestandar Si el cursorestásobre unaposiciónválidayelbotónizquierdo del mouse es pulsado, se verifica que el tipo delnodoestédefinido.Cuandoelbotón izquierdo es soltado de nuevo se ejecutanalgunas de las siguientesacciones dependiendo de NumHerramieta : NumHerramienta HERNODO Insertaun nodo. HERRINFO Presenta la caja dediálogopara info y modifica la info del nodo apuntado. HERRNIL Apuntaunaliga HERRARREGLO a nil. Crea un arreglo. HERRMOVER Mueve todos los elementosde ListaNodoMarcados HERRBORRA Elimina un nodo. HERRAPUNT Inserta un apuntadoren la tabla. COMPllADOR Este módulo es elencargado de compilar los programasescritos enlenguaje LED (Lenguaje de Estructura de Datos), cuya gramática se muestra las reglas de producción los símbolos terminalesestán posteriormente;en terminales comienzan con escritos con mayúsculas mientras que los no mayúscula. La gramática es la siguiente: Sistema De EnsefianzadeEstructurasdeDatos SEED 24 4 Grupo IDS Programa IDENTIFICADOR : ROGRAMA DefMacros Importaciones DeclTipos DeclVariablesListaDefCuerpoProc; DefMacros : MACRO ListaMacros; ListaMacros : Macro I ListaMacrosMacro I;' Macro ; I;' : IDENTIFICADOR Parametros Parametros ListaParamMacro Importaciones lmportacion ListaNomDef I (' ListaParamMacro : IDENTIFICADOR I ListaParamMacro ')I; IDENTIFICADOR; IDENTIFICADOR : DE IMPORTA ListaNomDef : IDENTIFICADOR 1 ListaNomDef 'I' ; ';I IDENTIFICADOR ; 1 TIPO ListaTipos ; ListaTipos : TipoPermitido Exp; 1 ImportacionesImportacion; DeclTipos DefTipo I=' DefTipo ListaTipos DefTipo ';I I : IDENTIFICADOR I;' I=' ; TipoPermitido; APUNTADOR Tipo I REGISTRO Campos FIN I ARREGLO lndice '1' DE Tipo I MATRIZ lndice lndice '1' DE Tipo I ENTERO; '[I '[I lndice I,' : NUMERO IDENTIFICADOR; I Sistema De Ensefianza de EstructurasdeDatos ~. SEED 25 M* mAPAlhPA jlBUBT[EA Grupo IDS : Listaldent Tipo I CamposListaldent Campos I:' DeclVariables I;' I:' Tipo I VAR Vars; : Listaldent Tipo I Vars Listaldent Tipo Vars I:' I;' I:' ListaDef I;'; I ListaDef I;' ; Def; : Proced Def 1 Funcion; Proced Funcion ListParamFunc Listparam Params Listaldent : PROCEDIMIENTOIDENTIFICADOR DeclVariables ListaDefCuerpoProc; . FUNCIONIDENTIFICADOR ListPararnFunc Tipo DeclTipos DeclVariables ListaDef CuerpoFunc; '(I I)' I:' I;' Params; I Listparam; : Params I Listparam : VAR Listaldent Tipo Tipo; I Listaldent I:' I:' : IDENTIFICADOR I Listaldent IDENTIFICADOR; ',I Tipo : IDENTIFICADOR I ENTERO; CuerpoProc : COMIENZA ListalnstProc FIN; ListalnstProc : InstProc I ListaInstProcInstProc CuerpoFunc I;' ';I ; : COMIENZA ListalnstFunc FIN; Sistema De Ensefianza de Estructuras de Datos SEED 26 ListalnstFunc InstFunc : InstFunc 1 ListalnstFuncInstFunc ';I ';I ; : lnst I REGRESA Exp I SI Condicion ENTONCES CuerpolnstFunc OtroFunc; '(I I)' OtroFunc : OTRO CuerpolnstFunc InstProc 1 SI Condicion ENTONCES I; : lnst CuerpolnstProcOtroProc; : OTRO CuerpolnstProc OtroProc I; : 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 HAZ CuerpolnstProc I LEEENTERO ldent 1 ESCRIBECADENA Exp Exp CADENA I ESCRIBEENTERO Exp Exp Exp lnst '(I I)' Ill I(' Ill I)' '(I Il' I)'; : ldent Asignacion Exp; : '(' ExpBooleana ExpBooleana Condicion ExpBooleana I=' I NO : '(I ')I '(I ExpBooleana I)'; ')I Conect I(' ExpBooleana Y ' I ExpBooleana ')' Conect NO ExpBooleana 1 NO '(' ExpBooleana Conect ExpBooleana ')' I(' '(I I)' ')I '(I Sistema De EnsefianzadeEstructurasdeDatos SEED 27 Grupo IDS 1 NO '(' ExpBooleana ExpBooleana I Comparacion; I)' Conect NO '(I I)' Comparacion : Exp OperRel Exp; EXP : Termino I '-' Termino 1 Exp OperAd Termino I NULO ; Termino I Termino OperMul Factor; : Factor Factor : ldent Invoca NUMERO Exp '(I : IDENTIFICADOR Invoca ParamActuales ListaExp OperRel I)'; '(I ParamActuales I)'; ListaExp; : Exp 1 ListaExp It' Exp ; : '<' 1 I IGUALIGUAL I MAYOROIGUAL I MENOROIGUAL I I>, I#'; Conect I : '&' '@I; OperAd OperMul Sistema De EnsefianzadeEstructurasdeDatos SEED 28 Grupo IDS CuerpolnstFunc CuerpolnstProc : InstFunc 1 CuerpoFunc; : InstProc I Cuerpoproc; ldent : IDENTIFICADOR Listald; Listald : I; Comosepuedeobservaren '[I Exp I I 1 '1' Listald *[I l.' 'A' Exp ',' Exp '1' Listald IDENTIFICADOR Listald Listald la gramática, LED es unlenguajeestructurado. El Único tipobásico de LED es elentero y los tiposcompuestos son:Arreglos, Matrices,Registros y Apuntadores. Una de las característicasdistintivas de LED respecto a los lenguajescomunes La ventajaprincipal de es que no se permite eluso de variablesglobales. esto, es que el programador se adiestreenelmanejodeparámetros,tanto porvalorcomoporreferencia, sinperdergeneralidad en eldesarrollo de programas y evitarelusoinadecuadodevariablesglobales. Entre las facilidadesque LED ofrece se encuentra la definiciónde TIPOS de acuerdo a los requerimentosdelprograma. MACROS y los programas, la compilación se En cuanto a1 tratamiento deerroresen detienecuandoencuentrael primererror,indicandoeltipodelmismo.Cuando se corrige el error es necesariorecompilarelprograma. Para sudesarrolloelcompiladorfuedivididoen las siguientesetapas: 1 .- Análisis y Diseño de la Gramática.Duranteestaetapasedisefió gramática de LED de acuerdo a los objetivosestablecidospara 2.- Preprocesador. Su proposito es realizar macrodefiniciones y la deteccióndeerroreslexicográficos. seuso LEX y YACC. la SEED. la substitución de Para SU desarrollo Sistema De EnseñanzadeEstructurasdeDatos SEED 29 4.- Analizadorsintáctico. Se escribióunarchivodeespecificacióndeentrada para YACC deacuerdo a la gramática de LED, paragenerarelanalizador sintáctico delcompilador. 5.- Analizador semántico. Se realizó mediante la adición acciones de semánticas al archivo de especificación para YACC, por tratarse de un compiladordirigidoporsintaxis. En estaetapa se realizó la definiciónde las estructuras dedatos,requeridaspara la tabla desímbolos la cualconsta así también se llevó a cabo la básicamente de pilas listas y generales, definición de las funcionesparaelmanejo de dichatabla. 6.- Generación de código. Esta es la etapafinaldelcompilador y aquí se lleva a cabo la generacióndecódigointermedio de tresdireccionesmediante la adicióndeaccionessemánticas al archivodeespecificaciónpara YACC. INTERPRETE SEED cuentaconunintérprete, análisisyprogramación. elcual, actualmente seencuentraenfasede Con relación a la fase deanálisis, se estáestudiandoelcódigointermedio, y conbase enéste, se elaborará la estructura de datoscorrespondiente. La fase de programación ha cubiertohasta el momento la realización de las funcionescorrespondientespara la ejecución de algunas de las intrucciones existentesenelprograma que seestéanalizando. y Se tiene pensado terminar el intérprete en las próximas dos semanas posteriormente sepasará a la elaboracióndesurespectivomanualtécnico. Intimamenterelacionadocon SEED, manejaremosunmapeo en memoria,este mope0 seencuentraactualmenteenfase de programación.Semanejapara SU efecto, unaestructura de "lista deregistros", la cualrepresentará las diversas localidades existentes en memoria y, cuyo contenido será valores y de las variables dinámicas que se precisamente los nombres emplearánenelprograma. Dicho mapeo se controlará desde: el programa (PROGRAMA FUENTE) pormedio elusodeldepuradory,desdeeleditordegráficos,para que, posicionándose en un determinado nodo (representado gráficamente) usuario el pueda Sistema De EnsefianzadeEstructurasdeDatos SEED 30 @d 68 reconocerelárea contenidodeéste. GruJ de memoria asignada al nodo en cuestión así como el TRADUCTORES En estemódulo es posible traducirunprogramaescrito otro en PASCAL, MODULA o C, según Io requiera. LED a enlenguaje SEED, De estamanera elusuarioaprovecha las ventajas quebrindaelsistema en la realización de programas y cuando lo requiera puede traducir su la ventaja desaber que programa a cualquieradeestostreslenguajes,con éstefuncionacorrectamente. Los traductores serealizaronusando facilidadesquebrindaparaestetipo los programas LEX y YACC, debido a las de trabajo. El archivodeentradapara YACC contiene la especificaciónde la gramática de LED y las accionescorrespondientesparaescribirenelarchivodondequeda el programa traducido, además de llamadas nombres de las funciones, de procedimientosparaindentareltexto. Ejemplodeltraductor a procedimientos para guardar los parámetros, o bien llamadas a a MODULA Programa ejemplo escrito en LED: PROGRAMA Lista TIPO ApEntero = APUNTADORENTERO; ApNodo = APUNTADOR Nodo; Nodo = REGISTRO Info: ENTERO; Ligalzq,LigaDer: ApNodo; FIN; Matriz = MATRIZ [5,5]DE ENTERO; ArregloReg = ARREGLO [5] DE Matriz; Sistema De EnsefianzadeEstructurasdeDatos 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 1O POR -2 HAZ COMIENZA CreaNodo(Elem,Celda); ApAux = Lista; MIENTRASNO(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 FUNCIONFin():ENTERO VAR Sistema De EnsefianzadeEstructurasdeDatos SEED 32 Grupo IDS Resp : CHAR; COMIENZA ESCRIBECADENA( 5, 5, Continuas S/N Lee( Resp); SI ((Resp == S) @ (Resp == S)) ENTONCES I); REGRESA(O) OTRO COMIENZA REGRESA(I ); 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 IMPORTALLOCATE,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 EnsefianzadeEstructurasdeDatos 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 FORAp := 1 TO 10 BY (-2) DO CreaNodo(Elem,Celda); ApAux := Lista; = NIL) DO WHILE NOT (ApAux 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 RETURN (O ); ELSE Sistema De EnsefianzadeEstructurasdeDatos SEED 34 Grupo IDS RETURN (1 ); Ap := Ap t 1; END ; END Fin ; BEGIN REPEAT Inserta(Lista,5); Inserta(Lista,7); UNTIL (Fin() = 1) ; END Lista . Programaejemplo escrito en LED: PROGRAMA Lista TIPO ApEntero = APUNTADORENTERO; ApNodo = APUNTADOR Nodo; ApCelda = APUNTADOR Celda; Nodo = REGISTRO Info: ENTERO; Ligalzq,LigaDer: ApNodo; FIN; Celda = REGISTRO 1nfo:ENTERO; LigaApCelda; FIN; Matriz = MATRIZ [5,5] DEENTERO; ArregloReg = ARREGLO [5] DE Matriz; VAR Lista:ApNodo; Sistema De EnsefianzadeEstructurasde 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; MIENTRASNO(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 deDatos SED 36 ~~~ Grupo IDS FIN [ Inserta [ FUNCIONFin():ApNodo VAR Resp : CHAR; COMIENZA ESCRIBECADENA( 5, 5, ' Continuas S/N Lee(Resp); SI ( A*(Sumtl) == varsum) ENTONCES COMIENZA SI (((Resp == S) @ (Resp == S)) & (Resp == N )) ENTONCES I); REGRESA(O) OTRO COMIENZA REGRESA( I); 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 necesariapara ESCRIBEENTERO */ typedefint *ApEntero; typedefstruct RegNodo [ int Info; struct RegNodo *Ligalzq,*LigaDer; [Nodo; typedefNodo *ApNodo; Sistema De EnsefianzadeEstructuras de Datos SEED 37 typedefstruct RegCelda I int Info; struct RegCelda *Liga; ICeldo; typedef Celda *ApCelda; typedefint Matriz[5][5]; typedefMatriz ArregloReg[5]; Grupo IDS ApNodo Fin(); main() I ApNodo Lista; ApEntero Cont; Matriz Mat; do I I Inserta(&Lista,5); Inserto(&Lista,5); Iwhile!(Fin()== 1); Inserta(ApNod0**Lista,int I Elem) ApNodo Celda,ApAux; ApCelda Casilla; for(Ap= 1 ;Ap<= 1O;) I CreaNodo(Elem,&Celda); ApAux=(**Lista); while!(ApAux==NULL) i ApAux=ApAux->LigaDer; if(ApAux==NULL) I 1 I 1 ApAux->LigaDer=Celda; ApAux=(**Listo); Celda->Ligalzq=ApAux; Sistema De EnsefianzadeEstructuras de Datos SEED 38 - I ArrReg[3]=ArrReg[ 11; Suma=Sumat 1; Casilla=malloc(sizeof(struct RegCelda)); scanf("%d",&Ap); Grupo IDS CreaNodo(int Elem,ApNodo **Celda) Matriz Reg; I (**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)); ApNodo Fin() I CHAR Resp; 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 EnsefianzadeEstructuras de Datos SEED 39 Asesor Ing. HéctorLozano Moreno Coordinador de la Lic. en Ing.Electronica Yudiel Perez Espejo. Sistema De EnsefianzadeEstructurasdeDatos SEED 40