Haftanın gününün belirlenmesi - Determination of the day of the week

Haftanın günü belirlenmesi herhangi bir tarih için çeşitli yapılabilir algoritmaları . Ayrıca, kalıcı takvimler , kullanıcı tarafından herhangi bir hesaplama gerektirmez ve esasen arama tablolarıdır. Tipik bir uygulama, birinin doğduğu veya belirli bir olayın gerçekleştiği haftanın gününü hesaplamaktır .

kavramlar

Sayısal hesaplamada haftanın günleri, haftanın günleri olarak gösterilir. Pazartesi haftanın ilk günüyse, günler, ISO 8601'de uygulandığı gibi Pazartesi'den Pazar'a 1'den 7'ye kadar kodlanabilir . 7 ile gösterilen gün , bir sayının 7'ye bölünmesinden sonra kalanını hesaplayan aritmetik modulo 7 uygulanarak 0 olarak da sayılabilir . Böylece, 7 sayısı 0, 8 olarak 1, 9 olarak 2, 18 olarak kabul edilir. 4 ve benzeri gibi. Pazar 1. gün olarak sayılırsa, 7 gün sonra (yani 8. gün) de Pazar olur ve 18. gün, Pazar gününden üç gün sonra düştüğü için Çarşamba olan 4. gün ile aynıdır.

Standart Pazartesi Salı Çarşamba Perşembe Cuma Cumartesi Pazar Kullanım örnekleri
ISO 8601 1 2 3 4 5 6 7 %_ISODOWI%, %@ISODOWI[]% ( 4DOS ); DAYOFWEEK() ( HP Prime )
0 1 2 3 4 5 6
2 3 4 5 6 7 1 HAFTANIN %NDAY% ( NetWare , DR-DOS ); %_DOWI%, %@DOWI[]% ( 4DOS )
1 2 3 4 5 6 0 HP finansal hesap makineleri

Haftanın gününü hesaplamak için neredeyse tüm yöntemlerin temel yaklaşımı, bir 'çapa tarihinden' başlayarak başlar: bilinen bir çift (Çarşamba olarak 1 Ocak 1800 gibi), bilinen gün ile gün arasındaki gün sayısını belirler. belirlemeye çalıştığınız gün ve haftanın yeni sayısal gününü bulmak için aritmetik modulo 7'yi kullanın.

Standart bir yaklaşım, belirli bir yüzyılın haftasının ilk gününün değerini aramak (veya bilinen bir kuralı kullanarak hesaplamak), ay için bir düzeltme aramak (veya bir uyum yöntemi kullanarak hesaplamak), yüzyılın başından bu yana geçen artık yıl sayısı ve bunları yüzyılın başından itibaren geçen yıl sayısı ve ayın gün sayısı ile birlikte ekleyin. Sonunda, tarihin haftanın gününü belirlemek için modulo 7'yi uygulayan bir gün sayısı elde edilir.

Lewis Carroll'un yönteminde olduğu gibi, bazı yöntemler önce tüm eklemeleri yapar ve sonra yedileri atar, diğerleri ise her adımda bunları atar . Her iki yol da oldukça uygundur: Birincisi hesap makineleri ve bilgisayar programları için daha kolaydır, ikincisi zihinsel hesaplama için (biraz pratikle tüm hesaplamaları kafada yapmak oldukça mümkündür). Burada verilen yöntemlerin hiçbiri aralık kontrolü yapmaz, bu nedenle mantıksız tarihler hatalı sonuçlar verir.

ilgili günler

Bir aydaki her yedinci gün bir öncekiyle aynı ada sahiptir:

Gün
ayı
NS
00 07 14 21 28 0
01 08 15 22 29 1
02 09 16 23 30 2
03 10 17 24 31 3
04 11 18 25 4
05 12 19 26 5
06 13 20 27 6

karşılık gelen aylar

"Karşılık gelen aylar", takvim yılı içinde haftanın aynı gününde başlayan aylardır. Örneğin, Eylül ve Aralık karşılık gelir, çünkü 1 Eylül, 1 Aralık ile aynı güne denk gelir (çünkü iki tarih arasında tam olarak on üç 7 günlük hafta vardır). Aylar, yalnızca ilk günleri arasındaki gün sayısı 7'ye bölünebiliyorsa veya başka bir deyişle, ilk günleri arasında tam sayıda hafta varsa karşılık gelebilir. Örneğin, ortak bir yılın Şubat'ı Mart'a tekabül eder, çünkü Şubat'ın 28 günü vardır, 7'ye bölünebilen bir sayı, 28 gün tam olarak dört haftadır. Bir de artık yılda , 29 Şubat ekleyerek beri ortak bir yılda farklı aylara Ocak ve Şubat karşılıklıdır sonraki her ay bir gün sonra başladığı anlamına gelmektedir.

Ocak, ortak yıllarda Ekim ayına, artık yıllarda ise Nisan ve Temmuz ayına karşılık gelir. Şubat, ortak yıllarda Mart ve Kasım'a, artık yıllarda ise Ağustos'a karşılık gelir. Mart her zaman Kasım'a, Nisan her zaman Temmuz'a ve Eylül her zaman Aralık'a karşılık gelir. Ağustos, ortak bir yılda başka hiçbir aya karşılık gelmez. Ekim, artık yılda başka hiçbir aya karşılık gelmez. Mayıs ve Haziran asla başka bir aya denk gelmez.

Aşağıdaki ay tablosunda, ilgili aylar aynı sayıya sahiptir, bu tanımdan doğrudan çıkan bir gerçektir.

Ortak yıllar artık yıllar m
Ocak Ekim Ekim 0
Mayıs Mayıs 1
ağustos Şubat Ağu 2
Şub Mart Kas Mart Kasım 3
Haziran Haziran 4
Eylül Aralık Eylül Aralık 5
Nisan Temmuz Ocak Nisan Temmuz 6

karşılık gelen yıllar

Bir yılın başlayabileceği yedi olası gün vardır ve artık yıllar, 29 Şubat'tan sonra haftanın gününü değiştirecektir. Bu, bir yılın sahip olabileceği 14 konfigürasyon olduğu anlamına gelir. Tüm konfigürasyonlara bir dominik harfle atıfta bulunulabilir , ancak 29 Şubat'a tahsis edilmiş bir harf olmadığından, artık yılda biri Ocak ve Şubat için diğeri (alfabetik sırayla bir adım geri) Mart-Mart için olmak üzere iki ana harf vardır. Aralık.

2021, Cuma günü başlayan ortak bir yıldır, yani 2010 takvim yılına karşılık gelir. 2021 yılının ilk iki ayı, 2016 yılının ilk iki ayına tekabül etmektedir. 2022, Cumartesi günü başlayan ortak bir yıldır, yani 2011 takvim yılına tekabül etmektedir. 2022'nin son on ayı, 2016'nın son on ayına tekabül ediyor. 2023, Pazar günü başlayan ortak bir yıl, yani 2017 takvim yılına tekabül ediyor. 2024 Pazartesi gününden itibaren artık bir yıldır, yani 1996 takvim yılına tekabül etmektedir. 2024'ün ilk iki ayı 2018'in ilk iki ayına denk geliyor. 2024'ün son on ayı 2019'un son on ayına tekabül ediyor.

Her artık yıl 28 yılda bir tekrar eder ve her ortak yıl 6 yılda bir ve 11 yılda iki kez tekrar eder. Örneğin, Çarşamba günü başlayan artık yılın son oluşumu 2020 idi ve bir sonraki oluşumu 2048 olacaktır. Aynı şekilde, Cuma günü başlayan sonraki ortak yıllar 2027, 2038 ve ardından 2049 olacaktır. Bu ifadelerin ikisi de doğrudur. artık yıl atlandı, ancak bu 2100'e kadar olmayacak.

Ayrıntılar için aşağıdaki tabloya bakın.


yüzyılın yılı mod 28
y
00 06 12 17 23 0
01 07 12 18 24 1
02 08 13 19 24 2
03 08 14 20 25 3
04 09 15 20 26 4
04 10 16 21 27 5
05 11 16 22 00 6

Notlar:

  • Siyah, Ortak Yılın tüm ayları anlamına gelir
  • Kırmızı , Artık Yılın ilk 2 ayı anlamına gelir
  • Mavi , Artık Yılın son 10 ayı anlamına gelir

karşılık gelen yüzyıllar

Jülyen yüzyıl
mod 700
Gregoryen yüzyıl
mod 400
Gün
400: 1100 1800 ... 300: 1500 1900 ... Güneş
300: 1000 1700 ... Pzt
200 0900 1600 ... 200: 1800 2200 ... sal
100 0800 1500 ... evlenmek
700: 1400 2100 ... 100: 1700 2100 ... Per
600: 1300 2000 ... Cuma
500: 1200 1900 ... 000: 1600 2000 ... Doygunluk

"Yıl 000", normal kronolojide MÖ 1 yılıdır (MS 1'den önce gelir). Gelen astronomik yıl numaralandırma 0 MÖ ve MS 1. 1 arası gelir yıl ilerisini düşünerek Jülyen takvimine , (olduğundan, baştan doğru ameliyat olsaydı o olurdu olarak Jülyen takvim) Perşembe günü 1 M.Ö. başlar. Gelen ilerisini düşünerek Gregoryen takvime (o 1582 yılına kadar icat değildi çünkü sözde), 1 M.Ö. Cumartesi günü başlıyor.

Haftanın gününü hesaplamak için tablo yöntemleri

Komple tablo: Jülyen ve Gregoryen takvimleri

1300'den önceki ve 1999'dan sonraki Julian tarihleri ​​için, tablodaki 700 yılın tam katları ile farklılık gösteren yıl kullanılmalıdır. 2299'dan sonraki miladi tarihler için, tablodaki 400 yılın tam katı ile farklılık gösteren yıl kullanılmalıdır. " r0 " ile " r6 " arasındaki değerler , Yüzler değeri sırasıyla 7 ve 4'e bölündüğünde kalanları gösterir ve serinin her iki yönde nasıl uzandığını gösterir. Hem Julian hem de Gregoryen değerleri kolaylık olması için 1500-1999 gösterilmektedir. Kalın rakamlar (örneğin, 04 ) artık yılı belirtir. Bir yıl 00 ile bitiyorsa ve yüzlercesi kalın yazılmışsa artık yıldır. Böylece 19, 1900'ün bir Gregoryen artık yılı olmadığını gösterir (ancak Jülyen sütunundaki 19 , tüm Jülyen x 00 yıllarında olduğu gibi , bir Jülyen artık yılı olduğunu gösterir ). 20 , 2000'in artık yıl olduğunu gösterir. Kullanım Jan ve Şubat sadece artık yıllarda.

Yüzlerce Yıl Kalan Yıl Rakamları Ay D
o
W
#
Julian
(r ÷ 7)
Gregoryen
(r ÷ 4)
r5 19 16 20 r0 00 06 17 23 28 34 45 51 56 62 73 79 84 90 Ocak Ekim Sa 0
r4 18 15 19 r3 01 07 12 18 29 35 40 46 57 63 68 74 85 91 96 Mayıs Su 1
r3 17
Yok
02 13 19 24 30 41 47 52 58 69 75 80 86 97 Şubat ağustos m 2
r2 16 18 22 r2 03 08 14 25 31 36 42 53 59 64 70 81 87 92 98 Şubat Mart kasım Tu 3
r1 15
Yok
  09 15 20 26   37 43 48 54   65 71 76 82   93 99 Haziran W 4
r0 14 17 21 r1 04 10 21 27 32 38 49 55 60 66 77 83 88 94 Eylül Aralık NS 5
r6 13
Yok
05 11 16 22 33 39 44 50 61 67 72 78 89 95 Ocak Nisan Temmuz F 6

Haftanın gününün belirlenmesi için (1 Ocak 2000, Cumartesi)

  • ayın günü: 1 ~ 31 (1)
  • ay: (6)
  • yıl: (0)
  • Gregoryen takvimi için yüzyıl mod 4 ve Jülyen takvimi için mod 7 (0) .
  • 1+6+0+0=7 eklenir. 7'ye bölmek 0 kalanı bırakır, bu nedenle haftanın günü Cumartesi'dir.

Formül w = (d + m + y + c) mod 7'dir.

Revize Jülyen takvimi

Gözden geçirilmiş Julian ve Gregoryen takvimlerindeki tarihin (ve dolayısıyla haftanın gününün) 14 Ekim 1923'ten 28 Şubat MS 2800'e kadar aynı olduğunu ve büyük yıllar için 6300 veya daha fazlasını çıkarmanın mümkün olabileceğini unutmayın. tablo içinde veya tabloya daha yakın bir yıla ulaşacak şekilde başlar.

Tabloyu kullanarak herhangi bir yılın hafta içi gününü aramak için, yıldan 100 çıkarın, farkı 100'e bölün, elde edilen bölümü (kesirler hariç) yedi ile çarpın ve ürünü dokuza bölün. Bölümü not edin (kesirler hariç). Jülyen yılı ile tabloya girin ve son bölmeden hemen önce 50 ekleyin ve yukarıda belirtilen bölümü çıkarın.

Örnek: 27 Ocak 8315 haftanın günü nedir?

8315−6300=2015, 2015−100=1915, 1915/100=19 kalan 15, 19×7=133, 133/9=14 kalan 7. 2015, 1315'ten 700 yıl ileridedir, yani 1315 kullanılır. Tablodan: yüzlerce (13) için: 6. Kalan rakamlar için (15): 4. Ay için (Ocak): 0. Tarih için (27): 27. 6 + 4 + 0 + 27 + 50 − 14 = 73 . 73/7=10 kalan 3. Haftanın günü = Salı.

Dominik Mektup

Dominik Mektubu bulmak için 1 Ocak veya 1 Ekim için haftanın gününü hesaplayın. Pazar ise, Dominik Harfi A'dır, Cumartesi B ise ve benzer şekilde hafta boyunca geriye doğru ve alfabe yoluyla Pazartesi'ye, yani G'ye ilerler.

Artık yıllarda iki Pazar Harfi vardır, bu nedenle Ocak ve Şubat için haftanın gününü 1 Ocak için ve Mart-Aralık için 1 Ekim için haftanın gününü hesaplayın.

Artık yıllar, aşağıdaki istisnalar dışında tam olarak dörde bölünen tüm yıllar:

Gregoryen takviminde - tam olarak 100'e bölünen tüm yıllar (tam olarak 400'e bölünenler hariç).

Revize Jülyen takviminde - tam olarak 100'e bölünen tüm yıllar (900'e bölündüğünde 200 veya 600 kalanını verenler hariç).

"Kıyamet"

Bu, eğlence matematiğinin bir eseridir. Açıklama için kıyamet kuralına bakınız .

Sonucu kontrol et

Herhangi bir hesaplama yapmadan haftanın gününü bulmak için bu tabloyu kullanın.

dizin Pzt
A
Sal
B
Çar
C
Per
D
Cuma
E
Cmt
F
güneş
g
Sürekli Gregoryen ve Jülyen takvimi Artık yıllar için Ocak ve Şubat
kullanın Yüzyıl satırındaki harf için yıl satırındaki tarih harfi

Bütün C günleri kıyamet günüdür

Jülyen
yüzyılı
Gregoryen
yüzyıl
Tarih 01
08
15
22
29
02
09
16
23
30
03
10
17
24
31
04
11
18
25

05
12
19
26

06
13
20
27

07
14
21
28

12 19 16 20 Nisan Temmuz Ocak G A B C NS E F 01 07 12 18 29 35 40 46 57 63 68 74 85 91 96
13 20 Eylül Aralık F G A B C NS E 02 13 19 24 30 41 47 52 58 69 75 80 86 97
14 21 17 21 Haziran E F G A B C NS 03 08 14 25 31 36 42 53 59 64 70 81 87 92 98
15 22 Şubat Mart kasım NS E F G A B C 09 15 20 26 37 43 48 54 65 71 76 82 93 99
16 23 18 22 ağustos Şubat C NS E F G A B 04 10 21 27 32 38 49 55 60 66 77 83 88 94
17 24 Mayıs B C NS E F G A 05 11 16 22 33 39 44 50 61 67 72 78 89 95
18 25 19 23 Ocak Ekim A B C NS E F G 06 17 23 28 34 45 51 56 62 73 79 84 90 0 0
[Yıl/100] Gregoryen
yüzyıl
20
16
21
17
22
18
23
19
Yıl mod 100
Jülyen
yüzyılı
19
12
20
13
21
14
22
15
23
16
24
17
25
18

Örnekler:

  • Ortak yöntem için
26 Aralık 1893 (GD)

Aralık F satırında ve 26, E sütunundadır , bu nedenle tarihin harfi C, F satırında ve E sütununda bulunur . 93 (yıl mod 100) D satırında (yıl satırı) ve yıl satırındaki C harfi G sütununda yer alır . 18 (Miladi yüzyıl sütununda [yıl/100]) C satırında (yüzyıl satırı) ve yüzyıl satırı ve G sütunundaki harf B'dir, yani haftanın günü Salı'dır.

13 Ekim 1307 (JD)

13 Ekim F günüdür. Yıl satırındaki (07) F harfi G sütununda yer almaktadır . Yüzyıl satırı (13) ve G sütunundaki harf E'dir, dolayısıyla haftanın günü Cuma'dır.

1 Ocak 2000 (GD)

1 Ocak G'ye karşılık gelir, yıl satırındaki ( 0 0) G, yüzyıl satırındaki ( 20 ) F'ye karşılık gelir ve F Cumartesi'ye karşılık gelir.

Yöntem için özlü bir formül: "Tarih harfi (G), harfi (G) yıl satırında ( 0 0), yüzyıl satırında ( 20 ) (F) harfi için ve gün için (F) harfi olur. hafta içi (Cumartesi)" .

Pazar Mektubu yöntemi

Yılın her günü (29 Şubat dışında) ABCDEFG tekrar eden bir sırayla kendisine tahsis edilmiş bir harfe sahiptir. Dizi 1 Ocak'ta A ile başlıyor ve 31 Aralık'ta tekrar A ile devam ediyor. Pazar mektubu, yıldaki tüm Pazar günlerine karşı duran mektuptur. 29 Şubat'ta harf bulunmadığından, bu, Mart-Aralık arasındaki Pazar Mektubu'nun Ocak ve Şubat'a kıyasla sıralamada bir adım geri olduğu anlamına gelir. Herhangi bir tarihin harfi, "Latin kare"nin solundaki (siyah) ayı içeren satırın "Latin kare"nin üzerindeki tarihi içeren sütunla buluştuğu yerde bulunacaktır. Pazar mektubu, yüzyılı içeren sütunun ("Latin karenin" altında) "Latin karenin" sağındaki yılın son iki basamağını içeren satırla buluştuğu yerde bulunacaktır. Artık yıl için, bu şekilde bulunan Pazar mektubu Mart-Aralık ayları için geçerlidir.

Örneğin, 16 Haziran 2020'nin hafta içi gününü bulmak için:

Sütun "20", "D" de "20" satırıyla buluşuyor. "Haziran" satırı, "F" noktasında "16" sütunuyla buluşuyor. F, D'den iki harf olduğu için, hafta içi Pazar, yani Salı'dan iki gündür.

matematiksel algoritmalar

Oran Ölümü

Önemsiz Rata Die yöntemi , D haftasının bilinen bir gününden itibaren geçen d günlerinin sayısını toplayarak çalışır . Haftanın günü daha sonra ( D + d ) mod 7 tarafından verilir ve D' yi kodlamak için kullanılan her türlü kurala uyar .

Bu yöntem gerekenden daha pahalıdır ve insan hesaplaması için pratik değildir. IBM , bilinen temel tarihi 1 Ocak, AD 1, Pazartesi olan REXX programlama dilinde bir Rata Die yöntemi kullanmıştır.

Örneğin, 13 Ağustos 2009 tarihi MS 1 Ocak'tan itibaren 733632 gündür. Sayının 7'ye bölünmesi 4'ü, dolayısıyla Perşembe'yi verir.

Gauss'un algoritması

Carl Friedrich Gauss , astronomik tablolar koleksiyonunda el yazısıyla yazılmış bir notta herhangi bir yılda 1 Ocak için haftanın gününü hesaplamak için bir yöntem tanımladı. Hiç yayınlamadı. Sonunda 1927'de toplu eserlerine dahil edildi. Rata Die ile karşılaştırıldığında, sonuç yılların sayımını basitleştirmeye yardımcı oluyor.

Gauss'un yöntemi Gregoryen takvimine uygulanabilirdi. Hafta içi günleri Pazar gününden başlayarak 0'dan 6'ya kadar numaralandırdı. Aşağıdaki işlemi tanımladı.

Girişler
Yıl numarası A , ay numarası M , gün sayısı D .
Çıktı
Yılın günü.
prosedür
  1. İlk gün haftanın-belirlemek d 1 1 Ocak.
    • Gregoryen takvimi için haftanın günü . Alternatif olarak, C = A \ 100 , Y = A  % 100 olarak ayarlayın ve değer .
    • Jülyen takvimi için haftanın günü veya .
  2. Şimdi M ile arama tablosunu kullanarak ayla ilgili ofseti m belirleyin .
  3. Döndür d = ( d 1 + m + D ) % 7 .
Ay ofsetleri tablosu
ay Ocak Şubat Mart Nisan Mayıs Haziran Temmuz ağustos Eylül Ekim kasım Aralık
Ortak yıllar 0 3 3 6 1 4 6 2 5 0 3 5
artık yıllar 4 0 2 5 0 3 6 1 4 6

Yukarıdaki prosedür, Gregoryen durumu için tek bir ifadede özetlenebilir:

Çalışılan örnek

2000 yılı için, A − 1 = 1999 , Y − 1 = 99 ve C = 19 , 1 Ocak'ın hafta içi günü

İçin hafta içi Nisan 1777 30 ve 23 Şubat 1855 olan

ve

Açıklama ve notlar

1 Ocak haftanın günü için algoritma, modulo aritmetiği kullanılarak kanıtlanabilir. Ana nokta, 365 mod 7 = 1 olduğu için her yıl ilerlemeye 1 gün eklemesidir. Gerisi artık yıl için ayarlamadır. Century tabanlı sürümlerde 36525 mod 7 = 6 bulunur .

Ay ofsetleri tablosu, artık yıl nedeniyle Şubat ayında bir farklılık göstermektedir. Yaygın bir teknik (daha sonra Zeller tarafından kullanıldı), ayı Mart ile başlayacak şekilde kaydırmaktır, böylece artık gün sayımın sonunda olur. Ek olarak, daha sonra Zeller tarafından gösterildiği gibi, tablo aritmetik bir ifadeyle değiştirilebilir.

Bu formül ayrıca Kraitchik ve Schwerdtfeger tarafından haftanın herhangi bir gününü hesaplamak için grafik ve tablo yöntemlerine dönüştürülmüştür.

farklı varyasyon

Aşağıdaki formül, arama tablosu olmayan ve değiştirilmiş bir ayı olan bir sürüm örneğidir. formül

nerede

  • Y , Ocak veya Şubat ayı için eksi 1 ve diğer herhangi bir ay için yıldır.
  • y , Y'nin son 2 basamağıdır
  • c , Y'nin ilk 2 basamağıdır
  • d ayın günüdür (1 ila 31)
  • m kaydırılan aydır (Mart=1,…,Şubat=12)
  • w haftanın günüdür (0=Pazar,…,6=Cumartesi). Eğer w negatifse, ona 7 eklemelisiniz.
Ay ofsetleri tablosu ( )
ay Ocak Şubat Mart Nisan Mayıs Haziran Temmuz ağustos Eylül Ekim kasım Aralık
Telafi etmek 0 3 2 5 0 3 5 1 4 6 2 4

Zeller'in algoritması

Zeller'in algoritmasında, aylar Mart için 3'ten Şubat için 14'e kadar numaralandırılmıştır. Yılın Mart ayında başlayacağı varsayılır; bu, örneğin, Ocak 1995'in 1994'ün 13. ayı olarak ele alınması gerektiği anlamına gelir. Gregoryen takvimi formülü şu şekildedir:

nerede

  • Y , Ocak veya Şubat ayı için eksi 1 ve diğer herhangi bir ay için yıldır.
  • y , Y'nin son 2 basamağıdır
  • c , Y'nin ilk 2 basamağıdır
  • d ayın günüdür (1 ila 31)
  • m , kaydırılan aydır (Mart=3,...Ocak = 13, Şubat=14)
  • w haftanın günüdür (1=Pazar,..0=Cumartesi)

Tek fark, Zeller algoritması ( Z ) ile Disparate Gauss algoritması ( G ) arasındaki farktır , yani ZG = 1 = Pazar .

(Mart = Z'de 3, ancak Mart = G'de 1 )
Ay ofsetleri tablosu ( )
ay Mart Nisan Mayıs Haziran Temmuz ağustos Eylül Ekim kasım Aralık Ocak Şubat
Telafi etmek 1 4 3 6 1 4 6 2 5 0 3 5

Wang'ın algoritması

Wang'ın Gregoryen takviminin insan hesaplaması için algoritması (m 1 ise formül 1 veya yıl artık yıl ise 2 çıkarılmalıdır)

nerede

  • yılın son rakamı
  • yılın son ikinci basamağı
  • yılın ilk 2 hanesidir
  • ayın günüdür (1 ila 31)
  • aydır (Ocak=1,…,Aralık=12)
  • haftanın günüdür (0=Pazar,…,6=Cumartesi)
  • aşağıdaki tabloda listelenen değerlere sahip boş gün işlevidir (ay ofseti).
m
1 1 Bir gün
3 5 m + 2
5 7
7 9
9 3 m + 1
11 12
2 12 m + 3
4 2 m - 2
6 4
8 6
10 8
12 10

Jülyen takvimi için bir algoritma yukarıdaki algoritmadan türetilebilir.

kıyamet nerede .

m
1 3 C günü
3 7 m + 4
5 9
7 11
9 5 m - 4
11 7
2 0 m - 2
4 4 m
6 6
8 8
10 10
12 12

Diğer algoritmalar

Schwerdtfeger'in yöntemi

Schwerdtfeger'in kısmen tablo yönteminde yıl, yüzyıla ve yüzyıl içindeki iki basamaklı yıla bölünür. Yaklaşım aya bağlıdır. İçin m ≥ 3 ,

yani g 0 ile 99 arasındadır. m = 1,2 için ,

Haftanın gününün formülü,

pozitif modülün seçildiği yer.

e değeri aşağıdaki tablodan elde edilir:

m 1 2 3 4 5 6 7 8 9 10 11 12
e 0 3 2 5 0 3 5 1 4 6 2 4

f değeri , takvime bağlı olarak aşağıdaki tablodan elde edilir. Gregoryen takvimi için,

c modu 4 0 1 2 3
F 0 5 3 1

Jülyen takvimi için,

c modu 7 0 1 2 3 4 5 6
F 5 4 3 2 1 0 6

Lewis Carroll'un yöntemi

Charles Lutwidge Dodgson ( Lewis Carroll ), yukarıdaki "Tam tablo: Julian ve Gregoryen takvimleri"nde olduğu gibi aylar için aynı indeks numaralarını kullanarak kısmen tablo şeklinde olsa da bir bulmacaya benzeyen bir yöntem tasarladı. Artık olmayan yılların ilk üç ayı için aynı üç ayarlamayı, sonuncusu için bir 7 daha yüksek listeler ve gerisini bulmak için şifreli talimatlar verir; yüzyıllar için yaptığı ayarlamalar, yüzyıllar tablosuna benzer formüller kullanılarak belirlenecektir. Yönteminin Eski Tarz tarihler için de işe yaradığını iddia etmekte açık olmasına rağmen , "1676, 23 Şubat"ın yalnızca 25 Mart yerine 1 Ocak'ta başlayan Jülyen takviminde bir Çarşamba olduğunu belirlemek için aşağıda çoğaltılan örneği. "Eski Tarz" Jülyen takvimi .

algoritma:

Verilen tarihi 4 porsiyon halinde alın, yani. asırların sayısı, geçen yılların sayısı, ay, ayın günü.

Aşağıdaki 4 öğeyi, bulunduğunda her birini önceki öğelerin toplamına ekleyerek hesaplayın. Bir öğe veya toplam 7'yi aştığında, 7'ye bölün ve yalnızca kalanı saklayın.

Century-item: ' Eski Stil ' (2 Eylül 1752'de sona eren) için 18'den çıkarın. ' Yeni Stil ' (14 Eylül 1752'de başladı) için 4'e bölün, 3'ten fazlalığı alın, kalanı 2 ile çarpın.

Yıl öğesi: Fazladaki düzineler, fazlalık ve 4s sayısını toplayın.

Ay öğesi: Bir sesli harfle başlıyor veya bitiyorsa, yıldaki yerini gösteren sayıyı 10'dan çıkarın. Bu, artı gün sayısı, bir sonraki ayın öğesini verir. Ocak için madde "0"; Şubat veya Mart için "3"; Aralık için "12".

Gün kalemi: Böylece ulaşılan toplam, artık yılda Ocak veya Şubat ise, "1" çıkarılarak (toplam "0" ise ilk önce 7 eklenir) düzeltilmelidir, her yıl, 4'e bölünebilen bir artık Yıldır, yalnızca yüzyıl-yıllar hariç, 'Yeni Stil'de, yüzyılların sayısı pek bölünemez (örn. 1800).

Nihai sonuç haftanın gününü verir, "0" Pazar anlamına gelir, "1" Pazartesi vb.

Örnekler:

1783, 18 Eylül

17, 4'e bölünür, üzerinde "1" bırakır; 3'ten 1 "2" verir; iki kez 2 "4" dür. 83, 6 düzine ve 11'dir ve 17'yi verir; artı 2 19 verir, yani (7'ye bölerek) "5". Toplam 9, yani "2" Ağustos kalemi "10'dan 8", yani "2"; yani Eylül için "2 artı 31" yani "5" Toplam 7 yani "0" çıkıyor. 18 "4" verir. Cevap, "Perşembe".

1676, 23 Şubat

18'den 16 "2" verir 76, 6 düzine ve 4'tür, 10 verir; artı 1, 11, yani "4" verir. Toplam "6" Şubat ayı madde "3". Toplam 9 yani "2" 23 "2" verir. Artık Yıl için Toplam "4" Düzeltmesi "3" verir. Cevap, "Çarşamba".

23 Şubat 1676 (Şubat'ı ikinci ay olarak sayar), Carroll için Gregoryen 4 Mart 1676 ile aynı gün olduğundan, Gregoryen takvimindeki Eski Tarz tarihi için doğru cevaba, yani "Cuma"ya ulaşamaz. 5 Mart 1677 ile aynı gün. O, yılın 25 Mart'ta başlayacağını doğru bir şekilde varsaymış olsaydı , yöntemi , iki takvim arasında - tıpkı George Washington'un doğum gününün farklı olması gibi - farklı yıl sayılarını hesaba katacaktı .

Carroll'ın yöntemini yeniden yayınlayanların, özellikle de Martin Gardner'ın hatasına dikkat çekmemesi dikkat çekicidir .

1752'de Britanya İmparatorluğu , dünyanın birçok ülkesinde bugünün standardı haline gelen Gregoryen takvimini benimseyerek Eski Stil Jülyen takvimini kullanmaktan vazgeçti . Daha fazla arka plan için Eski Stil ve Yeni Stil tarihlerine bakın .

Bilgisayar kodundaki yöntemler

Keith

Aşağıdaki C dilindeki ifadelerde y, mve dsırasıyla yılı (örn. 1988), ayı (1-12) ve ayın gününü (1-31) temsil eden tamsayı değişkenleridir.

(d+=m < 3 ? y-- : y-2, 23*m/9+d+4+y/4-y/100+y/400)%7

1990'da Michael Keith ve Tom Craver, Gregoryen tarihini haftanın sayısal gününe dönüştürmek için bağımsız bir işleve girmek için gereken tuş vuruşlarının sayısını en aza indirmeyi amaçlayan yukarıdaki ifadeyi yayınladı. 0= Pazar, 1= Pazartesi, vb. döndürür . Bu ifade yapı olarak Zeller'in algoritmasına benzer, ancak benzersiz bir ay bileşenine sahiptir.

Kısa bir süre sonra, Hans Lachman, düşük kaliteli cihazlarda kullanım kolaylığı için algoritmalarını modernize etti. Orijinal olarak dört işlevli hesap makineleri için tasarlandığı gibi, yönteminin aralığını ya AD 1905–2099 ya da tarihi Jülyen tarihleriyle sınırlayarak daha az tuş takımı girişine ihtiyaç duyar. Daha sonra, herhangi bir Gregoryen tarihini, hatta bir abaküs üzerinde bile dönüştürmek için değiştirildi . On Motorola 68000 tabanlı cihazlar, ya daha az ihtiyaç benzer olduğu işlemci kayıtları veya opcodes amaçlanan tasarım hedefi bağlı.

Sakamoto'nun yöntemleri

Tøndering'in algoritmasının tablo şeklindeki öncüsü, aşağıdaki K&R C işlevinde somutlaştırılmıştır . Küçük değişikliklerle APL2 gibi diğer üst düzey programlama dillerine uyarlandı . Tomohiko Sakamoto tarafından comp.lang.c Usenet haber grubuna 1992'de gönderildi, herhangi bir Gregoryen tarihi için doğrudur.

dayofweek(y, m, d)	/* 1 <= m <= 12,  y > 1752 (in the U.K.) */
{
    static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
    if ( m < 3 )
    {
        y -= 1;
    }
    return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}

0= Pazar, 1= Pazartesi vb. döndürür .

Sakamoto ayrıca aynı anda daha karmaşık bir versiyon yayınladı:

dow(m,d,y) { y-=m<3; return(y+y/4-y/100+y/400+"-bed=pen+mad."[m]+d)%7; }

Bu sürüm, dizedeki ay ofsetlerini kodlar ve sonuç olarak , algoritmayı doğru şekilde çalıştırmak için standart ASCII kullanan ve taşınabilirliğini azaltan bir bilgisayar gerektirir . Ek olarak, her iki algoritma da orijinal K&R C'de izin verilen ancak ANSI C'de izin verilmeyen int tür bildirimlerini atlar .

(Tøndering'in algoritması, yine yapı olarak Zeller'in uyumuna ve Keith'in kısa koduna benzer, ancak ay ile ilgili bileşen 31*m/12.

Ayrıca bakınız

Referanslar

  • Hale-Evans, Ron (2006). "Hack # 43: Haftanın herhangi bir gününü hesaplayın". Zihin performansı tüyoları (1. baskı). Pekin: O'Reilly. s.  164–169 . ISBN'si 9780596101534.
  • Thioux, Marc; Stark, David E.; Klaiman, Cheryl; Schultz, Robert T. (2006). "700 ms'de doğduğunuz haftanın günü: Otistik bir bilgede takvim hesaplaması". Deneysel Psikoloji Dergisi: İnsan Algısı ve Performansı . 32 (5): 1155–1168. doi : 10.1037/0096-1523.32.5.1155 .
  • Treffert, Darold A. "Neden takvim hesaplanıyor?". Deha Adaları : otistik, edinilmiş ve ani bilginin cömert zihni (1. yayın, [repr.]. ed.). Londra: Jessica Kingsley. s. 63–66. ISBN'si 9781849058735.

Dış bağlantılar