Mencari Selisih Tanggal dengan c++

Pada kesempatan kali ini saya akan membahas bagaimana mencari selisih tanggal antara 2 tanggal tertentu dengan bahasa C++, dengan aturan tahun kabisat adalah tahun yang bisa dibagi 4, sehingga jika ada tahun kabisat maka bulan februari berjumlah 29 hari dan satu tahun 366 hari. Sedangkan jika bukan tahun kabisat maka bulan februari berjumlah 28 hari dan 1 tahun berjumlah 365 hari.

Perhatikan script dibawah ini:

#include<stdio.h>
#include<stdlib.h>

typedef struct tanggal{
int date;
int month;
int year;
};
int bulan[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int bulan_kabisat[12]={31,29,31,30,31,30,31,31,30,31,30,31};
tanggal selisih[2];

int hasil_tahunsama(int,int,int);
int hasil_tahunbeda(int,int,int,int,int,int);

int main(){
printf(“Mencari selisih tanggal\n\n”);
printf(“Contoh: tanggal1=3\tbulan1=4\t tahun=2010\n\n”);
int j=1,bulan_atas,bulan_bawah,bln_atas,bln_bawah,tahun_atas,tahun_bawah,tgl_atas,tgl_bawah,hsl;
for(int i=0;i<2;i++){
printf(“masukkan tanggal %d:”,j);scanf(“%d”,&selisih[i].date);
printf(“masukkan bulan %d:”,j);scanf(“%d”,&selisih[i].month);
printf(“masukkan tahun %d:”,j);scanf(“%d”,&selisih[i].year);
j++;
}

//menempatkan nilai tertinggi apakah nilai 1 atau yang ke  2
if(selisih[0].month>selisih[1].month){
bulan_atas=selisih[0].month;
bulan_bawah=selisih[1].month;
}else{
bulan_atas=selisih[1].month;
bulan_bawah=selisih[0].month;
}
if(selisih[0].year>selisih[1].year){
tahun_atas=selisih[0].year;
tgl_atas=selisih[0].date;
bln_atas=selisih[0].month;
tahun_bawah=selisih[1].year;
tgl_bawah=selisih[1].date;
bln_bawah=selisih[1].month;
}else{
tahun_atas=selisih[1].year;
tgl_atas=selisih[1].date;
bln_atas=selisih[1].month;
tahun_bawah=selisih[0].year;
tgl_bawah=selisih[0].date;
bln_bawah=selisih[0].month;
}

//memanggil fungsi rumus
if(selisih[0].year==selisih[1].year){
printf(“Hasil selisihnya %d hari\n”,hasil_tahunsama(bulan_bawah,bulan_atas,tahun_atas));

}else{
int hsl=hasil_tahunbeda(tahun_bawah,tahun_atas,bln_bawah,bln_atas,tgl_atas,tgl_bawah);
printf(“Hasil selisihnya %d hari\n”,hsl);
}

}

//RUMUS 1 ___________________________________________
int hasil_tahunsama(int a,int b,int c){
int hasil=0;
for(int i=a-1;i<=b-1;i++){
if(c%4==0){
hasil=hasil+bulan_kabisat[i];
}else{
hasil=hasil+bulan[i];
}

}

int batas_bawah=bulan[b+1]-selisih[1].date;
int hasilnya=hasil-(selisih[0].date+batas_bawah);
int hasil_akhir=abs(hasilnya);
return hasil_akhir;
}

//RUMUS 2________________________________________________
int hasil_tahunbeda(int tahun1,int tahun2,int bln1,int bln2,int tgl1,int tgl2){

int hasil_thn=0,hasil_bln=0;

for(int i=tahun1;i<=tahun2;i++){
if(i%4==0){
hasil_thn=hasil_thn+366;
}else{
hasil_thn=hasil_thn+365;
}
}
for(int j=0;j<bln1-1;j++){
if(tahun1%4==0){
hasil_bln=hasil_bln+bulan_kabisat[j];
}else{
hasil_bln=hasil_bln+bulan[j];
}

}
for(int k=bln2-1;k<12;k++){
if(tahun2%4==0){
hasil_bln=hasil_bln+bulan_kabisat[k];
}else{
hasil_bln=hasil_bln+bulan[k];
}
}
int hasilnya=((hasil_thn-hasil_bln)-tgl1)+tgl2;
return hasilnya;
}

//script by Angga/10650054

____________________________________________________________

Penjelasan logika

Rumus script diatas menjadi 2 bagian yaitu jika tahun sama dan jika tahun beda.

1. Jika tahun sama

Misalnya kita ambil contoh selisih antara 3 februari dengan 3 agustus.

Tahun sama

Kita lakukan looping bulan dari bulan maret sampai agustus dengan memanfaatkan array bulan :

int bulan[12]={31,28,31,30,31,30,31,31,30,31,30,31};

Lalu lakukan pengurangan antara: Hasil looping[warna biru]-(batas atas + batas bawah)

2.Jika tahun Beda

Misal kita ambil contoh selisih 3 Maret 2008 dengan 3 Maret 2010.

logika_selisihTanggal

Kita Lakukan Looping tahun dari tahun 2008 sampai 2010 dengan menambahkan hari 365 untuk kabisat dan 365 untuk bukan kabisat.

setelah itu lakukan looping bulan atas dan bawah(yang berwarna hitam).

sehingga rumus akhirnya:

((hasil looping tahun-hasil looping bulan[warna hitam])-tanggal awal)+tanggal akhir.

Demikian script c++ selisih tanggal selesai dibuat, ada kurangnya mohon maaf. semoga bermanfaat.

Hasil lengkapnya bisa di Download Disini.

Iklan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: