Departamento de Ingeniería de Software y Sistemas Informáticos http://www.issi.uned.

es/fp/

Práctica de Fundamentos de Programación Curso 2011−2012

Índice
1. Introducción 2

2. Especificación de requisitos 2.1. Opción 1: Introducir las preferencias de un usuario . . . . . . . . . . . . . . . . . 2.2. Opción 2: Listar las preferencias de todos los usuarios . . . . . . . . . . . . . . . 2.3. Opción 3: Calcular la fecha óptima para la reunión . . . . . . . . . . . . . . . . . .

2 3 4 4

3. Diseño 3.1. Módulo principal: Planificador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Abstracción 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

1

4. es decir. Es decir. a diferencia de las prácticas anteriores. 3. Los usuarios pueden elegir las opciones 1–3 tantas veces como deseen. Este documento se estructura como sigue. Por último. Cada usuario introduce sus preferencias en la herramienta y ésta identifica la fecha que ha sido elegida más veces. es decir. el alumno implementará una versión simplificada de este tipo de programas. Introducción El objetivo de esta práctica es que el alumno ejercite todo lo estudiado en la asignatura Fundamentos de Programación. que se limitará a la gestión de una sola reunión. La Sección 2 detalla el enunciado del problema que el alumno deberá resolver. QUÉ debe implementarse.Departamento de Ingeniería de Software y Sistemas Informáticos http://www. como Doodle [3]. 2. que facilitan a grupos de personas ponerse de acuerdo sobre qué fecha es la más idónea para realizar una reunión. Existen herramientas informáticas. se aconseja que antes de tratar de resolver la prática. 2. se lean detenidamente los capítulos 14 y 15 del libro de teoría [1]. la Sección 4 describe el material que alumno deberá entregar al tutor. 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 2 .issi. En esta práctica. Por ello. este programa se ejecutará indefinidamente hasta que no se seleccione la opción 4. PLANIFICADOR DE EVENTOS PARA REUNIONES 1. Tras la ejecución de cualquiera de las opciones 1. haciendo especial hincapié en el uso de la descomposición modular de programas como herramienta para resolver problemas complejos. y el capítulo 9 del libro de prácticas [2]. 2 ó 3 se volverá a imprimir la pantalla de inicio.es/fp/ 1. CÓMO debe implementarse la solución. La Sección 3 plantea el diseño que el alumno deberá seguir para resolver la práctica. Especificación de requisitos La Figura 1 muestra la pantalla de inicio del programa que el alumno debe desarrollar.uned.

12)?2 Anno (2011. 4. se habría mostrado el siguiente mensaje: <<ERROR: El maximo numero de dias para ese mes es 29>> 3 . . . el programa imprimirá un mensaje de error descriptivo y volverá a imprimir la pantalla de inicio (Figura 1) sin almacenar la preferencia. Por ejemplo. El usuario introduce su nombre.Departamento de Ingeniería de Software y Sistemas Informáticos http://www. . 2. si hubiera seleccionado el día 30.issi.3000)?2012 FEBRERO 2012 =========================== LU MA MI JU VI | SA DO =========================== . Dia?5 Figura 2: Ejemplo de ejecución de la opción 1 El programa comprobará que el día...1. Nombre?Luis Mes (1. 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 . 3. El usuario introduce el día de reunión. que podrá tener como máximo 50 caracteres.uned. El programa imprime en pantalla la hoja de calendario correspondiente siguiendo el formato especificado en el capítulo 8 del libro de prácticas [2]. | . El usuario indica qué mes y año prefiere para celebrar la reunión. el mes y el año introducidos satisfacen los siguientes rangos: 2011 ≤ año ≤ 3000 1 ≤ mes ≤ 12 1 ≤ día ≤ número de días del mes Si el usuario viola alguno de los rangos.es/fp/ 2. en la Figura 2 el usuario ha escogido el mes 2 del año 2012. Esta opción consta de los siguientes pasos: 1. Opción 1: Introducir las preferencias de un usuario La opción 1 permite que un usuario introduzca qué fecha prefiere para celebrar la reunión.

que imprime un listado con todas las preferencias introducidas hasta el momento. Opción 2: Listar las preferencias de todos los usuarios La Figura 3 muestra el resultado de ejecutar la opción 2. se prodrán introducir hasta un máximo de 50 preferencias en total. Como límite de almacenamiento.issi. la Figura 4 muestra el resultado de ejecutar la opción 3 con los datos listados en la Figura 3.Departamento de Ingeniería de Software y Sistemas Informáticos http://www. En este caso.uned. Nacho ha elegido hacer la reunión el 3-2-2012 ó el 6-2-2012. 2. 1.2. Por ejemplo. 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 ejecución de la opción 3 3. Opción 3: Calcular la fecha óptima para la reunión La opción 3 ordena las fechas propuestas por los usuarios según el número de veces que han sido elegidas (de mayor a menor).3. Diseño La Figura 5 muestra el diagrama de estructura que el alumno debe seguir para realizar la práctica. Por ejemplo. la fecha óptima de reunión sería el 6-2-2012. en la Figura 3. 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 ejecución de la opción 2 2. El diseño consta de un módulo principal (Planificador) y 5 4 . Un usuario puede introducir tantas preferencias como desee.es/fp/ 2.

Es decir.h.2.Departamento de Ingeniería de Software y Sistemas Informáticos http://www.es/fp/ módulos auxiliares (Calendario.1. se debería escribir un programa principal CalendarioPrincipal. 3.cpp para verificar el módulo TipoPreferencia.uned. en lugar de esperar a tener escritos todos los módulos para compilar el programa.cpp. tal y como se especifica en el capítulo 8 del libro de prácticas [2]. etc. TipoFechaElegida. 5 .issi. Así. un programa TipoPreferenciaPrincipal. Abstracción funcional: Calendario La figura 7 muestra el fichero de interfaz Calendario.cpp para verificar el módulo Calendario. Figura 5: Diagrama de estructura 3. Aconsejamos que se siga una estrategia de integración ascendente [5]. Módulo principal: Planificador La Figura 6 muestra el código del módulo principal Planificador. TipoPreferencia. conviene que el alumno vaya creando sus propios “programas principales parciales” que le permitan verificar el funcionamiento de cada módulo auxiliar por separado. que imprime en pantalla un calendario. TipoLista DePreferencias y TipoListaDeFechasElegidas).

scanf(" %d". TipoListaDeFechasElegidas fechasElegidas.h> #include "TipoListaDePreferencias. if ( (opcion <1) || (opcion >4) ) { printf("\n<<ERROR: opcion incorrecta>>\n").h" #include "TipoListaDeFechasElegidas. Salir\n").InicializarPreferencias().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. fechasElegidas. preferencias. printf("4. opcion = 0. } if (opcion == 3) { fechasElegidas. } if (opcion == 1) { preferencias.h" int main() { int opcion. &opcion). Introducir las preferencias de un usuario\n").ImprimirFechasElegidas().Departamento de Ingeniería de Software y Sistemas Informáticos http://www.issi. TipoPreferencia preferencia. fechasElegidas. printf("2. } if (opcion == 2) { preferencias.ObtenerFechasElegidasAPartirDeLasPreferencias(preferencias). while (opcion != 4) { printf("\n\nPLANIFICADOR DE EVENTOS PARA REUNIONES\n\n").ImprimirPreferencias().cpp 6 . } } } Figura 6: Planificador.OrdenarFechasElegidas(). printf("1.uned. TipoListaDePreferencias preferencias. Listar las preferencias de todos los usuarios\n").AnnadirPreferencia(preferencia). printf("3. Calcular la fecha optima para la reunion\n").

d) Devuelve false si el día.Departamento de Ingeniería de Software y Sistemas Informáticos http://www. b) Imprime el calendario que corresponde al mes y año especificados. 30 o 31 si el mes y el anno son correctos * * 0 si el mes o el anno son incorrectos */ int ImprimirCalendario(int Mes.h 3. tal y * como se especifica en el capitulo 8 del libro: * "Practicas de Programacion en C+-". que puede ser: * * 28. devuelve true.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.imprime el calendario correspondiente a Mes y Anno * . * Editorial Centro de Estudios Ramon Areces * ***************************************************/ #pragma once const int Aini = 2011. 2. El procedimiento ImprimirPreferencia imprime una preferencia con el formato: nombre prefiere que la reunion sea el día-mes-año 7 . La función PreguntarPreferenciaAlUsuario: a) Pregunta al usuario su preferencia. utiliza la función ImprimirCalendario del módulo Calendario. 29. Tipo abstracto de datos: TipoPreferencia El tipo abstracto TipoPreferencia incluirá los siguientes subprogramas. Ismael Abad y Ruben Heradio. int Anno). cuyo comportamiento se resume en la Figura 8: 1. /* anno minimo para proponer una reunion */ const int Afin = 3000. Cerrada. c) Guarda el resultado en una variable TipoPreferencia. Manuel Collado. * capaz de imprimir en pantalla un calendario.devuelve el numero total de dias de Mes. Figura 7: Calendario. Para ello. el mes o el año son incorrectos. de * Jose A.issi.3.uned. /* anno maximo para proponer una reunion */ /* ImprimirCalendario: * . En caso contrario.

cuyo comportamiento se resume en la Figura 9: 1. OrdenarFechasElegidas ordena una variable TipoListaDeFechasElegidas de mayor a menor según el número de preferencias de cada fecha. Tipo abstracto de datos: TipoListaDePreferencias El tipo abstracto TipoListaDePreferencias almacena todas las preferencias de los usuarios.Departamento de Ingeniería de Software y Sistemas Informáticos http://www.5.4. 8 .es/fp/ Figura 8: Comportamiento del módulo TipoPreferencia 3. Tipo abstracto de datos: TipoFechaElegida El tipo abstracto TipoFechaElegida almacena cuántas veces ha sido seleccionada una fecha.uned. 3.6. Dispondrá de los siguientes procedimientos. Para implementar este procecimiento se recomienda adaptar el método de inserción directa explicado en el capítulo 12 del libro de teoría [1]. 3. Tipo abstracto de datos: TipoListaDeFechasElegidas El tipo abstracto TipoFechaElegidas almacena todas las fechas propuestas y el número de veces han sido elegidas. ObtenerFechasElegidasAPartirDeLasPreferencias convierte una variable TipoListaDePreferencias en TipoListaDeFechasElegidas 2.issi.

issi.Departamento de Ingeniería de Software y Sistemas Informáticos http://www.uned.es/fp/ Figura 9: Comportamiento del módulo TipoListaDeFechasElegidas 9 .

2010. 2000. Editorial Universitaria Ramón Areces.es/fp/ 4.cpp c) TipoListaDePreferencias.h y TipoListaDePreferencias. Rubén Heradio Gil. El programa ejecutable Planificador. 2.uned.cpp d) TipoFechaElegida. Los ficheros que implementan los módulos descritos en la Sección 3: a) Calendario. Collado Machuca.issi. Fundamentos de Programación.h y TipoListaDeFechasElegidas. 2010.h y TipoPreferencia. Material que el alumno deberá entregar al tutor El alumno deberá entregar: 1.es/fp/ [5] José Antonio Cerrada Somolinos et al.cpp b) TipoPreferencia.h y TipoFechaElegida.exe que implementa lo especificado en la Sección 2.issi.uned. Introducción a la ingeniería del software. [3] Web oficial de Doodle: http://doodle. Editorial Universitaria Ramón Areces.com/ [4] Web oficial de la asignatura Fundamentos de Programación con C±: http://www. Editorial Universitaria Ramón Areces.h y Calendario. 10 . Manuel E. [2] José Antonio Cerrada Somolinos. Ismael Abad Cardiel.Departamento de Ingeniería de Software y Sistemas Informáticos http://www. Prácticas de Programación en C ±.cpp Referencias [1] José Antonio Cerrada Somolinos y Manuel Collado Machuca.cpp e) TipoListaDeFechasElegidas.

Sign up to vote on this title
UsefulNot useful