Program Menghitung Tahun Kabisat dengan Python

Program Menghitung Tahun Kabisat dan Non-Tahun Kabisat dengan Python

Tahun kabisat (bahasa Inggris: Leap year) merupakan tahun yang mengalami penambahan satu hari dengan tujuan untuk menyesuaikan penanggalan dengan tahun astronomi.
Dalam satu tahun tidak secara persis terdiri dari 365 hari, tetapi 365 hari 5 jam 48 menit 45,1814 detik. Jika hal ini tidak dihiraukan, maka setiap empat tahun akan kekurangan hampir 1 hari (tepatnya 23 jam 15 menit 0,7256 detik).
Maka untuk mengkompensasi hal ini, setiap 4 tahun sekali (tahun yang bisa dibagi 4), diberi 1 hari ekstra: 29 Februari. Tetapi karena 5 jam 48 menit 45,1814 detik kurang dari 6 jam, maka tahun-tahun yang bisa dibagi 100 (seperti tahun 1900), bukan tahun kabisat, kecuali bisa dibagi dengan 400 (seperti tahun 2000).                                                                                                    
source : wikipedia




Algoritma Tahun Kabisat

  1. Jika angka tahun itu habis dibagi 400, maka tahun itu sudah pasti tahun kabisat.
  2. Jika angka tahun itu tidak habis dibagi 400 tetapi habis dibagi 100, maka tahun itu sudah pasti bukan merupakan tahun kabisat.
  3. Jika angka tahun itu tidak habis dibagi 400, tidak habis dibagi 100 akan tetapi habis dibagi 4, maka tahun itu merupakan tahun kabisat.
  4. Jika angka tahun tidak habis dibagi 400, tidak habis dibagi 100, dan tidak habis dibagi 4, maka tahun tersebut bukan merupakan tahun kabisat



Penulisan Notasi Fungsional Penanggalan Tahun Non-Kabisat

 DEFINISI DAN SPESIFIKASI

Harike1900 :  integer [1..31], integer [1..12] integer [0..99]  → integer [1..366] 
{Harike1900(d,m,y) dari suatu tanggal <d,m,y> adalah hari 'absolut' dihitung mulai 1 Januari 1900+y. 1 Januari tahun 1900+y adalah hari ke 1} 

dpm : integer [1..12] → integer [1..36] 
{dpm(B) adalah jumlah hari pada tahun ybs pada tanggal 1 bulan B. terhitung mulai satu januari:  kumulatif jumlah hari dari tanggal 1 Januari s/d tanggal 1 bulan B, tanpa memperhhitungkan tahun kabisat}

REALISASI { TANPA KABISAT }

Harike1900 (d,m,y) :
       dpm (m) + d - 1  
dpm (B) : { analisa kasus terhadap B }
       depend on B
            B = 1: 1
              B = 2: 32
              B = 3: 60
              B = 4: 91
                B = 5: 121
                B = 6: 152
                B = 7: 182
                B = 8: 213
              B = 9: 244
              B = 10: 274

              B = 11: 305

REALISASI DALAM PYTHON

def dpm(B) :
    if B==1:
        return 1
    elif B== 2 :
        return 32
    elif B== 3 :
        return 60
    elif B == 4 :
        return 91
    elif B == 5 :
        return 121
    elif B == 6 :
        return 152
    elif B == 7 :
        return 182
    elif B == 8 :
        return 213
    elif B == 9 :
        return 244
    elif B == 10 :
        return 274
    elif B == 11 :
        return 305
    elif B == 12 :
        return 335

def HariKe(d,m,y) :

    return (d+(dpm(m))-1)

APLIKASI

print (HariKe(31,12,90))



Komentar