Dies de la setmana P15286


Statement
 

pdf   zip

Dies de la setmana

Feu un programa que llegeixi una seqüència de dates, i escrigui per a cadascuna d’elles el seu dia de la setmana corresponent, o indiqui que la data no és correcta segons el calendari gregorià.

Implementeu les funcions

    bool es_any_de_traspas(int any);
    bool es_data_valida(int dia, int mes, int any);
    string dia_de_la_setmana(int dia, int mes, int any);    

Donat un any @a@, @es_any_de_traspas(a)@ indica si @a@ és de traspàs o no. Donada una data amb @d@, @m@ i @a@, @es_data_valida(d, m, a)@ indica si la data és vàlida o no segons el calendari gregorià. Donada una data vàlida amb @d@, @m@ i @a@, @dia_de_la_setmana(d, m, a)@ retorna el dia de la setmana en què cau la data (és a dir, “@Dilluns@”, “@Dimarts@”, …).

Per saber el dia de la setmana, utilitzeu la congruència de Zeller: Donada una data determinada pel triplet (d,m,a)(d,m,a), on dd és el dia del mes, mm és el mes de l’any i aa és l’any,

  1. Se li resten dues unitat al mes mm, i si dóna zero o menys se li suma 12 al mes i se li resta una unitat a l’any. El nou mes obtingut l’anomenem mm' i el nou any aa'.

  2. Es calcula la centúria cc (els dos primers dígits de l’any) a partir de l’any aa'.

  3. Es calcula l’any dins de la centúria yy (els dos darrers dígits de l’any) a partir de l’any aa'.

  4. Es calcula f=2.6m0.2+d+y+y/4+c/42c.f = \lfloor 2.6m'-0.2 \rfloor + d + y + \lfloor y/4 \rfloor + \lfloor c/4 \rfloor - 2c.

  5. Finalment, ff mòdul 7 ens dóna el resultat desitjat: 0 representa diumenge, 1 representa dilluns, 2 representa dimarts, ...

Podeu trobar la regla dels anys de traspàs a l’exercici  problem://problemsjutge.org:problems/p1/jpetit/traspas-elemental .

Precondició

Per a les funcions @es_any_de_traspas()@ i @es_data_valida()@, el valor de l’any sempre es troba entre 1800 i 9999 (ambdós inclosos). Per a la funció @dia_de_la_setmana()@, la data donada sempre és vàlida segons la funció @es_data_valida()@.

Entrada

Cada data de l’entrada està formada per tres enters, corresponents respectivament al dia, al més i a l’any. Tots els anys es troben entre 1800 i 9999.

Sortida

Per a cada data de l’entrada, heu d’escriure en una línia el dia de la setmana corresponent (“Dilluns”, …, “Diumenge”) si aquesta és correcta en el calendari gregorià, o bé “Data Incorrecta” si no ho és.

Autor

Jordi Petit

© Jutge.org, 2006–2025.

Public test cases
  • Input

    30 11 1971
    6 4 1971
    4 8 2001
    29 2 2001
    32 11 2005
    30 11 2004
    6 9 1901
    

    Output

    Dimarts
    Dimarts
    Dissabte
    Data Incorrecta
    Data Incorrecta
    Dimarts
    Divendres
    
  • Information
    Author
    Jordi Petit
    Language
    Catalan
    Other languages
    English
    Official solutions
    C++
    User solutions
    C++