RECORD (REKAMAN) Pascal menyediakan suatu tipe data terstruktur yang disebut dengan Record. Dengan tipe data Record, dapat dikumpulkan beberapa item data yang masing-masing dapat mempunyai tipe data yang berbedabeda. Masing-masing item data disebut dengan Field. Jadi Record terdiri dari kumpulan Filed yang dapat berbeda tipe. Biasanya suatu Record berisi beberapa Field untuk sebuah subyek tertentu. Misalnya Record Langganan dapat terdiri dari Field Kode Langganan, Nama Langganan, Alamat Langganan dan Besarnya Piutang. Deklarasi Record Deklarasi tipe data Record diawali dengan kata cadangan Record diikuti oleh suatu daftar Field dan diakhiri dengan kata cadangan End. Contoh : Type Lgn = Record Kode : Integer; Nama : String; Alamat : String; Piutang : Real; End; Var Langganan : Lgn; Deklarasi variabel tipe data Record dapat juga dilakukan langsung dibagian deklarasi variabel sebagai berikut : Var Langganan : Record Kode : Integer; Nama : String; Alamat : String; Piutang : Real; End; Menggunakan Tipe Data Record Tiap-tiap komponen Field dari Record dapat dipergunakan dengan cara menuliskan : Pengenal- Record.Pengenal- Field[.Pengenal-Field] Tipe data Record yang telah dideklarasikan sebelumnya, pengenal Record adalah Langganan dan Pengenal Field adalah Kode, Nama, Alamat dan Piutang. Bila Field Nama akan digunakan, Misalnya akan diisi dengan suatu nilai, maka dapat dituliskan : Langganan.Nama := ‘Anto’; Pengenal Field Pengenal Record Contoh : Type Hasil = Record Jari-Jari : Real; Keliling : Real; Luas : Real; End; Var Lingkaran : Hasil; Begin Write(‘Jari Jari Lingkaran ?’);Readln(Lingkaran.Jari-Jari); Lingkaran.Keliling := 2*Pi*Lingkaran.Jari-Jari; Lingkaran.Luas := Pi * SQR(Lingkaran.Jari-Jari); Writeln; Writeln(‘Keliling Lingkaran =’,Lingkaran.Keliling:7:2); Writeln(‘Luas Lingkaran =’,Lingkaran.Luas:7:2); End. Output : Jari Jari Lingkaran ? 10 Keliling Lingkaran = 62.83 Luas Lingkaran = 314.16 Statement With Penggunaan Field didalam Record seperti contoh sebelumnya dapat menyebabkan statement menjadi panjang, sebagai berikut : Lingkaran.Keliling := 2*Pi*Lingkaran.Jari-Jari Akan lebih mudah dan lebih pendek bila pengenal Record tidak selalu harus ditulis, sehingga statement diatas dapat berbentuk : Keliling := 2 * Pi * Jari-Jari Hal ini dapat dilakukan dengan menggunakan statement With yang menyebutkan pengenal Recordnya sehingga penggunaan Field-field selanjutnya sudah tidak perlu menyebutkan pengenal Recordnya kembali. Contoh : Program pada contoh sebelumnya untuk menghitung keliling dan luas lingkaran bila diubah menggunakan statement With sebagai berikut : Type Hasil = Record Jari-Jari : Real; Keliling : Real; Luas : Real; End; Var Lingkaran : Hasil; Begin With Lingkaran Do Begin Write(‘Jari Jari Lingkaran ?’);Readln(Jari-Jari); Keliling := 2*Pi* Jari-Jari; Luas := Pi * SQR(Jari-Jari); Writeln; Writeln(‘Keliling Lingkaran =’, Keliling:7:2); Writeln(‘Luas Lingkaran =’, Luas:7:2); End; End. Dengan statement With, maka satu blok statement berikutnya setelah statement With ini dapat mempergunakan Fieldnya tanpa menyebutkan lagi pengenal Recordnya. Tipe Data Record Dengan Field Tipe Record Tipe data Record dapat juga mempunyai Field berupa tipe data Record yang lainnya. Misalnya item-item data berikut : 1. Nama Pegawai 2. Tanggal Masuk a. Hari b. Bulan c. Tahun 3. Alamat Pegawai a. Jalan b. Kota 4. Gaji a. Gaji Pokok b. Tunjangan c. Lembur Item data ini dapat dideklarasikan dalam bentuk tipe data Record sebagai berikut : Type Tgl = Record Hari : 1..31; Bulan : 1..12; Tahun : Word; End; Almt = Record Jalan : String; Kota : String; End; GajiPeg = Record Gaji Pokok,Tunjangan,Lembur : Real; End; Pegawai = Record Nama : String; TglMasuk : Tgl; Alamat : Almt; Gaji : GajiPeg; End; Var DataPegawai : Pegawai Total Gaji : Real; Begin { Memasukkan Data} DataPegawai.Nama :=’Badu’; DataPegawai.TglMasuk.Hari :=15; DataPegawai.TglMasuk.Bulan :=3; DataPegawai.TglMasuk.Tahun :=1980; DataPegawai.Alamat.Jalan :=’Gang Buntu 22’; DataPegawai.Alamat.Kota :=’Yogyakarta; DataPegawai.Gaji.GajiPokok :=75.000; DataPegawai.Gaji.Tunjangan :=25.000; DataPegawai.Gaji.Lembur :=10.000; {Menampilkan Hasil} With DataPegawai Do Begin Writeln(‘Nama Pegawai :’,Nama); With TglMasuk Do Writeln(‘Tanggal Masuk :’,Hari : 2, ‘-‘,Bulan : 2,’-‘,Tahun : 4); With Alamat Do Begin Writeln(‘Alamat Writeln(‘ End; :’, Jalan); ‘,Kota); With Gaji Do Begin Total Gaji := GajiPokok+ Tunjangan + Lembur; Writeln; Writeln(‘Gaji Pokok : Rp’,GajiPokok:6:0); Writeln(‘Tunjangan : Rp’,Tunjangan:6:0); Writeln(‘Lembur : Rp’,Lembur :6:0); Writeln(‘ *** Total : Rp’,Totsl:6:0); End; End; End. Output : Nama Pegawai : Badu Tanggal Masuk : 15-3-1980 Alamat : Gang Buntu 22 Yogyakarta Gaji Pokok : 75.000 Tunjangan : 25.000 Lembur : 10.000 *** Total : 110.000 Pada program diatas terlihat bahwa data dimasukkan ke FieldField di variabel tipe Record DataPegawai menggunakan cara Pengenal-Record.Pengenal-Field. Sedangkan nilai-nilai data dari Record ditampilkan dengan menggunakan Statement With. Record Bervariasi Tipe data Record yang telah dibahas merupakan struktur Record yang pasti, yaitu Field-Field didalam Record sudah tertentu dan pasti. Dapat juga dibuat suatu Record yang mempunyai Field tidak pasti atau bervariasi disebut juga dengan Record bervariasi (Variant Record). Dalam Variant Record dapat mengandung suatu Field yang bervariasi tergantung dari suatu kondisi. Didalam suatu variant Record terdapat Field yang tetap, maka Field yang bervariasi letaknya harus setelah Field yang tetap. Contoh : Type TipeBacaan= (BukuTeks, Majalah); Bacaan = Record; KodePerpus : String; TglBeli Penerbit : String; : Sring; Case Tipe : TipeBacaan of Majalah : (NomorMajalah : String; BukuTeks : (Pengarang : String; Edisi : Byte; End; Var DataBacaan : Bacaan; Pada contoh, Field yang bervariasi dalam record tergantung dari suatu kondisi Case. Tipe Field Tag (Tag Field Type) yang dipergunakan adalah suatu tipe data skalar TipeBacaan yang mempunyai dua nilai konstanta, yaitu BukuTeks dan Majalah. Bila pengenal tipe bernilai Majalah, maka Field variant yang akan digunakan adalah NomorMajalah. Bila pengenal tipe bernilai BukuTeks, maka Field Variant yang akan digunakan adalah Pengarang dan Edisi. Jadi Field yang digunakan akan bervariasi tergantung dari suatu kondisi.