Sie sind auf Seite 1von 10

Departamento de Ingeniera de Software y Sistemas Informticos http://www.issi.uned.

es/fp/

Prctica de Fundamentos de Programacin Curso 20112012

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

4. Material que el alumno deber entregar al tutor

10

Departamento de Ingeniera de Software y Sistemas Informticos http://www.issi.uned.es/fp/

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 1: Pantalla de inicio

Departamento de Ingeniera de Software y Sistemas Informticos http://www.issi.uned.es/fp/

2.1. Opcin 1: Introducir las preferencias de un usuario


La opcin 1 permite que un usuario introduzca qu fecha preere para celebrar la reunin. Esta opcin consta de los siguientes pasos: 1. El usuario introduce su nombre, que podr tener como mximo 50 caracteres. 2. El usuario indica qu mes y ao preere para celebrar la reunin. 3. El programa imprime en pantalla la hoja de calendario correspondiente siguiendo el formato especicado en el captulo 8 del libro de prcticas [2]. 4. El usuario introduce el da de reunin.
Nombre?Luis Mes (1..12)?2 Anno (2011..3000)?2012 FEBRERO 2012 =========================== LU MA MI JU VI | SA DO =========================== . . 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 . . | . . Dia?5

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

Departamento de Ingeniera de Software y Sistemas Informticos http://www.issi.uned.es/fp/

2.2. Opcin 2: Listar las preferencias de todos los usuarios


La Figura 3 muestra el resultado de ejecutar la opcin 2, que imprime un listado con todas las preferencias introducidas hasta el momento. 1. Como lmite de almacenamiento, se prodrn introducir hasta un mximo de 50 preferencias en total. 2. Un usuario puede introducir tantas preferencias como desee. Por ejemplo, en la Figura 3, Nacho ha elegido hacer la reunin el 3-2-2012 el 6-2-2012.
LISTADO DE PREFERENCIAS: Maria prefiere que la reunion sea el 6-2-2012 Luis prefiere que la reunion sea el 5-2-2012 Ana prefiere que la reunion sea el 7-2-2012 Antonio prefiere que la reunion sea el 5-2-2012 Marta prefiere que la reunion sea el 6-2-2012 Nacho prefiere que la reunion sea el 6-2-2012 Nacho prefiere que la reunion sea el 3-2-2012

Figura 3: Ejemplo de ejecucin de la opcin 2

2.3. Opcin 3: Calcular la fecha ptima para la reunin


La opcin 3 ordena las fechas propuestas por los usuarios segn el nmero de veces que han sido elegidas (de mayor a menor). Por ejemplo, la Figura 4 muestra el resultado de ejecutar la opcin 3 con los datos listados en la Figura 3. En este caso, la fecha ptima de reunin sera el 6-2-2012.
LISTADO DE FECHAS ELEGIDAS: 6-2-2012 ha sido elegida 3 veces 5-2-2012 ha sido elegida 2 veces 7-2-2012 ha sido elegida 1 veces 3-2-2012 ha sido elegida 1 veces

Figura 4: Ejemplo de ejecucin de la opcin 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

Departamento de Ingeniera de Software y Sistemas Informticos http://www.issi.uned.es/fp/

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.

Figura 5: Diagrama de estructura

3.1. Mdulo principal: Planicador


La Figura 6 muestra el cdigo del mdulo principal Planificador.cpp.

3.2. Abstraccin funcional: Calendario


La gura 7 muestra el chero de interfaz Calendario.h, que imprime en pantalla un calendario, tal y como se especica en el captulo 8 del libro de prcticas [2].

Departamento de Ingeniera de Software y Sistemas Informticos http://www.issi.uned.es/fp/

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

Departamento de Ingeniera de Software y Sistemas Informticos http://www.issi.uned.es/fp/

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

3.3. Tipo abstracto de datos: TipoPreferencia


El tipo abstracto TipoPreferencia incluir los siguientes subprogramas, cuyo comportamiento se resume en la Figura 8:

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

Departamento de Ingeniera de Software y Sistemas Informticos http://www.issi.uned.es/fp/

Figura 8: Comportamiento del mdulo TipoPreferencia

3.4. Tipo abstracto de datos: TipoListaDePreferencias


El tipo abstracto TipoListaDePreferencias almacena todas las preferencias de los usuarios.

3.5. Tipo abstracto de datos: TipoFechaElegida


El tipo abstracto TipoFechaElegida almacena cuntas veces ha sido seleccionada una fecha.

3.6. Tipo abstracto de datos: TipoListaDeFechasElegidas


El tipo abstracto TipoFechaElegidas almacena todas las fechas propuestas y el nmero de veces han sido elegidas. Dispondr de los siguientes procedimientos, cuyo comportamiento se resume en la Figura 9:

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].

Departamento de Ingeniera de Software y Sistemas Informticos http://www.issi.uned.es/fp/

Figura 9: Comportamiento del mdulo TipoListaDeFechasElegidas

Departamento de Ingeniera de Software y Sistemas Informticos http://www.issi.uned.es/fp/

4. Material que el alumno deber entregar al tutor


El alumno deber entregar:

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

Das könnte Ihnen auch gefallen