Práctica de Fundamentos de Programación Curso

Documentos relacionados
ASIGNATURA: FUNDAMENTOS DE PROGRAMACIÓN

ASIGNATURA: PROGRAMACION I

WHILE Y DO WHILE BREAK EN LENGUAJE C. BUCLES MIENTRAS. FORZAR SALIDA O TERMINACIÓN. EJEMPLO (CU00534F)

FUNDAMENTOS DE PROGRAMACIÓN

FUNDAMENTOS DE PROGRAMACIÓN

Capítulo 12 INSTRUCCIONES DE CONTROL ALTERNATIVAS. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Examen escrito de Programación 1

SESIÓN DE EJERCICIOS E1

Tema 3. Estructuras de control

18-19 GUÍA DE ESTUDIO PÚBLICA FUNDAMENTOS DE PROGRAMACIÓN GRADO EN INGENIERÍA INFORMÁTICA PRIMER CURSO CÓDIGO

PRÁCTICAS DE PROCESADORES DEL LENGUAJE CURSO 2008/2009

LABORATORIO 3 ESTRUCTURAS REPETITIVAS WHILE / DO WHILE

Capítulo 13 INSTRUCCIONES DE CONTROL REPETITIVAS. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Dobles: Es el caso de la instrucción if-else (punto 1.2).

EJERCICIOS CON FUNCIONES EN C. EJEMPLO CALCULAR SERIES NUMÉRICAS. REFACTORIZAR. (CU00552F)

Capítulo 4. Estructuras Iterativas

7.3. Estructura de un programa

Examen escrito de Programación 1

GUÍA DE LABORATORIO #3 ESTRUCTURAS ALGORÍTMICAS CONDICIONALES SIMPLES, DOBLES Y MÚLTIPLES

Boletín de ejercicios de la asignatura de INFORMÁTICA para la realización de las prácticas de laboratorio. Ejercicios de Estructuras de Control

Actividad Algoritmos, Estructura y Programación I. FOR, DO-WHILE

Sentencias DO-WHILE EN C++

Práctica Nº 4 Entrada / Salida

Formatos para prácticas de laboratorio

Teoría de Autómatas y Lenguajes Formales, IS17 Ingeniería Técnica en Informática de Sistemas. Práctica 1: Introducción al Analizador Léxico FLEX

Tema 2. Diseño Modular.

Tema: Introducción a la Programación Estructurada

EQUIVALENCIAS EN C DE CONSTRUCCIONES SECUENICIALES EN PSEUDOCÓDIGO

Práctico 2: Funciones y Punteros en C La teoría general para este práctico puede consultarse en los Capítulos 4 y 5 Notas de Clase

SESIÓN DE EJERCICIOS E1

Programación Estructurada

FUNDAMENTOS DE INFORMÁTICA

TEMA 5. ESTRUCTURAS DE CONTROL: BUCLES.

Unidad 3. Estructuras de control en diagrama de Flujo y pseudocódigo Tema Iteración o Repetitivas (repite - mientras) Juan Pablo Cobá Juárez Pegueros

Sentencias iterativas

Enunciado de la cuarta práctica de Fundamentos de Programación. Curso

Formatos para prácticas de laboratorio

Estructuras de Decisión Simples y Dobles. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Estructuras de Repetición: Repita Mientras.

Estructuras de Repetición (Hacer-Mientras)

Capítulo 3. Sentencias condicionales

Examen de Ingeniería del Software / 2º de Informática de Sistemas 21 de junio de 2007

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2007.

Examen Teórico (1/3 de la nota final)

MÓDULO 6 I.V.A. / I.G.I.C.

Capitulo 2. Programación Modular

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

EXAMEN PROGRAMACION I FEBRERO 2007

Unidad 3. Estructuras de control en diagrama de Flujo y pseudocódigo Tema Iteración o Repetitivas (mientras)

Examen escrito de Programación 1

ASIGNATURA PROGRAMACIÓN EN C++ GUÍA: 1 DOCENTE. LIZETH CORTÉS VARIABLES C++

Programación 1 Tema 7. Desarrollo modular y descendente de programas

OPERADORES Y EXPRESIONES

6.2 Interfaz del Programa de Diseño de una Guía Circular.

Capítulo 3 CICLO DE VIDA DE UN PROGRAMA. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Para obtener más información sobre esta función, haga clic en un tema:

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

ESTRUCTURAS DE CONTROL

Benemérita Universidad Autónoma de Puebla Facultad de Ciencias de la Computación Área de Programación

Impresión y eliminación de trabajos retenidos. Verificación de trabajos de impresión. Cómo reservar trabajos de impresión

Examen de Programación II (Ingeniería Informática)

Estructuras de Decisión Simples y Dobles

APELLIDOS NOMBRE GRUPO CALIFICACIÓN FECHA

Escuela Politécnica Superior de Elche

PROBLEMAS DEL TEMA 7 SUBPROGRAMAS Y MODULARIDAD

El lenguaje de programación C - El primer programa -

FUNDAMENTOS DE INFORMÁTICA 1º Ingeniería Industrial

Examen de prácticas de Programación 1

Modularización en lenguaje C. Funciones

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Transcripción:

Práctica de Fundamentos de Programación Curso 2011 2012 Índice 1. Introducción 2 2. Especificación de requisitos 2 2.1.Opción1:Introducirlaspreferenciasdeunusuario... 3 2.2.Opción2:Listarlaspreferenciasdetodoslosusuarios... 4 2.3.Opción3:Calcularlafechaóptimaparalareunión... 4 3. Diseño 4 3.1.Móduloprincipal:Planificador... 5 3.2.Abstracciónfuncional:Calendario... 5 3.3.Tipoabstractodedatos:TipoPreferencia... 7 3.4.Tipoabstractodedatos:TipoListaDePreferencias... 8 3.5.Tipoabstractodedatos:TipoFechaElegida... 8 3.6.Tipoabstractodedatos:TipoListaDeFechasElegidas... 8 4. Material que el alumno deberá entregar al tutor 10 1

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

2.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. Esta opción consta de los siguientes pasos: 1. El usuario introduce su nombre, que podrá tener como máximo 50 caracteres. 2. El usuario indica qué mes y año prefiere para celebrar la reunión. 3. 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]. 4. El usuario introduce el día de reunión. 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 ejecución de la opción 1 El programa comprobará que el día, 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, 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 año 2012; si hubiera seleccionado el día 30, se habría mostrado el siguiente mensaje: <<ERROR: El maximo numero de dias para ese mes es 29>> 3

2.2. Opción 2: Listar las preferencias de todos los usuarios La Figura 3 muestra el resultado de ejecutar la opción 2, que imprime un listado con todas las preferencias introducidas hasta el momento. 1. Como límite de almacenamiento, se prodrán introducir hasta un máximo 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 reunión 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 ejecución de la opción 2 2.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). Por ejemplo, la Figura 4 muestra el resultado de ejecutar la opción 3 con los datos listados en la Figura 3. En este caso, la fecha óptima de reunión sería 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 ejecución de la opción 3 3. Diseño La Figura 5 muestra el diagrama de estructura que el alumno debe seguir para realizar la práctica. El diseño consta de un módulo principal (Planificador) y 5 4

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

1 #include <stdio.h> 2 #include "TipoListaDePreferencias.h" 3 #include "TipoListaDeFechasElegidas.h" 4 5 int main() { 6 int opcion; 7 TipoPreferencia preferencia; 8 TipoListaDePreferencias preferencias; 9 TipoListaDeFechasElegidas fechaselegidas; 10 11 preferencias.inicializarpreferencias(); 12 opcion = 0; 13 14 while (opcion!= 4) { 15 printf("\n\nplanificador DE EVENTOS PARA REUNIONES\n\n"); 16 printf("1. Introducir las preferencias de un usuario\n"); 17 printf("2. Listar las preferencias de todos los usuarios\n"); 18 printf("3. Calcular la fecha optima para la reunion\n"); 19 printf("4. Salir\n"); 20 scanf(" %d", &opcion); 21 if ( (opcion <1) (opcion >4) ) { 22 printf("\n<<error: opcion incorrecta>>\n"); 23 } 24 if (opcion == 1) { 25 preferencias.annadirpreferencia(preferencia); 26 } 27 if (opcion == 2) { 28 preferencias.imprimirpreferencias(); 29 } 30 if (opcion == 3) { 31 fechaselegidas.obtenerfechaselegidasapartirdelaspreferencias(preferencias); 32 fechaselegidas.ordenarfechaselegidas(); 33 fechaselegidas.imprimirfechaselegidas(); 34 } 35 } 36 } Figura 6: Planificador.cpp 6

1 /*************************************************** 2 * Interfaz del modulo: Calendario 3 * 4 * Este modulo define la abstraccion funcional ImprimirCalendario, 5 * capaz de imprimir en pantalla un calendario, tal y 6 * como se especifica en el capitulo 8 del libro: 7 * "Practicas de Programacion en C+-", de 8 * Jose A. Cerrada, Manuel Collado, Ismael Abad y Ruben Heradio. 9 * Editorial Centro de Estudios Ramon Areces 10 ***************************************************/ 11 12 #pragma once 13 14 const int Aini = 2011; /* anno minimo para proponer una reunion */ 15 const int Afin = 3000; /* anno maximo para proponer una reunion */ 16 17 /* ImprimirCalendario: 18 * - imprime el calendario correspondiente a Mes y Anno 19 * - devuelve el numero total de dias de Mes, que puede ser: 20 * * 28, 29, 30 o 31 si el mes y el anno son correctos 21 * * 0 si el mes o el anno son incorrectos 22 */ 23 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 función PreguntarPreferenciaAlUsuario: a) Pregunta al usuario su preferencia. b) Imprime el calendario que corresponde al mes y año especificados. Para ello, utiliza la función ImprimirCalendario del módulo Calendario. c) Guarda el resultado en una variable TipoPreferencia. d) Devuelve false si el día, el mes o el año son incorrectos. En caso contrario, devuelve true. 2. El procedimiento ImprimirPreferencia imprime una preferencia con el formato: nombre prefiere que la reunion sea el día-mes-año 7

Figura 8: Comportamiento del módulo 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 cuántas veces ha sido seleccionada una fecha. 3.6. Tipo abstracto de datos: TipoListaDeFechasElegidas El tipo abstracto TipoFechaElegidas almacena todas las fechas propuestas y el número 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 según el número de preferencias de cada fecha. 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]. 8

Figura 9: Comportamiento del módulo TipoListaDeFechasElegidas 9

4. Material que el alumno deberá entregar al tutor El alumno deberá entregar: 1. El programa ejecutable Planificador.exe que implementa lo especificado en la Sección 2. 2. Los ficheros que implementan los módulos descritos en la Sección 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 Programación. Editorial Universitaria Ramón Areces, 2010. [2] José Antonio Cerrada Somolinos, Manuel E. Collado Machuca, Ismael Abad Cardiel, Rubén Heradio Gil. Prácticas de Programación en C ±. Editorial Universitaria Ramón Areces, 2010. [3] Web oficial de Doodle: http://doodle.com/ [4] Web oficial de la asignatura Fundamentos de Programación con C±: [5] José Antonio Cerrada Somolinos et al. Introducción a la ingeniería del software. Editorial Universitaria Ramón Areces, 2000. 10