Beruflich Dokumente
Kultur Dokumente
es/fp/
ndice
1. Introduccin 2
2. Especicacin de requisitos 2.1. Opcin 1: Introducir las preferencias de un usuario . . . . . . . . . . . . . . . . . 2.2. Opcin 2: Listar las preferencias de todos los usuarios . . . . . . . . . . . . . . . 2.3. Opcin 3: Calcular la fecha ptima para la reunin . . . . . . . . . . . . . . . . . .
2 3 4 4
3. Diseo 3.1. Mdulo principal: Planicador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Abstraccin funcional: Calendario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3. Tipo abstracto de datos: TipoPreferencia . . . . . . . . . . . . . . . . . . . . . . . . 3.4. Tipo abstracto de datos: TipoListaDePreferencias . . . . . . . . . . . . . . . . . . 3.5. Tipo abstracto de datos: TipoFechaElegida . . . . . . . . . . . . . . . . . . . . . . . 3.6. Tipo abstracto de datos: TipoListaDeFechasElegidas . . . . . . . . . . . . . . . . .
4 5 5 7 8 8 8
10
1. Introduccin
El objetivo de esta prctica es que el alumno ejercite todo lo estudiado en la asignatura Fundamentos de Programacin, haciendo especial hincapi en el uso de la descomposicin modular de programas como herramienta para resolver problemas complejos. Por ello, se aconseja que antes de tratar de resolver la prtica, se lean detenidamente los captulos 14 y 15 del libro de teora [1], y el captulo 9 del libro de prcticas [2]. Existen herramientas informticas, como Doodle [3], que facilitan a grupos de personas ponerse de acuerdo sobre qu fecha es la ms idnea para realizar una reunin. Cada usuario introduce sus preferencias en la herramienta y sta identica la fecha que ha sido elegida ms veces. En esta prctica, el alumno implementar una versin simplicada de este tipo de programas, que se limitar a la gestin de una sola reunin. Este documento se estructura como sigue. La Seccin 2 detalla el enunciado del problema que el alumno deber resolver, es decir, QU debe implementarse. La Seccin 3 plantea el diseo que el alumno deber seguir para resolver la prctica, es decir, CMO debe implementarse la solucin. Por ltimo, la Seccin 4 describe el material que alumno deber entregar al tutor.
2. Especicacin de requisitos
La Figura 1 muestra la pantalla de inicio del programa que el alumno debe desarrollar. Los usuarios pueden elegir las opciones 13 tantas veces como deseen. Es decir, a diferencia de las prcticas anteriores, este programa se ejecutar indenidamente hasta que no se seleccione la opcin 4. Tras la ejecucin de cualquiera de las opciones 1, 2 3 se volver a imprimir la pantalla de inicio.
PLANIFICADOR DE EVENTOS PARA REUNIONES 1. 2. 3. 4. Introducir las preferencias de un usuario Listar las preferencias de todos los usuarios Calcular la fecha optima para la reunion Salir
Figura 2: Ejemplo de ejecucin de la opcin 1 El programa comprobar que el da, el mes y el ao introducidos satisfacen los siguientes rangos: 2011 ao 3000 1 mes 12 1 da nmero de das del mes Si el usuario viola alguno de los rangos, el programa imprimir un mensaje de error descriptivo y volver a imprimir la pantalla de inicio (Figura 1) sin almacenar la preferencia. Por ejemplo, en la Figura 2 el usuario ha escogido el mes 2 del ao 2012; si hubiera seleccionado el da 30, se habra mostrado el siguiente mensaje: <<ERROR: El maximo numero de dias para ese mes es 29>> 3
3. Diseo
La Figura 5 muestra el diagrama de estructura que el alumno debe seguir para realizar la prctica. El diseo consta de un mdulo principal (Planificador) y 5 4
mdulos auxiliares (Calendario, TipoPreferencia, TipoFechaElegida, TipoLista DePreferencias y TipoListaDeFechasElegidas). Aconsejamos que se siga una estrategia de integracin ascendente [5]. Es decir, en lugar de esperar a tener escritos todos los mdulos para compilar el programa, conviene que el alumno vaya creando sus propios programas principales parciales que le permitan vericar el funcionamiento de cada mdulo auxiliar por separado. As, se debera escribir un programa principal CalendarioPrincipal.cpp para vericar el mdulo Calendario, un programa TipoPreferenciaPrincipal.cpp para vericar el mdulo TipoPreferencia, etc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
#include <stdio.h> #include "TipoListaDePreferencias.h" #include "TipoListaDeFechasElegidas.h" int main() { int opcion; TipoPreferencia preferencia; TipoListaDePreferencias preferencias; TipoListaDeFechasElegidas fechasElegidas; preferencias.InicializarPreferencias(); opcion = 0; while (opcion != 4) { printf("\n\nPLANIFICADOR DE EVENTOS PARA REUNIONES\n\n"); printf("1. Introducir las preferencias de un usuario\n"); printf("2. Listar las preferencias de todos los usuarios\n"); printf("3. Calcular la fecha optima para la reunion\n"); printf("4. Salir\n"); scanf(" %d", &opcion); if ( (opcion <1) || (opcion >4) ) { printf("\n<<ERROR: opcion incorrecta>>\n"); } if (opcion == 1) { preferencias.AnnadirPreferencia(preferencia); } if (opcion == 2) { preferencias.ImprimirPreferencias(); } if (opcion == 3) { fechasElegidas.ObtenerFechasElegidasAPartirDeLasPreferencias(preferencias); fechasElegidas.OrdenarFechasElegidas(); fechasElegidas.ImprimirFechasElegidas(); } } }
Figura 6: Planicador.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*************************************************** * Interfaz del modulo: Calendario * Este modulo define la abstraccion funcional ImprimirCalendario, * capaz de imprimir en pantalla un calendario, tal y * como se especifica en el capitulo 8 del libro: * "Practicas de Programacion en C+-", de * Jose A. Cerrada, Manuel Collado, Ismael Abad y Ruben Heradio. * Editorial Centro de Estudios Ramon Areces * ***************************************************/ #pragma once const int Aini = 2011; /* anno minimo para proponer una reunion */ const int Afin = 3000; /* anno maximo para proponer una reunion */ /* ImprimirCalendario: * - imprime el calendario correspondiente a Mes y Anno * - devuelve el numero total de dias de Mes, que puede ser: * * 28, 29, 30 o 31 si el mes y el anno son correctos * * 0 si el mes o el anno son incorrectos */ int ImprimirCalendario(int Mes, int Anno);
Figura 7: Calendario.h
1. La funcin PreguntarPreferenciaAlUsuario: a) Pregunta al usuario su preferencia. b) Imprime el calendario que corresponde al mes y ao especicados. Para ello, utiliza la funcin ImprimirCalendario del mdulo Calendario. c) Guarda el resultado en una variable TipoPreferencia. d) Devuelve false si el da, el mes o el ao son incorrectos. En caso contrario, devuelve true. 2. El procedimiento ImprimirPreferencia imprime una preferencia con el formato: nombre prefiere que la reunion sea el da-mes-ao
1. ObtenerFechasElegidasAPartirDeLasPreferencias convierte una variable TipoListaDePreferencias en TipoListaDeFechasElegidas 2. OrdenarFechasElegidas ordena una variable TipoListaDeFechasElegidas de mayor a menor segn el nmero de preferencias de cada fecha. Para implementar este procecimiento se recomienda adaptar el mtodo de insercin directa explicado en el captulo 12 del libro de teora [1].
1. El programa ejecutable Planificador.exe que implementa lo especicado en la Seccin 2. 2. Los cheros que implementan los mdulos descritos en la Seccin 3: a) Calendario.h y Calendario.cpp b) TipoPreferencia.h y TipoPreferencia.cpp c) TipoListaDePreferencias.h y TipoListaDePreferencias.cpp d) TipoFechaElegida.h y TipoFechaElegida.cpp e) TipoListaDeFechasElegidas.h y TipoListaDeFechasElegidas.cpp
Referencias
[1] Jos Antonio Cerrada Somolinos y Manuel Collado Machuca. Fundamentos de Programacin. Editorial Universitaria Ramn Areces, 2010. [2] Jos Antonio Cerrada Somolinos, Manuel E. Collado Machuca, Ismael Abad Cardiel, Rubn Heradio Gil. Prcticas de Programacin en C . Editorial Universitaria Ramn Areces, 2010. [3] Web ocial de Doodle: http://doodle.com/ [4] Web ocial de la asignatura Fundamentos de Programacin con C: http://www.issi.uned.es/fp/ [5] Jos Antonio Cerrada Somolinos et al. Introduccin a la ingeniera del software. Editorial Universitaria Ramn Areces, 2000.
10