Manual del estudiante de Ingeniería en Sistemas de UTN/Diseño e Implementación de Estructuras de Datos/Trabajos prácticos

De Wikilibros, la colección de libros de texto de contenido libre.

Trabajos prácticos DIED 2007[editar]

Primer trabajo práctico[editar]

Consigna[editar]

Implementar un procesador de palabras, para el cual podrá utilizar como guía el modelo adjunto. Deberá contar, como mínimo con:

  1. Un área de texto con autoscroll, donde se visualizará el texto a procesar.
  2. Un área de texto con autoscroll para los comandos a ingresar, a la cual se ingresará cuando se presione la tecla "esc", y se abandonará cuando se presione nuevamente.
  3. Un área donde se mostrarán las respuestas a los comandos (información sobre la operación realizada, como la cantidad de secuencias afectadas, si el comando fue exitoso, etc.).

Comandos a implementar[editar]

Sintaxis de los comandos[editar]
<comando> ::= <comando_sin_parámetros> |
              <comando_con_parámetros>(<lista_de_parámetros>)

<comando_sin_parámetros> ::= limpiar | limpiarComandos|
                             limpiarTodo | salir

<comando_con_parámetros> ::= buscar | reemplazar | reemplazarSiguiente |
                             eliminar | eliminarSiguiente | capitalizar |
                             capitalizarSiguiente |escape

<lista_de_parámetros> ::= <parámetro> | <parámetro>, <lista_de_parámetros>

<secuencia_de_escape> ::= /<carácter_clave> |
                          /<carácter_clave><cadena_patrón> |
                          /<nombre_de_variable><carácter_clave>
                                   <cadena_patrón>/<carácter_clave>
Semántica de los comandos[editar]
limpiar

Deja en blanco el área de texto del editor.

limpiarComandos

Deja en blanco el área de texto de los comandos.

limpiarTodo

Deja en blanco el área de texto del editor y la de los comandos.

salir

Abandona la aplicación.

buscar

Busca y selecciona la siguiente cadena que corresponda a la que se pasa como parámetro luego del cursor en el área de texto del editor. En la cadena a buscar se pueden incluir los siguientes caracteres de escape, si estos están activados (de lo contrario, serán tomados literalmente):

  • /?: Cualquier carácter que no sea separador.
  • /*: Cualquier secuencia de caracteres que no incluya separadores.
  • /-: Cualquier separador.
  • /%<carácter>: Cualquier carácter que no sea <carácter>.
  • /$<secuencia_de_caracteres>/$: Cualquier secuencia de caracteres que no incluya <secuencia_de_caracteres>.
  • /!<secuencia_de_caracteres>/!: Cualquier secuencia de caracteres que no incluya ningún carácter de <secuencia_de_caracteres>.
  • //: Carácter '/'
  • /": Carácter '"'

Estas secuencias de escape se aplican también a los parámetros de los comandos capitalizar y eliminar.

reemplazar

Busca y reemplazar las cadenas que correspondan a la que se pasa como parámetro. Si se introduce alguna variable en la cadena a reemplazar, éste podrá utilizarse en la cadena de reemplazo para representar a la cadena de la entrada que se correspondió en cada matching. En la cadena de reemplazo, el carácter de escape también es '/', y los nombres de las variables se colocan entre las barras.

Ejemplo:

Si se aplica

reemplazar(+/titulo%++,<title> /titulo/ <//title>)

Sobre la cadena

"+ Semántica de los comandos +"

Se obtiene

"<title> Semántica de los comandos </title>"

reemplazarSiguiente

Busca y reemplazar la siguiente cadena que corresponda a la que se pasa como parámetro luego del cursor en el área de texto del editor.

eliminar

Busca y elimina las cadenas que correspondan a la que se pasa como parámetro.

eliminarSiguiente

Busca y elimina la siguiente cadena que corresponda a la que se pasa como parámetro luego del cursor en el área de texto del editor.

capitalizar

Busca y pasa a mayúsculas (M), minúsculas (m), o mayúscula (Mm) al comienzo de cada palabra las cadenas que correspondan a la que se pasa como parámetro.

capitalizarSiguiente

Busca y pasa a mayúsculas (M), minúsculas (m), o mayúscula (Mm) al comienzo de cada palabra la siguiente cadena que corresponda a la que se pasa como parámetro, luego del cursor en el área de texto del editor.

escape

Activa (on) o desactiva (off) los caracteres de escape.

Segundo trabajo práctico[editar]

Consigna[editar]

Realizar al trabajo práctico las siguientes agregaciones y cambios:

  1. Incorporar la función de autocompletado[1] que, dependiendo del diccionario o diccionarios que se elijan como fuente, mostrará la primera palabra más cercana a la que se esté ingresando, y que se pueda navegar entra palabras posibles con ctrl- (avanzar) y ctrl- (retroceder), desplazándose por una lista circular que contenga todas las palabras que tengan el prefijo que se está ingresando; con ctrl-enter se confirma la inserción de la palabra. El orden en que se mostrarán las posibilidades deberá poder ser configurado por el usuario, que podrá elegir la siguientes opciones:
    1. La cantidad de apariciones de la palabra dentro del documento.
    2. El orden alfabético[2].
  2. Administración de diccionarios de palabras y de diccionarios de tags:
    1. ABM de palabras: Deberá proveerse algún mecanismo mediante el cual las altas de palabras puedan hacerse desde la ventana principal, a medida que se escribe el texto.
    2. ABM de tags.

Los diccionarios de tags deben permitir definir tags de apertura y de cierre, y a medida que se van colocando dentro del texto, deben sangrar automáticamente si dicha opción estuviere habilitada. Cuando el cursor se ubica a la derecha de un tag de cierre, con la combinación ctrl-pgup debe ubicarse el cursor a la derecha del tag de apertura. Cuando el cursor se ubica a la derecha de un tag de apertura, con la combinación ctrl-pgdn debe ubicarse el cursor a la derecha del tag de cierre.

Ejemplos[editar]

Cómo cargar un diccionario de vocabulario[editar]

Los diccionarios de vocabulario serán archivos de texto plano, con una palabra por línea. Para cargarlos se puede utilizar un código tal como el que sigue:

 DiccionarioDeVocabulario diccionarioActual = new DiccionarioDeVocabulario();
 String lineaActual;
 JFileChooser fc=new JFileChooser();
 fc.showOpenDialog(this);
 File archivoDiccionario=fc.getSelectedFile();
 if(diccionario!=null)
 {
   FileReader lector=new FileReader(archivoDiccionario);
   BufferedReader bufferDeLectura=new BufferedReader(lector);
   while((lineaActual=bufferDeLectura.readLine())!=null)
   {
     DiccionarioDeVocabulario.agregarPalabra(lineaActual);
   }
   leer.close();
 }

Función de autocompletado[editar]

Supóngase que en la ventana de texto se encuentra el siguiente fragmento:

Archivo:Ejemplo scriptor autocompletado.svg

Suponga que la opción elegida para el orden de autocompletado es la cantidad de apariciones de la palabra dentro del documento, y que usted ingresa la letra "R". La lista circular (que no deberá necesariamente generar completamente, ya que una sola de las palabras se mostrará en cada momento) contendrá todas las palabras que comienzan con "R". El orden estará definido por la cantidad de veces que aparecen las palabras en el documento; para el caso de las que comienzan con "r", tenemos:

Palabra Apariciones
río 3
recordar 1
rostros 1

Por lo tanto, la lista circular tendrá al principio esas tres palabras, y luego todas las que comiencen con "r" en el diccionario, por orden alfabético.

Diccionarios de tags[editar]

Los tags definen bloques dentro del texto. Los diccionarios de tags son archivos de texto plano que contienen una entrada por línea, y una cantidad par de líneas. Cada par de líneas consecutivas corresponde a un tag de apertura seguido de un tag de cierre, por ejemplo:

<html>

</html>

<xml>

</xml>

<math>

</math>

Un texto autoindentado por tags se verá como:

Archivo:Ejemplo scriptor tags.svg

Tercer trabajo práctico[editar]

Consigna[editar]

Realizar al trabajo práctico las siguientes agregaciones y cambios:

  1. Implementar la administración de archivos de texto: apertura, guardado y compresión (que deberá realizarse mediante un árbol de Huffman).
  2. Implementar la administración de archivos de comandos: apertura, guardado y edición.
  3. Implementación de árbol de rollback para los cambios al documento que se realicen por línea de comandos. (La visualización del árbol se puede implementar con un JTree)
  4. Implementar la edición, vista y manipulación de archivos de tipo "der", con las siguientes especificaciones:
  • Los archivos "der" representan un diagrama de entidad-relación.
  • Su extensión es .der.xml.
  • Son documentos xml version "1.0", por lo tanto su encabezado será:
<?xml version="1.0" standalone="no"?>
  • La definición de tipos se encuentra en der.dtd (que se describe más adelante), por lo tanto su declaración será:
<!DOCTYPE der SYSTEM "/der.dtd">
  • Deberá ser posible cambiar la vista a la vista de diseño, donde se dibujarán los elementos minimizando los cruces de líneas, y aprovechando de la mejor manera el espacio de la ventana.

Contenido de der.dtd[editar]

<!ELEMENT entidad (nombre , atributo*)>
<!ELEMENT atributo (nombre, tipo?)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT tipo (#PCDATA)>
<!ELEMENT rol (nombre?)>
<!ELEMENT relacion (nombre, rol+,atributo*)>

<!ATTLIST entidad id ID #REQUIRED>

<!ATTLIST rol
 id ID #REQUIRED;
 entidad IDREF #REQUIRED;
 cardinalidad CDATA #REQUIRED;
>

Ejemplo de archivo "der"[editar]

Contenido[editar]

<?xml version="1.0" standalone="no"?>
<!DOCTYPE der SYSTEM "der.dtd">
<der>
 <entidad id="entidad_cliente">
   <nombre>Cliente</nombre>
   <atributo>
     <nombre>DNI</nombre>
     <tipo>Number</tipo>
   </atributo>
   <atributo>
     <nombre>Numero de cliente</nombre>
     <tipo>Number</tipo>
   </atributo>
   <atributo>
     <nombre>Nombre</nombre>
     <tipo>Varchar</tipo>
   </atributo>
 </entidad>
 
 <entidad id="entidad_pedido">
   <nombre>Pedido</nombre>
   <atributo>
     <nombre>Fecha</nombre>
     <tipo>Date</tipo>
   </atributo>
 </entidad>
 
 <entidad id="entidad_articulo">
   <nombre>Articulo</nombre>
   <atributo>
     <nombre>Codigo</nombre>
     <tipo>Varchar</tipo>
   </atributo>
 </entidad>
 
 <relacion>
   <nombre>Realiza</nombre>    
   <rol
     id="rol_realizador"
     entidad="entidad_cliente"
     cardinalidad="1"
   />
   <rol
     id="rol_es_realizado"
     entidad="entidad_pedido"
     cardinalidad="*"
   />
 </relacion>
 
 <relacion>
   <nombre>Se compone</nombre>    
   <rol
     id="rol_compuesto"
     entidad="entidad_pedido"
     cardinalidad="*"
   />
   <rol
     id="rol_componen"
     entidad="entidad_articulo"
     cardinalidad="*"
   />
   <atributo>
     <nombre>Cantidad</nombre>
     <tipo>Number</tipo>
   </atributo>
 </relacion>
 
</der>

Descripción gráfica del contenido[editar]

Archivo:Ejemplo de der.svg