logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak napisać program wiecznego kalendarza w C do obliczania dnia tygodnia?

nika111 07 Maj 2006 18:42 6889 4
REKLAMA
  • #1 2602121
    nika111
    Poziom 1  
    Posty: 1
    hej!!mam mały problem.Muszę napisać program, który ma być programową wersja wiecznego kalendarza(tzn.podając dowolną datę uzyskuje się dzień tygodnia).niestety nie wiem zupełnie jak się za to zabrać.Jakakolwiek pomoc w tej sprawie bedze mi niezwykle przydatna. Z góry dziękuje:)
  • REKLAMA
  • #2 2605409
    ed-ek
    Poziom 34  
    Posty: 1814
    Pomógł: 275
    Ocena: 42
    Załączam ci prog. w C++ (kompil. pod Dev-C++), jeżeli ma to być w C, to zmień fcje IO.
    Funkcja obliczająca ilość dni jest niudokumentowana (przynajmniej o tym nie wiem), ale działa OK.

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    int r,d,m,ile_dni;
    string dz[ 7 ]={"niedz.","poniedz.","wtorek","sroda",
    "czwartek.","piatek","sobota"};
    int ile1(int r,int m,int d)
    {
    return(int(365*r+d+31*(m-1)+int((r-1)/4)-int(0.75*(int(((r-1)/100)+1)))));
    }

    int ile2(int r,int m,int d)
    {
    return(int (365*r+d+31*(m-1)-int(0.4*m+2.3)+int(r/4)-int(0.75*(int(r/100)+1))));
    }

    int main()
    {
    cout<<"podaj rok ";cin>>r;
    cout<<"podaj miesiac ";cin>>m;
    cout<<"podaj dzien ";cin>>d;
    if((m==1)||(m==2)) ile_dni=ile1(r,m,d);else ile_dni=ile2(r,m,d);
    cout<<"od roku 0, m-ca 1, dnia 1 minelo "<<ile_dni<<" dni"<<endl;
    int d=(ile_dni % 7)-1;if(d==-1)d=0;
    cout<<endl;
    cout<<"szukany dzien to "<<dz[ d ]<<endl;
    system("pause");
    }
  • REKLAMA
  • #3 2607454
    kordan11
    Poziom 18  
    Posty: 241
    Pomógł: 24
    Ocena: 10
    Znalazłem coś takiego, jest to w c
    (d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7
    0 - niedziela; 6-sobota
    d - dzień
    m - miesiąć od 1-12
    y - rok

    A to jest w pascalu
    dzień tygodna = ([23m/9] + d + 4 + y + [z/4] - [z/100] + [z/400] - 2 (if m >= 3) ) mod 7
    
        gdzie
        [ ] oznacza dzielenie bez reszty z zaokrągleniem w dół
        mod - funkcja modulo
        m - numer miesiąca (od stycznia = 1 do grudnia = 12)
        d - numer dnia miesiąca
        z = y - 1 jeśli m < 3,
        z = y w pozostałych przypadkach 
  • REKLAMA
  • #4 2620339
    ed-ek
    Poziom 34  
    Posty: 1814
    Pomógł: 275
    Ocena: 42
    Coś ten kod wydaje mi się wysoce podejrany. Nie chcę go przepisywać, spróbój go skompilować i podaj wynik.
  • #5 2621485
    kordan11
    Poziom 18  
    Posty: 241
    Pomógł: 24
    Ocena: 10
    znalazłem to pod hasłem wieczny kalendarz w wikipedii, jest to wzór Mike'a Keitha
    o tutaj
REKLAMA