AlgoritmaC++PyhtonYapay Zeka

Haftanın Gününü Bulma Algoritması

John Horton Conway, 1970’de genellikle “Kıyamet Algoritması” olarak adlandırılan bir algoritma ortaya attı. (21 Aralık 2012 ile ilişkisi olmasa da – tahmini kıyamet günüydü).(Ezberlemek kolay, bu yüzden endişelenme.)

Haftanın Gününü Bulma Algoritması

 Bu algoritma aşağıdaki formülü kullanır: (d + m + y + [y / 4] + c) mod 7 

D gün, m tarihte belirtilen ay, y takvim yılı ve c yüzyıl numarasıdır.

Haftanın her günü bir sayı verilir. Örneğin, Pazar haftanın ilk günüydü ve 1, Pazartesi günleri 2, vb. Ile temsil edilmektedir. Birkaç takvimde, hafta Pazartesi günü 1, Pazar olarak 7 ile başlar; ISO 8601 standart takvimi gibidir. Bu sayılar Modulo 7 kullanılarak elde edilir.

Ne biliyoruz?

Her yıl 365 gün olduğunu biliyoruz (366 güne ulaşan atılım yılı hariç). Her hafta 7 gün vardır. Ortak ay takvim yılında 28 gün ve bir sıçrama yılında 29 gün olan Şubat ayı hariç her ay 30 veya 31 gün vardır.

365 mod 7 = 1 olduğundan, her yıl bir önceki yılın başladığı günden sonraki gün başlar. Dolayısıyla, 1 Ocak 2001 Pazartesi, 1 Ocak 2002’de gerçekleşecek olursa, Salı günü düşecektir, çünkü 2002 bir sıçrama yılı değildir.

11 aylık bir yılda 30 veya 31 gün sürse de, bazı aylar tam bir günün aynı gününde başlıyor.

Haftanın Gününü Bulma Algoritmasını Bir örnek ile alalım.

Nisan 2016, Cuma günü başlıyor, Temmuz 2016 da başlıyor. Nasıl? Nisan’da 30 Gün, 31 Mayıs günü, Haziran’da 30 gün var ve bu da 91’e kadar eklenebilir.

91 modulo 7 = 0, sıfıra kalan bir değeri döndürür. Dolayısıyla Temmuz, Nisan’ın yaptığı gibi başlar.

Determination of day of week, How to calculate day of a week, Common months in an year,Algorithm on how to find the day of a week,algorithm for finding the day you were born

İyi haber şu ki, yılın bir başka ayıyla aynı gün başlayan bir sürü ayımız var. Ortak yıllar için:

Ocak ve Ekim Şubat,

Mart ve Kasım

Nisan ve Temmuz

Hiçbir ay Ağustos ayına karşılık gelmez.

Corresponding month in common year, Determination of day of week, How to calculate day of a week, algorithm for finding the day you were born

Sıçrama yılları için:

Ocak, Nisan ve Temmuz

Şubat ve Ağustos

Mart ve Kasım

Hiçbir ay Ekim ayına karşılık gelmez.

images_1-03

Bu algoritmaları takiben, Tomohiko Sakamoto, yukarıdaki formülü kullanarak bir haftanın bir gününün belirlenmesi için bir algoritma geliştirdi; ayrıca, bir sıçrama yılındaki ek günü de hesaba kattı.

Bakalım Tomohiko Sakamoto’nun Doomsday Algoritmasını haftanın gününü belirlemek için nasıl kullandığını görelim.

Ocak’ın 31 günü var, 7 gün bir haftaya bölünürse 7 x 4 + 3 gün verileceğinden 1 Şubat’ın 1 Ocak gününü takip eden 3 gün olacağını biliyoruz.

Benzer şekilde Ocak’ın 31 günü + 28 Şubat gününün Şubat ayına = 59 gün, 7 x 8 +3’e eşittir ve 1 Mart’ın 1 Ocak gününden 3 gün sonra düşeceğini söylesek mantıklı olur.

Böylece, her ay 1 Ocak’a {0,3,3,6,1,4,6,2,5,0,3,5} karşılık gelen bir alt küme elde ediliyor, burada ayın ilk günü bir alt gruptaki sayı.

Şimdi 365 gün 7 x 52 + 1 olan bir yıl yapar.

Her yıl fazladan bir gün eklenmesi, her 4 yılda bir sıçrama yılı olan 29 Şubat’a göre ayarlanır.

Böylece, her 4 yılda bir, Gregoryen takvimi bir gün daha kazanır.

100 yıl sonra ve takvim 400 yılda bir tekrarlanmayacak olursa, 400. yılda tekrar bir gün daha kazanır.

Neden bunu çok karışık yapmak zorunda bırakıyorlar?

İşleri matematiksel olarak yapmak için y / 4 – y / 100 + y / 400 olarak ek bir gün ekledik.

Yukarıdaki kuralları göz önüne alarak, tüm takvimler için bir sıçrama yılını çalıştırır, bir yılın yığın yılı olup olmadığını anlamak için bir yılı 4’e bölmeliyiz. Fakat 100 ile bölünebilir olmasına rağmen, bir sıçrama yılı olamaz, bu nedenle yıl / 100 çıkarılır. Belirtildiği gibi, her 400 yılda bir bir sıçrama yılı olur, dolayısıyla yıl / 400’ü ekleriz.

İyi, bu yüzden yıllarda ki sıçramayı matematiksel olarak ayarladık. O kadarda zor değildi, değil mi ?

Ancak ekstra gün, Ocak ayı değil, Şubat ayında gelir.

Algoritmanın çalışması için ilk iki aydan bir gün çıkarıyoruz: y – = m <3

Ayları 1’den 12’ye, bizden Ocak ve Şubat aylarında 3’den küçük olan her ay için numaralandırdığımızda, Ocak ayı orijinal değerinden 1 çıkartıp Ocak ayı 0 olur ve Şubat ayı 1 olur.

Ancak bunu yaparken Şubat ve Ocak ayları arasında boş bir gün bırakan sıçramasız yıllarda da  bir gün silinir. Bunu önlemek için, her ayın Mart ayından Aralık ayına bir günü çıkaralım;

Listenin şu şekilde görünmesi: {0,3,2,5,0,3,5,1,4,6,2,4} Aşağıdaki kodlar Pazartesi günü 1, Pazar 7 olarak verir.

Bu bize sonunda aşağıdaki C ++ kodunu verir:

Haftanın Gününü Bulma Algoritması C++

Buda Pyhton için :

Haftanın Gününü Bulma Algoritması Pyhton

Bu kaynağımızda Haftanın Gününü Bulma Algoritması nı işledik.İleride çok daha farklı algoritmalarla sizlerle birlikte olacağım.Yorum atarak en büyük desteği sağlamış olursunuz.

Etiketler

Ramazan Şerif

Selamun Aleyküm Adım Ramazan Şerif Akbuz. Bilişime olan merakım ortaokul yıllarımda başladı.7.Sınıfta Türkiye Eğitim Gönülleri Vakfı aracılığı ile girdiğim Legorobot yarışmasında Türkiye de ilk 20 ye girdik.Bilişime olan heyecanım lise yıllarımda da devam etti.Liseyi Veritabanı Programcılığı bölümünde okudum.Matematiğim zayıftı bende 2 yıllık Omü bilgisayar programcılığına geçiş yaptım.Okulu başarıyla bitirdim.2 Yıldır bir yandan Freelance olarak çalışıyor , bir yandanda iş arıyorum.Bakdım olacağı yok birazda kendimi geliştirme kararı aldım.DGS ile Fırat Üniversitesi Yazılım Mühendisliğine geldim.Maceranın devamında bir baltaya sap olabilmek dileğiyle "Zaman zam anıdır Gülüşüme sende gül üşüme"

İlgili Makaleler

4 Yorum

  1. 1 yıl 365 gün ise ve biz atıyorum 10 mayıs günündeyiz ve kaçıncı hafta da olduğumuz nasıl buluruz ?

    1. hafta 7 gün bizde modunu döngü ile aliriz 10 mayıs atıyorum 130. gün bu sayede var olan günün kaçıncı haftada olduğunu bulabiliriz !

      1. Hocam misal vermek gerekirse; 130/7 dediğimiz de sonuç 18 çıkar yani ya doğru sonuç bu şekilde bulamıyorum, 1 hafta ya geri ya da ileri sonuç çıkıyor. algoritma lazım da nasıl yapacağımı bulamadım 🙂
        Ben programlama CNC üzerine bilgisayarlı makınalar için yapacağım.
        Ben sizin algoritma buna göre uyarlayabilir im ama işlemler tam anlayamadım.
        MESELA;
        def day_of_week(year, month, day):
        t = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]
        year -= month < 3
        return (year + int(year/4) – int(year/100) + int(year/400) + t[month-1] + day)

        Bu kısım da, day_of_week diye bi paket oluşturmuşsunuz ve 3 değişken değer girilerek return ile bize hesaplanan değeri bize geri döndürüyor.
        Benim kafamın basmadı kısımlar küme, < 3 işareti, ve return bölümün de ki matematiksel işlemler.

        WEB sitelerin de gibi bişey lazım bana.
        Mesela ben 4.3.19 tarihi değeri girdiğimde, bana 10.hafta dayız diyor.
        ne 1 hafta ileri ne de geri bi sonuç göstermiyor tam doğru gösteriyor.

Bir Cevap Yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Başa dön tuşu
Kapalı
%d blogcu bunu beğendi: