Konstanta

Tidak semua data di dalam program mengalami perubahan nilai. Data-data yang bisa dipastikan tidak akan mengalami perubahan nilai bisa kita sebut sebagai konstanta. Sebagai contoh, jika kita membuat perhitungan yang melibatkan lingkaran, maka kita membutuhkan data yang memang tidak akan berubah nilainya yaitu pi. Pi, dari dulu hingga nanti akan selalu sama yaitu 3,14.

Cara untuk membuat konstanta adalah seperti contoh-contoh berikut:

const 
  //konstanta umum
  HariKabisat=366;
  //konstanta bertipe
  BukanKabisat:integer=365;
  HariPertama:TNamaHari=Minggu;
  //konstanta array
  KonstArray:array[0..3]of integer=(0,1,2,3);
  //konstanta record
  TanggalPertama:TTanggal=
     (Tanggal:1;Bulan:Januari;Tahun:0);

HariLahir dengan Konstanta

Contoh penggunaan konstanta dalam program adalah sebagai berikut:

program HariLahir3;
{$APPTYPE CONSOLE}
type
  TNamaBulan=(Januari=1, Pebruari, Maret, April,
              Mei, Juni, Juli, Agustus, September,
              Oktober, Nopember, Desember);
  TTanggal=record
    Tanggal:integer;
    Bulan:TNamaBulan;
    Tahun:integer;
  end;
const
  Hari:array[0..6]of string=
        ('Minggu','Senin','Selasa','Rabu',
        'Kamis','Jumat','Sabtu');
  HariPertama=5;
  HariKabisat:array[Januari..Desember]of integer=
    (0,31,60,91,121,152,182,213,244,274,305,335);
  BukanKabisat:array[Januari..Desember]of integer=
    (0,31,59,90,120,151,181,212,243,273,304,334);
var
  TglLahir:TTanggal;
  HariL,HariSkr:integer;

  procedure AmbilTanggal(var Tgl:TTanggal);
  var tmp:integer;
  begin
    Write('Tanggal ?: ');
    Readln(Tgl.Tanggal);
    Write('Bulan ?  : ');
    Readln(tmp);
    Tgl.Bulan:=TNamaBulan(tmp);
    Write('Tahun ?  : ');
    Readln(Tgl.Tahun);
  end;

  procedure AmbilData;
  begin
    Writeln('**Semua data dalam angka**'#13#10);
    Writeln('Masukkan data tanggal lahir');
    AmbilTanggal(TglLahir);
  end;

  function IsKabisat(Y:integer):boolean;
  begin
    result:=((Y mod 4=0)and(Y mod 100<>0))
            or(Y mod 400=0);
  end;

  function HariDalamTahun(Tgl:TTanggal):integer;
  begin
    if IsKabisat(Tgl.Tahun)then
      Result:=HariKabisat[Tgl.Bulan]else
      Result:=BukanKabisat[Tgl.Bulan];
    Result:=Result+Tgl.Tanggal;
  end;   

  function HitungHari:integer;
  var i:integer;
  begin
    //Hitung hari dalam tahun
    result:=0;
    for i:=0 to TglLahir.Tahun-1 do
      if IsKabisat(i)then result:=result+366
         else result:=result+365;
    //tambahkan dengan sisa hari
    result:=result+HariDalamTahun(TglLahir);
  end;

  procedure DisplayHari(H:integer);
  begin
    Writeln('Anda lahir hari ',Hari[H]);
  end;

begin
  AmbilData;
  HariL:=(HariPertama+HitungHari) mod 7;
  DisplayHari(HariL);
  Writeln('Tekan Enter');
  Readln;
end.

Dengan menggunakan program sebelumnya, kita bisa menghitung bahwa tanggal 1 Januari tahun 0 jatuh pada hari Sabtu. Oleh karena itu sebenarnya kita tidak perlu menanyakan tanggal dan hari sekarang. Kita cukup menghitung hari pertama ditambah jumlah hari sampai tanggal lahir, kemudian diambil sisa baginya.

Hari Sabtu jika dihitung dari Minggu sebagai 0 adalah 6. Tetapi karena tanggal pertama bukan tanggal 0, melainkan tanggal 1, maka kita perlu mengurangi nilai untuk hari pertama menjadi 5. Saya tidak benar-benar tahu bahwa tanggal 1 Januari tahun 0 (apakah ada tahun 0? Saya juga tidak tahu) itu jatuh pada hari Sabtu. Saya tidak tahu apakah aturan tahun kabisat dan abad kabisat telah ditetapkan sejak tahun 0 atau tidak. Jika tidak, perhitungan program menjadi tidak tepat.

Dengan menggunakan konstanta Hari yang berisi nama-nama hari, pembuatan prosedur DisplayHari menjadi lebih sederhana. Demikian juga dalam menghitung jumlah hari dalam suatu tahun yang dilakukan tanpa perulangan karena kita menggunakan array konstanta yang langsung menentukan jumlah hari sampai bulan tertentu.

Apakah Anda menyukai post ini? Mengapa tidak memberikan komentar di bawah dan melanjutkan perbincangan, atau berlangganan my feed dan dapatkan artikel semacam ini yang dikirm secara otomatis feed reader Anda.
Harap diperhatikan bahwa komentar atau pertanyaan yang disampaikan haruslah sesuai dengan topik yang sedang dibahas. Komentar atau pertanyaan yang tidak sesuai dengan topik akan kami hapus :!:

Tinggalkan komentar

Sebelum membuat komentar, pastikan Anda telah membaca komentar-komentar sebelumnya. Jangan membuat pertanyaan yang telah ditanyakan. Perhatikan pula link-link dalam artikel. Lihatlah link tersebut sebelum membuat pertanyaan, karena mungkin penjelasan dari pertanyaan Anda telah di jawab dalam link tersebut.

Komentar yang tidak mengikuti aturan ini akan dihapus!

(wajib)

(wajib)


Time limit is exhausted. Please reload the CAPTCHA.