|  Respuesta: Practica programacion en c :)  
  SEGUIMOS
 Una vez el programa funcione se puede analizar su eficiencia para ver que si se ordenan
 los datos se mejora la eficiencia de ejecución. Si se analiza e implementa esta
 optimización se valorará extra. Se espera que se analice el proceso y se ordenen todos
 los datos que puedan hacer que la ejecución sea más rápida. El programa generará una
 versión ordenada de los ficheros de entrada para que la siguiente ejecución pueda usar
 los ficheros ordenados. Estos ficheros ordenados se llamarán igual que los ficheros de
 entrada, pero con la terminación _ord añadida al fichero producido. Por ejemplo el
 fichero ordenado del fichero asignaturas.txt se llamaría asignaturas_ord.txt. Estos
 ficheros ordenados se generaran sólo cuando los ficheros de entrada no estén ordenados.
 Se recomienda diseñar las funciones para cada fichero, de forma que la misma función
 pueda ser utilizada para entrada y para salida de datos. Para ello, estas funciones
 deberían tener un parámetro adicional, que indique si se realizará una llamada de lectura
 o de escritura
 
 Estructuración del código y buenas prácticas
 
 Se pide separar el código en al menos 5 ficheros:
 
 1. un fichero de cabecera (.h),
 2. una librería de funciones de gestión de entrada y salida de datos a ficheros,
 3. una librería de funciones de ordenación y búsqueda,
 4. una librería de funciones de horarios,
 5. un fichero con solo el main del programa.
 
 No importa si alguna de estas librerías (2, 3 y 4) solo contiene una función. Recordad
 también que en algunos casos, una función puede tener sentido aunque contenga una –
 unica línea de código. Esto permitirá darle un nombre a esta funcionalidad y nos forzará
 a parametrilizarla para generalizarla, de forma que pueda ser fácilmente usada por uno
 mismo o por otros programadores, en otros programas.
 
 Se pide elaborar el banco de pruebas y entregar las ejecuciones. Esto significa que se
 tiene que entregar tantos ficheros de entrada distintos como casos diferentes se necesite
 ejecutar por separado para verificar exhaustivamente el código. Se debe intentar diseñar
 las pruebas de tal forma que con las mínimas ejecuciones se verifiquen el máximo
 número de casos y por tanto intentar que el banco de pruebas sea pequeño (aunque
 exhaustivo). Los ficheros de entrada deben ser entregados con su correspondiente
 fichero de salida resultante de la ejecución. Asegurar que los nombres de ficheros
 permiten relacionar los ficheros de una prueba al completo. Estos ficheros de salida
 contendrán toda la información necesaria para comprobar que la ejecución es correcta.
 Al menos una de las ejecuciones tiene que aportarse el fichero de salida con las trazas
 activadas para ver el diseño y uso de las mismas. Estas trazas deberán ser activadas en
 los casos que parezcan relevantes para demostrar que la ejecución es exhaustiva y
 correcta.
 
 Recordad las buenas prácticas:
 
 1. Cada fichero tiene que tener una cabecera de comentario que relacione los
 distintos ficheros de un programa y que incluya descripción, uso, autor, fecha,
 actualizaciones…
 2. Cada función tiene que tener una cabecera de comentario que explique su
 definición y uso (i.e. que hace, si fuera complejo cómo lo hace, que parámetros
 define y como se deben usar).
 3. El código tiene que estar comentado de forma útil.
 4. El main() del programa tiene que ser poco más que una lista de llamadas a
 funciones (no debe contener casi código, y se asemejará casi a una definición en
 pseudo-codigo de los grandes procesos del programa).
 5. Incluid un documento adicional (memoria del programa) que documente el
 diseño y justifique las decisiones más relevantes (si en un futuro reutilizáis este
 código en otra práctica, vais a necesitar esta documentación).
 
 Esta memoria deberá entregarse en formato editable (Word o RTF) así como en PDF.
 Constará de dos partes. La primera parte de un máximo de 3 páginas, incluirá una
 explicación del funcionamiento general del código, junto con la justificación de las
 
 estructuras de datos y las funciones utilizadas, y una breve descripción de cada fichero
 de código y de cada función. La segunda parte de la memoria de un máximo de 2
 páginas, describará el proceso de verificación del código, indicando el diseño de las
 trazas, el banco de pruebas y sus correspondientes ejecuciones. La memoria debe ir
 acompañada de una portada con el nombre y NIA de los miembros del grupo, fecha de
 entrega y profesor de prácticas.
 
 Respecto a las cabeceras de comentarios, es conveniente que adoptéis un formato
 estándar y lo utilicéis en todos los programas de la asignatura. Os recomendamos mirar
 el código fuente de aplicaciones de programación libre para ver distintos ejemplos.
 
 De ahora en adelante, NO se aceptarán programas que no estén bien comentados y
 que no incluyan las cabeceras de fichero y funciones mencionadas, así como las
 justificaciones necesarias y adecuadas en la memoria del programa.
 
 
 Criterios de evaluación
 
 Al evaluar la práctica se tendrán en cuenta los 6 aspectos que se listan a continuación:
 
 - Memoria (15%)
 - Estilo/claridad del código (15%)
 - Estructuras de datos (10%)
 - Descomposición funcional (20%)
 - Ejecución (20%)
 - Verificación de código (Trazas y banco de pruebas) (20%)
 - Análisis e implementación de optimización de la eficiencia del programa por la
 ordenación de datos (10% adicional)
 
 
 ARCHIVOS
 
 matricula.txt
 NIA, grado, lista_asig
 
 227788,000200,(200100, 200101, 200102, 200103, 250104)
 227788,000200,(200100, 200101, 200102, 200103, 250104, 300126)
 227788,000200,(200100, 200101, 200102, 200103, 250104)
 227788,000200,(200100, 200101, 200102, 200103, 250104)
 
 profesores.txt
 código_prof, lista_restricciones_horarias
 
 000230, (16/07/2014,M), (23/07/2014,M), (19/07/2014,E), (21/07/2014, E), (22/07/2014, E)
 033454, (25/07/2014,E), (19/07/2014,T), (22/07/2014,E), (18/07/2014, M)
 033487, (18/07/2014,M), (19/07/2014,T), (16/07/2014,E), (17/07/2014, M)
 030811, (18/07/2014,M), (19/07/2014,E)
 145320, (16/07/2014,E), (17/07/2014,E), (19/07/2014,E), (18/07/2014, E)
 
 asignaturas.txt
 asig, grado, tipo, curso, trimestre, franja, num_alumnes, lista_profs
 
 200100, 000200, B, 2, 1, M, 40, (000230)
 200101, 000200, B, 2, 1, M, 67, (033454, 000230)
 200102, 000200, B, 2, 1, M, 50, (033454)
 200103, 000200, B, 2, 1, M, 150, (000230)
 
 250104, 000200, P, 2, 1, M, 70, (000230)
 250105, 000200, P, 2, 1, M, 39, (033487)
 250106, 000200, P, 2, 1, M, 65, (030811)
 
 300126, 000200, B, 3, 1, T, 53, (030811)
 300125, 000200, B, 3, 1, T, 58, (145320)
 300123, 000200, B, 3, 1, T, 43, (145320, 033454)
 300124, 000200, B, 3, 1, T, 61, (145320)
 
 350129, 000200, P, 3, 1, T, 20, (000230)
 350127, 000200, P, 3, 1, T, 43, (145320)
 350128, 000200, P, 3, 1, T, 23, (033487)
 
 100109, 000200, B, 1, 1, T, 324, (033487)
 100110, 000200, B, 1, 1, T, 412, (145320)
 100111, 000200, B, 1, 1, T, 301, (030811, 033454)
 100108, 000200, B, 1, 1, T, 180, (033454)
 
 150132, 000200, P, 1, 1, T, 70, (033454, 033487)
 150131, 000200, P, 1, 1, T, 53, (030811, 000230)
 150130, 000200, P, 1, 1, T, 92, (033487)
 
 aules.txt
 Código_aula, edificio, planta, capacidad
 
 52.119, 52, 1, 120
 52.019, 52, 0, 120
 52.209, 52, 0, 120
 52.105, 52, 1, 70
 
 horario_examenes.txt
 código_asig, fecha, franja, lista_aulas
 
 100109, 000200, 23/07/2014, B, (52.109, 52.119)
 100110, 000200, 22/07/2014, B, (52.109, 52.209)
     |