Cara mengetahui hari kelahiran

Ok, sebelum memprogram bahasa c++ kita mulai dulu dengan pemahaman masalah dan pencarian solusi.

jika anda ingin hasil compile nya langsung bisa  download disini

Kita mulai dengan pertanyaan sederhana “ teman saya lahir pada tanggal 6 agustus 1992, hari apakan dia dilahirkan?” atau “ kakek saya lahir 10 februari 1938, dia ingin tahu hari apa dia dilahir, bisakah saya membatunya?” lebih lagi “hari apakah pada tanggal 1 januari 30 M ?” atau “hari apakah pada tanggal 31 desember 3000 M ?” mari kita cari solusi pertanyaan2 tersebut ..
macam hari ada 7 : senin, selasa,rabu, kamis,jum’at,sabtu, dan minggu.(kenapa hari ada 7 macam ya???)
Macam bulan ada 12 dengan jumlah hari yang berbeda, terinci seperti berikut :
– Januari (31)
– Februari(29 untuk tahun kabisat /28 untuk tahun bukan kabisat)
– Maret(31)
– April(30)
– Mei(31)
– Juni(30)
– Juli(31)
– Agustus(31)
– September(30)
– Oktober(31)
– November(30)
– Desember(31)
Macam tahun ada 2 yaitu :
–    kabisat(366 hari)
syarat : habis dibagi 4 dan jika habis dibagi 100 maka harus habis dibagi 400.
Contoh : 2000 tahun kabisat tapi 1900 dan 2100 bukan tahun kabisat.
–    bukan kabisat (365 hari)
syarat : selain tahun kabisat.
OK dari keterangan diatas dapat diperoleh tiap 400 tahun terdapat 100 tahun yang merupakan kelipatan 4 dan terdapat 3 tahun yang merupakan kelipatan 100 tetapi bukan kelipatan 400 (yaitu:100,200,300) sehingga dapat disimpulkan :

” tiap 400 tahun hanya ada 97 tahun yang merupakan tahun kabisat.”
Nah kita akan hitung jumlah hari tiap 400 tahun :
97*366 + (400-97)*365 = 35502 + 110595 = 146097 hari
Karena 146097 = 0 MOD(7) maka hari pertama pada tahun (A+400n) identik dengan hari pertama pada tahun A untuk n bilangan bulat.
Ok kita lanjut lagi dengan perhitungan hari lebih jauh…
Bayangkan tepat tanggal 1 januari tahun 1 M kita memulai. Maka saat kita berada di tanggal L bulan B tahun T maka sebenarnya kita baru melewati (T-1) tahun ditambah dengan (B-1) bulan ditambah lagi dengan L hari. Sehingga jumlah semua hari yang terlewati sebanyak (jumlah hari selama tahun 1 M sampai tahun (T-1) M )+ (jumlah hari selama bulan 1 sampai bulan (B-1) pada tahun T) + L hari.
Nah karena hari pertama pada tahun (A+400n) identik dengan hari pertama pada tahun A , maka kita tidak perlu menghitung semua jumlah hari dari tahun 1 M sampai tahun (T-1) M, cukup dihitung jumlah hari selama Y tahun terakhir dengan Y = sisa pembagian (T-1) oleh 400.
Ok pembahasan masalah sudah terselesaikan sekarang tinggal di eksekusi oleh Bang C++.
Semoga bermanfaat…

/*pencari hari kelahiran*/
#include <iostream>
#include <conio.h>
using namespace std;

int thn(int a){if(a%4!=0){return 0;} else if(a%100==0&&a%400!=0){return 0;}else {return 1;}}

main ()
{int tanggal,bulan,tahun,bln,n;
cout<<“-<< program ini dirancang khusus untuk mengetahui hari kelahiran anda >>-\n\n”;
n=1;
while(n==1)
{n=0;
cout<<“masukkan tahun lahir anda : “;cin>>tahun;
if(tahun<1){cout<<“(tahun yang anda masukan salah)\n\n”;n=1;}
}
cout<<“\n1=januari\n2=februari\n3=maret\n4=april\n5=mei\n6=juni\n7=juli\n8=agustus\n9=september\n10=oktober\n11=november\n12=desember\n”;
n=1;
while(n==1)
{
cout<<“\nmasukkan bulan lahir anda : “;cin>>bulan;bln=bulan;
switch(bulan)
{    case 1:bulan=0;n=0;break;
case 2:bulan=31;n=0;break;
case 3:if (thn(tahun)==1){bulan=60;}else{bulan=59;};n=0; break;
case 4:if (thn(tahun)==1){bulan=91;}else{bulan=90;};n=0; break;
case 5:if (thn(tahun)==1){bulan=121;}else{bulan=120;};n=0; break;
case 6:if (thn(tahun)==1){bulan=152;}else{bulan=151;}; n=0;break;
case 7:if (thn(tahun)==1){bulan=182;}else{bulan=181;};n=0; break;
case 8:if (thn(tahun)==1){bulan=213;}else{bulan=212;};n=0; break;
case 9:if (thn(tahun)==1){bulan=244;}else{bulan=243;};n=0; break;
case 10:if (thn(tahun)==1){bulan=274;}else{bulan=273;}; n=0;break;
case 11:if (thn(tahun)==1){bulan=305;}else{bulan=304;};n=0; break;
case 12:if (thn(tahun)==1){bulan=335;}else{bulan=534;};n=0; break;
default:cout<<“(bulan yang anda masukkan salah)\n”;
}
}
n=1;
while(n==1)
{    n=0;cout<<“\nmasukkan tanggal lahir anda : “;cin>>tanggal;
if(bln==1||bln==3||bln==5||bln==7||bln==8||bln==10||bln==12)
{if(tanggal<1||tanggal>31){cout<<“(tanggal yang anda masukan salah)\n”;n=1;}}
else if(bln==2)
{if(thn(tahun)==1)
{if(tanggal<1||tanggal>29){cout<<“(tanggal yang anda masukan salah)\n”;n=1;}}
else{if(tanggal<1||tanggal>28){cout<<“(tanggal yang anda masukan salah)\n”;n=1;}}}
else{if(tanggal<1||tanggal>30){cout<<“(tanggal yang anda masukan salah)\n”;n=1;}}
}

cout<<“\nanda terlahir pada hari :     “;
int a,b,c,d;
a=(tahun-1)%400;b=1;c=0;
while(b<=a)
{if(thn(b)==1){c=c+366;}else{c=c+365;};b++;}
d=(c+bulan+tanggal)%7;

switch(d)
{    case 1: cout<<“senin “;break;
case 2: cout<<“selasa “;break;
case 3: cout<<“rabu “;break;
case 4: cout<<“kamis “;break;
case 5: cout<<“jum’at “;break;
case 6: cout<<“sabtu “;break;
case 0: cout<<“minggu “;break;
}
cout<<“\n\nterimakasih telah menggunakan program ini\n”;
getch();
return 0;
}

anda juga bisa download hasil compile nya di sini.

3 comments on “Cara mengetahui hari kelahiran

  1. Pingback: program pencari hari lahir « soldien

    • Itu mba yulli tinggal donlot programnya trus maskin tgl bln ma thun yg ingin dketahui harinya,. Pasti ntar muncul hari tgl tsb.
      Untuk weton belum dbuatn cos algoritmanya susah,..

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s