Dia de la setmana P18777


Statement
 

pdf   zip   main.cc   main.c   main.java   main.py   main.hs

html

Feu una funció que, donada una data vàlida a través de tres enters que corresponen al seu dia d, al seu mes m i al seu any a, retorni el dia de la setmana en què cau, és a dir, “dilluns”, o “dimarts”, o …

Per calcular-ho, useu la congruència de Zeller. Sigui d el dia, m el mes i a l’any. Llavors:

  1. Se li resta dos al mes m, i si dóna zero o menys se li suma 12 al mes i se li resta u a l’any. El nou mes obtingut l’anomenem m′ i el nou any a′.
  2. Es calcula la centúria c (els dos primers dígits de l’any) a partir de l’any ‍a′.
  3. Es calcula l’any y dins de la centúria (els dos darrers dígits de l’any) a partir de l’any ‍a′.
  4. Es calcula
            f = ⌊ 2.6m′−0.2 ⌋ + d + y + ⌊ y/4 ⌋ + ⌊ c/4 ⌋ − 2c.
  5. Finalment, f mòdul 7 ens dóna el resultat desitjat: 0 representa diumenge, 1 representa dilluns, 2 representa dimarts, …i 6 representa dissabte.

Interfície

C++
string dia_de_la_setmana (int d, int m, int a);
C
char* dia_de_la_setmana (int d, int m, int a);
Java
public static String dia_de_la_setmana (int d, int m, int a);
Python
dia_de_la_setmana (d, m, a) # returns str
 
dia_de_la_setmana (d: int, m: int, a: int) -> str
Haskell
diaDeLaSetmana :: Int -> Int -> Int -> String

Precondició El paràmetre corresponent a l’any està entre 1800 i 9999, ambdós inclosos. La data és vàlida.

Pista

Compte amb els mòduls de nombres negatius!

Observació Només cal enviar el procediment demanat; el programa principal serà ignorat.

Public test cases
  • Input/Output

    dia_de_la_setmana(28, 2, 2000) → dilluns
    dia_de_la_setmana(29, 2, 2000) → dimarts
    dia_de_la_setmana(1, 3, 2000) → dimecres
  • Information
    Author
    Jordi Petit
    Language
    Catalan
    Other languages
    English
    Official solutions
    C C++ Haskell Java Python
    User solutions
    C C++ Java Python