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.


