Sabtu, 08 Januari 2011

Film terbaik yang akan dirilis di 2011

Kungfu Panda II (Mei 2011) :
Sekuel Kungfu Panda ini dipastikan akan menarik banyak penonton untuk menyaksikannya di bioskop. Po (suaranya diisi oleh Jack Black) Sang pendekar Panda menghadapi Lord Shen (Gary Oldman) yang memiliki sebuah senjata rahasia yang sangat berbahaya. Lord Shen terobsesi untuk menguasai seluruh negeri dan berencana menghancurkan ilmu bela diri Kung Fu. Po mendapat bantuan dari The SoothSayer (Michelle Yeoh), Master Skunkman (James Woods), Master Croc (Jean-Claude Van Damme), dan Master Thundering Rhino oleh (Victor Garber) . Aksi-aksi seru dan lucu PO bersama kawan-kawannya menggagalkan rencana jahat Lord Shen itu ditampilkan secara ciamik dalam film ini.

Pirates of Caribbean : On the Strangers Tide (Mei 2011)
Kapten Jack Sparrow (Johny Deep) berpetualang bersama Angelica (Penelope Cruzz) mencari mata air kehidupan yang konon tidak membuat seseorang bertambah tua sedikitpun. Masalah kian runyam ketika Jack menyadari bahwa Angelica tak lain adalah putri dari bajak laut Blackbeard (Ian McShane), musuh besar Jack Sparrow. Tapi perjalanan sudah dimulai dan Jack tak akan mengurungkan niatnya sedikitpun untuk melaksanakan niatnya.

X-Men : First Class (Juni 2011) :
Penggemar Wolverine (diperankan oleh Hugh Jackman) mesti bersiap-siap kecewa dalam film yang merupakan prekuel dari film-film X-Men sebelumnya karena tokoh tersebut tidak muncul dalam film ini. X-Men : First Class memang mengisahkan awal mula epik X-Men yakni mengangkat masa muda Charles Xavier dan Erik Magnus Lensherr sebelum didirikannya Xavier School For Gifted Youngster . School of Mutant Resources mereka dirikan seusai menamatkan sekolah di Oxford untuk meneliti dan mempelajari fenomena baru yang terjadi pada manusia yaitu "homo superior", yaitu manusia jenis mutan yg memiliki gen X. Siswa yang belajar di sekolah khusus itu awalnya adalah Jean Grey, Scott Summers, Hank McCoy, Ororo Munroe, Raven Darkholme, Mortimer Toynbee dan Emma Frost. Perbedaan pemahaman dan idealisme membuat kedua sahabat ini menuai konflik hingga akhirnya justru menjadi seteru yang saling menghancurkan.

Harry Potter and The Deathly Hallows, Part 2 (Juli 2011) :
Ini adalah film yang ditunggu-tunggu oleh para penggemar Harry Potter sebagai edisi pamungkas rangkaian film Harry Potter sebelumnya, setelah sebelumnya mengikuti episode pertama menjelang akhir tahun 2010. Film ini masih tetap diperankan oleh Daniel Radcliffe, Emma Watson, Rupert Grint.

Transformers 3 : Dark Of The Moon (Juli 2011) :
Dua serial film Transformers sebelumnya berhasil menuai sukses besar dan pada episode ketiga ini para penggemar Megan Fox harus siap-siap kecewa karena artis sexy yang pada 2 episode sebelumnya berperan sebagai Mikaela Banes, kekasih sang tokoh utama, Sam Witwicky, tidak terlibat dalam Transformer 3. Meski tanpa Megan Fox lagi, film ini kembali akan menggelar aksi-aksi spektakuler dan efek sinematografi canggih lebih dashyat dari 2 film sebelumnya. Jadi bersiaplah saksikan kehebatan robot Optimus Prime, Bumble Bee, Iron Hide, Ratchet, Sides Wipes,Megatron, Starscream, dan Soundwave berjibaku dalam film ini.

Captain America : The First Avenger (Agustus 2011)
Chris Evans pemeran manusia api dalam film “Fantastic Four” akan berperan sebagai Steve Rogers alias Captain America. Kisah ini menampilkan setting tahun 1940-an dimana Steve Rogers – seorang prajurit yang tidak bisa turun ke medan perang untuk melawan Nazi karena fisiknya dianggap tidak layak—diminta untuk menjalani sebuah program rahasia militer yang dapat mengubah dirinya menjadi manusia super.

Spy Kids 4: All The Time in the World (Agustus 2011)
Jessica Alba akan berperan sebagai Marissa Cortez Wilson (Jessica Alba) mantan agen rahasia yang menikah dengan reporter televisi pemburu agen mata-mata terkenal Wilbur (Joel McHale) dan ibu tiri dari dua anak kembar yang sangat cerdas Rebecca (Rowan Blanchard) dan Cecil (Mason Cook) dalam film Spy Kids 4 yang disutradarai oleh Robert Rodriguez. Jeremy Piven yang berperan sebagai tokoh antagonis dalam film ini mengancam akan mengambil alih bumi dan menghentikan waktu. Marissa dipanggil oleh Markas Besar OSS untuk mencegah aksi kejahatan tersebut dengan didampingi oleh Carmen (Alexa Vega) dan adiknya Juni Cortez (Daryl Sabara), anggota Spy Kids yang sudah beranjak remaja.

Mission Impossible 4: Ghost Protocol (Desember 2011) :
Aktor tampan Tom Cruise kembali akan membintangi film kolosal Mission Impossible IV berjudul “Ghost Protocol” yang rencananya akan ditayangkan perdana oleh Paramount Pictures 6 Desember 2011. Pada film yang gambarnya diambil di Dubai, Praha dan Canada ini, Tom akan didampingi oleh artis pendukung seperti Aktor Jeremy Renner dan aktris Paula Patton.

Fast and Furious V (April 2011) :
Vin Diesel dan Paul Walker akan kembali beraksi dalam film kebut-kebutan mobil dengan adegan-adegan berbahaya memacu adrenalin yang disutradarai oleh Justin Lin dan skenarionya ditulis oleh Chris Morgan ini. Petualangan Dominic Toretto dan Brian O’Conner yang melarikan diri dari petugas hukum akan menjadi daya tarik film yang akan dirilis pada akhir April 2011 ini.

double linked list

I. JUDUL PRAKTIKUM : DOUBLE LINKED LIST
II. TUJUAN PRAKTIKUM :
1. Mengetahui apa itu Double Linked List
2. Mengetahui penerapan linked list pada program
3. Mengetahui cara penyisipan elemen linked list
4. Mengetahu cara penghapusan elemen linked list
5. Dapat membuat procedure-procedure yang terdapat pada linked list
6. Dapat membuat program sederhana menggunakan linked list



























III. Dasar Teori
Double linked list adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field yaitu, 1 field pointer yang menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta sebuah field yang berisi data untuk node tersebut. Double linked list pointer next dan prevnya menunjuk ke dirinya sendiri secara circular. Linked list merupakan struktur data yang memiliki kelebihan dalam efisiensi memori dan kecepatan dalam menyisipkan data. Linked list berguna untuk menyimpan beberapa data dalam memori.
Definisi
Secara umum, sebuah list bertipe T adalah sebuah barisan elemen-elemen bertipe T beserta operasi-operasinya yang meliputi :
1. Membuat list (menginisialisasi list), yaitu membuat list menjadi kosong.
2. Menentukan apakah status list kosong atau tidak.
3. Menentukan apakah status list penuh atau tidak.
4. Mengetahui panjang (jumlah elemen) list.
5. Mengetahui sebarang node dari list (menghapus node).
6. Mengakses sebarang node dalam list, dengan membaca nilai atau menganti nilai yang ada dengan nilai yang baru.
7. Menyisipkan node baru ke dalam list di sebarang lokasi.
Linked List dengan Pointer
Pascal menyediakan prosedur standar untuk membuat dan menghapus sebuah variable dinamis, yaitu new dan dispose. Jika p telah dideklarasikan sebagai sebuah variable pointer bertipe node, maka pernyataan new(p) akan menciptakan sebuah variable dinamis baru bertipe node dan menandai lokasinya dengan pointer p. Sedangkan pernyataan dispose (p) akan mengembalikan ruang yang digunakan pada lokasi yang ditunjuk p ke sistem computer,pointer p menjadi tidak terdefinisi lagi. Kadang-kadang sebuah pointer tidak menunjuk ke suatu variable dinamis.
Kondisi ini harus ditandai dengan mengisi pointer tersebut dengan nilai standar nil. Hal ini dapat dilakukan dengan pernyataan p:=nil; dan pada kesempatan lain kondisi ini dapat diperiksa dengan pernyataan if p = nil…atau if p <>nil…Kata nil merupakan kata tercadang dalam pascal. Nil merupakan nilai generic dan dapat diisikan ke sebarang variable pointer dengan tipe apapun.
Double linked list dipilih bila banyak operasi yang memerlukan predesesor. Sebagaimana yang telah kita pelajari, untuk menghapus elemen senarai perlu alamat predesesornya, begitu juga untuk menyisipkan elemen. Untuk menghindari pencarian predesesor, maka pada setiap elemen ditambahkan field prev dan field next yang membuat operasi pada senarai ini lebih kompleks.
Linked list (one way list) adalah suatu kumpulan elemen data (yang disebut sebagai node) dimana urutannya ditentukan oleh suatu pointer.
Setiap elemen (node) dari suatu linked list terdiri atas dua bagian, yaitu :
- INFO , berisi informasi tentang elemen data yang bersangkutan.
- NEXT(link field/next pointer field), berisi alamat dari elemen (node) selanjutnya yang dituju.
Berikut ini sebuah contoh linked list yang terdiri atas 4 node :

Pada node ke-4 field NEXT-nya berisi NULL, artinya node ke-4 tsb. adalah node terakhir.
Node-node dalam linked list tidak harus selalu digambarkan paralel seperti pada gambar diatas. Linked list pada contoh diatas dapat pula digambarkan seperti berikut ini :

Ada dua hal yang menjadi kerugian dengan representasi suatu data dengan linked list ini,
yaitu :
1. Diperlukan ruang tambahan untuk menyatakan/tempat field pointer.
2. Diperlukan waktu yang lebih banyak untuk mencari suatu node dalam linked list.
Sedangkan keuntungannya adalah :
1. Jenis data yang berbeda dapat di-link.
2. Operasi REMOVE atau INSERT hanya dilakukan dengan mengubah pointer-nya saja.
OPERASI DASAR PADA LINKED LIST.
Ada beberapa aturan yang didefinisikan pada operasi didalam linked list, yaitu :
Jika P adalah suatu variabel pointer, maka nilainya adalah alamat atau lokasi dari variabel lain yang dituju.
Operasi yang didefinisikan pada suatu variabel pointer adalah :
1. Test apakah sama dengan NULL.
2. Test untuk kesamaan dengan variabel pointer lain.
3. Menetapkan sama dengan NULL.
4. Menetapkan menuju ke node lain.
Notasi yang didefinisikan sehubungan dengan operasi diatas adalah :
1. NODE(P), artinya node yang ditunjuk oleh pointer P.
2. INFO(P), artinya nilai INFO dari node yang ditunjuk pointer P.
3. NEXT(P), artinya hubungan (link) selanjutnya dari node yang ditunjuk oleh pointer P.
Sebagai contoh, perhatikan linked list dibawah ini :

MENGHAPUS SUATU NODE DARI LINKED LIST (REMOVE).
Untuk menghapus node dalam linked list digunakan procedure FREENODE. Jika Q adalah suatu variabel pointer, maka FREENODE(Q) akan menyebabkan node yang ditunjuk oleh variabel pointer Q dihapus dari linked list.
Perhatikan linked list berikut :
langkah ke-1 :
Q := Next(P)

langkah ke-2 :
Next(P) := Next(Q)

langkah ke-3 :
Freenode(Q)
procedure Freenode(Q)
(a) Next(Q) := Avail

(b) Info(Q) := Null
(c) Avail := Q

MENYISIPKAN SUATU NODE KE DALAM LINKED LIST
Untuk menyisipkan node dalam linked list digunakan procedure GETNODE. Jika NEW adalah suatu variabel pointer, maka GETNODE(NEW) akan menyebabkan node yang ditunjuk oleh variabel pointer NEW disisipkan ke dalam linked list.
procedure Getnode(NEW)
if Avail = Null
then out-of-free-space
(a) else begin
Getnode := Avail;

(b) Avail := Next(Avail);

(c) Next(Getnode) : = Null;
end;

Algoritma menyisipkan sebuah Node :
(a) Getnode(NEW);
(b) Info(NEW) := Name;

(c) Q := Next(P)
(d) Next(P) := NEW

(e) Next(NEW) := Q

Jika sebuah Linked List digunakan untuk menggambarkan suatu antrean, dalam hal ini pointer dapat langsung menunjuk ke rear/akhir dari antrean untuk menghindari pengulangan melalui semua node untuk menemukan node terakhir.








Circular Linked List

Head Nodes

Circular Linked List dengan Head Node

Circular Linked List dengan Head Node kosong
Algoritma penyisipan node yang berisi variabel Name pada head dalam Linked List
a. Ambil node baru pada free storage kemudian node tersebut ditunjuk oleh pointer NEW
b. Isikan Info dengan Name pada node baru tsb.
c. Next dari node baru tsb. menunjuk ke node yang ditunjuk oleh pointer Head
d. Pindahkan pointer Head menunjuk ke node yang baru.
Untuk lebih jelas mengenai penggunaan double linked list, berikut contoh program sederhananya :








Ini merupakan bagian deklarasi program, dimana sebuah pointer diinisialisasikan dengan nama ptrsimpul dan di dalam sebuah simpul tersebut terdapat 3 buah field yaitu prev, nilai, dan next. Field prev dan next di sini bertipe data ptrsimpul dimana dengan tipe data tersebut, maka kedua field ini bias digunakan sebagai pemanggil dari sebuah simpul yang berbeda.
Ada beberapa variable yang bertipe data ptrsimpul yaitu belakang, depan dan next. Variabel belakang digunakan sebagai alamat dari simpul belakang, variable depan digunakan sebagai alamat dari simpul depan sedangkan variable baru digunakan sebagai simpul pembantu dalam proses input. Selanjutnya juga dipakai variable-variabel pembantu seperti angka,I dan n yang fungsinya menyesuaikan.
Berikut ini juga diberikan procedure tulis yang digunakan untuk mencetak atau menuliskan double linked list yang terbentuk ke layar.







Berikut diberikan procedure hapuskan untuk menghapus data dalam double linked list yang terbentuk.



















Daftar Pustaka
http://Google.com/double linked list
Akses : Selasa , 16 November 2010 21: 19.
http://google.com/ Modul Praktikum Struktur Data – IT045329 .
Akses : Selasa ,16 November 2010. 21.17.
http://wikipedia.co.id/Double Linked list pada Pascal
Akses : Senin, 16 November 2010 21: 15.
Tim Asisten. 2010. Modul Praktikum Pemrograman Komputer II. Inderalaya : Mitra Kharisma.

Searching Pointer

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.
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:
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.
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 :
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 :
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:















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.

Searching Pointer




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.
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:
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.
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 :
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 :
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; 
 var
  number: integer;
{^ Sebelum tipe menunjukkan bahwa itu sebuah pointer}
numbers_pointer: ^ integer;
 
 
 
 

begin
  {Set ke 5}
  number := 5 ;
  { Output }
  writeln ( 'Number is ' , number ) ;
  {Tetapkan nomor alamat tersebut, yang nomor @ numbers_pointer}
  numbers_pointer := @number;
  Untuk mengakses pointer alamat, Anda harus menambahkan ^ setelah pointer's     variabel nama:}
  numbers_pointer^ := 8 ;
  writeln ( 'Pointed Content is: ' , numbers_pointer^ ) ; { 8 }
  writeln ( 'Number is: ' , number ) ; {Harus 8}
end .


 
 










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://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.