Rabu, 03 Desember 2014

JULIAN DATE (koding matlab, koding c++)



                                                                         BAB I
PENDAHULUAN

1.1  Pendahuluan
Dalam bidang ilmu Geodesi Satelit, sistem penanggalan Julian (Julian Date) banyak digunakan, karena sistem ini dapat mempresentasikan suatu epok hanya dengan satu bilangan. System waktu dengan unit hari ini dihitung sejak 1 Januari SM. Pada kalender Julian, satu tahun secara rata-rata didefinisikan sebagai 365,25 hari. 

a.      Transformasi Waktu Sipil ke Waktu Julian
Waktu dalam penanggalan sipil dapat ditransformasikan ke waktu Julian dengan menggunakan algoritma tertentu. Seandainya dalam waktu sipil, tahun dinyatakan dengan bilangan bulat Y, bulan dinyatakan dengan bilangan bulat M, hari dinyatakan dengan bilangan bulat D dan jam dinyatakan dengan bilangan pecahan UT, maka waktu tersebut dalam penanggalan Julian dihitung dengan formulasi berikut (Hoffmann-Wellenhof et all., 1992) berlaku untuk epok antara Maret 1990 sampai Februari 2100:

JD = INT [365.25y] + INT [30.6001(m+1)] + D + UT/24 + 1720981.5

Dimana pada rumus diatas:
INT(.) = bilangan bulat dari bilangan pecahan (.)
y=Y-1 dan m=M +12              bila M ≤ 2
y=Y dan m=M,                       bila M >2

b.      Transformasi Waktu Julian ke Waktu Sipil
Waktu Julian juga dapat ditransformasikan ke waktu sipil. Apabila waktu Julian (JD) diketahui maka parameter  tahun yang dinyatakan dengan bilangan bulat Y, bulan yang dinyatakan dengan bilangan bulat M, hari yang dinyatakan dengan bilangan bulat D, dapat dihitung dengan algoritma berikut ini (Hoffmann-Wellenhof et all., 1992):

D = b - d - INT(30.6001 * e) + fRAC [JD+0.5]
M =( e - 1 )- 12 * INT(e / 14)
Y =( c - 4715 ) – INT[(7+M)/10]

Pada rumus-rumus diatas:
a = INT (JD + 0.5)
b = a + 1537
c = INT [(b - 122.1) / 365.25]
d = INT (c * 365.25)
e = INT [(b - d)/30.6001]
FRAC=nilai pecahan dari bilangan pecahan
c.       Penentuan Hari
Hari dapat ditentukan dari waktu Julian (JD)-nya, melalui parameter yang dapat dihitung dengan rumus berikut:

N=modulo {INT[JD+0.5] * &}

Dalam hal ini bila N=0 menunujukkan hari Senin, N=1 hari Selasa, N=2 hari Rabu, N=3 hari Kamis, N=4 hari Jum’at, N=5 hari Sabtu dan N=6 hari  Minggu.



BAB II
PEMBAHASAN

2.1  Soal yang Diberikan
Buat program untuk menkonversikan penanggalan sipil ke penanggalan Julian dan sebaliknya. Dengan program tersebut, hitung tanggal Julian dari tanggal lahir saudara/i (saya) dan temukan  hari kelahiran anda dan sebaliknya hitung kembali tanggal lahir berdasarkan Julian date yang didapat.

2.2  Penyelesaian
2.2.1    Perhitungan Manual
Tanggal lahir 02 Desember 1995 jam 04:00 UT. Berdasarkan perhitungan secara manual didapat Julian Date (JD) = 2450053.667 dengan nilai N = 5 hari Sabtu.
2.2.2    Perhitungan dengan Program
Program konversi waktu sipil ke Julian Date dibuat menggunakan code block dengan bahasa pemograman C++. Dibawah ini script dari program tersebut :

#include <stdio.h>
#include <math.h>

int main()
{
    char pilihan;
    printf("Program konversi Waktu Sipil ke Julian Date atau sebaliknya\n");
    printf("Oleh Joko Purnomo (3512100037) SAG kelas A\n");
    printf("masukkan pilihan anda (a atau b):\n");
    printf("a. sipil ke julian:\n");
    printf("b. julian ke sipil:\n");
    scanf("%c", &pilihan);


    if (pilihan == 'a') //memberikan percabangan sipil ke Julian atau Julian ke sipil
    {
        int  t, b, h, y, m, d, jam, mnt, dtk, N; // pendefinisian variable dalam bil.bulat
        double jul, ut, y1, m1, a, c; //pendefinisian variable dalam bil. Pecahan

        printf("Mengubah waktu sipil ke julian\n");
        printf("Masukkan tahun  : "); //memasukkan variable tahun
        scanf ("%d", &t);
        printf("Masukkan bulan  : "); //memasukkan variable bulan
        scanf ("%d", &b);
        printf("Masukkan tanggal: ");//memasukkan variable tanggal
        scanf("%d", &h);
        printf("Masukkan jam anda lahir\n"); //memasukkan variable jam
        printf("Masukkan jam    : ");
        scanf("%d", &jam);
        printf("Masukkan menit  : ");
        scanf("%d", &mnt);
        printf("Masukkan detik  : ");
        scanf("%d", &dtk);


        if((b <= 2) ) //memberikan percabangan apabila bulan > 2 atau tidak
        {
            m = b + 12;
            y = t - 1;
        }
        else
        {
            m = b ;
            y = t ;
        }

        a = 365.25 * y;
        c = 30.6001 * (m+1);
        ut = jam + (mnt/60) + (dtk/3600);
        y1 = INT (a);
        m1 = INT (c);
        jul = y1 + m1 + h + (ut/24 ) + 1720981.5; \\ rumus perhitungan sipil ke julian

        printf ("waktu sipil %d - %d - %d jam %d : %d :%d\n", h, b, t, jam, mnt, dtk);
        printf ("julian datenya adalah %lf\n", jul);
        N = fmod((INT(jul + 0.5)),7); //perhitungan hari
        if (N==0)
        {
            printf ("harinya adalah senin");
        }
        else if (N==1)
        {
            printf ("harinya adalah selasa");
        }
        else if (N==2)
        {
            printf ("harinya adalah rabu");
        }
        else if (N==3)
        {
            printf ("harinya adalah kamis");
        }
        else if (N==4)
        {
            printf ("harinya adalah jumat");
        }
        else if (N==5)
        {
            printf ("harinya adalah sabtu");
        }
        else if (N==6)
        {
            printf ("harinya adalah minggu");
        }
    }
    Else //percabangan perhitungan Julian ke sipil
    {
        int a, hari, bln, thn, i, j, N ; //pendefinisian bilangan bulat
        double frac_a, b, jul, y, m, UT, c, d, e; //pendefinisian bilangan desimal
        printf("Mengubah waktu julian ke sipil\n");
        printf("Masukkan waktu julian  : ");
        scanf ("%lf", &jul);


        a = INT (jul + 0.5);
        b = a + 1537;
        c = INT ((b - 122.1) / 365.25);
        d = INT (c * 365.25);
        e = INT ((b - d)/30.6001);
        frac_a = ( jul + 0.5) - a;

        hari = b - d - INT(30.6001 * e) + frac_a; //perhitungan hari

        bln =( e - 1 )-( 12 * (INT(e / 14)) ); //perhitungan bulan

        thn =( c - 4715 ) - INT((7+bln)/10); //perhitungan tahun
        if (bln<=2) //percabangan bulan  <= 2 atau tidak
        {
            y=thn-1;
            m=bln+12;
        }
        else
        {
            y=thn;
            m=bln;
        }
        i = y*365.25;
        j = (m+1)* 30.6001;
        UT = (jul-(i+j+hari+1720981.5))*24; //perhitungan jam
        printf ("maka hasilnya adalah\n");
        N = fmod((INT(jul + 0.5)),7); //penentuan hari
        if (N==0)
        {
            printf ("harinya : senin\n");
        }
        else if (N==1)
        {
            printf ("harinya : selasa\n");
        }
        else if (N==2)
        {
            printf ("harinya : rabu\n");
        }
        else if (N==3)
        {
            printf ("harinya : kamis\n");
        }
        else if (N==4)
        {
            printf ("harinya : jumat\n");
        }
        else if (N==5)
        {
            printf ("harinya : sabtu\n");
        }
        else if (N==6)
        {
            printf ("harinya : minggu\n");
        }
        printf ("tanggal : %d\n", hari);
        printf ("bulan   : %d\n", bln);
        printf ("tahun   : %d\n", thn);
        printf ("jam     : %lf\n", UT);
    }

}
Adapun tampilan program seperti pada gambar berikut.
 
Gambar 1. Tampilan Sebelum di built-run
Gambar 2. Program sebelum di masukkan pilihan
 
Gambar 3. Program setelah dimasukkan waktu sipil

Pada gambar diatas telah di input waktu yang diberikan yaitu 02 desember 1995 untuk diubah ke system penanggalan Julian Date.
Gambar 4. Program Setelah Diinput Julian Date

Pada gambar diatas telah diinput Julian Date yaitu 2450053.667 untuk diubah kedalam system penanggalan sipil.

2.3  Analisis
Berdasarkan perhitungan secara manual tanggal 02 Desember 1995 jam 04.00 waktu Julian (JD)-nya adalah 2450053.667. Setelah di hitung menggunakan Program yang dibuat menggunakan bahasa C++ dihasilkan JD= 2450053.667 seperti yang tampak pada command prompt diatas. Begitupun Sebaliknya JD= 2450053.667 apabila dihitung kembali menghasilkan tanggal 02 Desember 1995 jam 04.00. Jadi hasil dari Program Terbukti Benar.
Berdasarkan Kalender Sipil tanggal 02 Desember Merupakan hari Sabtu.
 

                                                Gambar 5. Waktu Sipil 02 Desember 1995
                                                            (http://www.hf.rim.or.jp)



Berdasarkan perhitungan manual N= 5 sehingga pada tanggal tersebut adalah hari Sabtu. Berdasarkan perhitungan program dihasilkan hari sabtu. Jadi hasil dari program tersebut terbukti benar. Dengan menggunakan program perhitungan yang dihasilkan memiliki ketelitian yang sama dengan perhitungan secara manual.



BAB III
PENUTUP

3.1 Kesimpulan
            Dari pembahasan diatas dapat disimpulkan:
1.      Julian Date sangat berguna dalam penentuan hari
2.      Transformasi waktu Julian ke waktu Sipil atau sebaliknya  memiliki ketelitian yang sama antara perhitungan dengan program dan secara manual.
3.      Penggunaan program untuk mentransformasikan waktu Julian ke waktu Sipil atau sebaliknya dapat mengurahi kesalahan perhitungan yang dilakukan secara manual. Selain itu penggunaan program dapat menghemat waktu karena tinggal menginput data-data yang ingin ditransformasikan.



DAFTAR PUSTAKA

Abidin, H.Z. 2001. Geodesi Satelit. Jakarta: PT.Pradnya Paramita.
Hahn, Brian. 1996. Cara Mudah Belajar C++. Jakarta: Dinastino.

Tidak ada komentar:

Posting Komentar

Silahkan Tinggalkan Jejak