Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Practica programacion en c :)

Estas en el tema de Practica programacion en c :) en el foro de C/C++ en Foros del Web. Buenass soy una novata en programación y tengo que hacer un trabajo para la universidad, alguien me podria ayudar?:$ El objetivo de esta práctica es ...
  #1 (permalink)  
Antiguo 29/05/2014, 04:02
Avatar de AnaMartinez  
Fecha de Ingreso: mayo-2014
Mensajes: 2
Antigüedad: 10 años, 6 meses
Puntos: 0
Practica programacion en c :)

Buenass soy una novata en programación y tengo que hacer un trabajo para la universidad, alguien me podria ayudar?:$


El objetivo de esta práctica es consolidar el uso de ficheros de
texto, la estructuración de código en diferentes ficheros, la
ordenación, y el proceso de verificación de código (banco de
pruebas y uso de trazas).

Gestión de horarios de exámenes de una escuela

Queremos un programa que elabore los horarios de los exámenes de una escuela como
la nuestra teniendo en cuenta restricciones básicas, restricciones de disponibilidad de
profesorado y restricciones de disponibilidad de aulas.

Las restricciones básicas son todas aquellas que vienen dadas por conflictos legales, de
matriculación u operativos:

1. Un alumno no puede tener más de un examen al mismo tiempo.
2. El examen de una asignatura tiene que hacerse dentro de la franja horaria
habitual de la asignatura. Es decir, una asignatura de mañana tiene que hacer el
examen por la mañana y una asignatura de tarde lo tiene que hacer por la tarde.
3. A cada curso se le tiene que asignar los exámenes espaciados haciendo uso de
todo el periodo de exámenes. Las asignaturas obligatorias tienen que estar
espaciadas al máximo entre ellas y en el periodo completo de exámenes ya que
son las asignaturas que las cursan más estudiantes.
4. No se restringe la duración de un examen y por lo tanto, en cada franja horaria
(mañana, o tarde) sólo se puede realizar UN examen.
5. Los periodos de exámenes se especifican por una fecha de inicio y otra fecha de
final, y estos dos días se incluyen. Si hay un fin de semana en medio, el sábado
se puede asignar exámenes pero no domingo.

Las restricciones de disponibilidad de profesorado son aquellas restricciones temporales
en las que el profesorado indica que no puede hacer el examen. Estas restricciones se
especifican (código_profesor, (fecha_1, restricción_1) (fecha_2, restricción_2)…
(fecha_n, restricción_n) donde fecha se especifica dd/mm/aaaa y restricción es M, T, E
para una imposibilidad de mañana, tarde o día entero.

Las restricciones de disponibilidad de aulas vienen dadas porque se necesita disponer de
las aulas necesarias para distribuir los alumnos espaciados. Se considera un parámetro
llamado densidad d que indica que proporción de alumnos y capacidad se debe
considerar. Es decir una densidad de d=2 significa que se tiene que reservar aulas con
una capacidad suficiente para el doble de alumnos matriculados. Este parámetro se
define dentro del programa como constante con valor 2 y se recompilará si se quiere
modificar de valor. Además de esta restricción de capacidad de obligado cumplimiento,

se tienen las siguientes restricciones de aulas que son deseables y que se esperan
cumplir siempre que se pueda:

1. Intentar que si una asignatura necesita de varias aulas que estas estén en el
mismo piso o lo más cerca posible (donde “cerca” significa que la numeración
de aula sea cercana numéricamente).
2. Intentar usar el mínimo número de aulas para una asignatura para necesitar del
mínimo número de profesores para vigilar en las aulas.

Hacer notar que hay una serie de restricciones administrativas que se cumplen y ayudan
a reducir las incompatibilidades horarias pero y que ya vienen implícitas con los datos
de entrada. Estas son:

1. Un estudiante puede matricularse solo de asignaturas de dos cursos. Es decir
podrá empezar asignaturas de tercero, solo cuando haya aprobado todas las
asignaturas de primero.
2. Las asignaturas de cursos consecutivos se asignan a franjas horarias alternadas.
Es decir, si primero se hace por la mañana, segundo se hace por la tarde.

Estas restricciones administrativas son de obligado cumplimiento y el programa tiene
que verificar que los datos de entrada que se le suministran cumplen estas condiciones.
Si hubiera algún error el programa tendrá que informarlo y terminar.

Para elaborar los horarios disponemos de 4 ficheros de entrada (de tipo texto) que
aportan los datos de entrada:

1. Assignaturas.txt: fichero de tipo texto que lista todas las asignaturas de la
escuela con la información necesaria de cada asignatura. Cada línea es una
asignatura e incluye los siguientes campos separados por comas:
a. Código_asignatura: 6 dígitos decimales (ver formato abajo)
b. Código_grado: 6 digitos decimales
c. Tipo: B/P (oBligatoria,oPtativa)
d. Curso:1,2,3,4
e. Trimestre: 1,2,3
f. Franja horaria: M/T (Mañana, Tarde)
g. Número alumnos matriculados: número natural
h. Lista profesores teoría: (código_profesor_1,…. código_profesor_p)

Ejemplo: 200101, 000200, B, 2, 1, M, 67, (033454, 000230)

2. Aulas.txt: fichero de texto que lista todas las aulas y sus características. El
formato del fichero es una línea para cada aula y esta línea contiene:
a. Código_aula, edificio, planta, capacidad

Ejemplo: 52.119, 52, 1, 120



3. Matricula.txt: fichero de texto que lista todos los alumnos matriculados de la
escuela. Cada línea es un alumno que contiene la siguiente información:
a. NIA: 6 dígitos decimales
b. Código_grado: 6 dígitos decimales
c. Lista de asignaturas matriculado: (código_asignatura_1,
código_asignatura_2, … , código_asignatura_k)

Ejemplo: 227788,000200,(200100, 200101, 200102, 200103, 250104)

4. Profesores.txt: fichero de texto de la lista de profesores de la escuela. Cada línea
es un profesor que lo indentifica con el código de profesor y una lista de
restricciones horarias tal y como se describen arriba. El formato de cada línea
sería pues:
a. código_profesor, (fecha_1, restricción_1), (fecha_2, restricción_2), …
,(fecha_n, restricción_n)

Ejemplo: 030811, (18/07/2014,M), (19/07/2014,E)

El código de asignatura es un número de 6 dígitos decimales definido como:

1. Primer dígito: curso del grado (asignaturas de primero serán 1xxxxx y las de
cuarto serán 4xxxxxx)
2. Segundo dígito: 0 si es obligatoria y 5 si es optativa
3. Resto de dígitos no tienen formato preestablecido

El formato de fechas en todos los casos que se usa es <dd/mm/aaaa>.

Se adjunta un ejemplo de todos los ficheros de entrada para mostrar el formato de los
ficheros y para iniciar la ejecución. Para todos los ficheros la primera línea puede ser
una cabecera que indica el significado de cada campo de cada línea. Esta línea es
informativa y se tiene que descartar (si existe) al cargar los datos. Tened en cuenta que
este conjunto de ficheros proporcionado no es un ejemplo escogido para verificar el
código. Vosotros al diseñar el banco de pruebas tenéis que definir el contenido de los
ficheros de entrada para que contengan las pruebas necesarias para la verificación
exhaustiva de código.

Para esta práctica asumimos que todas las cantidades tienen un máximo:
1. Número asignaturas: 100
2. Número de aulas: 30
3. Número de alumnos: 350
4. Número de profesores:50
5. Número de alumnos por asignatura: 700

El programa debe coger estos ficheros como parámetros de entrada y sacar los horarios
en un fichero de salida también indicado como parámetro del programa. La ejecución
del programa hora_examenes será:

Hora_examenes <fecha_inicio> <fecha_final> <fichero_asignaturas> <fichero_aulas>
<fichero_matricula> <fichero_profesores> <fichero_salida_horarios_examenes>


El formato del fichero de salida con los horarios de los exámenes tiene que ser una lista
con todas las asignaturas de la escuela donde, para cada asignatura, se indicará la franja
horaria en la que se hace el examen (M, o T) y la lista de aulas asignadas a la asignatura.
Cada asignatura será una línea del fichero de texto de salida y esta línea tendrá el
formato:
Código_asignatura, fecha, franja_horaria, (Código_aula_1, Código_aula_2, … ,
Código_aula_k)

Ejemplo: 100109, 000200, 23/07/2014, B, (52.109, 52.119)

El fichero de salida tiene que sacar las asignaturas de cada curso por orden, es decir,
primero las asignaturas de primero y en orden ascendente del código de asignatura,
después segundo curso, después tercer curso y finalmente cuarto curso para cada grado,
listando todos los grados por orden ascendente de los códigos de grado. Se proporciona
un ejemplo de fichero de salida como ejemplo del formato pero este ejemplo no ha
estado generado por un programa por tanto puede tener inconsistencias en el contenido.

El programa tiene que sacar siempre al menos una propuesta de horario de exámenes. Si
el conjunto de restricciones es incompatible y no se puede sacar un horario que cumpla
todas las restricciones, se sacará un horario que tenga un número mínimo de conflictos
permitiendo que pocos (o un mínimo número de) alumnos tengan más de un examen a
la vez. En este caso en el fichero de salida se listarán los conflictos no resueltos para
que puedan resolverse personalmente. Si no se puede ofrecer una solución con esta
violación de restricciones el programa informará que no se ha podido encontrar una
solución y dará una asignación parcial con el máximo número de asignaturas con fecha
específica y listando las asignaturas que no se les ha podido asignar fecha y aulas para
que se haga manualmente.

Tened en cuenta que no se puede suponer que ninguno de los datos esté en ningún orden
preestablecido. Si se quisieran ordenados, se tendrán que ordenar. Se exige que
cualquier ordenación o búsqueda que se haga de los datos, se realice definiendo una
función de ordenación o búsqueda.

Como las asignaturas obligatorias son las más difíciles de asignar, es aconsejable
considerarlas primero. Se recomienda por lo tanto ordenar las asignaturas primero por
curso, y para cada curso, primero las obligatorias y después las optativas.

SEGUIMOS ABAJO :)
  #2 (permalink)  
Antiguo 29/05/2014, 04:04
Avatar de AnaMartinez  
Fecha de Ingreso: mayo-2014
Mensajes: 2
Antigüedad: 10 años, 6 meses
Puntos: 0
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)

Etiquetas: lenguajec, punteros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:07.