• Tidak ada hasil yang ditemukan

Modul Struktur Data Genap 2011.docx

N/A
N/A
Protected

Academic year: 2018

Membagikan "Modul Struktur Data Genap 2011.docx"

Copied!
57
0
0

Teks penuh

(1)

Daftar Isi: <Contents

Modul Struktur Data

Daftar Isi

Contents

Tipe Data... 3

maxint.pas... 3

maxint02.pas... 3

tipedata.pas... 4

Text File... 6

TEXT01.pas... 6

TEXT02.pas... 6

TEXT03.pas... 7

TEXT04.pas... 8

Binary File... 9

01dbw.pas... 9

02dbread.pas... 10

03dbw.pas... 10

04dbread.pas... 12

05trunc.pas... 13

06hapus.pas... 13

07DB.pas... 14

FilePos.pas... 17

Stack (Tumpukan)... 18

01balik.pas... 18

if2pf.pas... 19

tumpukan.pas... 22

random.pas... 24

Queue (Antrian)... 26

antrian.pas... 26

antrian2.pas... 30

antrian3.pas... 36

Linked List (Senarai Berantai)...42

linkedls.pas... 42

(2)

Daftar Isi: <Contents

Tree (Pohon Keluarga)...50

tree.pas... 50

Sort (Pengurutan)... 53

bubble.pas... 53

insort.pas... 54

(3)

Daftar Isi: <Contents

Tipe Data

maxint.pas

1 {

2 Type Range Format 3

4 5

6 Shortint -128..127 Signed 8-bit 7 Integer -32768..32767 Signed 16-bit

8 Longint -2147483648..2147483647 Signed 32-bit 9 Byte 0..255 Unsigned 8-bit

10 Word 0..65535 Unsigned 16-bit 11

12 13

14 All Integer types are ordinal types. 15

16 } 17

18 uses wincrt;

19 begin

20 writeln('nilai tertinggi untuk integer adalah: ', maxint);

21 maxlongintwriteln('nilai tertinggi untuk long integer adalah: ', );

22 end.

maxint02.pas

1 uses wincrt;

2 var

3 i:integer; 4 j:longint; 5

6 begin

7 i:=maxint;

8 writeln('nilai tertinggi untuk integer adalah: ', i);

9

10 j:=maxlongint;

11 writeln('nilai tertinggi untuk long integer adalah: ', j);

12

13 writeln;

14

15 i:=i+1;

(4)

Daftar Isi: <Contents 17 j:=j+1;

18 ',maxlongint,'+1=',writeln('nilai sebuah variabel longint apabila j);

19

20 writeln;

21

22 writeln('nilai maxint +1 adalah: ', maxint+1);

23 writeln('nilai maxlongint +1 adalah: ', maxlongint+1);

24 atas?');writeln('dapatkah kalian mengambil kesimpulan dari dua contoh di

25

26 end.

tipedata.pas

1 { 2

3 praktikum tipe data:

4 pengenalan tipe data bentukan (tipe data yang dibentuk dari tipe data muasal) 5

6

7 Muhammad Jazman <kampar@gmail.com> 8 Wednesday, December 05, 2007 1:43:36 PM 9 }

10

11 uses wincrt;

12 13

14 const

15 pi = 3.14;

16 nmaks = 100;

17 sandi = 'xyz';

18 19 20

21 type

22

23 mahasiswa = record 24 NIM : longint; 25 nama : string; 26 usia : byte; 27 end;

28

29 koordinat = record 30 x,y:real;

31 end;

32

(5)

Daftar Isi: <Contents

34 hh,mm,ss:byte; 35 end;

36 37 var

38 p:jam;

39

40 begin

41 p.hh:= 23;

42 p.mm:= 59;

43 p.ss:= 59;

44

45 writeln('jam menunjukkan pukul ',p.hh,':',p.mm,':',p.ss);

(6)

Daftar Isi: <Contents

Text File

TEXT01.pas

1 uses wincrt;

2 var

3 F : text;

4 s : string; 5 begin

6 clrscr;

7 write('Input file name to read : '); readln(s);

8 assign(F,s); { associate it } 9 reset(F); { open it }

10 } while not EOF(F) do { read it until it's done 11 begin

12 readln(F,s);

13 writeln(s);{tampilkan di layar} 14 end;

15 close(F); { close it } 16 end.

TEXT02.pas

1 {

2 demo read text file line by line 3 }

4 uses wincrt;

5 var

6 F : text;

7 s : string; 8 i : integer; 9 begin

10 clrscr;

11 write('Input file name to read : '); readln(s);

12 assign(F,s); { associate it } 13 reset(F); { open it }

14 while not EOF(F) do { read it until it's done } 15 begin

16 i:=i+1;

17 readln(F,s);

18 writeln(i:3,' ':2,s);{tampilkan di layar} 19 end;

(7)

Daftar Isi: <Contents

TEXT03.pas

1 { ERROR HANDLING ON OPENING A FILE } 2 uses wincrt;

3 var

4 F : text;

5 s : string; 6 n : integer; 7 begin

8 clrscr;

9 write('Input file name to read : '); readln(s);

10 assign(F,s); { associate it } 11 {reset(F); open it } 12

13 {$I-} 14 reset(F);

15 {$I+}

16 n:=IOResult;

17 if n<>0 then 18 begin

19 writeln('Error encountered in reading file ',s);

20 case n of

21 2: writeln('File not found');

22 3: writeln('Path not found');

23 4: writeln('Too many open files');

24 5: writeln('File access denied');

25 100: writeln('Disk read error');

26 101: writeln('Disk write error');

27 150: writeln('Disk is write protected');

28 152: writeln('Drive is not ready');

29 154: writeln('CRC error in data');

30 156: writeln('Disk seek error');

31 157: writeln('Unknown media type');

32 162: writeln('Hardware failure');

33 else writeln('Various error');

34 end;

35 halt;

36 end;

37 38 39

40 while not EOF(F) do { read it until it's done } 41 begin

42 readln(F,s);

43 writeln(s);{tampilkan di layar} 44 end;

(8)

Daftar Isi: <Contents

TEXT04.pas

1 {

2 write a text file 3 }

4 uses wincrt;

5 var

6 F : text;

7 s : string; 8 begin

9 clrscr;

10 write('Input file name to create : '); readln(s);

11 assign(F,s); { associate it } 12 rewrite(F); { create it } 13

14 writeln('Just enter any text and followed by enter.');

15 writeln('To quit : Input an empty line.');

16

17 repeat

18 readln(s); { read a line }

19 {if s='' then break;} {if s is an empty line --> break!} 20 writeln(F,s);

21 until s='';

22

(9)

Daftar Isi: <Contents

Binary File

01dbw.pas

1 { A crude database recording } 2 uses crt;

3 type

4 Temployee = record

5 name : string[20];

6 address : string[40];

7 phone : string[15];

8 age : byte; 9 salary : longint; 10 end;

11 12 var

13 F : file of Temployee;

14 c : char; 15 r : Temployee;

16 s : string; 17

18 begin

19 clrscr;

20 write('Input file name to record databases : '); readln(s);

21

22 assign(F,s); { Associate it } 23 rewrite(F); { Create it } 24

25 repeat 26 clrscr;

27 write('Name = '); readln(r.name); { Input data } 28 write('Address = '); readln(r.address);

29 write('Phone = '); readln(r.phone);

30 write('Age = '); readln(r.age);

31 write('Salary = '); readln(r.salary);

32

33 write(F,r); { Write data to file } 34

35 write('Input data again (Y/N) ?');

36 repeat

37 c:=upcase(readkey); { Ask user : Input again or not } 38 until c in ['Y','N'];

39 writeln(c);

40 until c='N';

41

(10)

Daftar Isi: <Contents 43 end.

02dbread.pas

{ A crude database read } uses crt;

type

Temployee = record

name : string[20]; address : string[40]; phone : string[15]; age : byte;

salary : longint;

end;

var

F : file of Temployee; c : char;

r : Temployee; s : string;

begin

write('Input file name to read databases : '); readln(s); assign(F,s); { Associate it }

reset(F); { reset pointer ke awal file, open it}

clrscr;

while not EOF(F) do begin read(F,r);

writeln('Name = ',r.name); writeln('Address = ',r.address); writeln('Phone = ',r.phone); writeln('Age = ',r.age); writeln('Salary = ',r.salary); writeln;

end; close(F); end.

03dbw.pas

1 { A crude database recording

2 now with ability to detect if input file is not exist 3 new features:

4 * APPENDING 5 * IO Check 6 }

7 uses crt;

8 type

9 Temployee = record

10 name : string[20];

11 address : string[40];

12 phone : string[15];

(11)

Daftar Isi: <Contents

14 salary : longint; 15 end;

16 17 var

18 F : file of Temployee;

19 c : char; 20 r : Temployee;

21 s : string; 22 n : integer; 23

24 begin

25 write('Input file name to record databases : '); readln(s);

26

27 assign(F,s); { Associate it } 28

29 {$I-}

30 01DBW.PAS }reset(F); { First, open it. COMPARE THIS ROUTINE WITH 31 {$I+}

32

33 n:=IOResult;

34 if n<>0 then { If it's doesn't exist then } 35 begin

36 {$I-}

37 rewrite(F); { Create it } 38 {$I+}

39 n:=IOResult;

40 if n<>0 then 41 begin

42 writeln('Error creating file !'); halt;

43 end;

44 end

45 else { If it exists then }

46 seek(F,filesize(F)); { Move file pointer to the last record } 47 {compare it with reset(F)}

48

49 repeat 50 clrscr;

51 write('Name = '); readln(r.name); { Input data } 52 write('Address = '); readln(r.address);

53 write('Phone = '); readln(r.phone);

54 write('Age = '); readln(r.age);

55 write('Salary = '); readln(r.salary);

56

57 write(F,r); { Write data to file } 58

59 write('Input data again (Y/N) ?');

(12)

Daftar Isi: <Contents

61 c:=upcase(readkey); { Ask user : Input again or not } 62 until c in ['Y','N'];

63 writeln(c);

64 until c='N';

65

66 close(F);

67 end.

04dbread.pas

1 { A crude database read with data number} 2 uses crt;

3 type

4 Temployee = record

5 name : string[20];

6 address : string[40];

7 phone : string[15];

8 age : byte; 9 salary : longint; 10 end;

11 12 var

13 F : file of Temployee;

14 c : char; 15 r : Temployee;

16 s : string; 17 i : integer; 18

19 begin

20 write('Input file name to read databases : '); readln(s);

21

22 assign(F,s); { Associate it }

23 reset(F); { reset pointer ke awal file} 24

25 clrscr;

26 for i:=0 to filesize(F)-1 do 27 begin

28 read(F,r);

29 writeln;

30 writeln('DATA ',i+1);

31 writeln('Name = ',r.name);

32 writeln('Address = ',r.address);

33 writeln('Phone = ',r.phone);

34 writeln('Age = ',r.age);

35 writeln('Salary = ',r.salary);

36 end;

37

(13)

Daftar Isi: <Contents 39 end.

05trunc.pas

1 uses Crt;

2

3 var

4 f: file of Integer; 5 i,j: Integer;

6 begin

7 Assign(f,'TEST.INT');

8 Rewrite(f);

9 for i := 1 to 6 do 10 Write(f,i);

11

12 Writeln('File before truncation:');

13 Reset(f);

14 while not Eof(f) do 15 begin

16 Read(f,i);

17 Writeln(i);

18 end;

19

20 Reset(f);

21 for i := 1 to 3 do

22 Read(f,j); { Read ahead 3 records } 23 Truncate(f); { Cut file off here } 24 Writeln;

25 Writeln('File after truncation:');

26 Reset(f);

27 while not Eof(f) do 28 begin

29 Read(f,i);

30 Writeln(i);

31 end;

32

33 Close(f);

34 Erase(f);

35 end.

06hapus.pas

1 uses Crt;

2 3 var

4 f: file of Integer; 5 i,j: Integer;

6 begin

(14)

Daftar Isi: <Contents 8 Rewrite(f);

9 for i := 1 to 6 do 10 Write(f,i);

11 12

13 Writeln('File before truncation:');

14 Reset(f);

15 while not Eof(f) do 16 begin

17 Read(f,i);

18 Writeln(i);

19 end;

20 21

22 Reset(f);

23 for i := 1 to 3 do

24 Read(f,j); { Read ahead 3 records } 25 Truncate(f); { Cut file off here } 26 Writeln;

27 Writeln('File after truncation:');

28 Reset(f);

29 while not Eof(f) do 30 begin

31 Read(f,i);

32 Writeln(i);

33 end;

34 35

36 Close(f);

37 Erase(f);

38 end.

07DB.pas

1 {

2 program untuk administrasi database employee 3 Muhammad Jazman <kampar@gmail.com>

4 Tuesday, December 04, 2007 5 1:04:54 PM

6 } 7

8 uses crt;

9 10

11 type

(15)

Daftar Isi: <Contents

13 name : string[20];

14 address : string[40];

15 phone : string[15];

16 age : byte; 17 salary : longint; 18 end;

19 20 var

21 F : file of Temployee;

22 r : Temployee;{penunjuk untuk filenya} 23 s : string;{nama file}

24 i,j : integer;

25 n : integer; {untuk menampung IOResult} 26

27 28

29 procedure showAll;

30 begin

31 clrscr; 32 reset(f);

33 for i:=1 to filesize(F) do 34 begin

35 read(F,r);

36 writeln;

37 writeln('DATA ',i);

38 writeln('Name = ',r.name);

39 writeln('Address = ',r.address);

40 writeln('Phone = ',r.phone);

41 writeln('Age = ',r.age);

42 writeln('Salary = ',r.salary);

43 end;

44 end;

45 46

47 procedure showRange(mulai:integer; akhir:integer);

48 begin

49 clrscr;

50 seek(f,mulai-1);

51 for i:=mulai to akhir do 52 begin

53 read(F,r);

54 writeln;

55 writeln('DATA ',i);

56 writeln('Name = ',r.name);

57 writeln('Address = ',r.address);

58 writeln('Phone = ',r.phone);

59 writeln('Age = ',r.age);

(16)

Daftar Isi: <Contents 61 end;

62 end;

63

64 procedure showRecord(index:integer);

65 begin

66 clrscr;

67 seek(f,index-1);

68 read(F,r);

69 writeln;

70 writeln('DATA ',i);

71 writeln('Name = ',r.name);

72 writeln('Address = ',r.address);

73 writeln('Phone = ',r.phone);

74 writeln('Age = ',r.age);

75 writeln('Salary = ',r.salary);

76 end;

77

78 procedure delRecord(index:integer);

79 begin

80 for i:=index to fileSize(f)-1 do 81 begin

82 seek(f,i);

83 read(f,r);{read data sesudahnya}

84 seek(f,i-1);{balik lagi ke data sebelumnya}

85 berikutnya}write(f,r);{timpa data yang lama dengan data record 86 end;

87 seek(f,filesize(f)-1);

88 truncate(f);{buang yang terakhir} 89 end;

90 91

92 begin

93 write('Input file name to read databases : '); readln(s);

94 assign(F,s);{ Associate it } 95 {$I-}

96 reset(F);{ reset pointer ke awal file} 97 {$I+}

98

99 n:=IOResult;

100 if n<>0 then { If it's doesn't exist then } 101 begin

102 {$I-}

103 rewrite(F); { Create it } 104 {$I+}

105 n:=IOResult;

(17)

Daftar Isi: <Contents

108 writeln('Error creating file !');

109 halt;

110 end;

111 end

112 else{ If it exists then }

113 seek(F,filesize(F)); { Move file pointer to the last record } 114

115

116 showAll;

117 {readln;} 118 {

119 showRange(2,3); 120 readln;

121 } 122 {

123 showRecord(2); 124 }

125 {

126 delrecord(2); 127 showAll; 128 readln; 129 }

130 close(F);

131 132 133

134 end.

FilePos.pas

1 uses WinCrt;

2

3 var

4 f: file of Byte; 5 size : Longint; 6 begin

7 { Get file name from command line } 8 Assign(f, ParamStr(1));

9 Reset(f);

10 size := FileSize(f);

11 Writeln('File size in bytes: ',size);

12 Writeln('Seeking halfway into file...');

13 Seek(f,size div 2);

14 Writeln('Position is now ',FilePos(f));

15 Close(f);

(18)

Daftar Isi: <Contents

Stack (Tumpukan)

01balik.pas

1 program BALIK_KALIMAT;

2

3 uses wincrt;

4

5 const elemen = 255; {batas maksimum karakter} 6

7 type

8 myString = string[elemen];

9 stack = record

10 isi:myString;

11 atas:0..elemen

12 end;

13 14 var

15 t:stack;

16 i:integer;

17 kalimat:myString;

18 19

20 procedure awalan (var t:stack);

21 begin

22 {inisialisasi stack, bahwa stack masih kosong} 23 t.atas := 0

24 end;

25 26

27 procedure push(var t:stack; x:char);

28 begin

29 t.atas := t.atas + 1;

30 t.isi[t.atas]:=x

31 end;

32 33

34 function pop(var t:stack):char; 35 begin

36 pop := t.isi[t.atas];

37 t.atas := t.atas - 1

38 end;

39

(19)

Daftar Isi: <Contents 42 clrscr; 43 awalan(t);

44 writeln('Stack untuk membalik kalimat');

45 writeln;

46 write('Masukkan sembarang kalimat: ');

47 readln(kalimat);

48 {

49 clrscr; 50 }

51 writeln('Kalimat Asli: ');

52 writeln(kalimat);

53 writeln;writeln;

54 writeln('Setelah dibalik: ');

55

56 {push setiap karakternya ke stack kita} 57 for i:= 1 to length(kalimat) do

58 push(t,kalimat[i]);

59 60

61 {pop satu-satu}

62 for i:= 1 to length(kalimat) do 63 write(pop(t));

64 writeln 65 end.

if2pf.pas

1 program KONVERSI_INFIX_KE_POSTFIX;

2 USES wincrt;

3 const

4 max_elemen = 255;

5 type

6 smax = string[max_elemen];

7 tumpukan = record

8 rinci:smax;

9 atas: 0..max_elemen

10 end;

11 12 var

13 infix:smax; {notasi infix} 14 lagi:char;

15 i:integer; 16

17 18

19 function valensi(tanda_op:char):integer; 20 begin

(20)

Daftar Isi: <Contents

22 '^' : valensi:= 3; {pangkat} 23 '*','/' : valensi:= 2; {kali,bagi} 24 '+','-' : valensi:= 1; {tambah,kurang} 25 '(' : valensi:= 0

26 end

27 end;

28 29 30

31 procedure push (var t:tumpukan; elemen:char);

32 begin

33 t.atas:= t.atas + 1;

34 t.rinci[t.atas]:= elemen;

35 end;

36 37 38

39 function pop (var t:tumpukan): char; 40 begin

41 pop:= t.rinci[t.atas];

42 t.atas := t.atas -1

43 end;

44 45 46

47 procedure infix2postfix (infix:smax);

48 var

49 i:integer;

50 operator:set of char; 51 temp,kar:char;

52 t:tumpukan;

53 test:boolean; 54 begin

55 operator:=['^']+['*']+['/']+['+']+['-'];

56

57 {melakukan konversi}

58 for i:= 1 to length(infix) do 59 begin

60 kar:= infix[i];

61 if kar= '(' then push(t,kar)

62

63 else if kar = ')' then 64 begin

65 while t.rinci[t.atas] <> '(' do 66 write(pop(t):2);{cetak}

67 temp:= pop(t)

68 end

(21)

Daftar Isi: <Contents 70 begin

71 yang ada di stack}{selama stack dan valensi kar sekarang lebih kecil dari 72 valensi(t.rinciwhile [t.atas])) (t.atas <> do0) and (valensi(kar) <=

73 write(pop(t):2);{keluarkan operator yang ada di stack} 74 push(t,kar){masukkan kar sekarang ke stack}

75 end

76 else if kar <> ' ' then

77 write (kar) {tampilkan non operator} 78 else write(' ');{spasi}

79 end;

80

81 {untuk operator} 82 if t.atas <> 0 then 83 repeat

84 write(pop(t):2)

85 until t.atas = 0;

86 end;

87 88

89 {main program} 90 begin

91 clrscr;

92 for i:=1 to 80 do write('-');

93 writeln('PROGRAM PENGUBAH NOTASI INFIX MENJADI POSTFIX');

94 writeln('DENGAN MENGGUNAKAN STACK');

95 for i:=1 to 80 do write('-');

96

97 repeat

98 write('Masukkan notasi INFIX (A * B): ');

99 readln(infix);

100 writeln;

101 write('Ungkapan POSTFIX: ');

102 infix2postfix(infix);

103

104 writeln;writeln;

105

106 write('Anda ingin mencoba lagi? Y/T: ');

107 repeat

108 lagi := readkey;

109 until upcase(lagi) in ['Y','T'];

110 writeln(lagi);

111 writeln

112 until not (lagi in['Y','y'])

(22)

Daftar Isi: <Contents

tumpukan.pas

1 uses wincrt;

2 type

3 tumpukan =^elemen;

4 elemen = record

5 info:char;

6 berikut:tumpukan;

7 end;

8 9 10 {

11 program 5.11 hal 123

12 prosedur inisialisasi tumpukan 13 }

14 procedure inisialisasi_tumpukan (var t:tumpukan);

15 begin

16 {

17 new (atas);

18 atas^.berikut:=nil; 19 }

20 new(t);

21 t^.berikut:=nil;

22 end;

23 24 {

25 program 5.12 hal 124

26 prosedur untuk mempush elemen ke dalam tumpukan 27

28 }

29 procedure push(atas:tumpukan; data:char);

30 var

31 baru:tumpukan;

32 begin

33 {mengisi simpul baru yang akan dipush} 34 new(baru);

35 with baru^ do 36 begin

37 info := data;

38 berikut:=nil 39 end;

40

41 if atas^.berikut <> nil then 42 {tumpukan sudah berisi} 43 begin

44 baru^.berikut:=atas^.berikut;

45 atas^.berikut:=baru

(23)

Daftar Isi: <Contents 47 else

48 {tumpukan masih kosong} 49 atas^.berikut:=baru

50 end;

51 52 {

53 program 5.13 hal 125

54 prosedur untuk mengambil elemen teratas pada 55 tumpukan. Senarai berantai yang digunakan adalah 56 senarai berantai berkepala

57

58 perhatikan bahwa kosong dan data dilakukan pass by reference, 59 yang artinya akan mengubah nilai induknya

60 }

61 procedure pop(atas:tumpukan;var kosong:boolean; var data:char);

62 var

63 bantu:tumpukan;

64 begin

65 kosong:=false;

66 if atas^.berikut = nil then 67 {tumpukan masih kosong} 68 kosong:=true

69 else 70 begin

71 bantu:=atas^.berikut;

72 data:=bantu^.info;

73 atas^.berikut:=bantu^.berikut;

74 dispose(bantu)

75 end

76 end;

77

78 function is_kosong(atas:tumpukan):boolean; 79 begin

80 is_kosong:=false;{default}

81 if atas^.berikut =nil then is_kosong:=true;

82 end;

83 84 85

86 {prosedur untuk mencetak rata tengah}

87 procedure writeln_center(string_input:string);

88 begin

89 writeln(string_input:40+length(string_input) div 2);

90 end;

91

92 {main} 93 var

(24)

Daftar Isi: <Contents

95 kosong:boolean; 96 data:char; 97 i:byte; 98 begin

99 writeln_center('Demo Tumpukan');

100 inisialisasi_tumpukan(atas);

101 kosong:=true;

102

103 randomize;

104 writeln('Push data ke dalam tumpukan:');

105 for i:=1 to 40 do 106 begin

107 data:=chr(a-z} random(122-97+1)+97);{random ASCII Character between 108 push(atas,data);

109 {writeln('push(atas,''',data,''')');} 110 write(data:2);

111 end;

112 {writeln(kosong);}{perhatikan bahwa kosong bernilai TRUE di sini} 113 {repeat

114 pop(atas,kosong,data); 115 write(data:2);

116 until kosong; 117 }

118

119 writeln;

120 writeln('Pop data');

121 while not is_kosong(atas) do 122 begin

123 pop(atas,kosong,data);

124 write(data:2);

125 end;

126 127 128 {

129 push(atas,'s');writeln('push(atas,''s'')'); 130 push(atas,'d');writeln('push(atas,''d'')'); 131 pop(atas,kosong,data);

132 if not kosong then writeln_center(data); 133 pop(atas,kosong,data);

134 if not kosong then writeln_center(data); 135 pop(atas,kosong,data);

136 if not kosong then writeln_center(data) else writeln_center('Stack Kosong!') 137 }

138 end.

(25)

Daftar Isi: <Contents 2 var i:integer; 3 begin

4 clrscr;

(26)

Daftar Isi: <Contents

Queue (Antrian)

antrian.pas

1 uses crt;

2 {**

3 * modifikasi dari Wahid,2004. Dasar-Dasar Algoritma & 4 * Pemrograman. Yogyakarta: Andi. pp. 318-21.

5 * program mensimulasikan manipulasi terhadap sebuah queue 6 *

7 * Muhammad Jazman

8 * Friday, 29 October 2010 10:01:54 AM 9 *}

10 const

11 separator = ' ';

12 type

13 element_type = integer; 14 cell_ptr = ^cell;

15 cell = record

16 data:element_type;

17 next: cell_ptr;

18 end;

19 queue = record

20 head, tail: cell_ptr;

21 end;

22 23 {**

24 * Prosedur untuk menginisialisasi Queue 25 * perhatikan penggunaan var q,

26 * artinya: q dilakukan pass-by-reference.

27 * perubahan terhadap q di sini akan mengubah q di 28 * induk yang memanggilnya.

29 *}

30 procedure initialise ( var q: queue);

31 begin

32 q.head := nil;

33 q.tail := nil;

34 end;

35 36 {**

37 * menghasilkan true jika queue input kita kosong 38 *}

39 function is_empty(q:queue):boolean; 40 begin

41 is_empty := (q.head = nil) and (q.tail=nil);

(27)

Daftar Isi: <Contents 43

44 {**

45 * menambahkan new_element ke queue q 46 *}

47 procedure enqueue(var q:queue; new_element:element_type);

48 var p: cell_ptr;

49 begin

50 new(p);{alokasikan memori untuk cell baru} 51 p^.data := new_element;{cell.data}

52 p^.next := nil;{akan diletakkan di belakang} 53 if is_empty(q) then

54 begin

55 q.head:=p; {q.head adalah cell ini} 56 q.tail:=p;

57 end

58 else {queue sudah terisi} 59 begin

60 q.tail^.next := p;

61 q.tail := p;

62 end;

63 end;

64 65 {**

66 * mengurangi antrian

67 * mengurangi antrian artinya menghapus cell head kita 68 *}

69 procedure dequeue(var q:queue);

70 var

71 p: cell_ptr;

72 {p adalah temporary cell, untuk menyimpan pointer ke 73 cell yang ingin dibuang}

74 begin

75 if not is_empty(q) then 76 begin

77 p := q.head;{}

78 q.head := q.head^.next;

79

80 {check apakah karena ini queue kita jadi kosong} 81 if q.head = nil then q.tail:=nil;

82 dispose(p);{hilangkan alokasi memori untuk cell tadi} 83 end

84 else

85 {empty queue}

86 writeln('Error: Queue kosong');

87 end;

88

(28)

Daftar Isi: <Contents

91 var temp_cell:cell_ptr;

92 begin

93 if is_empty(q) then writeln('Queue kosong')

94 else 95 begin

96 temp_cell := q.head;{mulai dari head to tail} 97 while temp_cell <> nil do

98 begin

99 data} write(temp_cell^.data,separator);{write our current cell 100 temp_cell := temp_cell^.next; {move forward}

101 end;

102 end;

103 end;

104 105 106

107 {** cetak menu}

108 procedure cetak_menu;

109 var i:byte; 110 begin

111 clrscr;{bersihkan layar} 112 textbackground(7);

113 textcolor(9);

114 clrscr;{kasih background} 115

116 {baris1}

117 gotoxy(1,1);write(chr(201));

118 for i:=1 to 78 do write(chr(205));

119 write(chr(187));

120

121 {baris2}

122 gotoxy(1,2);{kolom1 baris2} 123 write(chr(186));

124 gotoxy((80-23) div 2,2);textcolor(9+15);

125 write('PRAKTIKUM STRUKTUR DATA');textcolor(9);

126 gotoxy(80,2);write(chr(186));

127

128 {baris3}

129 gotoxy(1,3);write(chr(186));

130 gotoxy(80,3);write(chr(186));

131

132 {baris4}

133 gotoxy(1,4);write(chr(200));

134 for i:=1 to 78 do write(chr(205));

135 write(chr(188));

136

(29)

Daftar Isi: <Contents

138 writeln('Menu');

139 writeln('1. Menambah Elemen');

140 writeln('2. Mengurangi Elemen');

141 writeln('3. Menampilkan Isi Queue');

142 writeln('4. Keluar');

143 writeln;

144 end;

145

146 {main program} 147 var

148 x: element_type;{untuk menampung nilai baru} 149 q: queue;

150 i: integer; 151 stop:boolean; 152 pilihan:char; 153 begin

154 clrscr; 155

156 {initialise queue} 157 initialise(q);

158 stop:=false;

159 repeat 160

161 writeln('Press any key to display menu');

162 readkey;

163 cetak_menu;

164 write('Pilihan [1..4]: ');

165 repeat

166 pilihan:=readkey;

167 until (pilihan in ['1','2','3','4']);

168 {readln(pilihan);} 169

170 case pilihan of

171 '1': begin

172 {menambah elemen} 173 clrscr;

174 writeln('Menambah Elemen');

175 write('Nilai yang ditambahkan: ');

176 readln(x);

177 enqueue(q,x);{masukkan x ke dalam queue}

178 antrian'); writeln('Nilai ',x,' telah dimasukkan ke dalam

179 end;

180 '2': begin

181 {mengurangi elemen} 182 clrscr;

183 writeln('Mengurangi Elemen');

(30)

Daftar Isi: <Contents

185 writeln;

186 end;

187 '3': begin

188 clrscr;

189 writeln('Menampilkan Isi Queue');

190 display_queue(q);

191 writeln;

192 end;

193 '4': stop:=true;

194 end; {case of} 195 until (stop=true);

196

197 writeln;

198 normvideo;{normalkan kembali layar} 199 clrscr;

200 writeln('Terimakasih telah menggunakan program ini.');

201 writeln('Press any key to terminate this program ...');

202 readkey;

203 end.

antrian2.pas

1 uses crt;

2 {**

3 * modifikasi dari Wahid,2004. Dasar-Dasar Algoritma & 4 * Pemrograman. Yogyakarta: Andi. pp. 318-21.

5 * program mensimulasikan manipulasi terhadap sebuah queue 6 *

7 * Muhammad Jazman

8 * Friday, 29 October 2010 10:01:54 AM 9

10

11 NEW: Add Load and Save to File 12 *}

13 const

14 separator = ' ';

15 type

16 element_type = integer; 17 cell_ptr = ^cell;

18 cell = record

19 data:element_type;

20 next: cell_ptr;

21 end;

22 queue = record

23 head, tail: cell_ptr;

24 end;

(31)

Daftar Isi: <Contents

27 * Prosedur untuk menginisialisasi Queue 28 * perhatikan penggunaan var q,

29 * artinya: q dilakukan pass-by-reference.

30 * perubahan terhadap q di sini akan mengubah q di 31 * induk yang memanggilnya.

32 *}

33 procedure initialise ( var q: queue);

34 begin

35 q.head := nil;

36 q.tail := nil;

37 end;

38 39 {**

40 * menghasilkan true jika queue input kita kosong 41 *}

42 function is_empty(q:queue):boolean; 43 begin

44 is_empty := (q.head = nil) and (q.tail=nil);

45 end;

46 47 {**

48 * menambahkan new_element ke queue q 49 *}

50 procedure enqueue(var q:queue; new_element:element_type);

51 var p: cell_ptr;

52 begin

53 new(p);{alokasikan memori untuk cell baru} 54 p^.data := new_element;{cell.data}

55 p^.next := nil;{akan diletakkan di belakang} 56 if is_empty(q) then

57 begin

58 q.head:=p; {q.head adalah cell ini} 59 q.tail:=p;

60 end

61 else {queue sudah terisi} 62 begin

63 q.tail^.next := p;

64 q.tail := p;

65 end;

66 end;

67 68 {**

69 * mengurangi antrian

70 * mengurangi antrian artinya menghapus cell head kita 71 *}

72 procedure dequeue(var q:queue);

73 var

(32)

Daftar Isi: <Contents

75 {p adalah temporary cell, untuk menyimpan pointer ke 76 cell yang ingin dibuang}

77 begin

78 if not is_empty(q) then 79 begin

80 p := q.head;{}

81 q.head := q.head^.next;

82

83 {check apakah karena ini queue kita jadi kosong} 84 if q.head = nil then q.tail:=nil;

85 dispose(p);{hilangkan alokasi memori untuk cell tadi} 86 end

87 else

88 {empty queue}

89 writeln('Error: Queue kosong');

90 end;

91

92 {prosedur untuk menampilkan urutan queue ke layar} 93 procedure display_queue(q:queue);

94 var temp_cell_ptr:cell_ptr;

95 begin

96 if is_empty(q) then writeln('Queue kosong')

97 else 98 begin

99 temp_cell_ptr := q.head;{mulai dari head to tail} 100 while temp_cell_ptr <> nil do

101 begin

102 data} write(temp_cell_ptr^.data,separator);{write our current cell 103 temp_cell_ptr := temp_cell_ptr^.next; {move forward}

104 end;

105 end;

106 end;

107

108 {** save our queue for further use} 109 procedure saveToFile(q:queue);

110 var

111 f: file of cell;

112 s: string;

113 temp_cell_ptr:cell_ptr;

114 temp_cell:cell;

115 begin

116 writeln('Input file name to save our Queue. ');

117 write('Warning: It will overwrite an existing file : ');

118 readln(s);

119 assign(F,s); { Associate it } 120 rewrite(F); { Create it }

(33)

Daftar Isi: <Contents

122 while temp_cell_ptr <> nil do 123 begin

124 temp_cell.data := temp_cell_ptr^.data;

125 temp_cell.next := temp_cell_ptr^.next;

126 write(f,temp_cell);{write our current cell data} 127 temp_cell_ptr := temp_cell_ptr^.next; {move forward} 128 end;

129 close(F);{close our file again} 130 end;

131

132 procedure loadFromFile(var q:queue);

133 var

134 s:string;{string to hold our file name} 135 f:file of cell;

136 {temp_cell_ptr:cell_ptr;} 137 temp_cell:cell;

138 begin

139 write('Input file name to read: '); readln(s);

140 assign(F,s); { Associate it }

141 reset(F); { reset pointer ke awal file} 142

143 {delete our current queue}

144 while not is_empty(q) do dequeue(q);

145

146 while not EOF(F) do 147 begin

148 read(F,temp_cell);

149 {temp_cell_ptr:=@temp_cell;} 150 enqueue(q,temp_cell.data);

151 end;

152 end;

153 154

155 {** cetak menu}

156 procedure cetak_menu;

157 var i:byte; 158 begin

159 clrscr;{bersihkan layar} 160 textbackground(7);

161 textcolor(9);

162 clrscr;{kasih background} 163

164 {baris1}

165 gotoxy(1,1);write(chr(201));

166 for i:=1 to 78 do write(chr(205));

167 write(chr(187));

168

(34)

Daftar Isi: <Contents

170 gotoxy(1,2);{kolom1 baris2} 171 write(chr(186));

172 gotoxy((80-23) div 2,2);textcolor(9+15);

173 write('PRAKTIKUM STRUKTUR DATA');textcolor(9);

174 gotoxy(80,2);write(chr(186));

175

176 {baris3}

177 gotoxy(1,3);write(chr(186));

178 gotoxy(80,3);write(chr(186));

179

180 {baris4}

181 gotoxy(1,4);write(chr(200));

182 for i:=1 to 78 do write(chr(205));

183 write(chr(188));

184

185 writeln;

186 writeln('Menu');

187 writeln('A. ADD = Menambah Elemen');

188 writeln('D. DELL = Mengurangi Elemen');

189 writeln('V. VIEW = Isi Queue');

190 writeln('S. SAVE = Simpan ke dalam File');

191 writeln('L. LOAD = Load dari File');

192 writeln('X. eXIT = Keluar');

193 writeln;

194 end;

195

196 {main program} 197 var

198 x: element_type;{untuk menampung nilai baru} 199 q: queue;

200 i: integer; 201 stop:boolean; 202 pilihan:char; 203 begin

204 clrscr; 205

206 {initialise queue} 207 initialise(q);

208 stop:=false;

209 repeat 210

211 writeln('Press any key to display menu');

212 readkey;

213 cetak_menu;

214 write('Pilihan [A,D,V,S,L,X]: ');

215 repeat

216 pilihan:=readkey;

(35)

Daftar Isi: <Contents

218 {readln(pilihan);} 219

220 case upcase(pilihan) of

221 'A': begin

222 {menambah elemen} 223 clrscr;

224 writeln('Menambah Elemen');

225 write('Nilai yang ditambahkan: ');

226 readln(x);

227 enqueue(q,x);{masukkan x ke dalam queue}

228 antrian'); writeln('Nilai ',x,' telah dimasukkan ke dalam

229 end;

230 'D': begin

231 {mengurangi elemen} 232 clrscr;

233 writeln('Mengurangi Elemen');

234 dequeue(q);

235 writeln;

236 end;

237 'V': begin

238 clrscr;

239 writeln('Menampilkan Isi Queue');

240 display_queue(q);

241 writeln;

242 end;

243 'S': begin

244 clrscr;

245 writeln('Simpan ke dalam File');

246 saveToFile(q);

247 writeln;

248 end;

249 'L': begin

250 clrscr;

251 writeln('Load dari File');

252 loadFromFile(q);

253 writeln;

254 end;

255

256 'X': stop:=true;

257 end; {case of} 258 until (stop=true);

259

260 writeln;

261 normvideo;{normalkan kembali layar} 262 clrscr;

263 writeln('Terimakasih telah menggunakan program ini.');

(36)

Daftar Isi: <Contents 265 readkey;

266 end.

antrian3.pas

1 uses crt;

2 {**

3 * modifikasi dari Wahid,2004. Dasar-Dasar Algoritma & 4 * Pemrograman. Yogyakarta: Andi. pp. 318-21.

5 * program mensimulasikan manipulasi terhadap sebuah queue 6 *

7 * Muhammad Jazman

8 * Friday, 29 October 2010 10:01:54 AM 9

10 NEW: queue file is a [file of element_type], to save. 11

12 *} 13 const

14 separator = ' ';

15 type

16 element_type = integer; 17 cell_ptr = ^cell;

18 cell = record

19 data:element_type;

20 next: cell_ptr;

21 end;

22 queue = record

23 head, tail: cell_ptr;

24 end;

25 26 {**

27 * Prosedur untuk menginisialisasi Queue 28 * perhatikan penggunaan var q,

29 * artinya: q dilakukan pass-by-reference.

30 * perubahan terhadap q di sini akan mengubah q di 31 * induk yang memanggilnya.

32 *}

33 procedure initialise ( var q: queue);

34 begin

35 q.head := nil;

36 q.tail := nil;

37 end;

38 39 {**

40 * menghasilkan true jika queue input kita kosong 41 *}

(37)

Daftar Isi: <Contents

44 is_empty := (q.head = nil) and (q.tail=nil);

45 end;

46 47 {**

48 * menambahkan new_element ke queue q 49 *}

50 procedure enqueue(var q:queue; new_element:element_type);

51 var p: cell_ptr;

52 begin

53 new(p);{alokasikan memori untuk cell baru} 54 p^.data := new_element;{cell.data}

55 p^.next := nil;{akan diletakkan di belakang} 56 if is_empty(q) then

57 begin

58 q.head:=p; {q.head adalah cell ini} 59 q.tail:=p;

60 end

61 else {queue sudah terisi} 62 begin

63 q.tail^.next := p;

64 q.tail := p;

65 end;

66 end;

67 68 {**

69 * mengurangi antrian

70 * mengurangi antrian artinya menghapus cell head kita 71 *}

72 procedure dequeue(var q:queue);

73 var

74 p: cell_ptr;

75 {p adalah temporary cell, untuk menyimpan pointer ke 76 cell yang ingin dibuang}

77 begin

78 if not is_empty(q) then 79 begin

80 p := q.head;{}

81 q.head := q.head^.next;

82

83 {check apakah karena ini queue kita jadi kosong} 84 if q.head = nil then q.tail:=nil;

85 dispose(p);{hilangkan alokasi memori untuk cell tadi} 86 end

87 else

88 {empty queue}

89 writeln('Error: Queue kosong');

90 end;

(38)

Daftar Isi: <Contents

92 {prosedur untuk menampilkan urutan queue ke layar} 93 procedure display_queue(q:queue);

94 var temp_cell_ptr:cell_ptr;

95 begin

96 if is_empty(q) then writeln('Queue kosong')

97 else 98 begin

99 temp_cell_ptr := q.head;{mulai dari head to tail} 100 while temp_cell_ptr <> nil do

101 begin

102 data} write(temp_cell_ptr^.data,separator);{write our current cell 103 temp_cell_ptr := temp_cell_ptr^.next; {move forward}

104 end;

105 end;

106 end;

107

108 {** save our queue for further use} 109 procedure saveToFile(q:queue);

110 var

111 f: file of element_type;

112 s: string;

113 temp_cell_ptr:cell_ptr;

114 begin

115 writeln('Input file name to save our Queue. ');

116 write('Warning: It will overwrite an existing file : ');

117 readln(s);

118 assign(F,s); { Associate it } 119 rewrite(F); { Create it }

120 temp_cell_ptr := q.head;{mulai dari head to tail} 121 while temp_cell_ptr <> nil do

122 begin

123 write(f,temp_cell_ptr^.data);{write our current cell data} 124 temp_cell_ptr := temp_cell_ptr^.next; {move forward}

125 end;

126 close(F);{close our file again} 127 end;

128

129 procedure loadFromFile(var q:queue);

130 var

131 s:string;{string to hold our file name} 132 f:file of element_type;

133 data:element_type;

134 begin

135 write('Input file name to read: '); readln(s);

136 assign(F,s); { Associate it }

(39)

Daftar Isi: <Contents

139 {delete our current queue}

140 while not is_empty(q) do dequeue(q);

141

142 while not EOF(F) do 143 begin

144 read(F,data);

145 enqueue(q,data);

146 end;

147 end;

148 149

150 {** cetak menu}

151 procedure cetak_menu;

152 var i:byte; 153 begin

154 clrscr;{bersihkan layar} 155 textbackground(7);

156 textcolor(9);

157 clrscr;{kasih background} 158

159 {baris1}

160 gotoxy(1,1);write(chr(201));

161 for i:=1 to 78 do write(chr(205));

162 write(chr(187));

163

164 {baris2}

165 gotoxy(1,2);{kolom1 baris2} 166 write(chr(186));

167 gotoxy((80-23) div 2,2);textcolor(9+15);

168 write('PRAKTIKUM STRUKTUR DATA');textcolor(9);

169 gotoxy(80,2);write(chr(186));

170

171 {baris3}

172 gotoxy(1,3);write(chr(186));

173 gotoxy(80,3);write(chr(186));

174

175 {baris4}

176 gotoxy(1,4);write(chr(200));

177 for i:=1 to 78 do write(chr(205));

178 write(chr(188));

179

180 writeln;

181 writeln('Menu');

182 writeln('A. ADD = Menambah Elemen');

183 writeln('D. DELL = Mengurangi Elemen');

184 writeln('V. VIEW = Isi Queue');

185 writeln('S. SAVE = Simpan ke dalam File');

(40)

Daftar Isi: <Contents

187 writeln('X. eXIT = Keluar');

188 writeln;

189 end;

190

191 {main program} 192 var

193 x: element_type;{untuk menampung nilai baru} 194 q: queue;

195 i: integer; 196 stop:boolean; 197 pilihan:char; 198 begin

199 clrscr; 200

201 {initialise queue} 202 initialise(q);

203 stop:=false;

204 repeat 205

206 writeln('Press any key to display menu');

207 readkey;

208 cetak_menu;

209 write('Pilihan [A,D,V,S,L,X]: ');

210 repeat

211 pilihan:=readkey;

212 until (upcase(pilihan) in ['A','D','V','S','L','X']);

213 {readln(pilihan);} 214

215 case upcase(pilihan) of

216 'A': begin

217 {menambah elemen} 218 clrscr;

219 writeln('Menambah Elemen');

220 write('Nilai yang ditambahkan: ');

221 readln(x);

222 enqueue(q,x);{masukkan x ke dalam queue}

223 antrian'); writeln('Nilai ',x,' telah dimasukkan ke dalam

224 end;

225 'D': begin

226 {mengurangi elemen} 227 clrscr;

228 writeln('Mengurangi Elemen');

229 dequeue(q);

230 writeln;

231 end;

232 'V': begin

(41)

Daftar Isi: <Contents

234 writeln('Menampilkan Isi Queue');

235 display_queue(q);

236 writeln;

237 end;

238 'S': begin

239 clrscr;

240 writeln('Simpan ke dalam File');

241 saveToFile(q);

242 writeln;

243 end;

244 'L': begin

245 clrscr;

246 writeln('Load dari File');

247 loadFromFile(q);

248 writeln;

249 end;

250

251 'X': stop:=true;

252 end; {case of} 253 until (stop=true);

254

255 writeln;

256 normvideo;{normalkan kembali layar} 257 clrscr;

258 writeln('Terimakasih telah menggunakan program ini.');

259 writeln('Press any key to terminate this program ...');

260 readkey;

(42)

Daftar Isi: <Contents

Linked List (Senarai Berantai)

linkedls.pas

1 uses crt;

2 type

3 simpul=^data;

4 data=record 5 info:char; 6 berikut:simpul;

7 end;

8

9 var

10 elemen:char;

11 awal,akhir,baru:simpul;

12 13 14 {

15 program 5.1

16 Prosedur untuk menambah simpul.

17 Simpul baru diletakkan di akhir senarai berantai 18 }

19 procedure tambah_belakang (var awal, akhir: simpul; elemen:char);

20 var baru:simpul;

21 begin

22 new(baru);{alokasikan memori} 23 baru^.info:=elemen;

24 {jika awal masih kosong}

25 if awal = nil then awal:= baru

26 else

27 akhir^.berikut:=baru;

28

29 akhir:=baru;

30 akhir^.berikut:=nil 31 end;

32 33 34 {

35 program 5.2

36 prosedur untuk menambah simpul.

37 simpul baru diletakkan di awal senarai berantai 38 }

39 procedure tambah_depan(var awal,akhir:simpul;elemen:char);

40 var

41 baru:simpul;

(43)

Daftar Isi: <Contents 43 new(baru);

44 baru^.info:=elemen;

45 if awal=nil then 46 akhir:= baru

47 else

48 baru^.berikut:=awal;

49 awal:=baru;

50 end;

51 52 {

53 program 5.3

54 prosedur untuk menambah simpul di tengah senarai berantai 55 }

56 procedure tambah_tengah (var awal,akhir:simpul; elemen:char);

57 var

58 baru,bantu:simpul;

59 begin

60 new(baru);

61 baru^.info:=elemen;

62 if awal = nil then {senarai masih kosong} 63 begin

64 awal:=baru;

65 akhir:=baru

66 end

67 else 68 begin

69 {mencari lokasi yang sesuai} 70 bantu:=awal;

71 while elemen>baru^.berikut^.info do 72 bantu:=bantu^.berikut;

73

74 {menyisipkan simpul baru} 75 baru^.berikut:=bantu^.berikut;

76 bantu^.berikut:=baru;

77 end;

78 end;

79 80 {

81 program 5.4

82 prosedur menghapus simpul 83 }

84 procedure hapus_simpul(var awal,akhir:simpul;elemen:char);

85 var bantu,hapus:simpul;

86 begin

87 if awal=nil then {senarai masih kosong}

88 writeln('senarai masih kosong, tidak dapat menghapus')

(44)

Daftar Isi: <Contents 91 begin

92 hapus:=awal;

93 awal:=hapus^.berikut;

94 dispose(hapus)

95 end

96 else

97 {menghapus simpul tengah atau terakhir} 98 begin

99 bantu:=awal;

100 {mencari simpul yang akan dihapus}

101 while (elemen<>bantu^.info) and (bantu^.berikut <> nil) do 102 bantu:=bantu^.berikut;

103

104 hapus:=bantu^.berikut;

105 if hapus<>nil then

106 {simpul yang akan dihapus ketemu} 107 begin

108 if hapus <> akhir then 109 {simpul tengah dihapus}

110 bantu^.berikut:=hapus^.berikut

111 else

112 {simpul terakhir dihapus} 113 begin

114 akhir:=bantu;

115 akhir^.berikut:=nil 116 end;

117 dispose(hapus)

118 end

119

120 else

121 {simpul yang akan dihapus tidak ketemu}

122 writeln('Simpul yang akan dihapus tidak ada')

123 end

124 end;

125 126 127 {

128 program 5.5

129 prosedur untuk membaca senarai dari kiri ke kanan (maju) 130 }

131 procedure baca_maju (awal,akhir:simpul);

132 var

133 bantu:simpul;

134 begin

135 bantu:=awal;

136 repeat

137 write(bantu^.info:2);

(45)

Daftar Isi: <Contents

139 until bantu=nil;

140 writeln 141 end;

142 143 144 {

145 Program 5.6

146 Prosedur untuk membalik pointer 147 }

148 procedure balik_pointer(var awal, akhir: simpul);

149 var

150 bantu, bantu1: simpul;

151 begin

152 bantu:= awal;

153 awal:= akhir;

154

155 {proses membalik pointer} 156 repeat

157 bantu1 := bantu;

158

159 akhir}{mencari simpul sebelum simpul yang ditunjuk oleh pointer 160 while bantu1^.berikut <> akhir do

161 bantu1 := bantu1^.berikut;

162

163 akhir^.berikut:=bantu1;

164 akhir:= bantu1;

165 until akhir = bantu;

166 akhir^.berikut:= nil;

167 end;

168 169 {

170 program 5.7

171 prosedur membaca senarai dari kanan ke kiri 172 menggunakan cara pembacaan secara rekursif 173 }

174 procedure mundur (bantu:simpul);

175 begin

176 if bantu <> nil then 177 begin

178 mundur(bantu^.berikut);

179 write(bantu^.info:2)

180 end;

181 end;

182 183 {

184 program 5.8

(46)

Daftar Isi: <Contents

186 jiwa fungsi bernilai 'true' berarti data ketemu 187 }

188 function ada_data (elemen:char; awal:simpul):boolean; 189 var

190 ketemu:boolean; 191 begin

192 ketemu:=false;

193 repeat

194 if awal^.info = elemen then 195 ketemu := true

196 else

197 awal := awal^.berikut;

198 until ketemu or (awal = nil);

199 ada_data := ketemu

200 end;

201 202 {

203 program 5.9

204 Fungsi untuk mencari data pada senarai terurutkan 205 Jika fungsi bernilai 'true' bearti data ketemu 206 }

207 function ada_data1 (awal:simpul; elemen:char):boolean; 208 var ketemu:boolean;

209 begin

210 ketemu:=false;

211 repeat

212 if awal^.info = elemen then 213 {data ditemukan}

214 ketemu := true 215 else

216 if awal^.info < elemen then 217 awal := awal^.berikut

218 else

219 {tidak ditemukan} 220 awal:=nil

221 until ketemu or (awal=nil);

222

223 ada_data1:=ketemu

224 end;

225 226 {

227 program 5.10

228 prosedur inisialisasi senarai berantai 229 untuk membentuk simpul kepala

230 }

231 procedure awalan(var awal:simpul);

232 begin

(47)

Daftar Isi: <Contents

234 {karena belum punya simpul, ini adalah simpul terakhir} 235 awal^.berikut := nil;

236 end;

237 238 239

240 {main program} 241 begin

242 clrscr;

243 writeln('Program untuk menguji Linked List');

244 writeln;

245 writeln('Nilai awal^.info:=',awal^.info);

246 writeln('Nilai akhir^.info:=',akhir^.info);

247 writeln;

248

249 awalan(awal);

250 writeln('awalan(awal);');

251 writeln('Nilai awal^.info:=',awal^.info);

252 writeln('Nilai akhir^.info:=',akhir^.info);

253 writeln;

254

255 tambah_belakang(awal,akhir,'a');

256 writeln('tambah_belakang(awal,akhir,''a'');');

257 writeln('Nilai awal^.info:=',awal^.info);

258 writeln('Nilai akhir^.info:=',akhir^.info);

259 writeln;

260

261 tambah_belakang(awal,akhir,'b');

262 tambah_belakang(awal,akhir,'c');

263 tambah_belakang(awal,akhir,'d');

264 tambah_belakang(awal,akhir,'e');

265 tambah_belakang(awal,akhir,'f');

266 writeln('baca_maju(awal,akhir);');

267 baca_maju(awal,akhir);

268 writeln;

269

270 awal:=nil;akhir:=nil;

271 writeln('awal:=nil;akhir:=nil;');

272 writeln('Nilai awal^.info:=',awal^.info);

273 writeln('Nilai akhir^.info:=',akhir^.info);

274 writeln;

275

276 tambah_belakang(awal,akhir,'a');

277 writeln('tambah_belakang(awal,akhir,''a'');');

278 writeln('Nilai awal^.info:=',awal^.info);

279 writeln('Nilai akhir^.info:=',akhir^.info);

280 writeln;

(48)

Daftar Isi: <Contents

282 tambah_belakang(awal,akhir,'b');

283 tambah_belakang(awal,akhir,'c');

284 tambah_belakang(awal,akhir,'d');

285 tambah_belakang(awal,akhir,'e');

286 tambah_belakang(awal,akhir,'f');

287 writeln('baca_maju(awal,akhir);');

288 baca_maju(awal,akhir);

289 writeln;

290

291 end.

dll.pas

1 {Chapter 3 -- Double Linked List} 2 type

3 pDbllist = ^tDbllist;

4 tDbllist = record

5 name : string[30];

6 address : string[40];

7 prev, next : pDbllist;

8 end;

9 10

11 procedure add(var tail : pDbllist; content : tDbllist);{: pDbllist;} 12 var cur : pDbllist;

13 begin

14 new(cur);

15 cur^.name:=content.name;

16 cur^.address:=content.address;

17 cur^.prev:=tail;

18 cur^.next:=nil;

19 tail^.next:=cur;

20 end;

21

22 procedure display(head : pDbllist);

23 var cur : pDbllist;

24 begin

25 cur:=head;

26 while cur<>nil do 27 begin

28 writeln(cur^.name:35,cur^.address);

29 cur:=cur^.next;

30 end;

31 end;

32 33

34 procedure delete(whattodel : pDbllist);

(49)

Daftar Isi: <Contents 36 begin

37 cur:=whattodel;

38 if cur=nil then exit;

39 bef:=cur^.prev;

40 aft:=cur^.next;

41 in the middle }if (bef<>nil) and (aft<>nil) then { The wanna be deleted item is 42 begin

43 bef^.next:=aft;

44 aft^.prev:=bef;

45 end

46 else

47 at the front }if (bef=nil) and (aft<>nil) then { The wanna be deleted item is 48 aft^.prev:=nil

49 else 50

51 is at the end }if (bef<>nil) and (aft=nil) then { The wanna be deleted item 52 bef^.next:=nil;

53

54 dispose(cur);

55 end;

56

57 procedure insert(afterwhat : pDbllist; content : tDbllist);

58 var cur, bef : pDbllist;

59 begin

60 list }if afterwhat=nil then exit; { You can't insert item in an empty 61 inserted item }new(cur); { Create node for the wanna be 62 cur^.name:=content.name; { Then fill it with its data } 63 cur^.address:=content.address;

64

65 bef:=afterwhat;

66 cur^.prev:=bef; { Cur is after bef, so bef is before cur } 67 cur^.next:=bef^.next; { Take over the next item ** }

68 bef^.next:=cur; { Link the inserted item after the node } 69 end;

70

71 {main} 72 begin

(50)

Daftar Isi: <Contents

Tree (Pohon Keluarga)

tree.pas

1

uses

wincrt;

2

3

type Tree=^Simpul;

4

Simpul =

record

5

Info:

char;

6

Kiri, Kanan:Tree

7

end;

8 9

var

10

myTree: tree;

11 12

{

13

Fungsi untuk mengalokasikan sebuah simpul baru

14

Informasi disimpan dalam Hrf

15

}

16

function

baru(

hrf

:

char

):Tree;

17

var

B: Tree;

18

begin

19

new

(

B

);

20

B^.Info := Hrf;

21

B^.Kanan := nil;

22

B^.Kiri := nil;

23

baru:=B

24

end;

25 26

{

27

Prosedur untuk menyisipkan simpul baru ke dalam

28

pohon biner dengan cara non rekursif. Informasi

29

yang akan disimpan dinyatakan dalam Hrf.

30

}

31

procedure

sisip_simpul_non_rekursif(

var

akar:tree;hrf:

char

);

32

var

33

b,p,q:tree;

34

begin

35

b:=baru(

hrf

);

{new tree}

36

if

akar=

nil then

37

{pohon masih kosong}

38

akar:=b

(51)

Daftar Isi: <Contents

40

{pohon sudah terisi sejumlah simpul}

41

begin

42

q:=akar;

43

p:=akar;

44

45

{cari letak yang tepat untuk sisipkan simpul baru}

46

while

(

hrf

<>

p^.info

) and (

q

<>

nil

)

do

47

begin

48

P:=q;

49

if

hrf < p^.info

then

50

q:=p^.kiri

51

else

52

q:=p^.kanan

53

end;{end if, end while}

54

55

if

hrf=p^.info

then

56

{data sudah ada}

57

writeln

(

'Error: Data ['

,hrf,

'] sudah ada'

)

58

else

59

if

hrf < p^.info

then

p^.kiri:=b

60

else

p^.kanan:=b

61

end

62

end;

63 64

{

65

Prosedur untuk menyisipkan simpul baru ke dalam

66

pohon biner dengan cara rekursif

67

Informasinya sebagai hrf

68

}

69

procedure

sisip_rekursif(

var

pohon:tree;hrf:

char

);

70

begin

71

if

pohon =

nil then

pohon:=baru(

hrf

)

72

else

73

if

pohon^.info>hrf

then

sisip_rekursif(

pohon^.kiri

,

hrf

)

74

else if

pohon^.info<hrf

then

sisip_rekursif(

pohon^.kanan

,

hrf

)

75

else writeln

(

'Error: Data ['

,hrf,

'] sudah ada'

)

76

end;

77

78

{main program}

79

begin

80

writeln

(

'Program Test Tree'

);

81

myTree:=baru(

'5'

);

82

writeln

(

myTree^.Info

);

(52)

Daftar Isi: <Contents

84

sisip_simpul_non_rekursif(

myTree

,

'4'

);

85

sisip_simpul_non_rekursif(

myTree

,

'6'

);

86

sisip_simpul_non_rekursif(

myTree

,

'8'

);

87

sisip_simpul_non_rekursif(

myTree

,

'7'

);

88

sisip_simpul_non_rekursif(

myTree

,

'9'

);

89

sisip_simpul_non_rekursif(

myTree

,

'6'

);

(53)

Daftar Isi: <Contents

Sort (Pengurutan)

bubble.pas

1 {

2 hasil modifikasi dari:

3 http://pascalprogramming.byethost15.com/articles/sorting.php 4

5 The Bubble Sort algorithm is simple, inefficient sorting

6 algorithm. It is not recommended for use, since its performance 7 at sorting a list of items is terribly slow. It is best at 8 sorting a small list of items, but not for large ones. 9

10 The sorting time complexity of the Bubble Sort is O(n2). 11 }

12

13 const max_element=100;

14

15 Procedure Integer); BubbleSort(var numbers : Array of Integer; size :

16 procedure swapInteger(var i, j:integer);

17 var temp:integer; 18 begin

19 temp := j;j:=i;i:=temp;

20 end;

21

22 Var i, j :Integer; 23 Begin

24 For i := size-1 DownTo 0 do 25 For j := 0 to i do

26 If (numbers[j] > numbers[j+1]) then 27 Begin

28 {swap i with j}

29 swapinteger(numbers[j] , numbers[j+1]);

30 End;

31 End;

32 33

34 var a:array[1..max_element] of integer; 35 i:integer;

36 begin

37 randomize;

38 {isi random data}

39 for i:=1 to max_element do a[i]:= random(6000);

40

41 {cetak ke layar}

(54)

Daftar Isi: <Contents

43 for i:=1 to max_element do write(a[i]:8);

44

45 bubblesort(a,max_element);

46 writeln;writeln('Setelah di sort:');

47 for i:=1 to max_element do write(a[i]:8);

48

49 end.

insort.pas

1 {

2 hasil modifikasi dari:

3 http://pascalprogramming.byethost15.com/articles/sorting.php 4

5 Insertion Sort algorithm is a bit more efficient sorting 6 algorithm than Bubble Sort. As it name implies, the insertion 7 sort algorithm inserts an unsorted item in an already sorted 8 item list. This makes you think of the use of two seperated 9 arrays - one unsorted and the other sorted. However, to save 10 space one uses the same array and uses a pointer to separate 11 the sorted and unsorted elements of the list.

12

13 The sorting time complexity of the Insertion Sort is O(n2). 14 Although this exactly the same to Bubble Sort's, the Insertion 15 Sort algorithm is twice more efficient, yet inefficient for 16 large lists.

17 }

18 const max_element=100;

19

20 Procedure Integer); InsertionSort(var numbers : Array of Integer; size :

21 Var i, j, index : Integer; 22 Begin

23 For i := 1 to size-1 do 24 Begin

25 index := numbers[i];{hold our number} 26 j := i;

27 While ((j >= 1) AND (numbers[j-1] > index)) do 28 Begin

29 numbers[j] := numbers[j-1];

30 j := j - 1;

31 End;

32 numbers[j] := index;

33 End;

34

35 End;

36

(55)

Daftar Isi: <Contents

38 a:array[1..max_element] of integer; 39 i:integer;

40 begin

41 randomize;

42 {isi random data}

43 for i:=1 to max_element do a[i]:= random(6000);

44

45 {cetak ke layar}

46 writeln;writeln('sebelum di sort:');

47 for i:=1 to max_element do write(a[i]:8);

48

49 insertionSort(a,max_element);

50 writeln;writeln('Setelah di sort:');

51 for i:=1 to max_element do write(a[i]:8);

52

53 end.

qsort.pas

1 {

2 hasil modifikasi dari

3 http://pascalprogramming.byethost15.com/articles/sorting.php 4 }

5 const max_element=100;

6

7 Procedure QSort(var numbers : Array of Integer; 8 left : Integer;

9 right : Integer);

10 Var

11 pivot, l_ptr, r_ptr : Integer; 12 Begin

13 l_ptr := left;

14 r_ptr := right;

15 pivot := numbers[left];

16 While (left < right) do 17 Begin

18

19 While ((numbers[right] >= pivot) AND (left < right)) do 20 right := right - 1;

21

22 If (left <> right) then 23 Begin

24 numbers[left] := numbers[right];

25 left := left + 1;

26 End;

(56)

Daftar Isi: <Contents

28 While ((numbers[left] <= pivot) AND (left < right)) do 29 left := left + 1;

30

31 If (left <> right) then 32 Begin

33 numbers[right] := numbers[left];

34 right := right - 1;

35 End;

36 End;

37

38 numbers[left] := pivot;

39 pivot := left;

40 left := l_ptr;

41 right := r_ptr;

42 If (left < pivot) then

43 QSort(numbers, left, pivot-1);{sort our left side of pivot} 44 If (right > pivot) then

45 QSort(numbers, pivot+1, right);{sort our right side of pivot} 46 End;

47 48

49 Procedure Integer); QuickSort(var numbers : Array of Integer; size :

50 Begin

51 QSort(numbers, 0, size-1);

52 End;

53

54 var a:array[1..max_element] of integer; 55 i:integer;

56 begin

57 randomize;

58 {isi random data}

59 for i:=1 to max_element do a[i]:= random(6000);

60

61 {cetak ke layar}

62 writeln;writeln('sebelum di sort:');

63 for i:=1 to max_element do write(a[i]:8);

64

65 {quicksort(a,max_element);} 66 qsort(a,0,max_element);

67

68 writeln;writeln('Setelah di sort:');

69 for i:=1 to max_element do write(a[i]:8);

70

(57)

Referensi

Dokumen terkait

Tujuan kreatif dari perancangan ini adalah untuk menghasilkan buku yang bercerita tentang salah satu kontribusi sosial masyarakat etnis Tionghoa di Kota Semarang,

Peningkatan Aktivitas dan Ketuntasan Hasil Belajar Fisika Menggunakan Model Latihan Penelitian disertai Performance Assessment pada Siswa Kelas X.C Man 2 Jember Tahun

2012, Penyedia yang memasukkan dokumen penawaran pengadaan barang/jasa TIDAK ADA maka pelelangan pengadaan barang/ jasa untuk paket pekerjaan diatas dinyatakan GAGAL, dan akan

Batasan masalah dalam penelitian ini adalah kecelakaan kerja yang diteliti dan dapat diamati oleh panca indra sepertiterjatuh, terpeleset, terpotong benda tajam,

Faktor-faktor yang mempengaruhi pengawasan produk makanan dan minuman ilegal oleh Dinas Perindustrian Dan Perdagangan Di Bagan Siapi-api Kabupaten Rokan Hilir

Dengan pengolahan yang teliti dan daya kreasi yang bagus, 3D Studio Max 5.1 dapat menghasilkan suatu animasi yang lebih nyata, rinci

Berdasarkan hal-hal tersebut di atas serta mengingat buruknya risiko hipertensi yang dapat ditimbulkan pada penderita DM dalam kaitannya dengan jenis kelamin sebagai salah satu

Berdasarkan ringkasan hasil regresi tersebut di atas dapat diketahui bahwa pengaruh variabel motivasi kerja, pendidikan dan pelatihan (diklat), iklim organisasi,