Daftar Isi: <Contents
Modul Struktur Data
Daftar Isi
Contents
Tipe Data... 3
maxint.pas... 3
maxint02.pas... 3
tipedata.pas... 4
Text File... 6
TEXT01.pas... 6
TEXT02.pas... 6
TEXT03.pas... 7
TEXT04.pas... 8
Binary File... 9
01dbw.pas... 9
02dbread.pas... 10
03dbw.pas... 10
04dbread.pas... 12
05trunc.pas... 13
06hapus.pas... 13
07DB.pas... 14
FilePos.pas... 17
Stack (Tumpukan)... 18
01balik.pas... 18
if2pf.pas... 19
tumpukan.pas... 22
random.pas... 24
Queue (Antrian)... 26
antrian.pas... 26
antrian2.pas... 30
antrian3.pas... 36
Linked List (Senarai Berantai)...42
linkedls.pas... 42
Daftar Isi: <Contents
Tree (Pohon Keluarga)...50
tree.pas... 50
Sort (Pengurutan)... 53
bubble.pas... 53
insort.pas... 54
Daftar Isi: <Contents
Tipe Data
maxint.pas
1 {2 Type Range Format 3
4 5
6 Shortint -128..127 Signed 8-bit 7 Integer -32768..32767 Signed 16-bit
8 Longint -2147483648..2147483647 Signed 32-bit 9 Byte 0..255 Unsigned 8-bit
10 Word 0..65535 Unsigned 16-bit 11
12 13
14 All Integer types are ordinal types. 15
16 } 17
18 uses wincrt;
19 begin
20 writeln('nilai tertinggi untuk integer adalah: ', maxint);
21 maxlongintwriteln('nilai tertinggi untuk long integer adalah: ', );
22 end.
maxint02.pas
1 uses wincrt;2 var
3 i:integer; 4 j:longint; 5
6 begin
7 i:=maxint;
8 writeln('nilai tertinggi untuk integer adalah: ', i);
9
10 j:=maxlongint;
11 writeln('nilai tertinggi untuk long integer adalah: ', j);
12
13 writeln;
14
15 i:=i+1;
Daftar Isi: <Contents 17 j:=j+1;
18 ',maxlongint,'+1=',writeln('nilai sebuah variabel longint apabila j);
19
20 writeln;
21
22 writeln('nilai maxint +1 adalah: ', maxint+1);
23 writeln('nilai maxlongint +1 adalah: ', maxlongint+1);
24 atas?');writeln('dapatkah kalian mengambil kesimpulan dari dua contoh di
25
26 end.
tipedata.pas
1 { 23 praktikum tipe data:
4 pengenalan tipe data bentukan (tipe data yang dibentuk dari tipe data muasal) 5
6
7 Muhammad Jazman <kampar@gmail.com> 8 Wednesday, December 05, 2007 1:43:36 PM 9 }
10
11 uses wincrt;
12 13
14 const
15 pi = 3.14;
16 nmaks = 100;
17 sandi = 'xyz';
18 19 20
21 type
22
23 mahasiswa = record 24 NIM : longint; 25 nama : string; 26 usia : byte; 27 end;
28
29 koordinat = record 30 x,y:real;
31 end;
32
Daftar Isi: <Contents
34 hh,mm,ss:byte; 35 end;
36 37 var
38 p:jam;
39
40 begin
41 p.hh:= 23;
42 p.mm:= 59;
43 p.ss:= 59;
44
45 writeln('jam menunjukkan pukul ',p.hh,':',p.mm,':',p.ss);
Daftar Isi: <Contents
Text File
TEXT01.pas
1 uses wincrt;
2 var
3 F : text;
4 s : string; 5 begin
6 clrscr;
7 write('Input file name to read : '); readln(s);
8 assign(F,s); { associate it } 9 reset(F); { open it }
10 } while not EOF(F) do { read it until it's done 11 begin
12 readln(F,s);
13 writeln(s);{tampilkan di layar} 14 end;
15 close(F); { close it } 16 end.
TEXT02.pas
1 {2 demo read text file line by line 3 }
4 uses wincrt;
5 var
6 F : text;
7 s : string; 8 i : integer; 9 begin
10 clrscr;
11 write('Input file name to read : '); readln(s);
12 assign(F,s); { associate it } 13 reset(F); { open it }
14 while not EOF(F) do { read it until it's done } 15 begin
16 i:=i+1;
17 readln(F,s);
18 writeln(i:3,' ':2,s);{tampilkan di layar} 19 end;
Daftar Isi: <Contents
TEXT03.pas
1 { ERROR HANDLING ON OPENING A FILE } 2 uses wincrt;
3 var
4 F : text;
5 s : string; 6 n : integer; 7 begin
8 clrscr;
9 write('Input file name to read : '); readln(s);
10 assign(F,s); { associate it } 11 {reset(F); open it } 12
13 {$I-} 14 reset(F);
15 {$I+}
16 n:=IOResult;
17 if n<>0 then 18 begin
19 writeln('Error encountered in reading file ',s);
20 case n of
21 2: writeln('File not found');
22 3: writeln('Path not found');
23 4: writeln('Too many open files');
24 5: writeln('File access denied');
25 100: writeln('Disk read error');
26 101: writeln('Disk write error');
27 150: writeln('Disk is write protected');
28 152: writeln('Drive is not ready');
29 154: writeln('CRC error in data');
30 156: writeln('Disk seek error');
31 157: writeln('Unknown media type');
32 162: writeln('Hardware failure');
33 else writeln('Various error');
34 end;
35 halt;
36 end;
37 38 39
40 while not EOF(F) do { read it until it's done } 41 begin
42 readln(F,s);
43 writeln(s);{tampilkan di layar} 44 end;
Daftar Isi: <Contents
TEXT04.pas
1 {
2 write a text file 3 }
4 uses wincrt;
5 var
6 F : text;
7 s : string; 8 begin
9 clrscr;
10 write('Input file name to create : '); readln(s);
11 assign(F,s); { associate it } 12 rewrite(F); { create it } 13
14 writeln('Just enter any text and followed by enter.');
15 writeln('To quit : Input an empty line.');
16
17 repeat
18 readln(s); { read a line }
19 {if s='' then break;} {if s is an empty line --> break!} 20 writeln(F,s);
21 until s='';
22
Daftar Isi: <Contents
Binary File
01dbw.pas
1 { A crude database recording } 2 uses crt;
3 type
4 Temployee = record
5 name : string[20];
6 address : string[40];
7 phone : string[15];
8 age : byte; 9 salary : longint; 10 end;
11 12 var
13 F : file of Temployee;
14 c : char; 15 r : Temployee;
16 s : string; 17
18 begin
19 clrscr;
20 write('Input file name to record databases : '); readln(s);
21
22 assign(F,s); { Associate it } 23 rewrite(F); { Create it } 24
25 repeat 26 clrscr;
27 write('Name = '); readln(r.name); { Input data } 28 write('Address = '); readln(r.address);
29 write('Phone = '); readln(r.phone);
30 write('Age = '); readln(r.age);
31 write('Salary = '); readln(r.salary);
32
33 write(F,r); { Write data to file } 34
35 write('Input data again (Y/N) ?');
36 repeat
37 c:=upcase(readkey); { Ask user : Input again or not } 38 until c in ['Y','N'];
39 writeln(c);
40 until c='N';
41
Daftar Isi: <Contents 43 end.
02dbread.pas
{ A crude database read } uses crt;
type
Temployee = record
name : string[20]; address : string[40]; phone : string[15]; age : byte;
salary : longint;
end;
var
F : file of Temployee; c : char;
r : Temployee; s : string;
begin
write('Input file name to read databases : '); readln(s); assign(F,s); { Associate it }
reset(F); { reset pointer ke awal file, open it}
clrscr;
while not EOF(F) do begin read(F,r);
writeln('Name = ',r.name); writeln('Address = ',r.address); writeln('Phone = ',r.phone); writeln('Age = ',r.age); writeln('Salary = ',r.salary); writeln;
end; close(F); end.
03dbw.pas
1 { A crude database recording
2 now with ability to detect if input file is not exist 3 new features:
4 * APPENDING 5 * IO Check 6 }
7 uses crt;
8 type
9 Temployee = record
10 name : string[20];
11 address : string[40];
12 phone : string[15];
Daftar Isi: <Contents
14 salary : longint; 15 end;
16 17 var
18 F : file of Temployee;
19 c : char; 20 r : Temployee;
21 s : string; 22 n : integer; 23
24 begin
25 write('Input file name to record databases : '); readln(s);
26
27 assign(F,s); { Associate it } 28
29 {$I-}
30 01DBW.PAS }reset(F); { First, open it. COMPARE THIS ROUTINE WITH 31 {$I+}
32
33 n:=IOResult;
34 if n<>0 then { If it's doesn't exist then } 35 begin
36 {$I-}
37 rewrite(F); { Create it } 38 {$I+}
39 n:=IOResult;
40 if n<>0 then 41 begin
42 writeln('Error creating file !'); halt;
43 end;
44 end
45 else { If it exists then }
46 seek(F,filesize(F)); { Move file pointer to the last record } 47 {compare it with reset(F)}
48
49 repeat 50 clrscr;
51 write('Name = '); readln(r.name); { Input data } 52 write('Address = '); readln(r.address);
53 write('Phone = '); readln(r.phone);
54 write('Age = '); readln(r.age);
55 write('Salary = '); readln(r.salary);
56
57 write(F,r); { Write data to file } 58
59 write('Input data again (Y/N) ?');
Daftar Isi: <Contents
61 c:=upcase(readkey); { Ask user : Input again or not } 62 until c in ['Y','N'];
63 writeln(c);
64 until c='N';
65
66 close(F);
67 end.
04dbread.pas
1 { A crude database read with data number} 2 uses crt;
3 type
4 Temployee = record
5 name : string[20];
6 address : string[40];
7 phone : string[15];
8 age : byte; 9 salary : longint; 10 end;
11 12 var
13 F : file of Temployee;
14 c : char; 15 r : Temployee;
16 s : string; 17 i : integer; 18
19 begin
20 write('Input file name to read databases : '); readln(s);
21
22 assign(F,s); { Associate it }
23 reset(F); { reset pointer ke awal file} 24
25 clrscr;
26 for i:=0 to filesize(F)-1 do 27 begin
28 read(F,r);
29 writeln;
30 writeln('DATA ',i+1);
31 writeln('Name = ',r.name);
32 writeln('Address = ',r.address);
33 writeln('Phone = ',r.phone);
34 writeln('Age = ',r.age);
35 writeln('Salary = ',r.salary);
36 end;
37
Daftar Isi: <Contents 39 end.
05trunc.pas
1 uses Crt;
2
3 var
4 f: file of Integer; 5 i,j: Integer;
6 begin
7 Assign(f,'TEST.INT');
8 Rewrite(f);
9 for i := 1 to 6 do 10 Write(f,i);
11
12 Writeln('File before truncation:');
13 Reset(f);
14 while not Eof(f) do 15 begin
16 Read(f,i);
17 Writeln(i);
18 end;
19
20 Reset(f);
21 for i := 1 to 3 do
22 Read(f,j); { Read ahead 3 records } 23 Truncate(f); { Cut file off here } 24 Writeln;
25 Writeln('File after truncation:');
26 Reset(f);
27 while not Eof(f) do 28 begin
29 Read(f,i);
30 Writeln(i);
31 end;
32
33 Close(f);
34 Erase(f);
35 end.
06hapus.pas
1 uses Crt;2 3 var
4 f: file of Integer; 5 i,j: Integer;
6 begin
Daftar Isi: <Contents 8 Rewrite(f);
9 for i := 1 to 6 do 10 Write(f,i);
11 12
13 Writeln('File before truncation:');
14 Reset(f);
15 while not Eof(f) do 16 begin
17 Read(f,i);
18 Writeln(i);
19 end;
20 21
22 Reset(f);
23 for i := 1 to 3 do
24 Read(f,j); { Read ahead 3 records } 25 Truncate(f); { Cut file off here } 26 Writeln;
27 Writeln('File after truncation:');
28 Reset(f);
29 while not Eof(f) do 30 begin
31 Read(f,i);
32 Writeln(i);
33 end;
34 35
36 Close(f);
37 Erase(f);
38 end.
07DB.pas
1 {2 program untuk administrasi database employee 3 Muhammad Jazman <kampar@gmail.com>
4 Tuesday, December 04, 2007 5 1:04:54 PM
6 } 7
8 uses crt;
9 10
11 type
Daftar Isi: <Contents
13 name : string[20];
14 address : string[40];
15 phone : string[15];
16 age : byte; 17 salary : longint; 18 end;
19 20 var
21 F : file of Temployee;
22 r : Temployee;{penunjuk untuk filenya} 23 s : string;{nama file}
24 i,j : integer;
25 n : integer; {untuk menampung IOResult} 26
27 28
29 procedure showAll;
30 begin
31 clrscr; 32 reset(f);
33 for i:=1 to filesize(F) do 34 begin
35 read(F,r);
36 writeln;
37 writeln('DATA ',i);
38 writeln('Name = ',r.name);
39 writeln('Address = ',r.address);
40 writeln('Phone = ',r.phone);
41 writeln('Age = ',r.age);
42 writeln('Salary = ',r.salary);
43 end;
44 end;
45 46
47 procedure showRange(mulai:integer; akhir:integer);
48 begin
49 clrscr;
50 seek(f,mulai-1);
51 for i:=mulai to akhir do 52 begin
53 read(F,r);
54 writeln;
55 writeln('DATA ',i);
56 writeln('Name = ',r.name);
57 writeln('Address = ',r.address);
58 writeln('Phone = ',r.phone);
59 writeln('Age = ',r.age);
Daftar Isi: <Contents 61 end;
62 end;
63
64 procedure showRecord(index:integer);
65 begin
66 clrscr;
67 seek(f,index-1);
68 read(F,r);
69 writeln;
70 writeln('DATA ',i);
71 writeln('Name = ',r.name);
72 writeln('Address = ',r.address);
73 writeln('Phone = ',r.phone);
74 writeln('Age = ',r.age);
75 writeln('Salary = ',r.salary);
76 end;
77
78 procedure delRecord(index:integer);
79 begin
80 for i:=index to fileSize(f)-1 do 81 begin
82 seek(f,i);
83 read(f,r);{read data sesudahnya}
84 seek(f,i-1);{balik lagi ke data sebelumnya}
85 berikutnya}write(f,r);{timpa data yang lama dengan data record 86 end;
87 seek(f,filesize(f)-1);
88 truncate(f);{buang yang terakhir} 89 end;
90 91
92 begin
93 write('Input file name to read databases : '); readln(s);
94 assign(F,s);{ Associate it } 95 {$I-}
96 reset(F);{ reset pointer ke awal file} 97 {$I+}
98
99 n:=IOResult;
100 if n<>0 then { If it's doesn't exist then } 101 begin
102 {$I-}
103 rewrite(F); { Create it } 104 {$I+}
105 n:=IOResult;
Daftar Isi: <Contents
108 writeln('Error creating file !');
109 halt;
110 end;
111 end
112 else{ If it exists then }
113 seek(F,filesize(F)); { Move file pointer to the last record } 114
115
116 showAll;
117 {readln;} 118 {
119 showRange(2,3); 120 readln;
121 } 122 {
123 showRecord(2); 124 }
125 {
126 delrecord(2); 127 showAll; 128 readln; 129 }
130 close(F);
131 132 133
134 end.
FilePos.pas
1 uses WinCrt;
2
3 var
4 f: file of Byte; 5 size : Longint; 6 begin
7 { Get file name from command line } 8 Assign(f, ParamStr(1));
9 Reset(f);
10 size := FileSize(f);
11 Writeln('File size in bytes: ',size);
12 Writeln('Seeking halfway into file...');
13 Seek(f,size div 2);
14 Writeln('Position is now ',FilePos(f));
15 Close(f);
Daftar Isi: <Contents
Stack (Tumpukan)
01balik.pas
1 program BALIK_KALIMAT;
2
3 uses wincrt;
4
5 const elemen = 255; {batas maksimum karakter} 6
7 type
8 myString = string[elemen];
9 stack = record
10 isi:myString;
11 atas:0..elemen
12 end;
13 14 var
15 t:stack;
16 i:integer;
17 kalimat:myString;
18 19
20 procedure awalan (var t:stack);
21 begin
22 {inisialisasi stack, bahwa stack masih kosong} 23 t.atas := 0
24 end;
25 26
27 procedure push(var t:stack; x:char);
28 begin
29 t.atas := t.atas + 1;
30 t.isi[t.atas]:=x
31 end;
32 33
34 function pop(var t:stack):char; 35 begin
36 pop := t.isi[t.atas];
37 t.atas := t.atas - 1
38 end;
39
Daftar Isi: <Contents 42 clrscr; 43 awalan(t);
44 writeln('Stack untuk membalik kalimat');
45 writeln;
46 write('Masukkan sembarang kalimat: ');
47 readln(kalimat);
48 {
49 clrscr; 50 }
51 writeln('Kalimat Asli: ');
52 writeln(kalimat);
53 writeln;writeln;
54 writeln('Setelah dibalik: ');
55
56 {push setiap karakternya ke stack kita} 57 for i:= 1 to length(kalimat) do
58 push(t,kalimat[i]);
59 60
61 {pop satu-satu}
62 for i:= 1 to length(kalimat) do 63 write(pop(t));
64 writeln 65 end.
if2pf.pas
1 program KONVERSI_INFIX_KE_POSTFIX;
2 USES wincrt;
3 const
4 max_elemen = 255;
5 type
6 smax = string[max_elemen];
7 tumpukan = record
8 rinci:smax;
9 atas: 0..max_elemen
10 end;
11 12 var
13 infix:smax; {notasi infix} 14 lagi:char;
15 i:integer; 16
17 18
19 function valensi(tanda_op:char):integer; 20 begin
Daftar Isi: <Contents
22 '^' : valensi:= 3; {pangkat} 23 '*','/' : valensi:= 2; {kali,bagi} 24 '+','-' : valensi:= 1; {tambah,kurang} 25 '(' : valensi:= 0
26 end
27 end;
28 29 30
31 procedure push (var t:tumpukan; elemen:char);
32 begin
33 t.atas:= t.atas + 1;
34 t.rinci[t.atas]:= elemen;
35 end;
36 37 38
39 function pop (var t:tumpukan): char; 40 begin
41 pop:= t.rinci[t.atas];
42 t.atas := t.atas -1
43 end;
44 45 46
47 procedure infix2postfix (infix:smax);
48 var
49 i:integer;
50 operator:set of char; 51 temp,kar:char;
52 t:tumpukan;
53 test:boolean; 54 begin
55 operator:=['^']+['*']+['/']+['+']+['-'];
56
57 {melakukan konversi}
58 for i:= 1 to length(infix) do 59 begin
60 kar:= infix[i];
61 if kar= '(' then push(t,kar)
62
63 else if kar = ')' then 64 begin
65 while t.rinci[t.atas] <> '(' do 66 write(pop(t):2);{cetak}
67 temp:= pop(t)
68 end
Daftar Isi: <Contents 70 begin
71 yang ada di stack}{selama stack dan valensi kar sekarang lebih kecil dari 72 valensi(t.rinciwhile [t.atas])) (t.atas <> do0) and (valensi(kar) <=
73 write(pop(t):2);{keluarkan operator yang ada di stack} 74 push(t,kar){masukkan kar sekarang ke stack}
75 end
76 else if kar <> ' ' then
77 write (kar) {tampilkan non operator} 78 else write(' ');{spasi}
79 end;
80
81 {untuk operator} 82 if t.atas <> 0 then 83 repeat
84 write(pop(t):2)
85 until t.atas = 0;
86 end;
87 88
89 {main program} 90 begin
91 clrscr;
92 for i:=1 to 80 do write('-');
93 writeln('PROGRAM PENGUBAH NOTASI INFIX MENJADI POSTFIX');
94 writeln('DENGAN MENGGUNAKAN STACK');
95 for i:=1 to 80 do write('-');
96
97 repeat
98 write('Masukkan notasi INFIX (A * B): ');
99 readln(infix);
100 writeln;
101 write('Ungkapan POSTFIX: ');
102 infix2postfix(infix);
103
104 writeln;writeln;
105
106 write('Anda ingin mencoba lagi? Y/T: ');
107 repeat
108 lagi := readkey;
109 until upcase(lagi) in ['Y','T'];
110 writeln(lagi);
111 writeln
112 until not (lagi in['Y','y'])
Daftar Isi: <Contents
tumpukan.pas
1 uses wincrt;
2 type
3 tumpukan =^elemen;
4 elemen = record
5 info:char;
6 berikut:tumpukan;
7 end;
8 9 10 {
11 program 5.11 hal 123
12 prosedur inisialisasi tumpukan 13 }
14 procedure inisialisasi_tumpukan (var t:tumpukan);
15 begin
16 {
17 new (atas);
18 atas^.berikut:=nil; 19 }
20 new(t);
21 t^.berikut:=nil;
22 end;
23 24 {
25 program 5.12 hal 124
26 prosedur untuk mempush elemen ke dalam tumpukan 27
28 }
29 procedure push(atas:tumpukan; data:char);
30 var
31 baru:tumpukan;
32 begin
33 {mengisi simpul baru yang akan dipush} 34 new(baru);
35 with baru^ do 36 begin
37 info := data;
38 berikut:=nil 39 end;
40
41 if atas^.berikut <> nil then 42 {tumpukan sudah berisi} 43 begin
44 baru^.berikut:=atas^.berikut;
45 atas^.berikut:=baru
Daftar Isi: <Contents 47 else
48 {tumpukan masih kosong} 49 atas^.berikut:=baru
50 end;
51 52 {
53 program 5.13 hal 125
54 prosedur untuk mengambil elemen teratas pada 55 tumpukan. Senarai berantai yang digunakan adalah 56 senarai berantai berkepala
57
58 perhatikan bahwa kosong dan data dilakukan pass by reference, 59 yang artinya akan mengubah nilai induknya
60 }
61 procedure pop(atas:tumpukan;var kosong:boolean; var data:char);
62 var
63 bantu:tumpukan;
64 begin
65 kosong:=false;
66 if atas^.berikut = nil then 67 {tumpukan masih kosong} 68 kosong:=true
69 else 70 begin
71 bantu:=atas^.berikut;
72 data:=bantu^.info;
73 atas^.berikut:=bantu^.berikut;
74 dispose(bantu)
75 end
76 end;
77
78 function is_kosong(atas:tumpukan):boolean; 79 begin
80 is_kosong:=false;{default}
81 if atas^.berikut =nil then is_kosong:=true;
82 end;
83 84 85
86 {prosedur untuk mencetak rata tengah}
87 procedure writeln_center(string_input:string);
88 begin
89 writeln(string_input:40+length(string_input) div 2);
90 end;
91
92 {main} 93 var
Daftar Isi: <Contents
95 kosong:boolean; 96 data:char; 97 i:byte; 98 begin
99 writeln_center('Demo Tumpukan');
100 inisialisasi_tumpukan(atas);
101 kosong:=true;
102
103 randomize;
104 writeln('Push data ke dalam tumpukan:');
105 for i:=1 to 40 do 106 begin
107 data:=chr(a-z} random(122-97+1)+97);{random ASCII Character between 108 push(atas,data);
109 {writeln('push(atas,''',data,''')');} 110 write(data:2);
111 end;
112 {writeln(kosong);}{perhatikan bahwa kosong bernilai TRUE di sini} 113 {repeat
114 pop(atas,kosong,data); 115 write(data:2);
116 until kosong; 117 }
118
119 writeln;
120 writeln('Pop data');
121 while not is_kosong(atas) do 122 begin
123 pop(atas,kosong,data);
124 write(data:2);
125 end;
126 127 128 {
129 push(atas,'s');writeln('push(atas,''s'')'); 130 push(atas,'d');writeln('push(atas,''d'')'); 131 pop(atas,kosong,data);
132 if not kosong then writeln_center(data); 133 pop(atas,kosong,data);
134 if not kosong then writeln_center(data); 135 pop(atas,kosong,data);
136 if not kosong then writeln_center(data) else writeln_center('Stack Kosong!') 137 }
138 end.
Daftar Isi: <Contents 2 var i:integer; 3 begin
4 clrscr;
Daftar Isi: <Contents
Queue (Antrian)
antrian.pas
1 uses crt;2 {**
3 * modifikasi dari Wahid,2004. Dasar-Dasar Algoritma & 4 * Pemrograman. Yogyakarta: Andi. pp. 318-21.
5 * program mensimulasikan manipulasi terhadap sebuah queue 6 *
7 * Muhammad Jazman
8 * Friday, 29 October 2010 10:01:54 AM 9 *}
10 const
11 separator = ' ';
12 type
13 element_type = integer; 14 cell_ptr = ^cell;
15 cell = record
16 data:element_type;
17 next: cell_ptr;
18 end;
19 queue = record
20 head, tail: cell_ptr;
21 end;
22 23 {**
24 * Prosedur untuk menginisialisasi Queue 25 * perhatikan penggunaan var q,
26 * artinya: q dilakukan pass-by-reference.
27 * perubahan terhadap q di sini akan mengubah q di 28 * induk yang memanggilnya.
29 *}
30 procedure initialise ( var q: queue);
31 begin
32 q.head := nil;
33 q.tail := nil;
34 end;
35 36 {**
37 * menghasilkan true jika queue input kita kosong 38 *}
39 function is_empty(q:queue):boolean; 40 begin
41 is_empty := (q.head = nil) and (q.tail=nil);
Daftar Isi: <Contents 43
44 {**
45 * menambahkan new_element ke queue q 46 *}
47 procedure enqueue(var q:queue; new_element:element_type);
48 var p: cell_ptr;
49 begin
50 new(p);{alokasikan memori untuk cell baru} 51 p^.data := new_element;{cell.data}
52 p^.next := nil;{akan diletakkan di belakang} 53 if is_empty(q) then
54 begin
55 q.head:=p; {q.head adalah cell ini} 56 q.tail:=p;
57 end
58 else {queue sudah terisi} 59 begin
60 q.tail^.next := p;
61 q.tail := p;
62 end;
63 end;
64 65 {**
66 * mengurangi antrian
67 * mengurangi antrian artinya menghapus cell head kita 68 *}
69 procedure dequeue(var q:queue);
70 var
71 p: cell_ptr;
72 {p adalah temporary cell, untuk menyimpan pointer ke 73 cell yang ingin dibuang}
74 begin
75 if not is_empty(q) then 76 begin
77 p := q.head;{}
78 q.head := q.head^.next;
79
80 {check apakah karena ini queue kita jadi kosong} 81 if q.head = nil then q.tail:=nil;
82 dispose(p);{hilangkan alokasi memori untuk cell tadi} 83 end
84 else
85 {empty queue}
86 writeln('Error: Queue kosong');
87 end;
88
Daftar Isi: <Contents
91 var temp_cell:cell_ptr;
92 begin
93 if is_empty(q) then writeln('Queue kosong')
94 else 95 begin
96 temp_cell := q.head;{mulai dari head to tail} 97 while temp_cell <> nil do
98 begin
99 data} write(temp_cell^.data,separator);{write our current cell 100 temp_cell := temp_cell^.next; {move forward}
101 end;
102 end;
103 end;
104 105 106
107 {** cetak menu}
108 procedure cetak_menu;
109 var i:byte; 110 begin
111 clrscr;{bersihkan layar} 112 textbackground(7);
113 textcolor(9);
114 clrscr;{kasih background} 115
116 {baris1}
117 gotoxy(1,1);write(chr(201));
118 for i:=1 to 78 do write(chr(205));
119 write(chr(187));
120
121 {baris2}
122 gotoxy(1,2);{kolom1 baris2} 123 write(chr(186));
124 gotoxy((80-23) div 2,2);textcolor(9+15);
125 write('PRAKTIKUM STRUKTUR DATA');textcolor(9);
126 gotoxy(80,2);write(chr(186));
127
128 {baris3}
129 gotoxy(1,3);write(chr(186));
130 gotoxy(80,3);write(chr(186));
131
132 {baris4}
133 gotoxy(1,4);write(chr(200));
134 for i:=1 to 78 do write(chr(205));
135 write(chr(188));
136
Daftar Isi: <Contents
138 writeln('Menu');
139 writeln('1. Menambah Elemen');
140 writeln('2. Mengurangi Elemen');
141 writeln('3. Menampilkan Isi Queue');
142 writeln('4. Keluar');
143 writeln;
144 end;
145
146 {main program} 147 var
148 x: element_type;{untuk menampung nilai baru} 149 q: queue;
150 i: integer; 151 stop:boolean; 152 pilihan:char; 153 begin
154 clrscr; 155
156 {initialise queue} 157 initialise(q);
158 stop:=false;
159 repeat 160
161 writeln('Press any key to display menu');
162 readkey;
163 cetak_menu;
164 write('Pilihan [1..4]: ');
165 repeat
166 pilihan:=readkey;
167 until (pilihan in ['1','2','3','4']);
168 {readln(pilihan);} 169
170 case pilihan of
171 '1': begin
172 {menambah elemen} 173 clrscr;
174 writeln('Menambah Elemen');
175 write('Nilai yang ditambahkan: ');
176 readln(x);
177 enqueue(q,x);{masukkan x ke dalam queue}
178 antrian'); writeln('Nilai ',x,' telah dimasukkan ke dalam
179 end;
180 '2': begin
181 {mengurangi elemen} 182 clrscr;
183 writeln('Mengurangi Elemen');
Daftar Isi: <Contents
185 writeln;
186 end;
187 '3': begin
188 clrscr;
189 writeln('Menampilkan Isi Queue');
190 display_queue(q);
191 writeln;
192 end;
193 '4': stop:=true;
194 end; {case of} 195 until (stop=true);
196
197 writeln;
198 normvideo;{normalkan kembali layar} 199 clrscr;
200 writeln('Terimakasih telah menggunakan program ini.');
201 writeln('Press any key to terminate this program ...');
202 readkey;
203 end.
antrian2.pas
1 uses crt;2 {**
3 * modifikasi dari Wahid,2004. Dasar-Dasar Algoritma & 4 * Pemrograman. Yogyakarta: Andi. pp. 318-21.
5 * program mensimulasikan manipulasi terhadap sebuah queue 6 *
7 * Muhammad Jazman
8 * Friday, 29 October 2010 10:01:54 AM 9
10
11 NEW: Add Load and Save to File 12 *}
13 const
14 separator = ' ';
15 type
16 element_type = integer; 17 cell_ptr = ^cell;
18 cell = record
19 data:element_type;
20 next: cell_ptr;
21 end;
22 queue = record
23 head, tail: cell_ptr;
24 end;
Daftar Isi: <Contents
27 * Prosedur untuk menginisialisasi Queue 28 * perhatikan penggunaan var q,
29 * artinya: q dilakukan pass-by-reference.
30 * perubahan terhadap q di sini akan mengubah q di 31 * induk yang memanggilnya.
32 *}
33 procedure initialise ( var q: queue);
34 begin
35 q.head := nil;
36 q.tail := nil;
37 end;
38 39 {**
40 * menghasilkan true jika queue input kita kosong 41 *}
42 function is_empty(q:queue):boolean; 43 begin
44 is_empty := (q.head = nil) and (q.tail=nil);
45 end;
46 47 {**
48 * menambahkan new_element ke queue q 49 *}
50 procedure enqueue(var q:queue; new_element:element_type);
51 var p: cell_ptr;
52 begin
53 new(p);{alokasikan memori untuk cell baru} 54 p^.data := new_element;{cell.data}
55 p^.next := nil;{akan diletakkan di belakang} 56 if is_empty(q) then
57 begin
58 q.head:=p; {q.head adalah cell ini} 59 q.tail:=p;
60 end
61 else {queue sudah terisi} 62 begin
63 q.tail^.next := p;
64 q.tail := p;
65 end;
66 end;
67 68 {**
69 * mengurangi antrian
70 * mengurangi antrian artinya menghapus cell head kita 71 *}
72 procedure dequeue(var q:queue);
73 var
Daftar Isi: <Contents
75 {p adalah temporary cell, untuk menyimpan pointer ke 76 cell yang ingin dibuang}
77 begin
78 if not is_empty(q) then 79 begin
80 p := q.head;{}
81 q.head := q.head^.next;
82
83 {check apakah karena ini queue kita jadi kosong} 84 if q.head = nil then q.tail:=nil;
85 dispose(p);{hilangkan alokasi memori untuk cell tadi} 86 end
87 else
88 {empty queue}
89 writeln('Error: Queue kosong');
90 end;
91
92 {prosedur untuk menampilkan urutan queue ke layar} 93 procedure display_queue(q:queue);
94 var temp_cell_ptr:cell_ptr;
95 begin
96 if is_empty(q) then writeln('Queue kosong')
97 else 98 begin
99 temp_cell_ptr := q.head;{mulai dari head to tail} 100 while temp_cell_ptr <> nil do
101 begin
102 data} write(temp_cell_ptr^.data,separator);{write our current cell 103 temp_cell_ptr := temp_cell_ptr^.next; {move forward}
104 end;
105 end;
106 end;
107
108 {** save our queue for further use} 109 procedure saveToFile(q:queue);
110 var
111 f: file of cell;
112 s: string;
113 temp_cell_ptr:cell_ptr;
114 temp_cell:cell;
115 begin
116 writeln('Input file name to save our Queue. ');
117 write('Warning: It will overwrite an existing file : ');
118 readln(s);
119 assign(F,s); { Associate it } 120 rewrite(F); { Create it }
Daftar Isi: <Contents
122 while temp_cell_ptr <> nil do 123 begin
124 temp_cell.data := temp_cell_ptr^.data;
125 temp_cell.next := temp_cell_ptr^.next;
126 write(f,temp_cell);{write our current cell data} 127 temp_cell_ptr := temp_cell_ptr^.next; {move forward} 128 end;
129 close(F);{close our file again} 130 end;
131
132 procedure loadFromFile(var q:queue);
133 var
134 s:string;{string to hold our file name} 135 f:file of cell;
136 {temp_cell_ptr:cell_ptr;} 137 temp_cell:cell;
138 begin
139 write('Input file name to read: '); readln(s);
140 assign(F,s); { Associate it }
141 reset(F); { reset pointer ke awal file} 142
143 {delete our current queue}
144 while not is_empty(q) do dequeue(q);
145
146 while not EOF(F) do 147 begin
148 read(F,temp_cell);
149 {temp_cell_ptr:=@temp_cell;} 150 enqueue(q,temp_cell.data);
151 end;
152 end;
153 154
155 {** cetak menu}
156 procedure cetak_menu;
157 var i:byte; 158 begin
159 clrscr;{bersihkan layar} 160 textbackground(7);
161 textcolor(9);
162 clrscr;{kasih background} 163
164 {baris1}
165 gotoxy(1,1);write(chr(201));
166 for i:=1 to 78 do write(chr(205));
167 write(chr(187));
168
Daftar Isi: <Contents
170 gotoxy(1,2);{kolom1 baris2} 171 write(chr(186));
172 gotoxy((80-23) div 2,2);textcolor(9+15);
173 write('PRAKTIKUM STRUKTUR DATA');textcolor(9);
174 gotoxy(80,2);write(chr(186));
175
176 {baris3}
177 gotoxy(1,3);write(chr(186));
178 gotoxy(80,3);write(chr(186));
179
180 {baris4}
181 gotoxy(1,4);write(chr(200));
182 for i:=1 to 78 do write(chr(205));
183 write(chr(188));
184
185 writeln;
186 writeln('Menu');
187 writeln('A. ADD = Menambah Elemen');
188 writeln('D. DELL = Mengurangi Elemen');
189 writeln('V. VIEW = Isi Queue');
190 writeln('S. SAVE = Simpan ke dalam File');
191 writeln('L. LOAD = Load dari File');
192 writeln('X. eXIT = Keluar');
193 writeln;
194 end;
195
196 {main program} 197 var
198 x: element_type;{untuk menampung nilai baru} 199 q: queue;
200 i: integer; 201 stop:boolean; 202 pilihan:char; 203 begin
204 clrscr; 205
206 {initialise queue} 207 initialise(q);
208 stop:=false;
209 repeat 210
211 writeln('Press any key to display menu');
212 readkey;
213 cetak_menu;
214 write('Pilihan [A,D,V,S,L,X]: ');
215 repeat
216 pilihan:=readkey;
Daftar Isi: <Contents
218 {readln(pilihan);} 219
220 case upcase(pilihan) of
221 'A': begin
222 {menambah elemen} 223 clrscr;
224 writeln('Menambah Elemen');
225 write('Nilai yang ditambahkan: ');
226 readln(x);
227 enqueue(q,x);{masukkan x ke dalam queue}
228 antrian'); writeln('Nilai ',x,' telah dimasukkan ke dalam
229 end;
230 'D': begin
231 {mengurangi elemen} 232 clrscr;
233 writeln('Mengurangi Elemen');
234 dequeue(q);
235 writeln;
236 end;
237 'V': begin
238 clrscr;
239 writeln('Menampilkan Isi Queue');
240 display_queue(q);
241 writeln;
242 end;
243 'S': begin
244 clrscr;
245 writeln('Simpan ke dalam File');
246 saveToFile(q);
247 writeln;
248 end;
249 'L': begin
250 clrscr;
251 writeln('Load dari File');
252 loadFromFile(q);
253 writeln;
254 end;
255
256 'X': stop:=true;
257 end; {case of} 258 until (stop=true);
259
260 writeln;
261 normvideo;{normalkan kembali layar} 262 clrscr;
263 writeln('Terimakasih telah menggunakan program ini.');
Daftar Isi: <Contents 265 readkey;
266 end.
antrian3.pas
1 uses crt;2 {**
3 * modifikasi dari Wahid,2004. Dasar-Dasar Algoritma & 4 * Pemrograman. Yogyakarta: Andi. pp. 318-21.
5 * program mensimulasikan manipulasi terhadap sebuah queue 6 *
7 * Muhammad Jazman
8 * Friday, 29 October 2010 10:01:54 AM 9
10 NEW: queue file is a [file of element_type], to save. 11
12 *} 13 const
14 separator = ' ';
15 type
16 element_type = integer; 17 cell_ptr = ^cell;
18 cell = record
19 data:element_type;
20 next: cell_ptr;
21 end;
22 queue = record
23 head, tail: cell_ptr;
24 end;
25 26 {**
27 * Prosedur untuk menginisialisasi Queue 28 * perhatikan penggunaan var q,
29 * artinya: q dilakukan pass-by-reference.
30 * perubahan terhadap q di sini akan mengubah q di 31 * induk yang memanggilnya.
32 *}
33 procedure initialise ( var q: queue);
34 begin
35 q.head := nil;
36 q.tail := nil;
37 end;
38 39 {**
40 * menghasilkan true jika queue input kita kosong 41 *}
Daftar Isi: <Contents
44 is_empty := (q.head = nil) and (q.tail=nil);
45 end;
46 47 {**
48 * menambahkan new_element ke queue q 49 *}
50 procedure enqueue(var q:queue; new_element:element_type);
51 var p: cell_ptr;
52 begin
53 new(p);{alokasikan memori untuk cell baru} 54 p^.data := new_element;{cell.data}
55 p^.next := nil;{akan diletakkan di belakang} 56 if is_empty(q) then
57 begin
58 q.head:=p; {q.head adalah cell ini} 59 q.tail:=p;
60 end
61 else {queue sudah terisi} 62 begin
63 q.tail^.next := p;
64 q.tail := p;
65 end;
66 end;
67 68 {**
69 * mengurangi antrian
70 * mengurangi antrian artinya menghapus cell head kita 71 *}
72 procedure dequeue(var q:queue);
73 var
74 p: cell_ptr;
75 {p adalah temporary cell, untuk menyimpan pointer ke 76 cell yang ingin dibuang}
77 begin
78 if not is_empty(q) then 79 begin
80 p := q.head;{}
81 q.head := q.head^.next;
82
83 {check apakah karena ini queue kita jadi kosong} 84 if q.head = nil then q.tail:=nil;
85 dispose(p);{hilangkan alokasi memori untuk cell tadi} 86 end
87 else
88 {empty queue}
89 writeln('Error: Queue kosong');
90 end;
Daftar Isi: <Contents
92 {prosedur untuk menampilkan urutan queue ke layar} 93 procedure display_queue(q:queue);
94 var temp_cell_ptr:cell_ptr;
95 begin
96 if is_empty(q) then writeln('Queue kosong')
97 else 98 begin
99 temp_cell_ptr := q.head;{mulai dari head to tail} 100 while temp_cell_ptr <> nil do
101 begin
102 data} write(temp_cell_ptr^.data,separator);{write our current cell 103 temp_cell_ptr := temp_cell_ptr^.next; {move forward}
104 end;
105 end;
106 end;
107
108 {** save our queue for further use} 109 procedure saveToFile(q:queue);
110 var
111 f: file of element_type;
112 s: string;
113 temp_cell_ptr:cell_ptr;
114 begin
115 writeln('Input file name to save our Queue. ');
116 write('Warning: It will overwrite an existing file : ');
117 readln(s);
118 assign(F,s); { Associate it } 119 rewrite(F); { Create it }
120 temp_cell_ptr := q.head;{mulai dari head to tail} 121 while temp_cell_ptr <> nil do
122 begin
123 write(f,temp_cell_ptr^.data);{write our current cell data} 124 temp_cell_ptr := temp_cell_ptr^.next; {move forward}
125 end;
126 close(F);{close our file again} 127 end;
128
129 procedure loadFromFile(var q:queue);
130 var
131 s:string;{string to hold our file name} 132 f:file of element_type;
133 data:element_type;
134 begin
135 write('Input file name to read: '); readln(s);
136 assign(F,s); { Associate it }
Daftar Isi: <Contents
139 {delete our current queue}
140 while not is_empty(q) do dequeue(q);
141
142 while not EOF(F) do 143 begin
144 read(F,data);
145 enqueue(q,data);
146 end;
147 end;
148 149
150 {** cetak menu}
151 procedure cetak_menu;
152 var i:byte; 153 begin
154 clrscr;{bersihkan layar} 155 textbackground(7);
156 textcolor(9);
157 clrscr;{kasih background} 158
159 {baris1}
160 gotoxy(1,1);write(chr(201));
161 for i:=1 to 78 do write(chr(205));
162 write(chr(187));
163
164 {baris2}
165 gotoxy(1,2);{kolom1 baris2} 166 write(chr(186));
167 gotoxy((80-23) div 2,2);textcolor(9+15);
168 write('PRAKTIKUM STRUKTUR DATA');textcolor(9);
169 gotoxy(80,2);write(chr(186));
170
171 {baris3}
172 gotoxy(1,3);write(chr(186));
173 gotoxy(80,3);write(chr(186));
174
175 {baris4}
176 gotoxy(1,4);write(chr(200));
177 for i:=1 to 78 do write(chr(205));
178 write(chr(188));
179
180 writeln;
181 writeln('Menu');
182 writeln('A. ADD = Menambah Elemen');
183 writeln('D. DELL = Mengurangi Elemen');
184 writeln('V. VIEW = Isi Queue');
185 writeln('S. SAVE = Simpan ke dalam File');
Daftar Isi: <Contents
187 writeln('X. eXIT = Keluar');
188 writeln;
189 end;
190
191 {main program} 192 var
193 x: element_type;{untuk menampung nilai baru} 194 q: queue;
195 i: integer; 196 stop:boolean; 197 pilihan:char; 198 begin
199 clrscr; 200
201 {initialise queue} 202 initialise(q);
203 stop:=false;
204 repeat 205
206 writeln('Press any key to display menu');
207 readkey;
208 cetak_menu;
209 write('Pilihan [A,D,V,S,L,X]: ');
210 repeat
211 pilihan:=readkey;
212 until (upcase(pilihan) in ['A','D','V','S','L','X']);
213 {readln(pilihan);} 214
215 case upcase(pilihan) of
216 'A': begin
217 {menambah elemen} 218 clrscr;
219 writeln('Menambah Elemen');
220 write('Nilai yang ditambahkan: ');
221 readln(x);
222 enqueue(q,x);{masukkan x ke dalam queue}
223 antrian'); writeln('Nilai ',x,' telah dimasukkan ke dalam
224 end;
225 'D': begin
226 {mengurangi elemen} 227 clrscr;
228 writeln('Mengurangi Elemen');
229 dequeue(q);
230 writeln;
231 end;
232 'V': begin
Daftar Isi: <Contents
234 writeln('Menampilkan Isi Queue');
235 display_queue(q);
236 writeln;
237 end;
238 'S': begin
239 clrscr;
240 writeln('Simpan ke dalam File');
241 saveToFile(q);
242 writeln;
243 end;
244 'L': begin
245 clrscr;
246 writeln('Load dari File');
247 loadFromFile(q);
248 writeln;
249 end;
250
251 'X': stop:=true;
252 end; {case of} 253 until (stop=true);
254
255 writeln;
256 normvideo;{normalkan kembali layar} 257 clrscr;
258 writeln('Terimakasih telah menggunakan program ini.');
259 writeln('Press any key to terminate this program ...');
260 readkey;
Daftar Isi: <Contents
Linked List (Senarai Berantai)
linkedls.pas
1 uses crt;2 type
3 simpul=^data;
4 data=record 5 info:char; 6 berikut:simpul;
7 end;
8
9 var
10 elemen:char;
11 awal,akhir,baru:simpul;
12 13 14 {
15 program 5.1
16 Prosedur untuk menambah simpul.
17 Simpul baru diletakkan di akhir senarai berantai 18 }
19 procedure tambah_belakang (var awal, akhir: simpul; elemen:char);
20 var baru:simpul;
21 begin
22 new(baru);{alokasikan memori} 23 baru^.info:=elemen;
24 {jika awal masih kosong}
25 if awal = nil then awal:= baru
26 else
27 akhir^.berikut:=baru;
28
29 akhir:=baru;
30 akhir^.berikut:=nil 31 end;
32 33 34 {
35 program 5.2
36 prosedur untuk menambah simpul.
37 simpul baru diletakkan di awal senarai berantai 38 }
39 procedure tambah_depan(var awal,akhir:simpul;elemen:char);
40 var
41 baru:simpul;
Daftar Isi: <Contents 43 new(baru);
44 baru^.info:=elemen;
45 if awal=nil then 46 akhir:= baru
47 else
48 baru^.berikut:=awal;
49 awal:=baru;
50 end;
51 52 {
53 program 5.3
54 prosedur untuk menambah simpul di tengah senarai berantai 55 }
56 procedure tambah_tengah (var awal,akhir:simpul; elemen:char);
57 var
58 baru,bantu:simpul;
59 begin
60 new(baru);
61 baru^.info:=elemen;
62 if awal = nil then {senarai masih kosong} 63 begin
64 awal:=baru;
65 akhir:=baru
66 end
67 else 68 begin
69 {mencari lokasi yang sesuai} 70 bantu:=awal;
71 while elemen>baru^.berikut^.info do 72 bantu:=bantu^.berikut;
73
74 {menyisipkan simpul baru} 75 baru^.berikut:=bantu^.berikut;
76 bantu^.berikut:=baru;
77 end;
78 end;
79 80 {
81 program 5.4
82 prosedur menghapus simpul 83 }
84 procedure hapus_simpul(var awal,akhir:simpul;elemen:char);
85 var bantu,hapus:simpul;
86 begin
87 if awal=nil then {senarai masih kosong}
88 writeln('senarai masih kosong, tidak dapat menghapus')
Daftar Isi: <Contents 91 begin
92 hapus:=awal;
93 awal:=hapus^.berikut;
94 dispose(hapus)
95 end
96 else
97 {menghapus simpul tengah atau terakhir} 98 begin
99 bantu:=awal;
100 {mencari simpul yang akan dihapus}
101 while (elemen<>bantu^.info) and (bantu^.berikut <> nil) do 102 bantu:=bantu^.berikut;
103
104 hapus:=bantu^.berikut;
105 if hapus<>nil then
106 {simpul yang akan dihapus ketemu} 107 begin
108 if hapus <> akhir then 109 {simpul tengah dihapus}
110 bantu^.berikut:=hapus^.berikut
111 else
112 {simpul terakhir dihapus} 113 begin
114 akhir:=bantu;
115 akhir^.berikut:=nil 116 end;
117 dispose(hapus)
118 end
119
120 else
121 {simpul yang akan dihapus tidak ketemu}
122 writeln('Simpul yang akan dihapus tidak ada')
123 end
124 end;
125 126 127 {
128 program 5.5
129 prosedur untuk membaca senarai dari kiri ke kanan (maju) 130 }
131 procedure baca_maju (awal,akhir:simpul);
132 var
133 bantu:simpul;
134 begin
135 bantu:=awal;
136 repeat
137 write(bantu^.info:2);
Daftar Isi: <Contents
139 until bantu=nil;
140 writeln 141 end;
142 143 144 {
145 Program 5.6
146 Prosedur untuk membalik pointer 147 }
148 procedure balik_pointer(var awal, akhir: simpul);
149 var
150 bantu, bantu1: simpul;
151 begin
152 bantu:= awal;
153 awal:= akhir;
154
155 {proses membalik pointer} 156 repeat
157 bantu1 := bantu;
158
159 akhir}{mencari simpul sebelum simpul yang ditunjuk oleh pointer 160 while bantu1^.berikut <> akhir do
161 bantu1 := bantu1^.berikut;
162
163 akhir^.berikut:=bantu1;
164 akhir:= bantu1;
165 until akhir = bantu;
166 akhir^.berikut:= nil;
167 end;
168 169 {
170 program 5.7
171 prosedur membaca senarai dari kanan ke kiri 172 menggunakan cara pembacaan secara rekursif 173 }
174 procedure mundur (bantu:simpul);
175 begin
176 if bantu <> nil then 177 begin
178 mundur(bantu^.berikut);
179 write(bantu^.info:2)
180 end;
181 end;
182 183 {
184 program 5.8
Daftar Isi: <Contents
186 jiwa fungsi bernilai 'true' berarti data ketemu 187 }
188 function ada_data (elemen:char; awal:simpul):boolean; 189 var
190 ketemu:boolean; 191 begin
192 ketemu:=false;
193 repeat
194 if awal^.info = elemen then 195 ketemu := true
196 else
197 awal := awal^.berikut;
198 until ketemu or (awal = nil);
199 ada_data := ketemu
200 end;
201 202 {
203 program 5.9
204 Fungsi untuk mencari data pada senarai terurutkan 205 Jika fungsi bernilai 'true' bearti data ketemu 206 }
207 function ada_data1 (awal:simpul; elemen:char):boolean; 208 var ketemu:boolean;
209 begin
210 ketemu:=false;
211 repeat
212 if awal^.info = elemen then 213 {data ditemukan}
214 ketemu := true 215 else
216 if awal^.info < elemen then 217 awal := awal^.berikut
218 else
219 {tidak ditemukan} 220 awal:=nil
221 until ketemu or (awal=nil);
222
223 ada_data1:=ketemu
224 end;
225 226 {
227 program 5.10
228 prosedur inisialisasi senarai berantai 229 untuk membentuk simpul kepala
230 }
231 procedure awalan(var awal:simpul);
232 begin
Daftar Isi: <Contents
234 {karena belum punya simpul, ini adalah simpul terakhir} 235 awal^.berikut := nil;
236 end;
237 238 239
240 {main program} 241 begin
242 clrscr;
243 writeln('Program untuk menguji Linked List');
244 writeln;
245 writeln('Nilai awal^.info:=',awal^.info);
246 writeln('Nilai akhir^.info:=',akhir^.info);
247 writeln;
248
249 awalan(awal);
250 writeln('awalan(awal);');
251 writeln('Nilai awal^.info:=',awal^.info);
252 writeln('Nilai akhir^.info:=',akhir^.info);
253 writeln;
254
255 tambah_belakang(awal,akhir,'a');
256 writeln('tambah_belakang(awal,akhir,''a'');');
257 writeln('Nilai awal^.info:=',awal^.info);
258 writeln('Nilai akhir^.info:=',akhir^.info);
259 writeln;
260
261 tambah_belakang(awal,akhir,'b');
262 tambah_belakang(awal,akhir,'c');
263 tambah_belakang(awal,akhir,'d');
264 tambah_belakang(awal,akhir,'e');
265 tambah_belakang(awal,akhir,'f');
266 writeln('baca_maju(awal,akhir);');
267 baca_maju(awal,akhir);
268 writeln;
269
270 awal:=nil;akhir:=nil;
271 writeln('awal:=nil;akhir:=nil;');
272 writeln('Nilai awal^.info:=',awal^.info);
273 writeln('Nilai akhir^.info:=',akhir^.info);
274 writeln;
275
276 tambah_belakang(awal,akhir,'a');
277 writeln('tambah_belakang(awal,akhir,''a'');');
278 writeln('Nilai awal^.info:=',awal^.info);
279 writeln('Nilai akhir^.info:=',akhir^.info);
280 writeln;
Daftar Isi: <Contents
282 tambah_belakang(awal,akhir,'b');
283 tambah_belakang(awal,akhir,'c');
284 tambah_belakang(awal,akhir,'d');
285 tambah_belakang(awal,akhir,'e');
286 tambah_belakang(awal,akhir,'f');
287 writeln('baca_maju(awal,akhir);');
288 baca_maju(awal,akhir);
289 writeln;
290
291 end.
dll.pas
1 {Chapter 3 -- Double Linked List} 2 type
3 pDbllist = ^tDbllist;
4 tDbllist = record
5 name : string[30];
6 address : string[40];
7 prev, next : pDbllist;
8 end;
9 10
11 procedure add(var tail : pDbllist; content : tDbllist);{: pDbllist;} 12 var cur : pDbllist;
13 begin
14 new(cur);
15 cur^.name:=content.name;
16 cur^.address:=content.address;
17 cur^.prev:=tail;
18 cur^.next:=nil;
19 tail^.next:=cur;
20 end;
21
22 procedure display(head : pDbllist);
23 var cur : pDbllist;
24 begin
25 cur:=head;
26 while cur<>nil do 27 begin
28 writeln(cur^.name:35,cur^.address);
29 cur:=cur^.next;
30 end;
31 end;
32 33
34 procedure delete(whattodel : pDbllist);
Daftar Isi: <Contents 36 begin
37 cur:=whattodel;
38 if cur=nil then exit;
39 bef:=cur^.prev;
40 aft:=cur^.next;
41 in the middle }if (bef<>nil) and (aft<>nil) then { The wanna be deleted item is 42 begin
43 bef^.next:=aft;
44 aft^.prev:=bef;
45 end
46 else
47 at the front }if (bef=nil) and (aft<>nil) then { The wanna be deleted item is 48 aft^.prev:=nil
49 else 50
51 is at the end }if (bef<>nil) and (aft=nil) then { The wanna be deleted item 52 bef^.next:=nil;
53
54 dispose(cur);
55 end;
56
57 procedure insert(afterwhat : pDbllist; content : tDbllist);
58 var cur, bef : pDbllist;
59 begin
60 list }if afterwhat=nil then exit; { You can't insert item in an empty 61 inserted item }new(cur); { Create node for the wanna be 62 cur^.name:=content.name; { Then fill it with its data } 63 cur^.address:=content.address;
64
65 bef:=afterwhat;
66 cur^.prev:=bef; { Cur is after bef, so bef is before cur } 67 cur^.next:=bef^.next; { Take over the next item ** }
68 bef^.next:=cur; { Link the inserted item after the node } 69 end;
70
71 {main} 72 begin
Daftar Isi: <Contents
Tree (Pohon Keluarga)
tree.pas
1
uses
wincrt;
2
3
type Tree=^Simpul;
4
Simpul =
record
5
Info:
char;
6
Kiri, Kanan:Tree
7
end;
8 9
var
10
myTree: tree;
11 12
{
13
Fungsi untuk mengalokasikan sebuah simpul baru
14
Informasi disimpan dalam Hrf
15
}
16
function
baru(
hrf
:
char
):Tree;
17
var
B: Tree;
18
begin
19
new
(
B
);
20
B^.Info := Hrf;
21
B^.Kanan := nil;
22
B^.Kiri := nil;
23
baru:=B
24
end;
25 26
{
27
Prosedur untuk menyisipkan simpul baru ke dalam
28
pohon biner dengan cara non rekursif. Informasi
29
yang akan disimpan dinyatakan dalam Hrf.
30
}
31
procedure
sisip_simpul_non_rekursif(
var
akar:tree;hrf:
char
);
32
var
33
b,p,q:tree;
34
begin
35
b:=baru(
hrf
);
{new tree}
36
if
akar=
nil then
37
{pohon masih kosong}
38
akar:=b
Daftar Isi: <Contents
40
{pohon sudah terisi sejumlah simpul}
41
begin
42
q:=akar;
43
p:=akar;
44
45
{cari letak yang tepat untuk sisipkan simpul baru}
46
while
(
hrf
<>
p^.info
) and (
q
<>
nil
)
do
47
begin
48
P:=q;
49
if
hrf < p^.info
then
50
q:=p^.kiri
51
else
52
q:=p^.kanan
53
end;{end if, end while}
54
55
if
hrf=p^.info
then
56
{data sudah ada}
57
writeln
(
'Error: Data ['
,hrf,
'] sudah ada'
)
58
else
59
if
hrf < p^.info
then
p^.kiri:=b
60
else
p^.kanan:=b
61
end
62
end;
63 64
{
65
Prosedur untuk menyisipkan simpul baru ke dalam
66
pohon biner dengan cara rekursif
67
Informasinya sebagai hrf
68
}
69
procedure
sisip_rekursif(
var
pohon:tree;hrf:
char
);
70
begin
71
if
pohon =
nil then
pohon:=baru(
hrf
)
72
else
73
if
pohon^.info>hrf
then
sisip_rekursif(
pohon^.kiri
,
hrf
)
74
else if
pohon^.info<hrf
then
sisip_rekursif(
pohon^.kanan
,
hrf
)
75
else writeln
(
'Error: Data ['
,hrf,
'] sudah ada'
)
76
end;
77
78
{main program}
79
begin
80
writeln
(
'Program Test Tree'
);
81
myTree:=baru(
'5'
);
82
writeln
(
myTree^.Info
);
Daftar Isi: <Contents
84
sisip_simpul_non_rekursif(
myTree
,
'4'
);
85
sisip_simpul_non_rekursif(
myTree
,
'6'
);
86
sisip_simpul_non_rekursif(
myTree
,
'8'
);
87
sisip_simpul_non_rekursif(
myTree
,
'7'
);
88
sisip_simpul_non_rekursif(
myTree
,
'9'
);
89
sisip_simpul_non_rekursif(
myTree
,
'6'
);
Daftar Isi: <Contents
Sort (Pengurutan)
bubble.pas
1 {2 hasil modifikasi dari:
3 http://pascalprogramming.byethost15.com/articles/sorting.php 4
5 The Bubble Sort algorithm is simple, inefficient sorting
6 algorithm. It is not recommended for use, since its performance 7 at sorting a list of items is terribly slow. It is best at 8 sorting a small list of items, but not for large ones. 9
10 The sorting time complexity of the Bubble Sort is O(n2). 11 }
12
13 const max_element=100;
14
15 Procedure Integer); BubbleSort(var numbers : Array of Integer; size :
16 procedure swapInteger(var i, j:integer);
17 var temp:integer; 18 begin
19 temp := j;j:=i;i:=temp;
20 end;
21
22 Var i, j :Integer; 23 Begin
24 For i := size-1 DownTo 0 do 25 For j := 0 to i do
26 If (numbers[j] > numbers[j+1]) then 27 Begin
28 {swap i with j}
29 swapinteger(numbers[j] , numbers[j+1]);
30 End;
31 End;
32 33
34 var a:array[1..max_element] of integer; 35 i:integer;
36 begin
37 randomize;
38 {isi random data}
39 for i:=1 to max_element do a[i]:= random(6000);
40
41 {cetak ke layar}
Daftar Isi: <Contents
43 for i:=1 to max_element do write(a[i]:8);
44
45 bubblesort(a,max_element);
46 writeln;writeln('Setelah di sort:');
47 for i:=1 to max_element do write(a[i]:8);
48
49 end.
insort.pas
1 {2 hasil modifikasi dari:
3 http://pascalprogramming.byethost15.com/articles/sorting.php 4
5 Insertion Sort algorithm is a bit more efficient sorting 6 algorithm than Bubble Sort. As it name implies, the insertion 7 sort algorithm inserts an unsorted item in an already sorted 8 item list. This makes you think of the use of two seperated 9 arrays - one unsorted and the other sorted. However, to save 10 space one uses the same array and uses a pointer to separate 11 the sorted and unsorted elements of the list.
12
13 The sorting time complexity of the Insertion Sort is O(n2). 14 Although this exactly the same to Bubble Sort's, the Insertion 15 Sort algorithm is twice more efficient, yet inefficient for 16 large lists.
17 }
18 const max_element=100;
19
20 Procedure Integer); InsertionSort(var numbers : Array of Integer; size :
21 Var i, j, index : Integer; 22 Begin
23 For i := 1 to size-1 do 24 Begin
25 index := numbers[i];{hold our number} 26 j := i;
27 While ((j >= 1) AND (numbers[j-1] > index)) do 28 Begin
29 numbers[j] := numbers[j-1];
30 j := j - 1;
31 End;
32 numbers[j] := index;
33 End;
34
35 End;
36
Daftar Isi: <Contents
38 a:array[1..max_element] of integer; 39 i:integer;
40 begin
41 randomize;
42 {isi random data}
43 for i:=1 to max_element do a[i]:= random(6000);
44
45 {cetak ke layar}
46 writeln;writeln('sebelum di sort:');
47 for i:=1 to max_element do write(a[i]:8);
48
49 insertionSort(a,max_element);
50 writeln;writeln('Setelah di sort:');
51 for i:=1 to max_element do write(a[i]:8);
52
53 end.
qsort.pas
1 {2 hasil modifikasi dari
3 http://pascalprogramming.byethost15.com/articles/sorting.php 4 }
5 const max_element=100;
6
7 Procedure QSort(var numbers : Array of Integer; 8 left : Integer;
9 right : Integer);
10 Var
11 pivot, l_ptr, r_ptr : Integer; 12 Begin
13 l_ptr := left;
14 r_ptr := right;
15 pivot := numbers[left];
16 While (left < right) do 17 Begin
18
19 While ((numbers[right] >= pivot) AND (left < right)) do 20 right := right - 1;
21
22 If (left <> right) then 23 Begin
24 numbers[left] := numbers[right];
25 left := left + 1;
26 End;
Daftar Isi: <Contents
28 While ((numbers[left] <= pivot) AND (left < right)) do 29 left := left + 1;
30
31 If (left <> right) then 32 Begin
33 numbers[right] := numbers[left];
34 right := right - 1;
35 End;
36 End;
37
38 numbers[left] := pivot;
39 pivot := left;
40 left := l_ptr;
41 right := r_ptr;
42 If (left < pivot) then
43 QSort(numbers, left, pivot-1);{sort our left side of pivot} 44 If (right > pivot) then
45 QSort(numbers, pivot+1, right);{sort our right side of pivot} 46 End;
47 48
49 Procedure Integer); QuickSort(var numbers : Array of Integer; size :
50 Begin
51 QSort(numbers, 0, size-1);
52 End;
53
54 var a:array[1..max_element] of integer; 55 i:integer;
56 begin
57 randomize;
58 {isi random data}
59 for i:=1 to max_element do a[i]:= random(6000);
60
61 {cetak ke layar}
62 writeln;writeln('sebelum di sort:');
63 for i:=1 to max_element do write(a[i]:8);
64
65 {quicksort(a,max_element);} 66 qsort(a,0,max_element);
67
68 writeln;writeln('Setelah di sort:');
69 for i:=1 to max_element do write(a[i]:8);
70