TIPE ENUMERASI DAN SUB JANGKAUAN BAB 8 TIPE ENUMERASI DAN SUB JANGKAUAN
Bab 8 8.1 Tipe Enumerasi 8.2 Subjangkauan (Subrange)
8.1 Tipe Enumerasi Enumerasi merupakan salah satu tipe yg dapat dibuat sendiri oleh pemrogram. Tipe ini biasa digunakan pada variabel yg nilai kemungkinannya terbatas (tidak begitu banyak). Nilainya dinyatakan dengan nama-nama pengenal. Dengan menggunakan pengenal maka diharapkan akan lebih memberikan kejelasan, daripada kalau memakai kode 0,1,2 dan seterusnya.
8.1 Tipe Enumerasi 8.1.1 Pendeklarasian Enumerasi 8.1.2 Operasi pada Tipe Enumerasi 8.1.3 Dari Nilai Ordinal ke Nilai Enumerasi
8.1.1 Pendeklarasian Enumerasi Tipe enumerasi bisa dibuat pada bagian TYPE. Bentuk pendeklarasiannya: TYPE nama_tipe=(pengenal_1, pengenal_2, …, pengenal_n); Sebagai contoh: SistemOperasi = (UNIX, MS_DOS, OS_2, WINDOWS_NT, dan WINDOWS_95 Pada contoh ini tipe SistemOperasi berisi 5 pengenal yaitu UNIX, MS_DOS, OS_2, WINDOWS_NT dan WINDOWS_65. Setelah membuat tipe seperti di atas, Anda dapat mendeklarasikan variabel seperti berikut: VAR SisOp : SistemOperasi;
Pendeklarasian variabel seperti berikut: SisOp : (UNIX, MS_DOS, OS_2, WINDOWS_NT, WINDOWS_95); juga diperkenankan. Tetapi biasanya yg dipakai adalah melalui pembuatan tipe terlebih dahulu.
Apa arti pendeklarasian seperti: SisOp : SistemOperasi; Inilah yg perlu diperhatikan. Pendeklarasian di atas menyatakan bahwa variabel SisOp bertipe enumerasi, yakni SistemOperasi. Dalam hal ini SisOp dapat berisi salah satu pengenal berikut: UNIX MS_DOS OS_2 WINDOWS_NT WINDOWS_95
Bentuk seperti : TYPE SistemOperasi = (UNIX, MS_DOS, OS_2, WINDOWS_NT, WINDOS_95); Kira-kira sepadan dengan pendeklarasian: CONST UNIX = 0; MS_DOS = 1; OS_2 = 3; WINDOWS_NT = 4; WINDOWS_95 = 5; Tetapi dengan menggunakan enumerasi, pendeklarasiannya menjadi lebih sederhana.
8.1.2 Operasi pada Tipe Enumerasi Setiap pengenal pada tipe enumerasi mempunyai nilai internal yg disebut sebagai nilai ordinal. Pada pendeklarasian: TYPE SisOp = (UNIX, MS_DOS, OS_2, WINDOWS_NT, WINDOWS_95) Nilai ordinal UNIX adalah 0. Nilai ordinal MS_DOS adalah 1. Nilai ordinal OS_2 adalah 2. Nilai ordinal WINDOWS_NT adalah 3. Nilai ordinal WINDOWS_95 adalah 4. Nilai ordinal tersebut ditentukan oleh urutan pengenal dalam pendeklarasian. Berdasarkan nilai ordinal maka relasi berikut berlaku: UNIX < MS_DOS < OS_2 Semua operator relasi (=, <>, <, >, <=, >=) dapat dikenakan pada tipe enumerasi. Ekspresi seperti berikut: UNIX <> MS_DOS UNIX < MS_DOS WINDOWS_95 > WINDOWS_NT memberikan nilai TRUE. Sebelum melangkah lebih jauh, ada 3 fungsi yg dapat dikenakan pada tipe enumerasi . Ketiga fungsi tersebut dapat dilihat pada tabel 1.
Tabel 1. Fungsi untuk tipe enumerasi Keterangan Ord(x) Memperoleh nilai ordinal dari x Pred(x) Memperoleh nilai pendahulu dari (predecessor) dari x Succ(x) Memperoleh nilai penerus (successor) dari x
Source code enum1.dpr :
Hasil enum1.dpr :
Fungsi Ord, Pred dan Succ dapat dikenakan pada semua tipe ordinal (misalnya Boolean, Char dan Integer). Fungsi Ord berguna untuk memperoleh nilai ordinal dari suatu nilai enumerasi. Fungsi Pred berguna unutk memperoleh pendahulu suatu nilai enumerasi. Sebagai contoh, pada pendefinisian: Pendahulu OS_2 adalah MS_DOS. Pendahulu MS_DOS adalah UNIX. Pendahulu UNIX tidak ada. Fungsi Succ digunakan untuk memperoleh penerus dari nilai enumerasi. Pada contoh di depan: Penerus UNIX adalah MS_DOS. Penerus MS_DOS adalah OS_2. Penerus OS_2 adalah WINDOWS_NT. Penerus WINDOWS_NT adalah WINDOWS_95. Penerus WINDOWS_95 tidak ada. Harap jangan kacaukan istilah “penerus” pada PASCAL dengan istilah yg sama yg biasa kita kenal sehari-hari. Sebab, sebagai contoh, fakktanya kita mengetahui bahwa sistem operasi MS_DOS bukanlah penerus dari sistem operasi Unix. Keduanya adalah 2 sistem operasi yg berbeda.
Bagaimana source code enum2. dpr jika yang pada source code enum1 Bagaimana source code enum2.dpr jika yang pada source code enum1.dpr perintah FOR…DO diganti dengan REPEAT ?
Source code enum2.dpr :
Hasil enum2.dpr :
Perlu diketahui isi dari variabel enumerasi tidak dapat ditampilkan dengan Write dan Writeln. Contoh source code enum3.dpr memberikan gagasan untuk mengetahui keadaan tersebut.
Source code enum3.dpr :
Hasil enum3.dpr :
8.1.3 Dari Nilai Ordinal ke Nilai Enumerasi Turbo Pascal menyediakan cara untuk mendapatkan nilai enumerasi melalui nilai ordinalnya. Caranya adalah dengan menyebutkan nama tipe enumerasi diikuti dengan nilai ordinalnya yg diletakkan dalam tanda kurung: nama_tipe_enumerasi(nilai_ordinal) Sebagai contoh: SistemOperasi (0) memberikan UNIX SistemOperasi (1) menghasilkan MS_DOS dan sebagainya Contoh source code enum4.dpr memberikan gambaran cara mengisi nilai enumerasi ke variabel enumerasi melalui kode yg dimasukkan dari keyboard (perhatikan deklarasi prosedur EntriKodeSisOp). Selain itu juga memberikan gambaran mengenai parameter yg bertipe enumerasi.
Source code enum4.dpr :
Hasil enum4.dpr :
8.2 Subjangkauan (Subrange) Subjangkauan merupakan suatu tipe yg menyatakan suatu jangkauan nilai dari suatu tipe yg sudah ada. Jangkauan nilai ditentukan oleh nilai terkecil dan nilai terbesar. Antara nilai terkecil dan nilai terbesar dipisahkan oleh tanda subjangkauan (..). Bentuk pendeklarasian: TYPE nama_type = nilai_terkecil…nilai_terbesar; Subjangkauan tdk dapat diterapkan untuk tipe real. Semua tipe ordinal bisa dipakai.
NilaiBulan : 1..12; {Subjangkauan dari integer} Contoh: TYPE NilaiBulan : 1..12; {Subjangkauan dari integer} Huruf kapital : ‘A’..’Z’; {Subjangkauan dari tipe char} Pada contoh di atas: TipeBulan adalah tipe dari nilai yg berkisar antara 1 sampai dengan 12. HurufKapital adalah tipe dari nilai yg berkisar antara huruf ‘A’ sampai dengan ‘Z’. Seperti halnya tipe enumerasi, tipe subjangkauan dimaksudkan untuk memberikan penjelasan kepada pembuat atau pembaca program tentang jangkauan nilai yg bakal terjadi pada suatu data.
Contoh yg lain: TYPE NamaBulan = (JAN, FEB, MAR, APR, MEI, AGU,JUN, JUL, AGU, SEP, OKT, NOP, DES); MusimDingin = JAN..MAR; Pada contoh di atas, NamaBulan adalah tipe enumerasi sedangkan MusimDingin adalah subjangkauan dari pengenal-pengenal pada NamaBulan yakni terbatas pada JAN, FEB, dan MAR.