viernes, 18 de diciembre de 2015

Avance del proyecto #4

En la cuarta semana terminamos de implementar los metodos faltandtes para poder listar las peliculas de acuerdo a los diversas peticiones del proyecto. Tambien se ha procedio a comenzar la inveestigacion del codigo HTML para mostrar los resultados de dichos metodos en el navegador. Para el fin de semana se tiene pensado hacer dicho codigo y tratar de optimizar el tiempo de carga de las peliculas en el programa

viernes, 11 de diciembre de 2015

Avance del proyecto #3

En esta semana  se comenzó con la implementación de los primeros métodos para poder cumplir con los requerimientos del proyecto.

Implementamos nuevos TDAs

BaseClientes
      Guarda a todos los clientes con sus respectivas valoraciones
  •   Método posCliente:
    •   Dado el id de un cliente determinaba cual es su posición en el ArrayList de BaseClientes


  • Metodo cargar 
    • Lee todos los archivos de training set y carga a todos los clientes y con la ayuda de agregarValoracion le asigna la valoración de la pelicula que va recorriendo

Nota: Existe un error al cargar todos los archivos de los clientes

           
               
BasePeliculas
       Guarda todas las películas que se encuentran en el archivo movies_titles

  • Métodos para listar las películas de acuerdo a un orden especifico
    • Dichos métodos se los usa con la ayuda del método sort de la clase Collections y con los Comparators específicos para cada uno de las manera que se deben ordenar
                 






viernes, 4 de diciembre de 2015

Avance del proyecto #2


Decisiones sobre los TDA

En la semana hemos discutido acerca de los posibles TDA's que vamos a implementar en nuestro programa.

Los principales TDA's encontrados en nuestro proyecto son:


  • Peliculas
  • Clientes
  • Valoraciones
TDA Película
Este TDA va a constar de las siguientes caracteristicas: 
  • Valoración
    • La valoración de la película se encuentra en un rango de 1 a 5 
  • Año de publicación
    • Esta información se encuentra el el archivo movies
  • Código o identificador
    • Información en el archivo movies y es único para cada película
  • Nombre 
    • Es el nombre de cada uno de las peliculas

TDA Cliente:

Los clientes van solo van a tener guardada una lista de todas las valoraciones que han realizado de las peliculas


TDA VAloracion

Consta con los siguientes datos:


  • Pelicula a la que pertenece
  • Valor que le dio el cliente
  • Fecha de creación


Nota: 

Se va a implementar el binary search para optimizar la busqueda de datos

lunes, 30 de noviembre de 2015

DEBER # 2 PILAS

Clase UsoPilas

Método main

Descripción
El programa principal se encarga de que dada una expresión in-fix ingresada por el usuario:
          1. Verifica que la expresión tenga los paréntesis correcta.
          2. Si esta correcta entonces la transforma en post-fix
          3. Luego le pide al usuario ingresar una expresion post-fix
          4. Pide los valores de las variables para evaluarlas

Método main

Clase Expresion

Método verificarParentesis

Descripción
Retorna un boolean dependiendo si la expresión tiene un correcto uso de paréntesis

Algoritmo

  1.  Crea una pila vacía donde se van a guardar los paréntesis
  2. Recorre la cadena de caracteres y si es un ( lo añade en la pila
  3. Si es un  )  pregunta si la pila esta vacía devuelve falso
  4. Si la pila está llena entonces elimina el primer paréntesis izquierdo
  5. Una vez recorrida la cadena de caracteres devuelve falso si la pila todavía contiene (
  6. Caso contrario devuelve verdadero


Método verificarParentesis


 Método InFixToPostFix

Descripción
Dada una expresión en Infix la transforma en una expresión Postfix

Algoritmo

  1. Se crea una lista la cuál va a contener la expresión en PostFix
  2. Se crea un pila la cual va a almacenar los operadores   
  3. Se sigue el algoritmo para convertir de Infix a PostFix, el cual consta de los siguientes pasos:
    1. Si el elemento es un operando se ingresa a la lista PostFix
    2. Si el elemento es un paréntesis izquierdo se ingresa en la pila
    3. Si el elemento es un paréntesis derecho entonces se extrae de la pila y se coloca los operadores en la lista PostFix hasta encontrar un paréntesis izquierdo y se elimina el paréntesis
    4. Si el elemento es un operador entonces se verifica si la pila esta vacía, en tal caso se agrega a la pila
    5. Caso contrario se evalúa su prioridad con el que esta en la cima de la pila
      1. Si es de mayor prioridad entonces se agrega a la pila
      2. Si es de menor o igual prioridad entonces se extrae el último  de la pila, se lo agrega a la lista y luego se agrega a la pila el operador



      4.  Una vez recorrida toda la cadena se procede a vaciar la pila en la lista PostFix
      5. Se crea una cadena con la expresión formada en la lista



Método evaluar

Descripción
Con el valor de las variables se procede a realizar el calculo de la expresión en PostFix

Algoritmo
      1. Se crea una pila que va a guardar las variables y se van a realizar las operaciones
      2. Se recorre la expresión y si el elemento es un operando se agrega a la pila
      3. Si el elemento es un operador entonces retirar los 2 primeros elementos de la pila
      4. Realiza la operación indicada y guarda el resultado en la pila
      5. Se repite estas acciones hasta que solo queda un elemento en la pila
      6. Finalmente se extrae el resultado final de la pila y esa es la respuesta
   



Método buscarVariables

Descripción
Devuelve una lista con todas las variables que se encuentran en una expresión

Algoritmo

  1. Recorre la expresión y chequea si es un operador u operando
  2. Si es un operando entonces revisa si esta en la lista sino está lo agrega en caso contrario no realiza ninguna acción





Clase PostFix


Método establecerPrioridad

Descripción
Dado dos operadores devuelve si entre ellos tienen una prioridad mayor menor o igual
Con valores (-1) menor (0) Igual (1) Mayor

Algoritmo

  1. Se tiene un arreglo de los operadores en  orden ascendente de prioridades
  2. Luego se pregunta si los operadores diferentes pero que tienen igual prioridad Eje, suma y resta
  3. Si no lo son entonces se extrae la posición en la que se encuentra y se compara devolviendo el valor si es menor mayor o igual





Método esOperador

Descripción
Dado un elemento entonces se verifica si es un operador o no.

Algoritmo
      1. Se tiene el arreglo con todos los operadores
      2. Se busca el elemento en el arreglo si lo encuentra devuelve verdadero caso contrario falso



Clase Variable

Descripción
TDA que va a almacenar simultánea mente una variable y un valor



Clase Proceso

Método pedirIngreso

Descripción
Genera una cuadro de dialogo para que el usuario ingrese una expresión

Algoritmo
       1. Se crea el cuadro de dialogo donde el usuario va ingresar la expresión
       2. Se muestra la expresión para que el usuario verifique que se  encuentre correcta
       3. Guarda la expresión


Método añadirVariables

Descripción
Pide al usuario el valor para las variables encontradas en la expresión para guardarlas en una lista de Variables

Algoritmo
      1. Tenemos las variables que se encontraron en la expresión como caracteres
      2. Se pide al usuario que ingrese el valor de la variable
      3. Se envían tanto el nombre de la variable y el valor al constructor de Variable
      4. La nueva Variable se agrega a la lista variables
      5. Se devuelve la lista de Variables


Método buscarValor

Descripción
Va a encontrar el valor de una variable dentro de una lista de Variables

Algoritmo
       1. Se crea un iterador de la lista de Variables
       2. Se busca en la lista de Variables aquella que tenga el nombre buscado
       3. Se devuelve el valor de esa variable



viernes, 27 de noviembre de 2015

Avance del proyecto #1

En esta semana nos reunimos para identificar cuales eran los objetivos del programa que vamos a crear para esto decidimos desglosar que debe poder realizar nuestro programa y lo que necesita para su correcta ejecución

De los llegamos a la conclusión siguiente:


1. Listar las calificaciones de un cliente por fecha
Entrada : ID Cliente
Salida: Lista de calificaciones con sus respectivas fecha 


ID Cliente
Calificación Fecha Película

En los archivos de cada película se buscará el ID del cliente para sacarlo que esta en el campo valoración 

2. Top 10 de la películas por categoría de estrellas

Entrada: Categoría a sacarse
Salida: Lista con 10 elementos que son las películas con mayor número de veces en las valoraciones de 5,4,3,2, 1

Categoría

Nombre de la película


De cada archivo del dataset se debe verificar que en el campo de calificaciones sea el numero representativo de la categoría y se contara cuantas veces aparece en cada una para luego sacar las 10 con el mayor numero de veces. Adicionalmente se sacara al mismo tiempo los ID's de las películas con el mayor · de veces para buscar en el archivo  movies el nombre

En el método 1 creímos necesario el nombre de la película para darle sentido a las representaciones en la valoración
* El método organizaría cada película dentro de si propia categoría

3. Lista de las calificaciones de una película
Entrada: Nombre de la película
Salida: Lista de calificaciones nombre, fecha  calificación

Se muestra:


Nombre Película
Calificación Fecha

*En el archivo movies se conservará que coincida el nombre para obtener dentro del mismo registros su ID que servirá para la búsqueda del archivo que lo contiene una vez encontrada se procederá a sacar las calificaciones, con las fechas en que se hicieron

4. Listar películas por año

Entrada: Año a buscar
Salida: Lista de las películas realizadas en ese año

Muestra
Año
Nombre de la película 1
Nombre de la película 2

* Se trabaja directamente con el archivo movies Se busca el año ingresado coincida
con el registro en el campo y se muestra ek nombre de la película, así cada vez que el año
coincide

5. Buscar películas por coincidencia de palabras y mostrar la información de la que se
selecciona del listado
Entrada: Una palabra
Salida: Lista de coincidencias

Se muestra:
Palabra ingresada

Opciones de coincidencia


Una vez seleccionada

ID Película Año de realización


*Se mira que la palabra que se ingresa coincida con el nombre de algunas películas en el archivo movies y se devuelve una lista con todas las opciones posibles. Luego de que el usuario elija una se toma el año de realización el Id para buscar su archivo en el Dataset y sacar sus calificaciones (Promedio)




7.1 Mostrar las películas ordenadas alfabéticamente
Entrada: ninguna (solo se necesita que este en la opción)
Salida: Se muestra:
ID película Nombre Valoración Año de producción

En el archivo principal se buscara el nombre de la película y se compararan con 
los nombres anteriores para 
ordenarlos alfabéticamente

7.2  Mostrar las películas ordenadas descendentemente por año
Entrada: ninguna (solo se necesita estar en la opción)
ID película Nombre Valoración Año de producción


En el archivo principal se buscara el año de la película y se compararan para 
elegir el orden que debe presentarse  

Sugerencia: usar el método ordenar visto hoy en discretas

lunes, 23 de noviembre de 2015

LISTAS ENLAZADAS DEBER#1

Clase Conjunto:


Método unión:

Descripción
Genera un conjunto el cual es la unión de los dos conjuntos enviados por parámetros.

Algoritmo
  1. Se crea una lista vacía la cual va a representar al conjunto unión.
  2. Se verifica si algún conjunto es vacío, si ocurre eso simplemente devuelve el conjunto no vacío.
  3. Si ambos conjuntos tienen elementos:
    • Agrega todos los elementos del primer conjunto a unión.
    • Recorre los elementos del segundo conjunto y si no están presentes en unión los agrega.
Método unión

Método intersección:

Descripción
Genera un conjunto el cual es la intersección de los dos conjuntos enviados por parámetros

Algoritmo
  1. Se crea una lista vacía la cual va a representar al conjunto intersección.
  2. Se recorre los elementos del primer conjunto y se los compara con cada uno de los elementos del segundo conjunto.
  3. En caso de ser iguales comprueba si no se encuentran en intersección y de ser así los agrega.
Método intersección

Método diferencia:

Descripción
Genera un conjunto el cual es la diferencia de los dos conjuntos enviados por parámetros. Es decir, los elementos que pertenecen al primer conjunto pero que no estén presentes en el segundo.

Algoritmo
  1. Se crea una lista vacía la cual va a representar al conjunto diferencia
  2. Verifica si alguno de los dos conjuntos está vacío. Ya que si es así existen 2 posibilidades
    1. Si el conjunto 1 es vacío entonces debe devolver un conjunto vacío sin importar el conjunto 2
    2. Si el conjunto 2 es vacío entonces debe devolver al conjunto 1 como está.
    3. Por lo tanto en ambos casos devuelve una copia de conjunto 1
  3. Si ambos conjuntos tienen datos:
    1. Se recorre el conjunto 1 y si el elemento no esta presente en el conjunto 2 entonces lo agrega a diferencia.


Método diferencia

Método guardar:

Descripción
Guarda en el archivo resultados.txt el conjunto que recibe como parametro..

Algoritmo

  1. Se declara  las variables necesarias para guardar en un archivo sin sobre-escribirlo:
    • File
    • FileWriter
    • PrintWriter
    • String
    • Nota: La mezcla de las variables tipo FileWriter junto con PrintWriter me permiten escribir en un archivo sin sobre-escribirlo
  2. Se verifica si el archivo existe:
    • Si el archivo no existe lo crea
    • Caso contrario salto al paso 3

  3. Para cada coordenada del conjunto obtengo su representación en String con el método toString() y lo guardo en el archivo
  4. Finalmente cierra las variables de escritura y el archivo
Método guardar

Clase Programa: 

Método cargar:

Descripción:
Genera una lista de coordenadas a partir de Strings obtenidas de un archivo.
Las coordenadas del archivo se encuentran una en cada línea y tienen el formato:
          latitud, longitud, Ciudad     Ejemplo:
          50,50,Ciudad 5
Algoritmo:
  1. Se declara las variables necesarias para leer un archivo:
    • FileReader
    • BufferedReader
    • String
    • Colección de String: String[]
    • Coordenada
    • LinkedList<Coordenada>
  2. Abrir el archivo y generar el almacenador de String
  3. Mientras existan lineas dentro del archivo:
    1. Separa las 3 componentes con el metodo split
    2. Declara una coordenada por defecto
    3. las variables latitud y longitud las convierte en Float
    4. Recoge las variables extraídas y las asigna al las variables de la coordenada por defecto
    5. Finalmente agrega la coordenada  extraída a la lista
  4. Retorna la lista con las coordenadas
Método cargar