Aclaratorias Planteamiento del problema Tareas asignadas

Anuncio
Universidad Simón Bolívar
Departamento de Computación y T.I.
CI2615 –Algoritmos y Estructuras I
Enero – Marzo 2004
Laboratorio
Aclaratorias
El laboratorio que se le presenta a continuación deberá ser resuelto por cada equipo de 2 personas durante
esta semana, y entregarse el próximo jueves 26/2. El programa será revisado por su profesor durante la
sesión de taller de la siguiente semana (martes 2/3 o jueves 4/3). La versión del programa que se revisará
será la que se entregó el 26/2.
En este laboratorio se le pide que construya un programa que lea de la entrada estándar de enteros, que
manipule los datos leídos para realizar las tareas exigidas usando procedimientos, funciones y ciclos de
repeticiones, y finalmente que escriba los resultados en la salida estándar. Debe, en cada caso, escribir los
códigos que se le soliciten en el lenguaje de especificación, y traducir posteriormente a gcl el programa
completo.
Planteamiento del problema
Especifique y escriba un programa que dada una fecha expresada con 3 enteros, D, M y N,
correspondientes al día, mes y año respectivamente, devuelva el día de la semana al cual corresponde
dicha fecha, y escriba el calendario correspondiente a su mes y año. Por ejemplo, si se ingresa la fecha 12
de enero de 2004, la respuesta es “lunes”, y el calendario a imprimir sería el siguiente:
D
L
M
I
4
11
18
25
5
12
19
26
6
13
20
27
7
14
21
28
J
1
8
15
22
29
V
2
9
16
23
30
S
3
10
17
24
31
Para determinar el día de la semana de una fecha dada se debe tomar en cuenta lo siguiente:
§ El primer día de nuestra era, con fecha 1º de enero del año 1, fue un lunes.
§ Para conocer el día de la semana, diaSemana, correspondiente a una fecha se debe calcular el
número total de días transcurridos, numDiasT, desde el primer día de nuestra era:
diaSemana = (numDiasT mod 7)
El día de la semana correspondiente es :
diaSemana
0
1
2
3
4
5
6
Dia en letras
domingo
lunes
martes
miércoles
jueves
viernes
sábado
Tareas asignadas
1.
Desarrolle una función FirstDay(N), la cual dado un año N, devuelva el número de días
transcurridos hasta el 1º de enero de ese año. El número total de días transcurridos, hasta principios
del año N es el siguiente:
FirstDay(N) = N*365 + numAñosB
donde numAñosB representa los días adicionales que deben considerarse por todos los años
bisiestos que han pasado antes del año dado. Recuerde que un año es bisiesto si es múltiplo de 4 y no
es múltiplo de 100, o es múltiplo de 400.
2.
Desarrolle una función FirstDayM(N,M), la cual dado un año N y un mes M, devuelva el número
de días transcurridos desde el 1º de enero de ese año N hasta el primer día del mes M. El número total
de días transcurridos, es el siguiente:
FirstDayM(N,M) =
Σ
numDiasM[i]
y 0<=i<M
donde numDiasM es un arreglo de longitud 12 que contiene los días de cada mes de la siguiente
forma:
31
31
30
31
30
31
31
30
31
30
31
numDiasM[0] corresponde al número de días del mes de enero, y así sucesivamente. El elemento
correspondiente al mes de febrero, numDias[1], debe tomar un valor de 28 o 29 dependiendo de si
el año ingresado es bisiesto.
3.
El número total de días transcurridos, numDiasT, es el siguiente:
numDiasT = FirstDay(N) + FirstDayM(N,M) + D
4.
Para imprimir el calendario, se debe construir cada línea del mismo, tomando en cuenta el espacio en
blanco que puede estar al principio del mes.
5.
Para cada caso escribir la especificación indicando claramente: precondiciones, post-condiciones, el
invariante, inicializaciones de ciclos, y funciones de cota.
6.
Escriba en papel la prueba de correctitud de la función FirstDay(N).
7.
Debe presentar el programa escrito en gcl con todas las aserciones.
Descargar