retrospectiva_circunstancial

2
E.U. de Estad´ ıstica - Grado en Estad´ ıstica Aplicada Programaci ´ on I - Grupo B Pr´ actica 1. Calendario perpetuo Fecha de entrega: 9 de Diciembre de 2009 Primera parte El objetivo de esta pr´ actica es resolver el siguiente problema: dada una fecha, expresada por el usuario mediante su d´ ıa, mes y a˜ no, determinar el d´ ıa de la semana en el que cae. A continuaci´ on se muestra un ejemplo de ejecuci ´ on del programa a realizar: Introduce el dia: 11 Introduce el mes: 10 Introduce el a˜ no: 2009 Ese d´ ıa es Martes Para el c ´ alculo del d´ ıa de la semana se utilizar ´ a el siguiente procedimiento: 1. Obtener el siglo de la fecha a partir de las dos primeras cifras del a ˜ no introducido. Hallar el resto de la divisi ´ on del siglo entre 4. En funci ´ on del resultado utilizar el c ´ odigo de la siguiente tabla: Resto (Siglo/4): 0 1 2 3 odigo: 0 6 4 2 2. Sumar a este c ´ odigo las dos ´ ultimas cifras del a ˜ no. 3. Dividir las dos ´ ultimas cifras del a ˜ no entre cuatro, ignorando decimales. Sumar el resultado al obtenido en el paso anterior. 4. Sumar el d´ ıa del mes indicado por el usuario. 5. Sumar el siguiente c ´ odigo en funci ´ on del mes indicado por el usuario: Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic 1 4 4 0 2 5 0 3 6 1 4 6 Si el a˜ no es bisiesto, se deber´ an utilizar los c´ odigos para los meses de Enero y Febrero que se muestran a continuaci ´ on. Para el resto de meses la tabla anterior sigue siendo v´ alida. Ene Feb 0 3 Recuerda: un a ˜ no es bisiesto cuando es divisible por 4 y no divisible por 100. En este ´ ultimo caso es bisiesto s ´ olo si es divisible por 400. Por ejemplo, los a ˜ nos 1800 y 1900 no fueron bisiestos, pero ı lo fueron el 1600 y el 2000. 6. Dividir entre 7 el total obtenido en los pasos anteriores. A partir del resto de la divisi´ on se ob- tendr´ a el d´ ıa de la semana de acuerdo a la siguiente tabla: Resto (Total/7) 0 1 2 3 4 5 6 ıa abado Domingo Lunes Martes Mi´ ercoles Jueves Viernes Ejemplo: ¿Qu´ e d´ ıa de la semana fue el 11 de Noviembre de 2009? Siglo 21 (c ´ odigo 6): 6 ´ Ultimas cifras del a ˜ no: 09 Cuarta parte de 09: 02 ıa del mes: 11 odigo del mes (Noviembre): + 4 Total: 32 dividiendo entre 7 se obtiene resto 4 Mi´ ercoles 1

Upload: examenvb

Post on 04-Sep-2015

2 views

Category:

Documents


0 download

DESCRIPTION

retrospectivacircunstantivaleopecticanumispractica

TRANSCRIPT

  • E.U. de Estadstica - Grado en Estadstica Aplicada Programacion I - Grupo B

    Practica 1. Calendario perpetuoFecha de entrega: 9 de Diciembre de 2009

    Primera parte

    El objetivo de esta practica es resolver el siguiente problema: dada una fecha, expresada por elusuario mediante su da, mes y ano, determinar el da de la semana en el que cae. A continuacionse muestra un ejemplo de ejecucion del programa a realizar:

    Introduce el dia: 11Introduce el mes: 10Introduce el ano: 2009Ese da es Martes

    Para el calculo del da de la semana se utilizara el siguiente procedimiento:

    1. Obtener el siglo de la fecha a partir de las dos primeras cifras del ano introducido. Hallar el restode la division del siglo entre 4. En funcion del resultado utilizar el codigo de la siguiente tabla:

    Resto (Siglo/4): 0 1 2 3Codigo: 0 6 4 2

    2. Sumar a este codigo las dos ultimas cifras del ano.

    3. Dividir las dos ultimas cifras del ano entre cuatro, ignorando decimales. Sumar el resultado alobtenido en el paso anterior.

    4. Sumar el da del mes indicado por el usuario.

    5. Sumar el siguiente codigo en funcion del mes indicado por el usuario:

    Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic1 4 4 0 2 5 0 3 6 1 4 6

    Si el ano es bisiesto, se deberan utilizar los codigos para los meses de Enero y Febrero que semuestran a continuacion. Para el resto de meses la tabla anterior sigue siendo valida.

    Ene Feb0 3

    Recuerda: un ano es bisiesto cuando es divisible por 4 y no divisible por 100. En este ultimo casoes bisiesto solo si es divisible por 400. Por ejemplo, los anos 1800 y 1900 no fueron bisiestos, peros lo fueron el 1600 y el 2000.

    6. Dividir entre 7 el total obtenido en los pasos anteriores. A partir del resto de la division se ob-tendra el da de la semana de acuerdo a la siguiente tabla:

    Resto (Total/7) 0 1 2 3 4 5 6Da Sabado Domingo Lunes Martes Miercoles Jueves Viernes

    Ejemplo: Que da de la semana fue el 11 de Noviembre de 2009?

    Siglo 21 (codigo 6): 6Ultimas cifras del ano: 09

    Cuarta parte de 09: 02Da del mes: 11

    Codigo del mes (Noviembre): + 4

    Total: 32 dividiendo entre 7 se obtiene resto 4Miercoles

    1

  • Segunda parte

    En esta parte se ampliara el programa anterior para que tambien imprima por pantalla el calendariocorrespondiente al mes especificado por el usuario. Un posible ejemplo de ejecucion sera:

    Introduce el da: 28Introduce el mes: 8Introduce el ano: 2004------------------------------

    L M X J V S D------------------------------

    12 3 4 5 6 7 89 10 11 12 13 14 1516 17 18 19 20 21 2223 24 25 26 27 28 2930 31

    ------------------------------Ese da es: Sabado

    Una posible forma de realizar esto es la siguiente:

    1. Imprimir la cabecera del calendario.

    2. Calcular el da de la semana en el que cae el primer da del mes introducido por el usuario, as co-mo el numero de das del dicho mes.

    3. El algoritmo expuesto en la primera parte obtiene como resultado unos valores en una escala unpoco extrana (0 7 Sabado, 1 7 Domingo . . . 6 7 Viernes). Convertir el valor del paso anterior ensu equivalente en una escala mas natural (es decir: 1 7 Lunes, 2 7Martes . . . 7 7 Domingo).

    4. Mediante un bucle generar los espacios en blanco que sean necesarios antes del primer 1. El valorobtenido en el paso anterior sera de ayuda en esto.

    5. Mediante otro bucle imprimir los numeros del calendario. Puede resultar util un contador para elda de la semana del numero que se esta imprimiendo. Cuando ese contador llegue a 7 (domingo),se imprime un salto de lnea y se vuelve a poner el contador a 1 para el siguiente numero.

    Posibles ampliaciones (opcionales)

    Realizar la comprobacion que los datos introducidos por el usuario sean correctos. Es decir, queesten dentro del rango permitido y que realmente sean numeros. Si el usuario introduce un datoincorrecto, se mostrara un mensaje de error y se volvera a solicitar.

    Resaltar el da introducido por el usuario en el calendario. Por ejemplo, encerrando el numerocorrespondiente entre ( y ).

    Imprimir una cabecera centrada con el mes y el ano. Las funciones de manejo de cadenas (modulostring) seran de utilidad en este caso.

    Evaluacion

    La correccion de la practica es un requisito indispensable. Ademas, se valorara positivamente laclaridad del codigo (abundancia de comentarios, nombres de identificadores adecuados, etc...).

    2