Jumat, 13 Juli 2007

Dasar Bahasa Pascal - lesson 6

pemograman

dasar pascal - lesson 6


Tipe Data Terstruktur
tipe ini terdiri atas : array, record, set, dan file.
String adalah tipe data jenis array, tetapi karena string memiliki kekhasan tersendiri sebagai
array dari karakter maka penulis perlu memberikan penjelasan tersendiri. Sedangkan untuk array, record,
dan file perlu dijelaskan dalam bab yang lain karena agak banyak hal-hal yang perlu dibahas.


-Tipe Data Pointer
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;
Contoh di atas merupakan deklarasi variabel p sebagai pointer dari integer.
Dengan menambahkan tanda caret (^) di depan nama tipe data variabel yang dideklarasikan:
contoh :
program contoh_pointer1;
uses wincrt;
var p : ^integer;
m, n : integer;
begin
m:=10;
n:=15;
p:=@m; { p sekarang menunjuk ke m }
p^:=12; { hal ini sama dengan m:=12; }
p:=@n; { p sekarang menunjuk ke n }
p^=m; { { hal ini sama dengan n:=m; }
writeln('m = ',m,', n = ',n); { m = 12, n = 12 }
end.
Ketika p menunjuk ke m ( p:=@m;), mengakses p^ sama dengan mengakses m.
Dalam membuat program, dalam penggunaan pointer kita memerlukan alokasi memori tertentu:
Ketika kita mendeklarasikan variabel pointer dalam "var" sehingga merupakan suatu static variable,
yang mana Static variable ini dibatasi oleh kapasitas 64KB untuk tiap module.
Yang berarti dalam program utama kita hanya bisa menggunakan hanya 64KB dan tiap unit Pascal
hanya bisa memakai 64KB. Sehingga kita perlu memecahkan program kebeberapa unit.
Salah satu teknik yang dipakai untuk mengatasi persoalan ini adalah seperti program berikut.

Program contoh_pointer2;
uses wincrt;
Type Pemployee = ^Temployee;
Temployee = record Name : string[10];
Position : char;
Salary : longint;
end;
var p : pemployee;
begin
new(p);
p^.name:='Saddam';
p^.position:='S';
p^.salary:=3000;
writeln(p^.name,' ',p^.position,' ',p^.salary);
dispose(p);
end.
Pada blok begin...end blok, kita bisa melihat meskipun p tidak menunjuk pada suatu variable
tetapi dapat diisi dengan nilai. Pernyataan new(p); tidak memerlukan alokasi memori.
Setelah itu kita bisa melakukan apapun pada variabel tersebut sampai kita membuangnya dari memori dengan
memakai perintah dispose(p);. Variable dengan cara ini dinamakan dengan dynamic variable.

Generic Pointer
adalah pointer tanpa tipe data tertentu.
Biasanya, pointer berkaitan dengan tipe data khusus, sedangkan generic pointer tidak.
Deklarasi:
Var P : pointer;
Dipergunakan sebagai buffer sementara (tidak permanen). Sehingga kita bisa melepasnya untuk suatu saat
tidak diperlukan. Untuk itu pointer sangat bagus karena sifatnya yang dinamis.
Tetapi, generic pointer tidak sama dengan typed pointer. Typed pointer menggunakan "new" untuk menampung memori
dan "dispose" untuk melepasnya. Generic pointer menggunakan "getmem" untuk mendapatkan memori dan "freemem"
untuk melepasnya. Pada pointer dengan tipe tertentu, program Pascal mengetahui ukuran dari memori yang harus
dilaokasikan, sedangkan tipe umum (generic pointer) Pascal tidak bisa, karena Pascal tidak mengetahui variabel
apa yang akan dipakai. Sehingga dengan getmem kita perlu untuk menentukan berapa besar memori yang akan kita
alokasikan. Ukuran terbesar adalah 65532 bytes (hampir 64K).

Program contoh_pointer2;
uses wincrt;
Var P : pointer;
Begin
Getmem(p,8192); { Reserve 8192 bytes }{ We use it then }
freemem(p,8192); { Release it, 8192 bytes }
end.

Tidak ada komentar: