Struktur Data Dinamis Pascal


Ini kuliah ALgo Struk dat Zaman Kuliah Dolo di sharing aja dari pada di ilang ke delete mending di bagi 2

Permasalahan Struktur Data Statis

X = ARRAY [ 1 … 100] of real;

beginilah nilai itu disimpan di memori

|1|2|3|4|5|6|7|8|..|100|

adapun permasalahan tersebut :

  • Ada tempat yang tidak terpakai ( umumnya yang diisi tidak penuh ), atau biasa disebut WASTE SPACE.
  • Keterbatasan Komputer yang digunakan ( tetapi yang berbasis windows sudah diatasi ).
  • Tempat tidak mencukupi , misalkan sudah dialokasikan 50 tempat tetapi yang diperlukan 75 maka tempat kurang.
  • Array yang diinginkan dinamis tidak statis

Dari dasar tersebut diatas dibuat struktur data yang alokasinya dinamis, alokasi yang disesuaikan dengan kebutuhan pada saat program dijalankan ( di dalam body )

Penerapan dalam Program

  • Digunakan Pointer ( penunjuk ), yaitu penunjuk ke data yang akan dialokasikan
  • Pointer merupakan address dari data

Bagaimana Penerapan dalam Program?

Macam Pointer :

  • Linked List (Daftar Berantai)
  • Queue (Antrian)
  • Stack  (Tumpukan)
  • Tree ( Pohon)

Untuk memudahkan pengertian Pointer, Pointer dapat divisualisasikan sebagai Perumahan :

Pointer =>Nomor Kapling
Data => Rumah

Jadi bisa saja Datanya Kosong => Rumahnya belum dibangun
Jadi Pointer tidak memuat data yang akan dialokasikan

Pointer biasanya dianggap suatu Integer ( Ukurannya / Size )
Perintah membuat Initial Pointer pada languange :
Pascal => NEW
C => Malloc

Pointer dalam bahasa Pascal

Cara pembentukan Type pada pascal :
Pointer = ^Tipe Data

Contoh :
Ptr = ^titik;
Titik = Record
X,Y : integer;
End;
T : Ptr;
T1 : Titik;
NEW(T);
……. T^.X
……… T^.Y

Gambaran nya :

Pemahaman Variabel Pointer dan Variabel Biasa

T : ptr; P : ptr;
NEW(T);
T^.X := 5; T^.Y := 7;
P^ := T^;
P^.X := 10;

Sering diasumsikan T^.X = 5 , padahal 10

Catatan :
P^ := T^ merupakan penyederhanaan dari :
P^.X := T^.X
P^.Y := T^.Y

Bagaimana kalau datanya Banyak ?

tidak bisa gunakan ARRAY of Pointer pada bahasa pascal,

maka salah satu caranya adalah dengan memasukkan type pointer ke dalam struktur data yang ditunjuk
contoh :
ptr = ^T;
T = record
x,y : integer;
p : ptr;
end;

Berikut struktur code dalam pascal untuk windows

Program Pemrograman_Linked_List;
Uses
WinCrt;
Type
TChar = Char;
PtrData = ^RecordData;
RecordData = RECORD
Karakter : TChar;
Lanjutan : PtrData;
END;
Var
PtrKepala : PtrData;
(* ------ Main Program ------ *)
BEGIN
PtrKepala := NIL;
ProsesPilihan(PtrKepala);
END.

Kita coba Membuat Program record Mahasiswa

Program Program_Hitung_IPK;
(*
-----------------------------------------------------
Nama Program : IPK3list.prg
Kasus : Hitung IPK dengan Record & List
Mata Kuliah : Algoritma & Struktur Data
Dosen : Winarno Sugeng

Teknik Informatika ITENAS Bandung
-----------------------------------------------------
*)

Uses
WinCrt;
Type
PtrData = ^Record_Mhs;

Record_Mhs = RECORD
Nama : String[20];
Nim : String[10];
MK : array [1..10] of String[20];
Sks: array [1..10] of Byte;
CNilai : array [1..10] of Char;
Nilai, TNilai : array [0..10] of real;
JSks : Byte;
JTNilai, IPK : Real;

Lanjutan : PtrData;

END;
Var
i,n,p : Byte;
PtrData_Mhs : PtrData;

Procedure IsiData(VAR PtrData_Mhs: PtrData);
var
PtrBaru : PtrData;
Jawaban : Char;

begin

i:=1;

NEW(PtrBaru);

(* ----------------------------- Reset Variabel ------------------------ *)

PtrBaru^.JSks:=0; PtrBaru^.JTNilai:=0.0;

for p:=1 to 10 do
begin
PtrBaru^.MK[i]:=' '; PtrBaru^.Sks[i]:=0;
PtrBaru^.CNilai[i]:=' '; PtrBaru^.Nilai[i]:=0.0;
PtrBaru^.TNilai[i]:=0.0;
end;
(* ----------------------------- Reset Variabel ------------------------ *)

WriteLn('Data Nilai Mahasiswa');
WriteLn('--------------------');
Write('N a m a : '); ReadLn(PtrBaru^.Nama);
Write('Nim : '); ReadLn(PtrBaru^.Nim);
REPEAT
ClrScr;
Write(' Nama MK : '); ReadLn(PtrBaru^.MK[i]);
Write(' Sks MK : '); ReadLn(PtrBaru^.Sks[i]);
Write('Nilai MK : '); ReadLn(PtrBaru^.CNilai[i]);

If UpCase(PtrBaru^.CNilai[i])='A' then
PtrBaru^.Nilai[i]:=4.0
else if UpCase(PtrBaru^.CNilai[i])='B' then
PtrBaru^.Nilai[i]:=3.0
else if UpCase(PtrBaru^.CNilai[i])='C' then
PtrBaru^.Nilai[i]:=2.0
else if UpCase(PtrBaru^.CNilai[i])='D' then
PtrBaru^.Nilai[i]:=1.0
else
PtrBaru^.Nilai[i]:=0.0;

PtrBaru^.TNilai[i]:=PtrBaru^.Sks[i]*PtrBaru^.Nilai[i]; { (Nilai x Sks) }
PtrBaru^.JTNilai:=PtrBaru^.JTNilai+PtrBaru^.TNIlai[i]; { Jumlah (Nilai x Sks) }
PtrBaru^.JSks:=PtrBaru^.JSks+PtrBaru^.Sks[i]; { Jumlah Sks }

INC(i);

GotoXY(10, 10); Write ('Menambah data lagi (Y/T)? ');
Repeat
Jawaban := ReadKey;
Until Jawaban IN ['Y','y','T','t'];
UNTIL UpCase(Jawaban)='T';
Write (UpCase(Jawaban));
n:=i;
PtrBaru^.IPK:=PtrBaru^.JTNilai/PtrBaru^.JSks; { Hitung IPK }

PtrBaru^.Lanjutan := PtrData_Mhs;
PtrData_Mhs := PtrBaru;

end;

Procedure TampilData(VAR PtrData_Mhs: PtrData);
var
PostY : byte;
PtrSementara : PtrData;

begin
ClrScr;

PtrSementara := PtrData_Mhs;

GotoXY( 2, 2); Write('Nama : ', PtrSementara^.Nama);
GotoXY( 2, 3); Write('Nim : ', PtrSementara^.Nim);

GotoXY( 2, 5); Write('===============================================');
GotoXY( 3, 6); Write('N a m a');
GotoXY(20, 6); Write('Sks');
GotoXY(25, 6); Write('Nilai');
GotoXY(35, 6); Write('(NilaixSks)');
GotoXY( 2, 7); Write('===============================================');

For i:=1 to n do
begin
GotoXY( 3, i+7); Write(PtrSementara^.MK[i]);
GotoXY(20, i+7); Write(PtrSementara^.Sks[i]:2);
GotoXY(27, i+7); Write(UpCase(PtrSementara^.CNilai[i]));
GotoXY(37, i+7); Write(PtrSementara^.TNilai[i]:5:2);
end;
PostY:=WHEREY;
GotoXY( 2,PostY); Write('===============================================');

GotoXY( 5,PostY+1); WriteLn(' Total SKS : ',PtrSementara^.JSks:2);
GotoXY( 5,PostY+2); WriteLn('Total (Nilai x Sks) : ',PtrSementara^.JTNilai:5:2);
GotoXY( 5,PostY+3); WriteLn;
GotoXY( 5,PostY+4); WriteLn(' IPK : ',PtrSementara^.IPK:5:2);

PtrSementara := PtrSementara^.Lanjutan

end;

(* ---------- Main Program -------------- *)

BEGIN
IsiData(PtrData_Mhs);
TampilData(PtrData_mhs);

END.


Untuk Menjalankannya install borland turbo pascal for windows copas and run

Sumber : Kuliah Algoritma Dan stukturdata

Yah nama juga Mahasiswa ada ujian nya gan
ane mikir mikir buat tugas proyek akhir mata kuliah ini apa yah , hehe kebetulan ane sering nyuci baju di londry jadi ane bikin program buat ngerecord client laondry ini cekidot
yang paling berkesan adalah menikmati code pointer , yah lumayan gan seminggu begadang tapi alhamdulilah hasil nya baek :D , …
ini program nya:

Sour code ma dokumentasi
http://cid-4583f23bbe8b0f42.office.live.com/self.aspx/.Public/Loundry%5E_prog.zip

sekian dulu tulisannya , hehe moga bermanfaat untuk mengenal pointer, yah walau pemerograman sudah jamannya pake Visual dan sql gak salah kalo mau mencoba.