martes, 1 de diciembre de 2015

Agenda de eventos con estructuras de bases de datos 2015


En este blog hablaremos sobre un proyecto que puede ser util(o no util para ciertas personas) en su carrera como programadores de sistemas y bases de datos.

Vamos a aprender, como bien lo dice el titulo de este blog, a realizar una agenda de eventos y contactos utilizando estructuras de bases de datos. Para realizar este proceso, es necesario entender   cada aspecto de lo que vamos a tratar aqui para que funcione, como siempre lo hago en estos blogs.

  • QUE ES UNA AGENDA DE EVENTOS Y CONTACTOS? 
Básicamente, es una estructura de datos en la que podemos agregar contactos a una lista:



Donde ponemos todos los datos de cualquier contacto, como si se tratara de una lista cualquiera, y también podemos crear eventos:




Los eventos como lo ven en la imagen 2 son donde llenas la informacion de culaquier tipo de reunion que se desee realizar, quienes asistiran, cuando y donde se realizara el evento, de que sera el evento, etc.

  • QUE ES UNA ARBOL BINARIO Y N-ARIO?

-ARBOL BINARIOS-

Se define un árbol binario como un conjunto finito de elementos (nodos) que bien esta vacío o esta formado por una raíz con dos arboles binarios disjuntos, es decir, dos descendientes directos llamados subarbol izquierdo y subarbol derecho.















 -ARBOLES N-ARIOS-

Los árboles N-arios, son árboles que permiten tener más de un puntero por cada nodo, esto propone que cada raíz relativa cuenta con más de dos ramas. Una estructura así ofrece un reto estructural y de control para poder moverse y organizar los datos que se encuentran inmersos.






















  • COMO FUNCIONA ESTE PROGRAMA?
 Sabiendo todo lo anterior, explicare como funciona el programa realizado, y al final se dejara el link de descarga, para que puedan ver el programa mas de cerca y entenderlo mejor.

El programa inicia con una interfaz gráfica llamada pantalla como la pueden observar aquí:

















Es una presentación de quienes hicieron el proyecto y la institución a la cual va dirigida, en el indice habrá dos menús que te llevaran a crear un nuevo contacto o crear un nuevo evento. A continuación se presentan dos opciones, la primera es  acceder a la interfaz gráfica de contactos:

-Interfaz lista de contactos-
 














 o acceder a la interfaz de eventos:

 -Interfaz gráfica de eventos-


















En la interfaz de crear contactos se llenan los datos de una persona que deseas agregar a una lista de "invitados" a tu agenda con la opción de guardar, también puedes buscarlos por su identificación o cédula . En la interfaz de eventos puedes crear eventos de cualquier tipo, poniendo el lugar, la hora, etc, y al final se le da la opción de guardar, todos los eventos tienen un código que al buscarlos la base de datos te dirá si se encuentra o no.
Tanto la lista de contactos, como la lista de eventos tiene las opciones de Mostrar datos, Actualizar datos, Eliminar datos y por ultimo la opción de salir de la interfaz, automáticamente volverá a aparecer la pantalla anterior que te permitirá elegir a que interfaz quieres ir.

Por ultimo se deja el proyecto comentado para que lo vean y lo entiendan mejor:
Agenda de Eventos y contactos

Nota: si se presentan fallos en el anterior enlace usen este:

 Agenda 2

sin mas que decir gracias y espero que les haya servido.

  • BIBLIOGRÁFICA
  1. Arboles. [EN LINEA]. [Citado en 01 de Diciembre de 2015]. 
  2.  FA VI_HOLA, Arboles Binarios. [EN LINEA]. 8 de junio de 2011. [Citado en 01 de Diciembre de 2015].  

lunes, 26 de octubre de 2015

Shell sort en listas dobles

En este nuevo post hablare sobre como empleamos gracias al aprendizaje de las listas simples y dobles, el método de ordenamiento shell en una lista doblemente enlazada.

Para empezar hablare breve mente que es una lista doblemente enlazada y en que consiste el método de ordenamiento shell. Las listas dobles o doblemente enlazadas, son estructuras que se llenan o se cargan de elementos durante el tiempo de ejecución, con la ayuda de dos punteros; uno que apunte hacia el elemento anterior y el otro apuntando hacia el elemento siguiente. Si desean saber mas de las listas dobles entren aquí: http://es.ccm.net/faq/2872-listas-doblemente-enlazadas


El método de ordenamiento shell es un método por el cual, recibimos un array o en este caso una lista de elementos desordenados. Lo que se hace es definir un intervalo entre un elemento dividiendo entre 2 el tamaño de la lista o array, y otro para poder ordenarlos por partes, y repetir el ciclo, hasta obtener la lista ordenada de una forma mas rápida y eficiente que por un método de ordenación por burbuja.




Uso de Shell Sort en una lista doble

Para aplicar el  método shell sort en una lista doble es necesario entender la lógica para crear un código que asimile al método.
Hay que declarar dos nodos de tipo null( estos serán los que marcaran los intervalos de toda la lista), la mismo tiempo hay que declarar un contador iniciado en 0 y por ultimo un auxiliar de tipo nodo, esto es necesario porque en el método shell es necesario llevar el intervalo dependiendo de cuantos elementos tenga la lista o arreglo, declararemos un ciclo que mantenga al nodo cabeza sin apuntar a un elemento null, haciendo esto el contador declarado debe sumar cada vez que este proceso se cumpla.

Una vez se sepa el tamaño de la lista, lo siguiente sera dividir ese tamaño entre 2 como lo dice el método. El resultado es la posición donde pondremos el segundo nodo declarado para terminar el intervalo declarado con el nodo cabeza.
Cuando eso pase compararemos si el elemento del nodo cabeza se menor a el elemento en el nodo final, is es así entonces se mantendrá tal como esta y se adelantara una casilla cada nodo, si no, entonces se intercambiaran posiciones usando el auxiliar declarado anteriormente y para finalizar se repite el ciclo hasta que la lista quede completamente ordenada.
En resumen este es el código que deben generar:

public void shell() {
        Nodo q;
        Nodo p;
        int cont = 0;
        Nodo aux;
        q = this.cab;
        while (q != null) {
            q = q.getSig();
            cont++;
        }
        int k = cont / 2;
        while (k > 0) {
            q = this.cab;
            for (int i = 0; i < k; i++) {
                q = q.getSig();
            }
            p = this.cab;
            while (q != null) {
                if (p.getCod() > q.getCod()) {
                    aux = p;
                    p = this.exchange(p, q);
                    q = aux;
                }
                p = p.getSig();
                q = q.getSig();
            }
            k = k / 2;
        }
    }

Sin mas que decir espero que les haya servido.


REFERENCIAS


  1. Listas Doblemente Enlazadas. [EN LINEA]. Web. septiembre del 2015. [Citado en 28 de Octubre de 2015]. Disponible en internet: <http://es.ccm.net/faq/2872-listas-doblemente-enlazadas>






lunes, 28 de septiembre de 2015

Aprendiendo a programar shell sort en java

En este post vamos a aprender que es el método de ordenación shell sort y en que casos determinados se utiliza y porque.


Es un algoritmo de ordenamiento. El método se denomina Shell en honor de su inventor Donald Shell. Su implementación original, requiere O(n2) comparaciones e intercambios en el peor caso. Un cambio menor presentado en el libro de V. Pratt produce una implementación con rendimiento de O(nlog2 n) en el peor caso. Esto es mejor que las O(n2) comparaciones requeridas por algoritmos simples pero peor que el óptimo O(n log n). Aunque es fácil desarrollar un sentido intuitivo de cómo funciona este algoritmo, es muy difícil analizar su tiempo de ejecución.


En otras palabras, es un metodo de ordenamiento que permite recorrer el array que tengamos(no importa de que tamaño) en cierta distancia dependiendo del tamaño del array.


EJEMPLO

Ordenar el siguietne array de 10 posiciones:

 [16][72][23][9][1][56][12][99][40][7]

Siguiendo la formula K=N/2; siendo k la distancia que vamos a tener para comparar un elemento con otro dentro del array y N el total de elementos del array,  podremos saber que distancia hay que recorrer en el array para empezar a comparar:

 [16]--------5--------[56]
        [72][23][9][1]      [12][99][40][7]            K=10/2
                                                                                K=5

Una vez hecho esto la comparacion puede hacerse de dos formas:
-Comparar si el primer elemento es mayor al segundo elemento (16>56)
-Comparar si el segundo elemento es menor al primer elemento (56<16) 


Si la comparación se cumple de cualquiera de las dos formas, entonces los elementos se invierten, en este caso, como la condición no se cumple se deja tal como esta, acto seguido se comparan los elementos que le siguen 1 espacio:


       [72]------5---------[12]

[16]       [23][9][1][56]       [99][40][7]       (72>16)
                                                                           (16<72)

Como la comparacion se cumple se invierten las posiciones:

[16][12][23][9][1][56][72][99][40][7]

Nuevamente el proceso debe repetirse hasta que se recorra todo el array. Una vez que eso pase lo siguiente sera dividir el valor de K nuevamente entre 2  y continuar el proceso anterior K=5/2=2.5=2,pero esta vez con la distancia de elementos de 2:

[16] -2- [23]
       [12]      [9][1][56][72][99][40][7]


Una vez recorrido el array nos quedara los siguiente:

[16][9][1][12][23][56][40][7][72][99]

Por ultimo, dividimos K nuevamente entre 2 y nos dará K=2/2=1, donde ya compararemos posición por posición, pero si la comparación se cumple se comparara una vez mas con la posición anterior el:

[16][9]
            [1][12][23][56][40][7][72][99]

     [16][1]
[9]           [12][23][56][40][7][72][99]


[9][1]

          [16][12][23][56][40][7][72][99]

[1][9][16][12][23][56][40][7][72][99]

Luego de hacer las comparaciones finalemtne nos quedara nuestro array ordenado:


[1][7][9][12][16][23][40][56][72][99]


COMO USAR SHELL SORT EN JAVA

Para aprender a programar el método de ordenamiento shell en java pueden ver el siguiente vídeo y/0 también pueden descargar el programa que he hecho por mi cuenta:

Descargar programa: shell sort 





Sin mas que decir espero que les haya servido.


la información utilizada de las siguientes paginas:

  1. GÓMEZ, Daniel Ricardo .  y JORDAN, Jorge Eduardo . Ordenamiento Shell. [EN LINEA]. Web. jueves, 21 de mayo de 2009. [Citado en 29  de Septiembre de 2015]. Disponible en internet: <http://estructuradedatosdrgjej.blogspot.com.co/2009/05/ordenamiento-shell.html> 
  2. SANCHEZ REYES, Jonathan Dayessi . Ordenamiento Shell En Java. [EN LINEA]. Web. 13 de octubre 2014. [Citado en 30 de Septiembre de 2015]. Disponible en internet: <https://youtu.be/g_8b6k7gsi4>
    http://estructuradedatosdrgjej.blogspot.com.co/2015/09/ordenamiento-shell.html