MIT OpenCourseWare


1.00 Introducción a la informática y a la resolución de problemas de ingeniería. Primavera 2002

Página principal
¿Qué es OCW?
Ayuda
Feedback
Preguntas frecuentes
Glosario
 
 
Página principal del curso
Programa
Calendario
  Material de clase
  Clases de repaso
Trabajos
  Exámenes
  Avisos
  Lecturas obligatorias
  Otras fuentes

   MIT

   
 

Boletín de problemas 10

Todos los cádigos se han elaborado con software Java™.

Fecha de entrega: viernes 10 de mayo de 2002

Problema 1. Archivos y hashing (dispersión), cuestión preliminar (30%)

Este problema trata de la utilización del método hashCode(), y menciona los métodos toString() y equals(). También le pide que utilice streams. No es un problema complicado; es sólo un ejercicio para que usted trabaje con los métodos que cada clase ha heredado de la clase Java™ Object, la cual, por lo general, debería invalidarse para alcanzar una implementación completa. También le muestra como Java™ calcula por defecto códigos hash, y le pide que escriba una función hash para una clase. No se preocupe por el hecho de que el código que escriba para este problema no haga nada especialmente útil.

Consejo: si lee o escribe archivos, le sugerimos que primero cree una variable que indique la ruta completa al directorio donde el archivo resida. Por ejemplo,


// class variable that gives the path where my text files are
public static final String path = "C:\\java\\sampledir\\PS10"

Así, en su método puede crear uno o más objetos File utilizando dicha ruta:


// first create file object
File myFile = new File(path, "myfile.dat");
BufferedReader reader = new BufferedReader(new FileReader(myFile));

Si no utiliza una ruta completa, verá que es posible que Forte no encuentre el archivo.

Escriba un programa (puede hacerlo con el método main()) para:

  1. Abrir un archivo llamado "indata.dat". Cree este archivo con un editor de texto.
  2. Leer en el archivo dos Integers, dos Doubles, cuatro chars y dos Strings. Diseñe el archivo como prefiera. 
  3. Escribir una clase nueva, llamada CharPair, que tenga los siguientes métodos:
    1. Un constructor que tome dos chars
    2. Método toString() que permita que los objetos CharPair se muestren utilizando "println"
    3. Método equals() que responda verdadero si el primer char y el segundo char son iguales en dos objetos CharPair. Véase págs. 204-206 en el texto.
    4. Método hashCode() que identifique objetos CharPair con los mismos chars en el mismo código hash, y cumpla con los requisitos generales de una función hash.
    5. Sólo puede utilizar el método getNumericValue() de la clase Character; en caso contrario debe utilizar los chars originales de su clase.
  4. Crear dos objetos CharPair y una referencia a cada uno. Crear también una referencia para uno de sus Strings, Integers y Doubles. ("Crear una referencia" significa simplemente que declare una variable y la asigne al objeto. Utilizará la referencia que se da más abajo).
  5. Invocar el hashCode() en todos los objetos y referencia de su programa y mostrar los resultados.
  6. Invocar los métodos equals() y toString() en sus objetos CharPair.
  7. Elevar el primer Double al primer poder Integer, y el segundo Double al segundo poder Integer.
  8. Mostrar los nuevos Doubles, uno de los Strings leidos, y los nuevos CharPairs a un archivo llamado "outdata.dat"

Es conveniente que utilice las clases BufferedReader y StringTokenizer para leer desde su archivo.  

Problema 2. Diccionario (70%)

Construirá un diccionario de palabras para realizar la función de corrector ortográfico y luego lo utilizará para corregir un texto en un archivo de prueba.

  1. Lea el diccionario desde un archivo y construya una tabla hash con todas las palabras. El diccionario se encuentra en el archivo "dictionary.dat" de sitio Web de curso y contiene las 250 palabras inglesas más frecuentes. Utilice las clases BufferedReader y StringTokenizer para procesar el diccionario. Escoja un tamaño de tabla hash apropiado para un diccionarios de 250 a 300 palabras.
  2. Lea un segundo archivo para añadirlo al diccionario. Este archivo, dictionary2.dat, contiene algunas palabras comúnmente mal escritas, basadas en un estudio de los grupos de debate de Usenet. Cada línea del archivo contiene una palabra mal escrita seguida por un tabulador y la ortografía correcta de la palabra. Por ejemplo,

    minascule     minuscule
    millenium     milennium
    ...

    [¿Sabía que la palabra millennium se escribe mal el 57% de las veces?]
  3. Escriba un tercer archivo, cuya ortografía se va a comprobar de un modo sencillo: leerá todas las palabras del archivo y las buscará en el diccionario. También buscará las variaciones en la palabra: eliminar los finales en `s', `es', `ing' o `ed' si es que existen. Puede utilizar el archivo de prueba "testfile.dat". Para hacer el problema más fácil, no es necesario que se preocupe por las palabras que incluyen múltiples finales. (Por ejemplo, la palabra "endings" tiene las desinencias `ing' y `s', pero su solución puede considerarla como una palabra desconocida, aunque la palabra `end' aparezca en el diccionario). No es necesario que su solución tenga en cuenta el caso al comprobar una palabra, no hace falta que mantenga el caso original en el resultado; basta con que muestre todos los resultados en minúscula.
  4. Si encuentra la palabra o una de sus variedades en el diccionario, asuma que está escrita correctamente o que es una falta de ortografía común que sabe como corregir. Si es una falta de ortografía, la corregirá, como se indica más abajo. Tenga cuidado con las desinencias alternativas de palabras comúnmente mal escritas.
  5. Si no encuentra la palabra, asuma que está mal escrita y que no sabe como corregirla.
  6. Muestre como resultado un archivo, llamado "checked.dat" que sea una copia del tercer archivo de entrada con las siguientes diferencias:

                                 i.      Si una palabra está mal escrita y sabe como corregirla, muestre la palabra correctamente escrita.

                               ii.      Si una palabra está mal escrita y no sabe como corregirla, muestre la palabra mal escrita TODA EN MAYÚSCULAS.

                              iii.      Si la palabra está escrita correctamente, muéstrela `tal como es'.

                             iv.      Mantenga la misma disposición de las líneas que en el archivo original, pero no es necesario que mantenga las mayúsculas u otros espacios en blanco.

  1. Recuerde cerrar los archivos. Del mismo modo, trate las IOExceptions de un modo sencillo; imprimir el seguimiento de pila es suficiente.
  2. Se trata de un corrector extremadamente primitivo. No indicamos si una palabra es un nombre, un verbo, etc., lo que limitaría las desinencias válidas. No hay mayúsculas ni puntuación. Todo esto se puede manejar, pero requiere un esfuerzo adicional sustancial. Sin embargo, este problema demuestra el enfoque general adoptado por los programas correctores.

Ponemos a su disposición las clases HashTable y HashNode y la interfaz SimpleMap para que las utilice en este problema. Se encuentran en el sitio Web del curso.

Nota extra

Si desea obtener un máximo de 40 puntos extra, escriba una interfaz gráfica de usuario (IGU) para el programa principal del boletín de ejercicios. Tiene la posibilidad de hacerlo en cualquier boletín de problemas del 6 al 10; pero sólo en uno de ellos. En general, es libre de diseñar la IGU que usted quiera; como si se tratase de un ejercicio en una 'hoja de papel en blanco'. No podrá utilizar System.out.println en su solución; todas las entradas y salidas de datos deben hacerse con Swing. Si opta por crear la interfaz gráfica de usuario ha de entregar dos soluciones:

- El trabajo general, sin la IGU, tal y como se describe en el encargo, lo que nos permite calificar la parte principal de trabajo sin tener que preocuparnos por los posible errores introducidos por la IGU.

- La solución completa con la IGU. En esta segunda entrega sólo se tendrá en cuenta, a efectos de calificación, la IGU, hasta un máximo de 40 puntos. Sólo se calificará la IGU (y sus interfaces inmediatas con el resto del código). Recibirá entre 0 y 40 puntos; aunque reciba 0 su nota general en el trabajo no se verá perjudicada o reducida.

Requisitos específicos para el boletín de problemas 10: su programa debería utilizar los mismos archivos que antes para leer las palabras del diccionario, pero en lugar de leer el texto para corregir desde testfile.dat, su IGU ha de permitir al usuario que introduzca el texto directamente utilizando componentes Swing. Otros requisitos son que muestre el resultado en Swing y que la interfaz sea fácil de utilizar.

A continuación, se muestra una interfaz de muestra. El usuario puede introducir texto en la zona de texto de la izquierda. La zona de texto es una instancia de JTextArea, que es similar a JTextField, pero permite al usuario introducir múltiples líneas de texto. Haciendo clic sobre el botón "Spellcheck Text" se ejecuta el corrector sobre el texto en la zona de la izquierda, y muestra el resultado en la zona de la derecha. Esta zona no es editable.

Entrega

Requisitos de entrega

·        Copia en papel y copia electrónica de TODO el código fuente (todos los archivos .java).

·        Incluya en TODOS los archivos que presente su nombre, el nombre de usuario, la sección, el nombre del profesor ayudante, el número de trabajo y una relación de las personas con las que haya comentado el boletín de problemas. 

·        NO entregue copias electrónicas o en papel de código compilado (archivos .class).

Colaboración

En este boletín de problemas, puede trabajar en conjunto con otra persona más de la clase, como máximo. Si decide trabajar con un colaborador, debe incluir su nombre en el trabajo entregado. (Si tienen ustedes ayudantes técnicos diferentes, asegúrese de que incluye los nombres de los dos ayudantes en el boletín). No se le permitirá añadir el nombre del colaborador una vez entregado el trabajo. Sólo podrá entregar el boletín UNA VEZ.

Sanciones

  • Por pérdida de copia en papel: -10% de la puntuación del boletín de problemas.
  • Por pérdida de copia electrónica: -30% de la puntuación del boletín de problemas.
  • Por entrega fuera del plazo: -20% de la puntuación del boletín de problemas si es un día de retraso. Por más de un día de retraso = NO SE PUNTUARÁ

.

Massachusetts Institute of Technology © 2003 MIT | Información Jurídica | Privacidad
Todo uso del sitio de MIT OpenCourseWare y sus materiales de curso queda sujeto a las condiciones y términos de uso detallados
en la sección sobre Información Jurídica
Copyright © 2003 Portal Universia S.A. Todos los derechos reservados
(Avda. de Cantabria s/n - Edif. Arrecife, planta 00.28660 Boadilla del Monte) - Madrid. España.
Contacta con nosotros: Usuarios | Empresas-Instituciones-Medios comunicación
Código Ético | Aviso Legal | Política de confidencialidad | Quiénes somos: Sala de Prensa