Senin, 13 April 2015

POINTER



Pointer merupakan suatu tipe data dalam Pascal yang berfungsi untuk
menunjuk dan menyimpan alamat memori. Dalam penulisan pointer biasa digambar dengan panah, sedangkan bagian memori yang ditunjuk digambar dengan kotak, dan isinya ditulis di dalam kotak. Bentuk umum dari deklarasi tipe pointer:
·         Untuk pointer bertipe:
<nama_var> : ^<tipe_data>;
·         Untuk pointer tidak bertipe:
<nama_var> : pointer;
            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

Reserved word NIL
            NIL merupakan reserved word dalam Pascal, di mana pointer yang bernilai. NIL dianggap tidak menunjuk alamat memori manapun.NIL biasa digambarkan dengan lambang ground.

Fungsi Ptr
Sintaks:
Function Ptr(Seg, Ofs : word) : pointer;
dengan Seg : segmen memori.
Ofs : offset memori.
Fungsi Ptr mengembalikan pointer dari segmen dan offset yang dimasukkan.

Operator @
Sintaks:
<nama_var>:=@<variabel_yang_alamatnya_diambil>;
Operator ini digunakan untuk mengambil alamat variabel yang akan ditunjuk.

Prosedur New dan GetMem
Sintaks:
New(var P : pointer);
GetMem(var P : pointer, size : word);
Dengan P : pointer yang akan diisi.
Size : ukuran yang dipesan.
            Prosedur New digunakan untuk memesan memori untuk pointer bertipe, sedangkan prosedur GetMem untuk pointer tidak bertipe. Kedua prosedur ini akan membentuk suatu variabel dinamik yang diletakkan dalam Heap. Heap adalah memori-memori di komputer yang belum dialokasikan, yaitu memori yang tidak digunakan oleh DOS, oleh program-program resident, oleh program Turbo Pascal, internal stack yang digunakan oleh Turbo Pascal dan variabel-variabel di data segmen. Pointer yang belum digunakan sebaiknya diisi dengan NIL, dan untuk pointer yang telah menunjuk sebuah alamat yang sudah dipesan memorinya, isinya dapat dimanipulasi melalui pointer.

Linked List
            Linked List (daftar berkait) adalah suatu node (simpul) yang menunjuk ke node (simpul) berikutnya dalam suatu urutan. Suatu node minimal harus mempunyai 2 komponen, yaitu:
1. Satu atau lebih field yang berisi data di daftar berkait.
2. Satu atau lebih field berupa pointer yang menunjuk ke node lainnya. Field
    yang berupa pointer ini disebut dengan link.
Untuk mendefinisikan linked list biasa digunakan record, dengan sintaks:
Type <nama_pointer> = ^<nama_rec>;
<nama_rec> = record
data1 : <tipe_data1>;
data2 : <tipe_data2>;
. . . .
next : <nama_pointer>;
end;
            Masing-masing kotak pada linked list disebut node (simpul), node paling depan disebut head, node belakang disebut tail. Untuk mengisi linked list kosong maupun mengakhiri linked list biasanya digunakan nilai NIL. Operasi-operasi yang terdapat pada linked list antara lain:
1. Inisialisasi; yaitu mengisi variabel list dengan NIL.
2. Menambah node.
3. Menyisipkan node.
4. Menghapus node yang berisi data.
5. Membaca data dari node.
6. Menghapus seluruh isi list.

Berikut contoh program yang menggunakan Pointer :

1.      Screenshot Program
1.1 Tampilan saat program dijalankan
 


1.2 Tampilan Saat angka diinput
 
1.3 Tampilan Akhir Program 
  


1.      Source Code
Program Pointer_tidak_bertipe;
Uses crt;
Var
    p : Pointer;
    q : ^Byte;
    r : array [0..100] of Byte;
    i,n : Byte;

Begin
     Clrscr;
     GetMem(p, 20);
     q := p;
     Write('Input angka : '); readln(n);
     Clrscr;
     For i := 0 to n do
     Begin
          r[i] := n - i;
          q^ := n - i;
          inc(q);
     End;
     q := p;
     For i := 0 to n do
     Begin
          Write('r[ ', i ,' ] = ', r[i], ': ');
          Writeln('p^ ke-', i ,' = ', q^);
          inc(q);
     End;
    Readln;
End.