9. Hojas de Trabajo
9.1. Hoja de Trabajo Nº 1: Sopa de Letras
Descargue esta hoja de trabajo a través de los siguientes enlaces: Descargar PDF | Descargar Word.
Enunciado. Analice el siguiente enunciado e identifique el mundo del problema, lo que se quiere de la aplicación y las restricciones para desarrollarla.
Se quiere construir un programa para el juego de la sopa de letras. En este juego hay un tablero que tiene una serie de letras organizadas en filas y columnas. Algunas de estas letras forman palabras que el jugador debe encontrar. Las palabras pueden estar dispuestas en modo horizontal, vertical o diagonal y pueden escribirse también en sentido contrario al normal (de derecha a izquierda o de abajo hacia arriba). Para cada sopa de letras hay una serie de palabras que deben buscarse. Cuando el jugador las encuentra todas, hay que avisarle que ganó el juego. La interfaz de usuario del programa es la que aparece en la siguiente figura. Las letras que forman parte de las palabras ya encontradas deben aparecer en otro color.
Tanto las dimensiones de la sopa de letras como las palabras que contiene se deben cargar desde un archivo de propiedades (seleccionado por el usuario durante la ejecución del programa), con las siguientes características:
- La propiedad sopaDeLetras.columnas define el número de columnas.
- La propiedad sopaDeLetras.filas define el número de filas.
- La propiedad sopaDeLetras.numPalabras define el número de palabras presentes en la sopa.
- La propiedad sopaDeLetras.palabra1 define la primera palabra que aparece en la sopa.
- La propiedad sopaDeLetras.fila1 define el contenido de la primera fila de la sopa.
El siguiente es un ejemplo de un posible archivo para describir la situación inicial del juego. En este tipo de archivos las líneas que comienzan por el símbolo # se interpretan como comentarios.
#letras
sopaDeLetras.columnas=8
sopaDeLetras.filas=10
sopaDeLetras.fila1=M O N I T O R W
sopaDeLetras.fila2=A G H E N T X F
sopaDeLetras.fila3=U M O U S E B C
sopaDeLetras.fila4=D O H L I C E D
sopaDeLetras.fila5=I A P M N L M R
sopaDeLetras.fila6=S M I F O A E O
sopaDeLetras.fila7=C S G N C D E M
sopaDeLetras.fila8=O A H B O O E H
sopaDeLetras.fila9=E R E F I H T M
sopaDeLetras.fila10=J W U V N R A N
#palabras
sopaDeLetras.numPalabras=7
sopaDeLetras.palabra1=MONITOR
sopaDeLetras.palabra2=MOUSE
sopaDeLetras.palabra3=DISCO
sopaDeLetras.palabra4=TECLADO
sopaDeLetras.palabra5=CDROM
sopaDeLetras.palabra6=MODEM
sopaDeLetras.palabra7=WEBCAM
Requerimientos funcionales. Describa los dos requerimientos funcionales de la aplicación.
Requerimiento Funcional 1
Nombre | |
---|---|
Resumen | |
Entradas | |
Resultado |
Requerimiento Funcional 2
Nombre | |
---|---|
Resumen | |
Entradas | |
Resultado |
Modelo del mundo. Estudie y complete el modelo con los atributos, constantes, asociaciones entre las clases y principales métodos.
Declaración de clases. Para las siguientes clases, escriba en Java la declaración de sus atributos y sus asociaciones.
public class SopaDeLetras
{
}
public class Palabra
{
}
public class Letra
{
}
Inicialización de matrices. Escriba el constructor de la clase SopaDeLetras, que carga la información de un archivo de propiedades, cuya representación abstracta se entrega como parámetro. Si hay problemas en el proceso, lanza una excepción.
public SopaDeLetras( File pArchivoSopa ) throws Exception
{
}
Desarrollo de métodos. Desarrolle los siguientes métodos de la clase SopaDeLetras, identificando el patrón de algoritmo al que corresponde cada uno.
Metodo 1
Retornar el número de palabras que ya se han encontrado en la sopa de letras.
public int darPalabrasEncontradas( )
{
}
Metodo 2
Contar el número de vocales que hay en la sopa de letras.
public int totalVocales( )
{
}
Metodo 3
Retornar la cadena con los caracteres que se encuentran entre dos columnas (pColumna1 y pColumna2) de una misma fila (pFila). Puede suponer que los valores que se entregan como parámetros son todos válidos. Puede suponer que pColumna2 es mayor que pColumna1.
public String darPalabraEnFila( int pFila, int pColumna1, int pColumna2 )
{
}
Metodo 4
Retornar la cadena con los caracteres que se encuentran entre dos filas (pFila1 y pFila2) de una misma columna (pColumna). Puede suponer que los valores que se entregan como parámetros son todos válidos. Puede suponer que pFila2 es mayor que pFila1.
public String darPalabraEnColumna( int pColumna, int pFila1, int pFila2 )
{
}
Metodo 5
Retornar la cadena con los caracteres que se encuentran en diagonal entre dos filas (pFila1 y pFila2). La diagonal comienza en la columna que se recibe como parámetro y desciende de izquierda a derecha. Puede suponer que los valores que se entregan como parámetros son todos válidos. Puede suponer que pFila2 es mayor que pFila1.
public String darPalabraEnDiagonal(int pColumna, int pFila1, int pFila2 )
{
}
Metodo 6
Retornar una cadena de caracteres formada con todas las letras que no forman parte de las palabras encontradas. Las letras se deben agregar a la respuesta de izquierda a derecha, de arriba abajo.
public String darMensajeSecreto( )
{
}
9.2 Hoja de Trabajo Nº 2: Asignación de Tareas
Descargue esta hoja de trabajo a través de los siguientes enlaces: Descargar PDF | Descargar Word.
Enunciado. Analice el siguiente enunciado e identifique el mundo del problema, lo que se espera de la aplicación y las restricciones para desarrollarla.
En todo proceso es importante la asignación de tareas, actividad en la cual se definen los recursos (en particular personas) que necesita cada tarea para poderse llevar a cabo. Se quiere construir una aplicación que permita manejar la asignación de tareas para organizar una fiesta, de forma similar a una planilla (en las columnas están las tareas que se deben realizar y en las filas las personas disponibles para hacerlo). Las tareas y las personas ya están definidas desde el comienzo del programa (se cargan de un archivo de propiedades). En cada casilla de la planilla va el número de horas que dicha persona debe dedicarle a la respectiva tarea, como se muestra en la siguiente figura:
La aplicación debe permitir que se asigne un determinado número de horas de trabajo de una tarea a una persona. Si a una persona ya se le ha asignado un número de horas en una tarea, es posible reasignar (cambiar) ese tiempo. Además, a partir de esta asignación, se quieren realizar algunos cálculos:
Para cada tarea es importante saber:
- El número de personas asignadas (las que tienen más de 0 horas asignadas para la tarea
- El total de horas asignadas.
- La persona con más horas asignadas a la tarea.
- El promedio de horas por persona.
- El porcentaje de trabajo que representa una tarea respecto del total de tareas.
Para cada persona es importante saber:
- El número de tareas asignadas (aquellas para las que la persona tiene más de 0 horas asignadas).
- El total de horas asignadas.
- La tarea para la que tiene el mayor número de horas asignadas.
- Si es la persona con el mayor número de horas asignadas.
- El promedio de horas por tarea.
La interfaz de usuario del programa de asignación de tareas es la que aparece en la siguiente figura:
La información de tareas y personas de la aplicación está consignada en el archivo de propiedades llamado data/datosPlanilla.dat. Un ejemplo de dicho archivo es el siguiente:
#tareas
tareas.numero=6
tareas.tarea1.nombre=Inflar globos
tareas.tarea2.nombre=Preparar la torta
tareas.tarea3.nombre=Repartir las invitaciones
tareas.tarea4.nombre=Hacer el playlist de música
tareas.tarea5.nombre=Decorar la sala
tareas.tarea6.nombre=Instalar equipo de sonido
#personas
personas.numero=4
personas.persona1.nombre=Pedro
personas.persona2.nombre=Juan
personas.persona3.nombre=Carolina
personas.persona4.nombre=Andrés
En la propiedad tareas.numero se indica el número de tareas que manejará la aplicación. Luego, para nombrar las tareas, deben aparecer tantas propiedades como este número indica. Estas propiedades son de la forma tareas.tarea<contador>.nombre, donde el contador es un número que va desde uno hasta el número de tareas indicado.
En la propiedad personas.numero se indica el número de personas que manejará la aplicación. Luego, para nombrar a las personas, deben aparecer tantas propiedades como este número indica. Estas propiedades son de la forma personas.persona<contador>.nombre, donde el contador es un número que va desde uno hasta el número de personas indicado.
Requerimientos funcionales. Describa algunos de los más importantes requerimientos funcionales.
Requerimiento Funcional 1
Nombre | |
---|---|
Resumen | |
Entradas | |
Resultado |
Requerimiento Funcional 2
Nombre | |
---|---|
Resumen | |
Entradas | |
Resultado |
Requerimiento Funcional 3
Nombre | |
---|---|
Resumen | |
Entradas | |
Resultado |
Requerimiento Funcional 4
Nombre | |
---|---|
Resumen | |
Entradas | |
Resultado |
Modelo el mundo. Estudie y complete el modelo con los atributos, constantes, asociaciones entre las clases y principales métodos.
Declaración de las clases.Para la siguiente clase escriba en Java la declaración de sus atributos y sus asociaciones.
public class PlanillaTareas
{
}
Inicialización de matrices. Escriba el constructor de la clase PlanillaTareas, que carga la información de un archivo de propiedades, cuyo nombre completo se entrega como parámetro, y arma la matriz que representa la planilla. Si hay problemas en el proceso, lanza una excepción.
public PlanillaTareas( String pArchivo ) throws Exception
{
}
Desarrollo de métodos. Desarrolle los siguientes métodos de la clase PlanillaTareas, identificando el patrón de algoritmo al que corresponde cada uno.
Metodo 1
Contar el total de tareas que no tienen ninguna asignada.
public int totalTareasSinAsignar( )
{
}
Metodo 2
Contar el número de tareas en las que participa la persona cuyo nombre se da como parámetro.
public int totalTareasParticipa( String pNombre )
{
}
Metodo 3
Decir si existe al menos una tarea en la que participen todas las personas.
public boolean existeTareaTodosParticipan( )
{
}
Metodo 4
Retornar el nombre de la persona que más tiempo tiene asignado en la tarea que se da como parámetro.
public String personaMasParticipa( String pTarea )
{
}
Metodo 5
Retornar el nombre de la tarea en la que más tiempo tiene asignado la persona cuyo nombre se da como parámetro.
public String tareaMasParticipa( String pNombre )
{
}
Metodo 6
Retornar la suma de horas asignadas que tienen las personas que se encuentran en un rango de filas descrito por los índices recibidos como parámetros.
public int sumarHorasPersonasEntre( int pIndiceInicial, int pIndiceFinal )
{
}
Metodo 7
Calcular el promedio de horas asignadas a todas las personas.
public double darPromedioTiempoAsignadoPersonas( )
{
}