Binary File: 06hapus.pas
Modul Struktur Data
Daftar Isi
Contents
Tipe Data... 3
maxint.pas... 3
maxint02.pas... 3
tipedata.pas... 5
Text File... 7
TEXT01.pas... 7
TEXT02.pas... 7
TEXT03.pas... 8
TEXT04.pas... 9
Binary File... 11
01dbw.pas... 11
02dbread.pas... 12
03dbw.pas... 12
04dbread.pas... 14
05trunc.pas... 15
06hapus.pas... 16
07DB.pas... 17
FilePos.pas... 17
Stack (Tumpukan)... 17
01balik.pas... 17
if2pf.pas... 17
tumpukan.pas... 17
random.pas... 17
Queue (Antrian)... 17
antrian.pas... 17
antrian2.pas... 17
antrian3.pas... 17
Linked List (Senarai Berantai)...17
linkedls.pas... 17
Binary File: 06hapus.pas
Tree (Pohon Keluarga)...17
tree.pas... 17
Sort (Pengurutan)... 17
bubble.pas... 17
insort.pas... 17
Binary File: 06hapus.pas
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.
Tuliskan tampilan kode di atas
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
Binary File: 06hapus.pas
16 ',maxint,'+1=',writeln('nilai sebuah variabel integer apabila i);
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.
Ketikkan kode di atas menggunakan Turbo Pascal 7.0 for DOS dengan mengubah baris #1 menjadi uses CRT; dan tuliskan error saat mengcompile nya, dan pada baris berapa?
Lengkapi tabel berikut:
Error
#
Error Message
1 Invalid function number 2 File not found
3 Path not found 4 Too many open fles 5 File access denied 6 Invalid fle handle 12 Invalid fle access code 15 Invalid drive number
16 Cannot remove current directory 17 Cannot rename across drives 100 Disk read error
101 Disk write error 102 File not assigned 103 File not open
104 File not open for input 105 File not open for output 106 Invalid numeric format 200 Division by zero
Binary File: 06hapus.pas
206 Floating point underflow
207 Invalid floating point operation
210 Object not initialized 211 Call to abstract method
212 Stream registration error 213 Collection index out of range
214 Collection overflow error
Buka kembali source-code pascal di atas dengan menggunakan TPW, lalu jalankan. Tuliskan hasilnya!
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 <[email protected]> 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
Binary File: 06hapus.pas 30 x,y:real; 31 end;
32
33 jam = record 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);
46 end.
Jika variable x bertipe byte.Nilai x awalnya 250 kemudian ditambahkan 50. Berapakah nilai x sekarang? Mengapa? Demonstrasikan di depan instruktur!
Lengkapi tabel berikut:
Type
Range
Digits
Bytes
real
2.9e-39..1.7e38 11-12 6single
1.5e-45..3.4e38 7-8 4double
5.0e-324..1.7e308 15-16 8extended
4932..1.1e49323.4e- 19-20 10Binary File: 06hapus.pas
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.
Demonstrasikan di depan instruktur Anda hasil menjalankan program di atas.
Tuliskan pesan kesalahan saat fle yang akan dibaca ternyata tidak ada!
Apa maksud perintah readln(s); pada baris #7?
Apa maksud perintah readln(F,s); pada baris #12?
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);
Binary File: 06hapus.pas
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;
20 close(F); { close it } 21 end.
Apa maksud i:3 pada baris #18?
Apa maksud ' ':2 pada baris #18?
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');
Binary File: 06hapus.pas
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;
45 close(F); { close it } 46 end.
Apa maksud perintah
{$I-}
pada baris #13?Apa maksud perintah
{$I+}
pada baris #15?Apa maksud perintah
n:=IOResult;
pada baris #16?Demonstrasikan ke instruktur Anda program di atas. Kemudian, ubahlah dengan menambahkan blok repeat-until, sehingga logika programnya menjadi akan terus menanyakan nama fle yang akan dibaca jika masih terjadi kesalahan. Hint: gunakan nilai variable n untuk mengetahui jika masih terjadi kesalahan.
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.');
Binary File: 06hapus.pas 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
23 close(F); { close it } 24 end.
WARNING
: JANGAN DIJALANKAN DAHULU JIKA ANDA TIDAK MENGERTI BARIS-DEMI-BARIS PERINTAH DI ATAS, KARENA AKAN MENIMPA BERKAS ANDA YANG LAMATuliskan maksud perintah readln(s); pada baris #10!
Apa beda perintah readln(s); di baris #10 di atas dengan readln(F,s); baris
#42 di TEXT03.pas?
Apa maksud perintah assign(F,s); pada baris #11?
Apa maksud perintah rewrite(F); pada baris #12?
Apa maksud perintah writeln(F,s); pada baris #20?
Binary File: 06hapus.pas
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
Binary File: 06hapus.pas 43 end.
Apa maksud perintah
F : file of Temployee;
pada baris #13?Apa maksud perintah
readln
(
r.name
);
pada baris #27? Apa maksud perintahwrite
(
F
,
r
);
pada baris #33?Apa maksud blok perintah repeat-until baris #36 – #38?
Apa maksud blok perintah repeat-until baris #25 – #40?
Demokan program diatas, gunakan/timpa fle test01.emp untuk fle penyimpan data kita, lalu gunakan program 02dbread.pas dibawah ini untuk membacanya kembali.
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
Binary File: 06hapus.pas
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]; 13 age : byte;
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 reset(F); { Open it. COMPARE THIS ROUTINE WITH 01DBW.PAS } 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
Binary File: 06hapus.pas 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) ?'); 60 repeat
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.
Apa maksud blok perintah #29 – #31?
Apa maksud blok perintah #36 – #38?
Apa maksud perintah seek(F,filesize(F)); pada baris #46?
Apa maksud blok perintah #49 – #64?
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
Binary File: 06hapus.pas 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
38 close(F);
39 end.
Apa maksud blok program #26 – #36?
Tambahkan kode di atas sehingga apabila flenya tidak ada, user akan tetap ditanya nama fle yang akan dibuka.
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
Binary File: 06hapus.pas 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.
Apa maksud perintah Assign(f,'TEST.INT'); pada baris #7?
Apa maksud perintah Rewrite(f); pada baris #8?
Apa maksud blok program baris #9 – #10?
Apa maksud blok program baris #14 – #18?
Apa maksud perintah Truncate(f); pada baris #23?
Jelaskan secara singkat maksud program di atas secara keseluruhan!
06hapus.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
13 Writeln('File before truncation:');
14 Reset(f);
15 while not Eof(f) do 16 begin
17 Read(f,i);
Binary File: 06hapus.pas 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 <[email protected]>
4 Tuesday, December 04, 2007 5 1:04:54 PM
6 } 7
8 uses crt;
9 10
11 type
12 Temployee = record 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;
Binary File: 06hapus.pas 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);
60 writeln('Salary = ',r.salary);
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);
Binary File: 06hapus.pas
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;
106 if n<>0 then 107 begin
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;
Binary File: 06hapus.pas 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);
Binary File: 06hapus.pas
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
Binary File: 06hapus.pas 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
Binary File: 06hapus.pas
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
Binary File: 06hapus.pas 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'])
Binary File: 06hapus.pas
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
Binary File: 06hapus.pas 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
Binary File: 06hapus.pas 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.
Binary File: 06hapus.pas 2 var i:integer; 3 begin
4 clrscr;
Binary File: 06hapus.pas
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);
Binary File: 06hapus.pas 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
Binary File: 06hapus.pas
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
Binary File: 06hapus.pas 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');
Binary File: 06hapus.pas
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; 25
Binary File: 06hapus.pas
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
Binary File: 06hapus.pas
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 }
Binary File: 06hapus.pas
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
Binary File: 06hapus.pas
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;
Binary File: 06hapus.pas
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.');
Binary File: 06hapus.pas 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 *}
Binary File: 06hapus.pas
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');
Binary File: 06hapus.pas
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 }
Binary File: 06hapus.pas
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');
Binary File: 06hapus.pas
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;
Binary File: 06hapus.pas
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;
Binary File: 06hapus.pas
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;
Binary File: 06hapus.pas 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')
Binary File: 06hapus.pas 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);
Binary File: 06hapus.pas
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
Binary File: 06hapus.pas
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
Binary File: 06hapus.pas
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;
Binary File: 06hapus.pas
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);
Binary File: 06hapus.pas 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
Binary File: 06hapus.pas
Tree (Pohon Keluarga)
tree.pas
1
uses
wincrt;
23
type Tree=^Simpul;
4Simpul =
record
5
Info:
char;
6
Kiri, Kanan:Tree
7end;
8 9
var
10
myTree: tree;
1112
{
13
Fungsi untuk mengalokasikan sebuah simpul baru
14
Informasi disimpan dalam Hrf
15
}
16
function
baru(
hrf
:
char
):Tree;
17var
B: Tree;
18
begin
19
new
(
B
);
20
B^.Info := Hrf;
21B^.Kanan := nil;
22B^.Kiri := nil;
23baru:=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
);
32var
33
b,p,q:tree;
34begin
35
b:=baru(
hrf
);
{new tree}
36
if
akar=
nil then
37
{pohon masih kosong}
Binary File: 06hapus.pas
40
{pohon sudah terisi sejumlah simpul}
41
begin
42
q:=akar;
43p:=akar;
4445
{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
51else
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'
)
58else
59
if
hrf < p^.info
then
p^.kiri:=b
60else
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
);
70begin
71
if
pohon =
nil then
pohon:=baru(
hrf
)
72else
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'
)
76end;
77
78
{main program}
79
begin
80
writeln
(
'Program Test Tree'
);
81myTree:=baru(
'5'
);
82
writeln
(
myTree^.Info
);
Binary File: 06hapus.pas
Binary File: 06hapus.pas
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}