TIPE DATA DALAM PASCAL Dalam Pascal, menentukan tipe data suatu variabel, berarti sekaligus menentukan batasan nilai variabel tersebut dan jenis operasi yang dapat dilaksanakan pada variabel tersebut. Tipe data yang terdapat dalam Turbo Pascal dapat digambarkan sebagai berikut :
Integer Shortint Longint Boolean Tipe ordinal
Char Byte Word
Tipe sederhana
Subrange (Subjangkauan)
(SimpleType)
Terbilang (Enumerated)
Tipe string
Tipe real
Tipe terstruktur
larik (Array)
Tipe Data
(Structured Type)
rekaman (Record) himpunan (Set) berkas (File)
Tipe Pointer
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. Contoh: Type
Bulat Jumlah Nilai1 Logika Huruf
= = = = =
integer; Byte; Shortint; Boolean; 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 variabel.
Contoh:
Var Total Juml Nilai Status Kata
: : : : :
Bulat; Jumlah; Nilai1; Logika; Huruf;
Selain itu, tipe data dapat juga langsung deklarasikan pada saat pendeklarasian variable. Contoh:
Var Total Juml Nilai Status Kata
: : : : :
Integer; byte; Shortint; Boolean; 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
Byte
0...255
Ukuran dalam byte 1
Shortint
-128…127
1
Integer
-32768…32767
2
Word
0…65535
2
Longint
-2147483648…214748647
4
Contoh: Type Bulat Jumlah Nilai1
= integer; = Byte; = Shortint;
Begin ……… End.
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
Contoh: Ada tiga variabel yang bertipe boolean yaitu CheckIn, Tiket, dan Periksa. Ketiga variabel 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 variabel tersebut diatas adalah: Var Tiket, CheckIn, Periksa : Boolean; Begin 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. Contoh: Var Karakter
: Char;
Begin Karakter := ‘A’; WriteLn(‘Karakter tersebut = ‘,Karakter); End.
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: (identifier1, identifier2, ... identifiern)
Contoh: type MonthType Vehicle School
= = =
(January, February, March, April, May, June,July, August, September, October, November, December); (Bicycle, Motorcycle, Car, Train); (Primary, Elementary, Junior High, Senior High, College, University);
Dan kemudian dideklarasikan variabel. var Month Ride Study Begin …… for
: MonthType; : Vehicle; : School;
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 variabel 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. Contoh: 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
Contoh: Var 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];
Contoh: Var Tanggal Hari Spasi
: string[10]; : string[6]; : Char;
3. Tipe data terstruktur (structured-type data). Dalam tipe data terstruktur setiap variabel 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. var arrayname : array [x..y] of vartype; contoh: var 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;
Contoh: var 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]; var 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: var 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
Contoh: type TEmployee = record name address age position commision end;
: : : : :
string[25]; string[40]; byte; string[10]; real;
var x : TEmployee;
Deklarasi tipe record diatas dapat diakses dengan cara berikut: begin x.name x.address x.age x.position x.commision end.
:= := := := :=
'Paul Doherty'; '11th Kingston Avenue'; 35; 'Salesman'; 0.10;
Untuk mengakses data record, statement with...do adalah statement yang tepat. Dapat dilihat pada contoh berikut. begin with x do begin name address age position commision end; end.
:= := := := :=
'Paul Doherty'; '11th Kingston Avenue'; 35; 'Salesman'; 0.10;
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. Contoh: var 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 MyEmployee[1].age MyEmployee[1].position MyEmployee[1].commision end.
:= := := :=
'11th Kingston Avenue'; 35; 'Salesman'; 0.10;
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 variabel. Variabel pengenal
: set of tipe_data;
Contoh: type days = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday); var 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 variabel myday, didefinisikan sebagai set sebagai berikut. var
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;
Contoh: Const Jumlah_Mk = 5; Type Nilai = record Nama_Mhs : No-Mhs : Angkatan : Nilai_Ujian : Rata_Rata : D_Nilai = File of Nilai;
String[25]; String[5]; String[5]; array[1..Jumlah_Mk] Of Integer; real;
Var 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.Variabel akan dialokasikan pada saat dibutuhkan dan setelah selesai dapat didealokasikan kembali. Bentuk umum: Var
: <^TipeData>;
Contoh: Type StringType StringPointer
= String[15]; = ^StringType;
Var Name NameData
: StringPointer; : String;
Name^ NameData
:= ‘Samples’; := ‘Samples’;
Begin End;
Dalam contoh diatas variabel Name adalah variabel pointer. Variabel ini tidak berisi data, tetapi berisi alamat letak dari data yang ditunjuk. Variabel nama adalah variabel 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 variabel pointer Name atau dengan kata lain menunjukkan nilai String[15] tersebut. Sedangkan Variabel NameData berisi data berupa string yaitu ‘Samples’. Pendeklarasian variabel pointer tidak jauh berbeda dengan pendeklarasian variabel biasa, hanya perlu ditambahkan simbol topi (^) sebelum tipe datanya. Simbol topi tersebut menandakan bahwa variabel tersebut menunjuk ke lokasi tertentu pada memori. Variabel pointer dapat juga dibuat bertipe record. Pendeklarasiannya adalah seperti berikut ini. Bentuk Umum: Type = <^NamaRecord>; = Record :; :; ……. :<TipeDataN>; End; Var
: ;
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada
12
Dalam Pointer dikenal variabel dinamik yang dapat dibuat dan dialokasikan dengan prosedur standar NEW. Bentuk umum: New(Variabel)
Contoh : Type Str20 PointMhs RecMhs
= String[20]; = ^RecMhs; = record; Nama : NIM : Alm : IPK : End;
String[25]; String[10]; String[30]; real;
Var DataMhs1, DataMhs2, DataMhs3, DataMhs4, DataMhs5, DataMhs6
: PointMhs;
Begin New(DataMhs1); New(DataMhs2); New(DataMhs3); New(DataMhs4); New(DataMhs5); New(DataMhs6); . . .
Prosedure New hanya mengalokasikan variabel dinamik di heap, belum mengisi dengan nilai datanya. Untuk memasukkan data ke variabel dinamik dapat dilakukan seperti biasa pada variabel statik. Misalnya :
DataMhs1^.Nama := DataMhs1^.NIM
DataMhs1
‘Deviyanti’;
:= ‘00403’;
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. Variabel 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 variabel dinamik mulai dari suatu variabel dinamik tertentu sampai dengan variabel 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 variabel hapus akan menandai letak dari data variabel yang akan dihapus. Dengan adanya statemen Release maka variabel dinamik dimulai dari letak yang ditunjukkan variabel pointer hapus akan dihapus. Dalam hal ini yang terhapus adalah DataMhs4, DataMhs5, dan DataMhs6.
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada
14