Day of week

Zeller Kongruens er en algoritme som beregner en dag i uken gitt et år, måned og dag.
bidragsyter: EARL DUNOVANT product: {EARL DUNOVANT
> Hvilken dato er det dagen for en bestemt måned.
Zeller Kongruens er en algoritme som beregner en dag i uken gitt et år, måned og dag. Opprettet i 1887 (!). Jeff Duntemann av PC teknikker berømmelse implementert det i TP i 11/90 utgaven av Dr Dobbs Journal, med (115 min venstre), (H) jelp, mer? stor kludge fordi TP MOD operatør returnerer en rest i stedet for en ekte matematisk modulus. Jeg har lagt den kludge Alert banner som jeg bruker i min egen kode. }
Funksjon CalcDayOfWeek (år, måned, dag: Integer): Integer; Var Century, Holder: Integer; begin {Første test for feil på inngangsverdier:} if (År < 0) eller (Måned < 1) eller (Måned > 12) eller (Day < 1) eller (Day > 31) da CalcDayOfWeek: = -1 {return -1 for å indikere en feil} else {Gjør Zeller Kongruens utregning som Zeller selv} {beskrev det i " Acta Mathematica " # 7, Stockhold, 1887.} begin {Først skiller vi ut året, og tallet fra:} Century: = År div 100; År: = år MOD 100; {Neste vi justere måned slik at Mars er fortsatt måned # 3,} {men at januar og februar er måneder # 13 og # 14,} {* men i fjor *:} hvis Måned < 3 da begynne Inc (måned, 12); hvis År > 0 deretter desember (år, 1) {Året før 2000 er} else {1999, ikke 20-1 ...} begynne År: = 99; Desember (Century); ende; enden, product: {Her er Zeller banebrytende sort magi:} Holder: = Day; {Start med dagen i måneden} Holder: = Holder + (((måned + 1) * 26) div 10); {Calc tilveksten} Holder: = Holder + år; {Legg i år} Holder: = Holder + (år div 4); {Riktig For skuddår} Holder: = Holder + (Century div 4); {Riktig For talls år} Holder: = Holder - Century - Century; {Vet ikke hvorfor han gjorde dette! } {*********************** Kludge ALERT! ********************** *****} Mens Holder < 0 gjøre {Få negative verdier opp i} Inc (Holder, 7); {Positivt territorium før} {tar MOD ...} Holder: = Holder MOD 7; {Dele med 7, men beholde} {resten stedet} {kvotient} {*********************** kludge ALERT! ****** *********************} {Her vi " pakke " Lørdag rundt for å være den siste dagen:} hvis Holder = 0 da Holder: = 7; product: {Zeller holdt søndag = 1 opprinnelse; datamaskin weenies foretrekker å} {starte alt med 0, så her er en 20. århundre kludge:} desember (Holder),
CalcDayOfWeek: = Holder; {Return sluttproduktet! } End; end;



Previous:
Next Page: