Seminario de Lenguajes – Opción Delphi – Curso 2011 SEMINARIO DE LENGUAJES - OPCION DELPHI Práctica Nº 1 Ejercicio 1 Se busca implementar una aplicación con la interfaz indicada en la Figura 1 El botón de la izquierda incrementa en 1 el valor de temperatura de un dispositivo, mientras que el de la derecha lo decrementa. La temperatura máxima permitida es 45º mientras que la mínima es -9º. Cada botón se deshabilita cuando se alcanza el límite respectivo. Además, el panel cambia de color según la temperatura actual. Para más detalles ejecute Ejercicio1.exe. Palabras claves: Color, Enabled, Form.BorderStyle, IntToStr, StrToInt, MessageDlg. Figura 1 Ejercicio 2 Desarrolle una aplicación que permita modificar el tamaño de un label. El mismo se encuentra ubicado dentro de un panel y puede ser “estirado” una cierta cantidad de pasos. La interfaz a utilizar es la indicada en la Figura 2. Los botones inferiores permiten realizar el estiramiento antes mencionado. Si ejecuta Ejercicio2.Exe verá que el label visualiza permanentemente su tamaño actual. Además los botones se deshabilitan cuando el label ya no puede estirarse en esa dirección. Tenga en cuenta que esta condición puede Figura 2 variar en caso de modificarse el tamaño del formulario. Dando doble click sobre el label se ubica automáticamente en el centro del formulario volviendo a su tamaño inicial. Palabras claves: Left, Top, Height, Width, Form.BorderIcons, try-except, OnExit. Ejercicio 3 La criptografía es una técnica, basada en la aritmética, que altera la representación de un lenguaje. Su aplicación en informática es la protección de la información. En el caso de un texto, el proceso consiste en convertirlo en otro texto incomprensible a simple vista. A esta modificación se la denomina cifrar. El resultado de esta modificación (el mensaje cifrado) se llama texto cifrado, en contraste con el mensaje inicial, llamado texto simple o texto claro. El cifrado se realiza a partir de una clave numérica que tanto el emisor como el receptor del mensaje conocen. De esta forma, el mensaje puede ser descifrado al llegar a destino. El procedimiento consiste en desplazar cada carácter del mensaje original una cantidad constante de caracteres determinada por cada dígito de la clave numérica. Para ello se requiere de una tabla de conversión, como la de la Figura 3, que a cada carácter del mensaje le asocia un valor numérico. 1 Seminario de Lenguajes – Opción Delphi – Curso 2011 Figura 3 Por ejemplo si la clave es 3759 y el mensaje a cifrar es “DELPHI 2011”, el cifrado se realiza de la siguiente manera: I sp 2 0 1 1 Mensaje original 9 27 47 45 46 46 Código sin cifrar (mirar tabla) Clave, se repite las veces que sea 3 7 5 9 3 7 5 9 3 7 5 necesaria 7 12 17 25 11 16 32 2 48 53 51 Código cifrado G L Q Y K P Ó B 3 8 6 Mensaje cifrado (mirar la tabla) D E L P H 4 5 12 16 8 Para descifrar, el desplazamiento se realiza en sentido contrario. a) Escriba una unidad que contenga las siguientes funciones: function MensajeValido(mensaje:string):boolean; Devuelve true o false según sea o no válido el mensaje pasado como parámetro. Para ser considerado válido todos los caracteres que lo forman deben aparecer en la tabla de la Figura 3. Ejemplo : MensajeValido(„HOLA‟) retornará TRUE pero MensajeValido(„¡HOLA!‟) retornará FALSE porque los símbolos “¡” y “!” no están en la tabla de la Figura 3. function ClaveValida(clave:string):boolean; Devuelve TRUE si la clave pasada como parámetro sólo contiene dígitos (como caracteres) y FALSE en caso contrario. Ejemplo: ClaveValida(„34235654‟) retorna TRUE y ClaveValida(„23A2S‟) retorna FALSE. function Cifrar(mensaje, clave: string): string; Recibe el mensaje a cifrar junto con la clave a utilizar y retorna el mensaje cifrado Ejemplo Cifrar(„DELPHI 2011‟, „3759‟) retorna „GLQYKPOB386‟ function DesCifrar(mensaje, clave: string): string; Recibe el mensaje cifrado y la clave a utilizar y retorna el mensaje descifrado Ejemplo: DesCifrar(„GLQYKPOB386‟, „3759‟) retorna „DELPHI 2011‟ function RecuperarClave(textoClaro, textoCifrado: string): string; Recibe dos mensajes: uno sin cifrar y el otro cifrado y devuelve la clave utilizada. Si no es posible hallarla devuelve el string „No hay clave‟. En caso de existir la clave, debe analizarse cuál es el patrón que se repite para devolver únicamente este patrón sin repeticiones. Ejemplo: RecuperarClave(„DELPHI 2011‟, „GLQYKPOB386‟) retorna „3759‟ 2 Seminario de Lenguajes – Opción Delphi – Curso 2011 b) Utilice la unidad anterior para implementar la aplicación cuya interfaz se muestra en la Figura 4. Figura 4 Esta aplicación debe permitir cifrar, descifrar y recuperar la clave numérica. Tenga en cuenta los siguientes detalles de implementación: - Los botones “Cifrar”, “Descifrar” y “Recuperar clave numérica” permanecerán deshabilitados si la información que se solicita en las componentes que aparecen a izquierda no ha sido indicada o es inválida. Además, para el 3er. botón, los textos de entrada deben tener igual longitud. - Los campos ubicados a la derecha de los botones en cada uno de los paneles, no pueden ser editados directamente por el usuario, sin embargo no deben deshabilitarse pues ello impediría al usuario copiar su contenido al portapapeles de Windows si así lo quisiera. Además el color del texto de estos campos debe cambiar cuando el usuario modifica los campos de la izquierda en el panel correspondiente. Este cambio de color advierte que su contenido está desactualizado pudiendo no corresponderse con los visualizados en los campos de la izquierda. - Los campos de ingreso de datos no admiten caracteres en minúscula siendo transformados inmediatamente en sus respectivas versiones en mayúscula. Para más detalles ejecute Ejercicio3.exe. Palabras claves: Unit, Uses, private, public, TEdit(Text, Font.Color, OnChange, Readonly, CharCase) Ejercicio 4 Desarrollar un analizador de textos que dado un texto permita obtener información referida a las palabras, caracteres y números que contiene. Se utilizará la interfaz de la Figura 5 formada por un MainMenu, un ToolBar y un Memo. El menú se detalla en la Figura 6. El texto a analizar puede ingresarse directamente en el Memo desde teclado o cargarse desde un archivo existente a través de la opción „Archivo\Abrir’ del menú principal. La opción „Archivo\Guardar como…’ permite ingresar un nombre de archivo para guardar el texto del Memo. Si se selecciona „Archivo\Guardar’ se salvará con el último nombre de archivo ingresado; si no existe ninguno deberá realizar las mismas acciones que 3 Seminario de Lenguajes – Opción Delphi – Curso 2011 ‘Archivo\Guardar como …’. Los botones del ToolBar que aparecen debajo del menú comparten los eventos con las opciones correspondientes. El análisis a realizar corresponde a la opción ‘Estadística’ del menú principal cuyo detalle se observa en la figura 7. Figura 5 Figura 6 Figura 7 Algunos detalles a tener en cuenta: - Las imágenes que aparecen en el menú y en los botones están caragdas en un componente TImageList. - Sobre el Memo, a la derecha, aparece el último nombre de archivo ingresado. Este nombre será el que se utilice para guardar si se selecciona ‘Archivo\Guardar’. - Las opciones para guardar el texto permanecen deshabilitadas mientras el Memo esté vacío. - Se asume que los números enteros no utilizan signos de puntuación (ej: coma o punto para separar los miles). 4 Seminario de Lenguajes – Opción Delphi – Curso 2011 El carácter separador de decimales es el punto, es decir, ‘.’ El texto puede contener acentos los cuales no serán tenidos en cuenta para el procesamiento. Es decir que las palabras ‘sólo’ y ‘solo’ serán consideradas iguales. Tampoco se distinguen mayúsculas de minúsculas. - Por simplicidad se asumirá que el texto no tiene más de 10000 palabras. Para más detalles ejecute Ejercicio4.exe. - Palabras claves: TMemo (Text, OnChange, Lines.LoadFromFile, Lines.SaveToFile), TForm (BorderIcons, OnCloseQuery), TOpenDialog(Execute, Filename), TSaveDialog(Execute, Filename),TImageList, ExtractFileName, UpperCase, DecimalSeparator. Ejercicio 5 Desarrolle una aplicación similar al popular juego de arcade de los „70 denominado “snake” (http://es.wikipedia.org/wiki/Snake_%28videojuego%29). El juego consiste en manipular una serpiente a través de un escenario con el fin de alimentarla. Esta puede moverse libremente pero debe esquivar los obstáculos y no chocar con los bordes del escenario. La serpiente tiene un breve lapso de tiempo para alimentarse de roedores e insectos. Cada vez que caza una presa aumenta de tamaño y el tiempo para encontrar una nueva víctima es renovado. La aplicación cuenta con dos formularios: uno donde se desarrolla el juego (Figura 8) y otro que permite configurar escenarios (Figura 9). El formulario principal (Figura 8) posee un menú que permite iniciar el juego, salir del juego, editar escenarios y seleccionar un escenario para jugar. Figura 8 El formulario de escenarios (Figura 9) tiene dos modos de funcionamiento: uno que permite la creación y modificación de escenarios y otro que permite la selección del escenario para jugar. En ambos modos de funcionamiento este formulario muestra en una etiqueta el número de escenario que se está visualizando y dos botones de navegación para cargar desde un archivo un nuevo escenario. 5 Seminario de Lenguajes – Opción Delphi – Curso 2011 En el modo de selección se muestra un botón para elegir el escenario que será dibujado en el formulario principal en el momento de jugar. En el modo de edición el formulario muestra: un botón para crear un escenario vacío con un nuevo número (no repetido). un botón para descartar los cambios realizados de un escenario previamente guardado. un botón para guardar las modificaciones realizadas en el escenario actual. Una imagen con el bloque que se dibuja sobre el escenario con el mouse. Un grupo de imágenes con los bloques que se pueden seleccionar para ser dibujados. Figura 9 El dibujo sobre el área del escenario se puede realizar de dos maneras. El bloque seleccionado será graficado sobre la celda del escenario: cada vez que se presiona el botón izquierdo del mouse. cada vez que se mueve el mouse con el botón derecho presionado. Tanto las imágenes, como la aplicación de demostración y el formulario con la distribución de las celdas están disponibles para bajar de la página web de la cátedra. Para más detalles sobre el funcionamiento ejecute Snake.exe. Palabras claves: TComponent(FindComponent, tag), TControl(Invalidate), TImage(picture), TImageList(Count, GetBitmap), TPanel(controlCount, controls), TTimer(Enabled, Interval), TProgressBar, OnMouseMove, OnKeyDown(VK_RIGHT, VK_LEFT, VK_UP, VK_DOWN), FileExists, Random 6