Tipe Subrange

Kali ini saya akan membahas tipe data subrange / sub-jangkauan. Tipe data subrange adalah tipe data yang mengambil sebagian nilai dari tipe ordinal lainnya. Format penulisannya :

Nilai terendah .. Nilai tertinggi

Nilai tertinggi harus benar-benar lebih tinggi dibandingkan dengan nilai terendahdan keduanya berada pada rentang nilai minimum dan maksimum dari tipe data ordinal.Sebagai contoh jika kita mendeklarasikan tipe data yang berisi hari-hari dalam seminggu dan angka dari satu sampai dengan sembilan :

type
  DaysOfWeek = (Minggu, Senin, Selasa, Rabu,
                Kamis, Jum'at, Sabtu);
  Harikerja = Senin..Sabtu;
  Angka = 1..9


Kalian juga bisa menggunakan tipe subranges untuk tipe data ordinal lain seperti integer, dan char. Pecahan tidak bisa digunakan pada tipe data subrange.

Satu hal yang perlu diperhatikan saat memberi nilai pada tipe data subrange adalah nilainya tidak boleh kurang atau lebih dari batas yg ditentukan. Kode program berikut ini akan menghasilkan error karena salah satu variabel diberi nilai tidak sesuai batas yg ditentukan.
program tipe_subrange;
uses crt;
type
    satuan= 1..9;
    nama_hari= (senin, selasa, rabu, kamis, jumat, sabtu, minggu);
    hari_kerja= senin..sabtu;
var
    a:hari_kerja;
    b:satuan;
begin
    clrscr;
    a:= kamis;
    b:= 9;
    writeln('a: ', a);
    writeln('b: ', b);
    readln;
end.

Mana yg salah dan menyebabkan error? Jawabannya adalah variabel a yg diberi nilai minggu, padahal tipe data hari_kerja hanya punya nilai senin sampai dengan sabtu. Coba ubah kode programnya menjadi seperti berikut ini.

program tipe_subrange;
uses crt;
type
    satuan= 2..9;
    nama_hari= (senin, selasa, rabu, kamis, jumat, sabtu, minggu);
    hari_kerja= senin..sabtu;
var
    a:hari_kerja;
    b:satuan;
begin
    clrscr;
    a:= senin;
    b:= 9;
    writeln('a: ', a);
    writeln('b: ', ord(b));
    readln;
end.


Seharusnya kode program tersebut bisa dicompile dan dilihat hasilnya. Selanjutnya silakan coba sendiri untuk mengubah dan memahami kode programnya.