ejercicio clase semiresuelto

5
Ejercicio 2: Para determinar el día de la semana de una fecha del calendario gregoriano, se utiliza la siguiente fórmula: d= Donde: d: corresponde al valor resultante del día de la semana. Con 0 = Domingo, 1 = Lunes y así sucesivamente hasta 6 = Sábado A: corresponde al año ingresado. D: corresponde al día ingresado. DM: es un valor relacionado al mes ingresado y que depende de si un año es normal o bisiesto, obtenido de la siguiente tabla: Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic Año Normal 0 3 3 6 1 4 6 2 5 0 3 5 Año Bisiesto 0 3 4 0 2 5 0 3 6 1 4 6 Diseñe un algoritmo e implemente un programa en Python que dada una fecha, expresada en dd-mm-aaaa, imprima el día de la semana correspondiente, expresado en palabras. Solución Análisis: Entradas: dia: entero, entre 1 y 31 mes: entreo, entre 1 y 12 anio: entero, mayor que 0 Salidas: dia_pal: dia en palabras, cadena, valores posibles {lunes, martes, miercoles, jueves, viernes, sabado, domingo}

Upload: alvaro-andres-villabona-m

Post on 09-Nov-2015

214 views

Category:

Documents


0 download

DESCRIPTION

ejercicio

TRANSCRIPT

  • Ejercicio 2:

    Para determinar el da de la semana de una fecha del calendario gregoriano, se utiliza la siguiente frmula:

    d=

    Donde: d: corresponde al valor resultante del da de la semana. Con 0 = Domingo, 1 = Lunes y as

    sucesivamente hasta 6 = Sbado A: corresponde al ao ingresado. D: corresponde al da ingresado. DM: es un valor relacionado al mes ingresado y que depende de si un ao es normal o

    bisiesto, obtenido de la siguiente tabla:

    Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic

    Ao Normal 0 3 3 6 1 4 6 2 5 0 3 5Ao Bisiesto 0 3 4 0 2 5 0 3 6 1 4 6

    Disee un algoritmo e implemente un programa en Python que dada una fecha, expresada en dd-mm-aaaa, imprima el da de la semana correspondiente, expresado en palabras.

    Solucin

    Anlisis:

    Entradas: dia: entero, entre 1 y 31 mes: entreo, entre 1 y 12 anio: entero, mayor que 0

    Salidas: dia_pal: dia en palabras, cadena, valores posibles {lunes, martes, miercoles, jueves, viernes, sabado, domingo}

  • Plan de prueba:

    Entradas Salidadia mes ao

    caso 1 13 04 2012 viernescaso 2 13 02 2012 lunescaso 3 13 02 2011 domingocaso 4 16 07 2013 martes

    Diagrama de flujo:

    A continuacin puede ver los diagramas del programa principal y de la funcin EsBisiesto.Los diagramas de las funciones val_bis, val_nobis y pal no estn representados, sin embargo son necesarias para el funcionamiento del algoritmo Queda propuesto para que Ud. dibuje las funciones faltantes.

  • Validacin

    En este espacio debera estar la validacin del programa, esto es, las tablas de seguimiento para cada uno de los casos de prueba definidos en el plan de prueba.

    Queda propuesto que Ud. construya las tablas y siga el algoritmo con los casos de prueba.

  • Programa en Lenguaje python.

    En este caso se ha representado el programa completo y cada una de las funiones.En un programa las funciones deben ubicadas antes de que sean invocadas.

    #funciones:

    def val_bis(m): if m==0 or m==4 or m==7: return 0 else: if m==2 or m==8:

    return 3 else:

    if m==3 or m==11: return 4

    else: if m==5:

    return 2 else:

    if m==6: return 5else: if m==9 or m==12: return 6 else: return 1

    def val_nobis(m): if m==1 or m==10: return 0 else: if m==2 or 3 or m==11:

    return 3 else:

    if m==4 or m==7: return 6 else: if m==5:

    return 1 else:

    if m==6: return 4else: if m==8: return 2 else: return 5

  • def pal(d): if d==1: return "lunes" elif d==2: return "martes" elif d==3: return "miercoles" elif d==4: return "jueves" elif d==5: return "viernes" elif d==6: return "sabado" elif d==0: return "domingo"

    def EsBisiesto(a): if a%4==0: if a%100==0 and a%400!=0:

    return 0 else:

    return 1 else: return 0

    #programa principal

    dia = int(raw_input("dia? "))mes = int(raw_input("mes? "))anio = int(raw_input("anio? "))es=EsBisiesto(anio)if es==1: val=val_bis(mes)else: val=val_nobis(mes)d=((anio-1)%7 + ((anio-1)/4 - (3/4)*((anio-1)/100 + 1))%7 + val + dia%7)%7dia_pal=pal(d)print dia_pal