• Tidak ada hasil yang ditemukan

Modul Struktur Data Genap 2011.v2.docx

N/A
N/A
Protected

Academic year: 2018

Membagikan "Modul Struktur Data Genap 2011.v2.docx"

Copied!
60
0
0

Teks penuh

(1)

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

(2)

Binary File: 06hapus.pas

Tree (Pohon Keluarga)...17

tree.pas... 17

Sort (Pengurutan)... 17

bubble.pas... 17

insort.pas... 17

(3)

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

(4)

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

(5)

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 { 2

3 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

(6)

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 6

single

1.5e-45..3.4e38 7-8 4

double

5.0e-324..1.7e308 15-16 8

extended

4932..1.1e49323.4e- 19-20 10

(7)

Binary 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);

(8)

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');

(9)

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.');

(10)

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 LAMA

Tuliskan 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?

(11)

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

(12)

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 perintah

write

(

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

(13)

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

(14)

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

(15)

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

(16)

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);

(17)

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;

(18)

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);

(19)

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;

(20)

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);

(21)

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

(22)

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

(23)

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

(24)

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'])

(25)

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

(26)

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

(27)

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.

(28)

Binary File: 06hapus.pas 2 var i:integer; 3 begin

4 clrscr;

(29)

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);

(30)

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

(31)

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

(32)

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');

(33)

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

(34)

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

(35)

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 }

(36)

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

(37)

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;

(38)

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.');

(39)

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 *}

(40)

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');

(41)

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 }

(42)

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');

(43)

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;

(44)

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;

(45)

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;

(46)

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')

(47)

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);

(48)

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

(49)

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

(50)

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;

(51)

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);

(52)

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

(53)

Binary File: 06hapus.pas

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}

(54)

Binary File: 06hapus.pas

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

);

(55)

Binary File: 06hapus.pas

(56)

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}

Referensi

Dokumen terkait