I. Judul Praktikum : SEARCHING ( POINTER )
II. Tujuan Praktikum :
1. Untuk mengetahui pengertian searching (pointer) dalam pemrograman Pascal
2. Untuk mengetahui cara mendeklarasikan variabel pointer
3. Untuk mengetahui cara mengatur pointer
4. Untuk mengetahui cara mengakses isi suatu variabel melalui pointer
5. Untuk mengetahui perbedaan antara tipe data array dan pointer
6. Untuk memahami cara penggunaan pointer dalam pemrograman Pascal
III. Dasar Teori
Pengertian pointer (Santoso, 1992) adalah suatu tipe data yang dapat digunakan untuk mengalokasikan dan mendealokasikan (mengambil / mengurangi) pengingat secara dinamis, yaitu sesuai dengan kebutuhan pada saat suatu program dieksekusi.
Data bertipe pointer merupakan suatu fasilitas yang dimiliki pernrograrnan bahasa Pascal untuk mengatasi tipe data yang bersifat statis, misaInya data bertipe larik yang penyimpanannya dalam pengingat terbatas, data yang tersimpan dalam perubah tidak boleh melebihi pesanan yang telah dideklarasikan. Pointer adalah alamat untuk variabel tertentu dalam memori.. Pointer memungkinkan pengembang untuk membuat sebuah alias atau referensi dari sebuah variabel tertentu. Pointer digunakan untuk daftar karena mereka memerlukan sedikit memori meskipun lebih rumit. Pointer merupakan variabel khusus yang berisi suatu address (alamat) di lokasi lain didalam memory. Suatu variabel yang points(menunjuk) ke sesuatu sehingga disebut pointer.
Data bertipe pointer merupakan suatu fasilitas yang dimiliki pernrograrnan bahasa Pascal untuk mengatasi tipe data yang bersifat statis, misaInya data bertipe larik yang penyimpanannya dalam pengingat terbatas, data yang tersimpan dalam perubah tidak boleh melebihi pesanan yang telah dideklarasikan. Pointer adalah alamat untuk variabel tertentu dalam memori.. Pointer memungkinkan pengembang untuk membuat sebuah alias atau referensi dari sebuah variabel tertentu. Pointer digunakan untuk daftar karena mereka memerlukan sedikit memori meskipun lebih rumit. Pointer merupakan variabel khusus yang berisi suatu address (alamat) di lokasi lain didalam memory. Suatu variabel yang points(menunjuk) ke sesuatu sehingga disebut pointer.
Ada dua macam pointer:
-typed(tertentu): merupakan pointer yang menunjuk pada tipe data tertentu pada variable.
-generic(umum): merupakan pointer yang tidak menunjuk pada tipe data tertentu pada variable.
Contoh deklarasi pointer:
-generic(umum): merupakan pointer yang tidak menunjuk pada tipe data tertentu pada variable.
Contoh deklarasi pointer:
var p : ^integer;
Variabel pointer sering dikatakan sebagai variabel yang menunjuk ke obyek lain. Pada kenyataan yang sebenarnya, variabel pointer berisi alamat dari suatu obyek lain (yaitu obyek yang dikatakan ditunjuk oleh pointer). Sebagai contoh, px adalah variabel pointer dan x adalah variabel yang ditunjuk oleh px. Kalau x berada pada alamat memori (alamat awal) 1000, maka px akan berisi 1000.
Suatu pointer dapat menunjuk ke data bertipe elementer, terstruktur, pointer yang lain, atau tidak bertipe. Jika suatu pointer tidak menunjuk ke mana-mana, pointer itu dinamakan dangling, sedangkan bagian memori yang tidak dapat diakses karena tidak ada pointer yang menunjuk dinamakan garbage (sampah).
Dalam Pascal, pointer dapat diisi dengan nilai yang berasal dari:
1. NIL
2. Fungsi Ptr
3. Operator @
4. Prosedur New dan GetMem
5. Pointer yang lain
Struktur Data
Struktur data yang dimaksud disini adalah struktur data yang digunakan dalam data bertipe pointer. Data bertipe pointer ditandai dengan meletakkan tanda ^ didepan nama simpul pada deklarasinya. Simpul bisa dideklarasikan sebagai sebuah record yang berisi field field data yang bertipe selain pointer dan field field yang bertipe pointer.
Field bertipe pointer dalam sebuah record bisa satu buah (untuk single link list), bisa dua buah (untuk double link list) dan sebagainya. Single link list hanya bisa menunjuk ke satu arah, sedang double link list bisa menunjuk ke dua arah. Dalam pemrograman bahasa Pascal, struktur data bertipe pointer yang bersifat dinamis berbeda dengan tipe data lainnya yang besifat statis.
Field bertipe pointer dalam sebuah record bisa satu buah (untuk single link list), bisa dua buah (untuk double link list) dan sebagainya. Single link list hanya bisa menunjuk ke satu arah, sedang double link list bisa menunjuk ke dua arah. Dalam pemrograman bahasa Pascal, struktur data bertipe pointer yang bersifat dinamis berbeda dengan tipe data lainnya yang besifat statis.
Mendeklarasikan Variabel Pointer
Suatu variabel pointer dideklarasikan dengan bentuk sebagai berikut :
tipe *nama_variabel
dengan tipe dapat berupa sembarang tipe yang sudah dibahas pada bab-bab sebelumnya, maupun bab-bab berikutnya. Adapun nama_variabel adalah nama dari variabel pointer.
Sebagai contoh :
Sebagai contoh :
int *px; //contoh 1
char *pch1, *pch2; //contoh 2
Contoh pertama menyatakan bahwa px adalah variabel pointer yang menunjuk ke suatu data bertipe int, sedangkan contoh kedua masing pch1 dan pch2 adalah variabel pointer yang menunjuk ke data bertipe char.
Bentuk umum deklarasi pointer :
Type Pengenal = ^simpul ;
Simpul = tipe data ;
dengan pengenal : nama pengenal yang menyatakan tipe data pointer
simpul : nama simpul
tipe data : tipe data dari simpul
Tanda ^ di depan simpul harus ditulis apa adanya karena itu menunjukkan bahwa pengenal bertipe pointer. Tipe data dari simpul dapat berupa tipe data sebarang, misalnya char, integer, atau real.
Contoh :
Type Str30 = string[30] ;
Point = ^Data ;
Data = record
Nama_Peg : Str30 ;
Alamat : Str30 ;
Pekerjaan : Str30 ;
End ;
Var
P1, P2 : Point ;
A, B, C : Str30 ;
Mengatur Pointer agar Menunjuk ke Variabel Lain
Agar suatu pointer menunjuk ke variabel lain, mula-mula pointer harus diisi dengan alamat dari variabel yang akan ditunjuk. Untuk menyatakan alamat dari suatu variabel, operator & (operator alamat, bersifat unary) bisa dipergunakan, dengan menempatkannya di depan nama variabel. Sebagai contoh, bila x dideklarasikan sebagai variabel bertipe int, maka: &x . Berarti “alamat dari variabel x”. Adapun contoh pemberian alamat x ke suatu variabel pointer px (yang dideklarasikan sebagai pointer yang menunjuk ke data bertipe int) yaitu : px = &x;
Pernyataan di atas berarti bahwa px diberi nilai berupa alamat dari variabel x. Setelah pernyataan tersebut dieksekusi barulah dapat dikatakan bahwa px menunjuk ke variabel x.
Mengakses Isi Suatu Variabel Melalui Pointer
Jika suatu variabel sudah ditunjuk oleh pointer, variabel yang ditunjuk oleh pointer tersebut dapat diakses melalui variabel itu sendiri (pengaksesan langsung) ataupun melalui pointer (pengaksesan tak langsung). Pengaksesan tak langsung dilakukan dengan menggunakan operator indirection (tak langsung) berupa simbol * (bersifat unary).
Contoh penerapan operator * yaitu : *px
Yang menyatakan “isi atau nilai variabel/data yang ditunjuk oleh pointer px” . Sebagai contoh jika y bertipe int, maka sesudah dua pernyataan berikut:
px = &x;
y = *px;
y akan berisi nilai yang sama dengan nilai x. Kedua pernyataan di atas sebenarnya dapat digantikan dengan sebuah pernyataan berupa :
y = x;
Seandainya pada program di atas tidak terdapat pernyataan:
px = &x;
namun terdapat pernyataan
y = *px;
maka y tidaklah berisi nilai x, sebab px belum diatur agar menunjuk ke variabel x. Hal seperti ini harap diperhatikan. Kalau program melibatkan pointer, dan pointer belum diinisialisasi, ada kemungkinan akan terjadi masalah yang dinamakan “bug” yang bisa mengakibatkan komputer tidak dapat dikendalikan (hang). Selain itu tipe variabel pointer dan tipe data yang ditunjuk harus sejenis. Bila tidak sejenis maka akan terjadi hasil yang tidak diinginkan.
Tipe Data Pointer
Pemakaian array tidak selalu tepat untuk program-program terapan yang kebutuhan pengingatnya selalu bertambah selama eksekusi program tersebut. Untuk itu diperlukan satu tipe data yang dapat digunakan untuk mengalokasikan (membentuk) dan mendealokasikan (menghapus) pengingat secara dinamis, yaitu sesuai dengan kebutuhan pada saat suatu program dieksekusi. Oleh karena itu akan dijelaskan suatu tipe data yang dinamakan sebagai tipe Data Pointer. Nama peubah yang kita gunakan untuk mewakili suatu nilai data sebenarnya merupakan / menunjukkan suatu lokasi tertentu dalam pengingat computer di mana data yang diwakili oleh tipe data tersebut disimpan.
Pada saat sebuah program dikompilasi maka compiler akan melihat pada bagian deklarasi peubah (Var) untuk mengetahui nama-nama peubah apa saja yang digunakan, sekaligus mengalokasikan atau menyediakan tempat dalam memory untuk menyimpan nilai data tersebut. Dari sini kita bisa melihat bahwa sebelum program dieksekusi, maka lokasi-lokasi data dalam memory sudah ditentukan dan tidak dapat diubah selama program tersebut dieksekusi. Peubah-peubah yang demikian itu dinamakan sebagai Peubah Statis (Static Variable).
Dari pengertian diatas kita perhatikan bahwa sesudah suatu lokasi pengingat ditentukan untuk suatu nama peubah maka dalam program tersebut peubah yang dimaksud akan tetap menempati lokasi yang telah ditentukan dan tidak mungkin diubah.
Dengan melihat pada sifat-sifat peubah statis maka bisa dikatakan bahwa banyaknya data yang bisa diolah adalah sangat terbatas. Misalnya peubah dalam bentuk Array yang dideklarasikan sbb :
Dengan melihat pada sifat-sifat peubah statis maka bisa dikatakan bahwa banyaknya data yang bisa diolah adalah sangat terbatas. Misalnya peubah dalam bentuk Array yang dideklarasikan sbb :
Var matriks: array[1..100,1..100] of integer;
maka peubah tersebut hanya mampu menyimpan data sebanyak 100x100=10000 buah data.
Jika kita tetap nekat memasukkan data pada peubah tersebut setelah semua ruangnya penuh maka eksekusi program akan terhenti dan muncul error. Memang kita dapat mengubah deklarasi program diatas dengan memperbesar ukurannya. Tetapi jika setiap kali kita harus mengubah deklarasi dari tipe daa tersebut sementara, banyaknya data tidak dapat ditentukan lebih dahulu, maka hal ini tentu merupakan pekerjaan yang membosankan. Jika kita ingin mengolah data yang banyaknya kita tidak yakin sebelumnya bahwa larik yang telah kita deklarasikan sebelumnya mampu menampung data yang kita miliki,maka pascal menyediakan satu fasilitas yang memungkinkan kita untuk menggunakan suatu peubah yang disebut dengan Peubah Dinamis (Dynamic Variable). Peubah dinamis adalah peubah yang dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi.
Dengan kata lain, pada saat program dikompilasi, lokasi untuk peubah belum ditentukan sebagai peubah dinamis. Hal ini membawa keuntungan pula, bahwa peubah-peubah dinamis tersebut dapat dihapus pada saat program dieksekusi sehingga ukuran memory selalu berubah. Hal inilah yang menyebabkan peubah tersebut dinamakan sebagai peubah dinamis.
Pada peubah statis, isi dari peubah adalah data sesungguhnya yang akan diolah. Pada peubah dinamis nilai peubah adalah alamat lokasi lain yang menyimpan data sesungguhnya. Dengan demikian data yang sesungguhnya tidak dapat dimasup secara langsung. Oleh karena itu, peubah dinamis dikenal dengan sebutan Pointer yang artinya menunjuk ke sesuatu. Dalam peubah dinamis, nilai dari data yang ditunjuk oleh suatu pointer biasanya disebut Simpul / node.
Pencarian Berdasarkan Nilai
Pencarian adalah proses yang mendasar dalam pengolahan data. Begitu juga pencarian elemen di dalam senarai. Sebelum penyisipan elemen misalnya, harus dicari terlebih dahulu posisi penyisipan (untuk mendapatkan calon elemen predesesor dan suksesor dari elemen yang akan disisipkan). Variabel merupakan suatu nilai yang disimpan dalam memory yang dapat diakses dengan identifier. Variabel ini sesungguhnya disimpan pada suatu alamat didalam memory. Dimana setiap alamat memory akan berbeda dengan yang lainnya (unik).
Pencarian ini biasanya dilakukan untuk mengenali elemen senarai berdasarkan informasi yang dikandung di dalam elemen yang dicari. Keluaran proses pencarian bergantung pada kebutuhan, apakah hanya sekedar mengetahui sebuah elemen terdapat di dalam senarai, atau melakukan proses terhadap elemen yang ditemukan. Bila tujuan kedua yang diinginkan, maka keluaran dari proses pencarian adalah alamat elemen yang dicari. Alamat ini nantinya diperlukan untuk pemrosesan elemen selanjutnya.
Sebuah aplikasi contoh pointer:
Program Pointer;varnumber: integer;{^ Sebelum tipe menunjukkan bahwa itu sebuah pointer}numbers_pointer: ^ integer;
|
Pointer Pascal sering dinotasikan sebagai "Pvar" dimana "var" atau "Tvar" adalah asli. Pointer diperkenalkan sebagai daftar, dijelaskan di atas. Perhatikan bahwa ada tiga cara pointer dinotasikan:
- Yang "@" menunjukkan alamat memori jenis lain, yang merupakan cara yang umum menginisialisasi pointer.
- Ketika "^" adalah ditempatkan sebelum nama, Anda meminta pointer untuk jenis tertentu, seperti pointer ke integer atau char. Anda dapat menggunakan generik "Pointer" tipe jika Anda ingin menggunakan pointer untuk referensi berbagai jenis benda.
- Ketika "^" ditempatkan setelah nama, Anda meminta sebuah dereference - untuk sebuah penunjuk yang ada untuk mengembalikan variabel itu referensi. Jadi jika Anda memiliki variabel yang ingin Anda ubah, tetapi hanya memiliki pointer untuk mengaksesnya dari, anda menggunakan "^ variabel" untuk mendapatkan nilai.
Salah satu perbedaan yang signifikan antara pemrograman C dan Pascal adalah bahwa C membutuhkan penggunaan pointer dalam kasus-kasus lebih. Bila Anda memanggil fungsi dalam C, tidak ada "var" kata kunci untuk menunjukkan pass-by-referensi, melainkan, C mengharapkan Anda untuk memanggil fungsi dengan pointer ke variabel yang Anda inginkan berubah, dan kemudian dereference pointer dalam fungsi . Walaupun fungsi yang hampir sama, Pascal awalnya dirancang untuk menggunakan pass-by-referensi untuk subrutin, dan pointer untuk struktur data yang kompleks; implementasi kemudian menambahkan fungsionalitas yang lebih umum untuk pointer.
Kegunaan
Kegunaan yang utama dari data bertipe pointer adalah untuk mengatasi kekurangan yang terdapat pada data yang bertipe larik. Misalnya ada deklarasi sebagai berikut (dalam bahasa Pascal):
Var Tabel : array [ 1.. 100, 1.. 50] of integer;
DAFTAR PUSTAKA
http://en.wikibooks.org/wiki/Pascal_Programming/Pointers. Akses : Senin, 11 Oktober 2010 21: 19.
http://sahrulwijaya.blogspot.com/2009/10/searching-pointer.html. Akses : Senin, 11 Oktober 2010 21: 15.
http://my.opera.com/superbrow/blog/index.dml/tag/pemrograman. Akses : Senin, 11 Oktober 2010 22: 00.
Tim Asisten. 2010. Modul Praktikum Pemrograman Komputer II. Inderalaya : Mitra Kharisma.
Tidak ada komentar:
Posting Komentar