Está en la página 1de 7

MANUAL TÉCNICO DE HILERAS PERMUTADAS

LUIS JAVIER ASPRILLA GALARCIO

JAIDIBER VANEGAS CATAÑO

UNIVERSIDAD DE ANTIOQUIA

INGENIERÍA DE SISTEMAS

LÓGICA Y REPRESENTACIÓN III

2015
ESTRUCTURA DEL PROGRAMA:

Clases:

 NodoSimple
 ListaSimpleCCNC (Circular Con Nodo Cabeza)
 main
DESCRIPCIÓN DE CLASES:

NodoSimple:
Ésta clase tiene dos atributos privados: liga y dato.
Dato es de tipo Object, y almacena la cadena de caracteres ingresada. Es
declarado de éste tipo para posibles usos a futuro con otras clases las cuales
reciban distintos tipos de datos.
Se hace un llamado recursivo al declarar su atributo liga del tipo NodoSimple.
La clase tiene los métodos:

 NodoSimple() // Constructor: Recibe un Object como parámetro, lo guarda


en su campo dato y a la liga le asigna valor null.

 getLiga(): Devuelve la liga (un objeto de la clase NodoSimple) del nodo que
lo invoque. No tiene parámetros.

 getDato(): Devuelve el dato (tipo Object) del nodo. No tiene parámetros.

 setDato(): No devuelve nada, y recibe un Object como parámetro el cual


asigna al campo dato del nodo.

 setLiga(): No devuelve nada y recibe un objeto tipo NodoSimple como


parámetro el cual se asigna a la liga del nodo.

ListaSimpleCCNC:
En ella se declaran dos variables privadas tipo NodoSimple:
 “primero” (nodo cabeza): El cual aparte de ser siempre la cabeza de la lista,
almacenará en su campo dato el número de nodos guardado, que
representará el número de hileras que el usuario ha generado.
 “ultimo”: será el último nodo de la lista.

En esta clase se declaran los métodos bases para el manejo de la lista y para las
operaciones bases del programa:
 ListaSimpleCCNC() // Constructor: No tiene parámetros, inicializa
“primero” y le asigna 0 como valor a su campo dato, conecta su liga a sí
mismo y a “ultimo” le asigna “primero”.

 cabeza(): No tiene parámetros. Devuelve a “primero”.

 primerNodo(): No tiene parámetros. Devuelve la liga de “primero”.

 ultimoNodo(): No tiene parámetros. Devuelve a “ultimo”.

 esVacia(): No tiene parámetros. Devuelve un boolean, que es True si la


liga de “primero” es él mismo, representando que la lista está vacía, y
devuelve False de lo contrario.
 anterior(): Tiene como parámetro un NodoSimple. Recorre la lista con dos
NodoSimple, uno irá inmediatamente antes que el otro, desde el primer
nodo hasta encontrar el nodo del parámetro y al encontrarlo retorna el
anterior a él.

 finRecorrido(): Tiene como parámetro un NodoSimple. Retorna True si el


nodo parámetro es la cabeza, indicando que se ha llegado al final del
recorrido. Retorna False de lo contrario.

 conectar(): Sus parámetros son dos NodoSimple “x”, ”y”. Se puede leer
como “Conectar el nodo x, después del nodo y”. El nodo “y” representa un
nodo que ya está guardado en la lista ligada y que quedará siendo el
nodo anterior al que se va a conectar. Como se va a ingresar un nuevo
dato, el método actualiza el número de datos actuales en la lista
aumentando el campo dato de la cabeza en 1. Y se actualiza “ultimo” si el
nuevo nodo queda siendo el último de la lista.

 insertar(): Sus parámetros son un dato tipo Object y un NodoSimple. El


método crea un nuevo nodo y le asigna el dato ingresado, luego invoca
conectar el nodo creado luego del nodo ingresado como parámetro al
principio.

 desconectar(): Tiene dos NodoSimple como parámetros: “x”, “y”. Se lee


“Desconectar el nodo x que se encuentra después del nodo y”. Al nodo
“y” se le asigna la liga del nodo “x”; se le resta 1 al dato de la cabeza y si
“x” era el ultimo nodo se reasigna a y.

ADVERTENCIA: El programa tiene la restricción de menos de 9 caracteres debido a los


métodos insertarEnOrden(), permutacion() y organizar(), a continuación descritos, debido a que
Java maneja, en el Heap, una pila de llamadas de métodos entre clases, cuyo tamaño suele ser
entre 32-64bits. Si la cadena iguala o supera los 9 caracteres, los métodos mencionados podrían
arrojar lo siguiente:

1.

2.

Ambas excepciones indican un desbordamiento del espacio que tiene la pila de llamadas, lo que es,
un desbordamiento del espacio que se tiene designado en la RAM para la máquina virtual de Java,
debido a un exceso de instrucciones a ejecutar. La segunda excepción suele darse más cuando se
utilizan métodos recursivos.
Los métodos se han diseñado de la manera más óptima, dentro de nuestros conocimientos, sin
embargo las acciones de organizar alfabéticamente y generar todas las permutaciones, demandan
gran espacio en la memoria Heap para cadenas extensas. Si en el ordenador donde se ejecuta el
programa hay configurado un espacio más grande, del instalado por defecto, para la máquina virtual
Java, podrían no saltar éstas excepciones. Para saber más Leer el manual de Java y los comandos
–Xmx.
 insertarEnOrden(): No devuelve nada. Recibe como parámetro un dato
tipo Object. Si la lista está vacía entonces inserta el dato ingresado luego
de la cabeza. Si no es así recorre la lista comparando el dato ingresado
con cada uno de los guardados en la lista, hasta encontrar el nodo
después del cual se insertará el nuevo dato y lo agrega a la lista.

 organizar(): No tiene parámetros. Devuelve una ListaSimpleCCNC.


Recorre la lista invocadora del método, insertando ordenadamente cada
uno de sus datos en una nueva ListaSimpleCCNC con el método
insertarEnOrden, al final la nueva lista es retornada.

El método permutacion() tiene dos ocurrencias:


 permutacion() #1 : Tiene como parámetro un String e invoca a la segunda
ocurrencia pasándole como parámetros un String vacío y el String
ingresado por el usuario.

 permutacion() #2 : Este método es recursivo. Le ingresa un “prefijo” y una


cadena “str”, ambos de tipo String. El punto de parada (caso base) es
cuando el largo de “str” sea 0, es decir, que ya no queden caracteres por
permutar en el String. La parte recursiva dentro del ciclo for lo que hace
es tomar cada caracter de la cadena original y ponerlo como la primera
letra del nuevo string y luego encontrar todas las permutaciones de los
caracteres restantes. Así con los n caracteres que tenga la cadena
ingresada.

 eliminarUna(): No retorna nada. Tiene como parámetro un String. Recorre


la lista invocadora, comparando cada uno de los datos guardados en ella
con la cadena ingresada, hasta que encuentre el nodo que tiene el String
a eliminar, y luego lo desconecta. Si no lo encuentra salta un aviso de no
encontrado.

 eliminarRepetidas(): No devuelve nada, ni tiene parámetros. Para éste


método se necesita que las cadenas estén ordenadas alfabéticamente,
así se podrá asegurar que las hileras iguales estarán una seguida de la
otra. Lo que hace el método es comparar un nodo con el siguiente; si son
iguales los datos, entonces desconecta el segundo nodo que se compara
y así hasta el final de la lista.

 inversa(): Retorna una ListaSimpleCCNC. No tiene parámetros. Este


método recorre la lista que le invoca y cada dato en ella lo conecta,
siempre después de cabeza, en una nueva ListaSimpleCCNC la cual
retorna al terminar.

 copia(): No devuelve nada. Le entra una ListaSimpleCCNC como


parámetro. Se recorre la lista invocadora, añadiendo cada uno de sus
datos a la lista parámetro.
 permutacionAleatoria(): No devuelve nada. Tiene como parámetros el
String original y un entero “n” que determina cual será el largo de la
cadena aleatoria. Aquí se crea un arreglo de “char” y un objeto Random.
En el ciclo, que se repetirá n-veces, se crea un entero aleatorio “j” con el
objeto Random, no mayor al largo del String original y luego, de éste
último, se escoge el caracter en la posición “j” y se añade al arreglo de
char. Al terminar el ciclo se lleva el arreglo, ahora en un String y se
inserta.

 borrarTodo(): No recibe parámetros. No retorna nada. Lo que hace este


método es borrar toda la lista ligada. Conecta la liga de cabeza a sí
mismo, restablece su campo dato en 0, y a “ultimo” le asigna “primero”.

Main:

Esta es la clase ejecutable del programa. En ella se crean inicialmente dos objetos
de la clase ListaSimpleCCNC, l1 y l2. La primera alberga todas las permutaciones
posibles y es tomada como la lista “original”. L2 alberga, además, todas las
operaciones que el usuario hace sobre la hilera que ingresó, es decir, sobre ella se
aplican las operaciones del menú desplegable (Incluyendo también Generar todas
las permutaciones).

También contiene dos controladores de valor entero, inicializados en 0:

“k”: Es útil para la operación “Eliminar Repetidas”. Su función es controlar


se hayan ordenado alfabéticamente las permutaciones, para hacer posible
entonces eliminar las hileras repetidas en la lista. Esto es debido a la lógica
implementada en el método de esta operación, cuya descripción se ha
desarrollado anteriormente.

“z” tiene por función determinar si ya fueron generadas todas las


permutaciones posibles. La lógica del programa impide generar dos veces
todas las posibles permutaciones, para así evitar desbordamientos, en
momento de ejecución, de la pila que en la máquina virtual java.

El JFrame contiene los componentes:

 Campo de texto: Para ingresar todos los datos pertinentes en cada acción.
 4 Botones:
Ingresar Hilera: En el cual se captura lo ingresado en el campo de texto y
se hacen las evaluaciones pertinentes del mismo, además de posibles
advertencias si es necesario.
Borrar Todo: Puede entenderse como un reinicio del programa. Borra el
contenido de las áreas de texto, borra todo el contenido de las listas y la
hilera ingresada.
Aceptar: Luego de haber seleccionado una acción del menú desplegable,
se debe oprimir este botón y su lógica reconocerá la opción escogida y
ejecutará los métodos y evaluaciones pertenecientes a la misma.
Salir: Opción alternativa para cerrar el programa.
 ComboBox (Menú desplegable): contiene el menú de las operaciones que
se pueden hacer sobre la cadena ingresada.
 Una etiqueta en la cual se mostrará siempre la cadena ingresada.
 Dos áreas de texto: En la izquierda se imprimirá la lista 1 (la lista “original”).
En la derecha la lista 2.

El main también contiene el método:

printArea(): No retorna nada. Recibe como parámetros una


ListaSimpleCCNC y un jTextArea. Lo que hace es recorrer la lista y copiar
el contenido de cada nodo como un String e imprimirlo en el área de texto.

También podría gustarte