TIPE DATA DALAM PASCAL Dalam Pascal, menentukan tipe data suatu iabel, berarti sekaligus menentukan batasan nilai iabel tersebut dan jenis operasi yang dapat dilaksanakan pada iabel tersebut. Tipe data yang terdapat dalam Turbo Pascal dapat digambarkan sebagai berikut : Tipe sederhana (SimpleType) Tipe ordinal Integer Shortint Longint Boolean Char Byte Word Subrange (Subjangkauan) Terbilang (Enumerated) Tipe Data Tipe string Tipe terstruktur (Structured Type) Tipe Pointer Tipe real larik (Array) rekaman (Record) himpunan (Set) berkas (File) Gambar 1 Bagan tipe data dalam Pascal. Bentuk umum dari deklarasi tipe adalah Type pengenal = tipe; Dalam satu program dapat dideklarasikan beberapa tipe yang berbeda, tapi harus ada pengenal yang dapat membedakan tipe data yang dideklarasikan tersebut. Type Bulat = integer; Jumlah = Byte; Nilai1 = Shortint; Logika = Boolean; Huruf = String[25]; Pusat Pengembangan Pendidikan Universitas Gadjah Mada 1
Dari contoh di atas, tipe data integer, byte, shortint, boolean, dan string dapat digantikan dengan kata Bulat, Jumlah, Nilai1, Logika, dan Huruf dalam deklarasi iabel. Total Juml Nilai Status Kata : Bulat; : Jumlah; : Nilai1; : Logika; : Huruf; Selain itu, tipe data dapat juga langsung deklarasikan pada saat pendeklarasian iable. Total : Integer; Juml : byte; Nilai : Shortint; Status : Boolean; Kata : String; Tipe data dalam pascal seperti yang terlihat pada gambar 1 dapat dijelaskan sebagai berikut : 1. Data tipe sederhana ( simple-type data). Tipe data sederhana juga disebut dengan tipe data skalar. Data tipe ini dihubungkan dengan sebuah identifier untuk suatu data. Tipe data sederhana dapat dibagi dua yaitu tipe data ordinal dan tipe data real. a) Tipe data ordinal. Tipe data ordinal mempunyai 4 karakteristik yaitu sebagai berikut : Nilai dari tipe data ordinal mempunyai nilai yang berurutan. Semua nilai kecuali yang pertama mempunyai nilai pendahulu (predesor) dan semua nilai kecuali yang terakhir mempunyai suksesor. Fungsi standard ord dapat diterapkan pada sembarang tipe ordinal untuk mengetahui ordinalitasnya. Fungsi standard pred, berfungsi untuk mengetahui predesornya. Jika fungsi ini diterapkan pada nilai pertama, akan menyebabkan kesalahan. Pusat Pengembangan Pendidikan Universitas Gadjah Mada 2
Fungsi standard succ, berfungsi untuk mengetahui suksesornya. Jika fungsi ini diterapkan pada nilai yang terakhir akan menyebabkan kesalahan. Ada beberapa macam tipe data yang dapat diklasifikasikan dalam tipe data ordinal, antara lain adalah sebagai berikut: Tipe Data Integer Tipe integer adalah tipe data yang nilainya tidak mempunyai titik desimal. Ada lima tipe data yang termasuk dalam tipe data integer, yaitu shortint, integer, longint, byte, dan word. Batas nilai untuk masing-masing tipe data di atas dapat dilihat pada tabel 1 berikut. Tabel 1 Batas Nilai Tipe Integer Tipe Batas Nilai Ukuran dalam byte Byte 0...255 1 Shortint -128 127 1 Integer -32768 32767 2 Word 0 65535 2 Longint -2147483648 214748647 4 Type Begin End. Bulat Jumlah Nilai1 = integer; = Byte; = Shortint; Untuk data tipe integer, Turbo Pacal juga menyediakan konstanta standard bernama MaxInt yang bernilai 32767 dan MaxLongInt yang bernilai 2147483647. Kedua konstanta ini dapat digunakan dalam program tanpa didefinisikan terlebih dahulu. Tipe Data Boolean Tipe data boolean mempunyai dua buah nilai, yaitu True (Benar) dan False (Salah). Tipe data boolean dapat digunakan untuk mengendalikan loop, indikator end of file, ataupun kondisi TRUE atau FALSE dalam program. Pusat Pengembangan Pendidikan Universitas Gadjah Mada 3
Ada tiga iabel yang bertipe boolean yaitu CheckIn, Tiket, dan Periksa. Ketiga iabel diatas mewakili persyaratan administrasi untuk naik ke pesawat terbang. Tiket bernilai TRUE jika penumpang mempunyai tiket, jika tidak berarti FALSE. CheckIn bernilai TRUE jika penumpang sudah melakukan CheckIn dan memperoleh boarder pass, jika tidak maka bernilai FALSE. Periksa bernilai TRUE jika penumpang telah memeriksakan barang bawaannya, jika tidak berarti FALSE. Maka deklarasi tipe data untuk iabel tersebut diatas adalah: Begin Tiket, CheckIn, Periksa : Boolean; Tiket CheckIn Periksa := TRUE; := TRUE; := TRUE; If Tiket AND CheckIn AND Periksa Then WriteLn( Administrasi lengkap, Anda boleh masuk! ); Else WriteLn( Administrasi Belum Lengkap! ); End. Tipe Data Char Tipe data Char dapat digunakan untuk mendefinisikan tipe data yang nilainya merupakan himpunan karakter yang dikenal komputer seperti yang terdapat pada tabel kode ASCII. Nilai data karakter ditulis diantara tanda petik tunggal, seperti misalnya A, a,!, %, 5, dan sebagainya. Begin End. Karakter : Char; Karakter := A ; WriteLn( Karakter tersebut =,Karakter); Pusat Pengembangan Pendidikan Universitas Gadjah Mada 4
Tipe Data Terbilang (Enumerated Data Types) Disebut data terbilang karena semua nilai disebut satu per satu. Tipe data ini didefinisikan oleh user di dalam program. Tujuan utama dari dari tipe data ini adalah untuk mengijinkan programmer untuk membuat nama data yang berarti. Kadang lebih mudah menggunakan tipe data terbilang dibanding menginput data sebagai string. Bentuk umum : type datatypeidentifier = typespecification; Bentuk umum typespecification: type (identifier1, identifier2,... identifiern) MonthType = (January, February, March, April, May, June,July, August, September, October, November, December); Vehicle = (Bicycle, Motorcycle, Car, Train); School = (Primary, Elementary, Junior High, Senior High, College, University); Dan kemudian dideklarasikan iabel. Month : MonthType; Ride : Vehicle; Study : School; Begin for Month := January to December do {*Mengerjakan statement perulangan*} end. Perlu diperhatikan bahwa dalam tipe data terbilang (enumerated datatypes), semua data harus diletakkan diantara tanda kurung. Urutan data perlu diperhatikan karena akan mempengaruhi nilai fungsi pred dan succ. Pred(February) adalah January Succ(February) adalah March Tipe Data Subjangkauan (Subrange Data-type) Batasan nilai untuk suatu iabel merupakan bagian dari data yang didefinisikan oleh programmer. Misalnya subrange untuk nilai akademis adalah 0 Pusat Pengembangan Pendidikan Universitas Gadjah Mada 5
sampai 100 atau A sampai E. Data subrange dapat didefinisikan pada data ordinal yang sebelumnya telah didefinisikan terlebih dahulu. Bentuk umum: Type pengenal = Nilai Terendah Nilai tertinggi Nilai terendah < nilai tertinggi. type DaysOfWeek = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday); {* Menunjukkan nama hari dalam satu minggu*} DaysOfWorkWeek = Monday..Friday; {*Menunjukkan hari kerja dalam seminggu*} Type Nilai = 0 100;{*Jangkauan nilai dari 0 sampai 100*} b) Tipe Data Real Data tipe real adalah salah satu dari tipe data sederhana selain tipe ordinal. Konstanta bertipe real adalah bilangan yang berisi titik desimal. Paling sedikit harus ada satu digit sesudah titik desimal. Bilangan real juga bisa dinyatakan dalam bentuk eksponensial. Pangkat dari bilangan dasar 10 (yang digunakan untuk menunjukkan eksponensial) dinyatakan dengan notasi E. Dalam Pascal terdapat lima macam tipe data real yaitu real, single, double, extended, dan comp. Batasan masing-masing tipe dapat dilihat pada tabel 2 berikut. Tabel 2. Tipe real dan batasannya Tipe Batasan Nilai Angka Signifikan Byte Real 2.9 x 10E-39.. 1.7 x 10E38 11 12 6 Single 1.5 x 10E-45.. 3.4 x 10E38 7 8 4 Double 5.0 x 10E-324.. 1.7 x 10E308 15-16 8 Extended 1.9 x 10E-4951.. 1.1 x 10E4932 19 20 10 Comp -2E63 +1.. 2E63-1 19-20 8 S D E : single; : Double; : Extended; Pusat Pengembangan Pendidikan Universitas Gadjah Mada 6
C : Comp; 2. Tipe String Data tipe string merupakan data yang berisi sederetan karakter yang banyaknya karakter bisa berubah-ubah sesuai kebutuhan, yaitu dari 1 sampai 255 karakter. Tipe string yang tidak dinyatakan panjang karakternya dianggap mempunyai 255 karakter. Data string terletak diantara dua tanda petik tunggal. Bentuk umum: type pengenal = string[panjang]; Tanggal : string[10]; Hari : string[6]; Spasi : Char; 3. Tipe data terstruktur (structured-type data). Dalam tipe data terstruktur setiap iabel bisa menyimpan lebih dari satu nilai data yang disebut komponen. Karakteristik tipe data ini ditentukan berdasarkan cara penstrukturan dan tipe data masing-masing komponen. Jika komponennya juga terstruktur maka tipe terstruktur yang dihasilkan juga lebih dari sebuah tingkat perstrukturan dan bisa tidak terbatas. Ada empat buah tipe data terstruktur, yaitu array, record, set, dan file. a) Tipe Array Tipe data terstruktur yang mempunyai komponen dalam jumlah tetap dan setiap komponen mempunyai tipe data yang sama. Posisi masing-masing data dalam array dinyatakan sebagai nomor indeks. Array dapat bertipe byte, word, integer, real, boolean, char, atau string dan juga subrange. Array dapat berupa satu dimensi, dua dimensi, tiga dimensi, maupun banyak dimensi. arrayname : array [x..y] of type; contoh: ourdata : array[1..100] of byte; myarray : array[5..25] of char; Pusat Pengembangan Pendidikan Universitas Gadjah Mada 7
Artinya adalah bahwa terdapat 100 elemen dalam array ourdata, indeks array tersebut dimulai dari 1 dan terdapat 20 elemen yang terdapat disarray myarray dan indeks arrau tersebut dimulai dari 5. Array Multidimensi Bentuk umum array multidimensi adalah sebagai berikut: type datatypeidentifier = array[enum_type1,enum_type2] of datatype; table : array[1..5, 1..3] of byte; {* array dua dimensi *} Cara mengakses : table[5,3]:=5; table[1,2]:=4; table[4,1]:=table[1,2]*table[5,3]; table3d : array [1..5, 1..4, 1..6] of byte; {* array tiga dimensi *} Cara aksesnya sama: table3d[3,4,5]:=6; Dan begitu juga dengan array 4 dimensi dan seterusnya: table4d : array[1..2, 1..3, 1..4, 1..5] of byte; {* array empat dimensi *} Array Of Record Berhubungan dengan tipe record, maka dapat juga dibuat array of record. Array of record akan dibahas pada pembahasan tipe record. b) Tipe Record Tipe data record adalah kumpulan tipe data dengan tipe yang berbeda satu sama lain. Tipe data record dipakai pada data akademis mahasiswa, data gaji pegawai, data persediaan barang, dan lain-lain. Bentuk umum: Type TypeName = record identifierlist1 : datatype1;... identifierlistn : datatypen; end; Pusat Pengembangan Pendidikan Universitas Gadjah Mada 8
type TEmployee = record name : string[25]; address : string[40]; age : byte; position : string[10]; commision : real; end; x : TEmployee; Deklarasi tipe record diatas dapat diakses dengan cara berikut: begin x.name := 'Paul Doherty'; x.address := '11th Kingston Avenue'; x.age := 35; x.position := 'Salesman'; x.commision := 0.10; end. Untuk mengakses data record, statement with...do adalah statement yang tepat. Dapat dilihat pada contoh berikut. begin with x do begin name := 'Paul Doherty'; := '11th Kingston Avenue'; address age := 35; position := 'Salesman'; commision := 0.10; end; end. Array Of Record Data record dibutuhkan untuk menangani data yang lebih dari satu tipe, dan jumlah data untuk satu deklarasi record bisa lebih dari satu, untuk itu dapat digunakan array of record. Cara mendeklarasikan array of record sama dengan mendeklarasikan array biasa. MyEmployee : array[1..100] of TEmployee; Misalkan akan diakses elemen array of record yang pertama. begin MyEmployee[1].name := 'Paul Doherty'; Pusat Pengembangan Pendidikan Universitas Gadjah Mada 9
MyEmployee[1].address := '11th Kingston Avenue'; MyEmployee[1].age := 35; MyEmployee[1].position := 'Salesman'; MyEmployee[1].commision := 0.10; end. Cara mengaksesnya dengan statement with. begin with MyEmployee[1] do begin name := 'Paul Doherty'; address := '11th Kingston Avenue'; age := 35; position := 'Salesman'; commision := 0.10; end; end. c) Tipe Himpunan (Set). Himpunan adalah kumpulan obyek dengan mempunyai tipe data yang sama dan urutan penulisannya tidak diperhatikan. Setiap obyek di dalam suatu himpunan disebut anggota atau elemen-elemen himpunan. Sifat-sifat himpunan dalam pascal sama dengan sifat himpunan dalam matematika. Bentuk umum: Type pengenal = set of type; Himpunan dapat juga dideklarasikan dalam deklarasi iabel. iabel pengenal : set of tipe_data; type days = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday); allday : set of days; workday : set of Monday.. Friday; thisday : days; begin thisday:=monday; if thisday in workday then writeln('this day I''m in work') else writeln('this day I''m on holiday'); end. Misalkan ada iabel myday, didefinisikan sebagai set sebagai berikut. Pusat Pengembangan Pendidikan Universitas Gadjah Mada 10
myday : set of days; Biasanya isi myday adalah Sunday, Monday, Saturday. Seandainya kita tidak ingin memasukkan Wednesday dan Friday ke dalam set, maka dapat dilakukan sebagai berikut. exclude(myday,wednesday); exclude(myday,friday); Untuk memasukkan Friday kembali ke dalam set dapat dilakukan seperti contoh berikut. include(myday,friday); d) Tipe Berkas (File). Tipe data berkas adalah kumpulan sejumlah komponen yang bertipe sama, yang jumlahnya tidak tertentu, dan biasanya tersimpan dalam suatu media penyimpanan luar. Jumlah dalam komponen berkas dapat ditambah jika diperlukan. Data yang ada di dalam berkas dapat digunakan oleh sembarang program yang tipe datanya disesuaikan dengan kebutuhan. Dalam Pascal dikenal juga berkas teks. Komponen-komponen dalam berkas teks membentuk suatu baris dan setiap baris diakhiri dengan tanda akhir baris (end Of Line, Carriage return, atau line feed). Dan setiap berkas selalu diakhiri dengan end of file atau Ctrl Z. Bentuk umum: Type pengenal = file of pengenal1; Const Jumlah_Mk = 5; Type Nilai = record Nama_Mhs : String[25]; No-Mhs : String[5]; Angkatan : String[5]; Nilai_Ujian : array[1..jumlah_mk] Of Integer; Rata_Rata : real; D_Nilai = File of Nilai; Daf_Nilai : D_Nilai; 4. Tipe data pointer (pointer-type data). Pusat Pengembangan Pendidikan Universitas Gadjah Mada 11
Data ini digunakan untuk membuat data terstruktur tipe dinamik.iabel akan dialokasikan pada saat dibutuhkan dan setelah selesai dapat didealokasikan kembali. Bentuk umum: <Nama> : <^TipeData>; Type StringType = String[15]; StringPointer = ^StringType; Name : StringPointer; NameData : String; Begin Name^ := Samples ; NameData := Samples ; End; Dalam contoh diatas iabel Name adalah iabel pointer. iabel ini tidak berisi data, tetapi berisi alamat letak dari data yang ditunjuk. iabel nama adalah iabel pointer dengan tipe StringPointer, sedang StringPointer adalah suatu tipe data pointer yang mnunjukkan letak dari nilai String[15]. Sedang Name^ menunjukkan isi dari memori yang alamatnya ditunjukkan oleh iabel pointer Name atau dengan kata lain menunjukkan nilai String[15] tersebut. Sedangkan iabel NameData berisi data berupa string yaitu Samples. Pendeklarasian iabel pointer tidak jauh berbeda dengan pendeklarasian iabel biasa, hanya perlu ditambahkan simbol topi (^) sebelum tipe datanya. Simbol topi tersebut menandakan bahwa iabel tersebut menunjuk ke lokasi tertentu pada memori. iabel pointer dapat juga dibuat bertipe record. Pendeklarasiannya adalah seperti berikut ini. Bentuk Umum: Type <NamaPointer> = <^NamaRecord>; <NamaRecord> = Record <Item1>:<tipeData1>; <Item2>:<tipeData2>;. <ItemN>:<TipeDataN>; End; <Nama> : <NamaPointer>; Pusat Pengembangan Pendidikan Universitas Gadjah Mada 12
Dalam Pointer dikenal iabel dinamik yang dapat dibuat dan dialokasikan dengan prosedur standar NEW. Bentuk umum: New(iabel) Contoh : Type Begin Str20 PointMhs RecMhs = String[20]; = ^RecMhs; = record; Nama : String[25]; NIM : String[10]; Alm : String[30]; IPK : real; End; DataMhs1, DataMhs2, DataMhs3, DataMhs4, DataMhs5, DataMhs6 : PointMhs; New(DataMhs1); New(DataMhs2); New(DataMhs3); New(DataMhs4); New(DataMhs5); New(DataMhs6);... Prosedure New hanya mengalokasikan iabel dinamik di heap, belum mengisi dengan nilai datanya. Untuk memasukkan data ke iabel dinamik dapat dilakukan seperti biasa pada iabel statik. Misalnya : DataMhs1^.Nama := Deviyanti ; DataMhs1^.NIM := 00403 ; DataMhs1 Deviyanti 00403 DataMhs2 Jika diberi Statemen: DataMhs1 := DataMhs2 maka gambar diatas akan berubah menjadi. Pusat Pengembangan Pendidikan Universitas Gadjah Mada 13
DataMhs1 Deviyanti 00403 DataMhs2 Operasi diatas disebut operasi mengkopi pointer, konsekuensinya, simpul yang semula ditunjuk oleh suatu pointer akan bisa terlepas dan tidak bisa dimasup lagi. Kembali ke gambar sebelumnya. Jika statemen DataMhs1^ := DataMhs2^ dibuat maka gambar tersebut akan berubah menjadi: DataMhs1 Deviyanti 00403 DataMhs2 Deviyanti 00403 Operasi diatas disebut operasi mengkopi isi simpul. Konsekuensinya adalah isi kedua simpul sama. iabel dinamik dapat dihapus dari heap dengan menggunakan prosedur standar Dispose dan prosedur standar Mark dan Release. Contoh : Dispose(DataMhs3^); Prosedur Standar release digunakan untuk menghapus sejumlah iabel dinamik mulai dari suatu iabel dinamik tertentu sampai dengan iabel dinamik terakhir. Contoh : New(DataMhs1); New(DataMhs2); New(DataMhs3); Mark(Hapus); New(DataMhs4); New(DataMhs5); New(DataMhs6); Release(Hapus); Statement diatas akan menyebabkan enam buah data dinamik dialokasikan ke heap dan iabel hapus akan menandai letak dari data iabel yang akan dihapus. Dengan adanya statemen Release maka iabel dinamik dimulai dari letak yang ditunjukkan iabel pointer hapus akan dihapus. Dalam hal ini yang terhapus adalah DataMhs4, DataMhs5, dan DataMhs6. Pusat Pengembangan Pendidikan Universitas Gadjah Mada 14