Anda di halaman 1dari 52

Laporan Pratikum

Struktur Data

Dosen Pembimbing: Eva Yulianti , S.Kom , M.C

Disusun Oleh :

RANDI SARESKI (2018610012)

JURUSAN TEKNIK INFORMATIKA

FAKULTAS TEKNOLOGII INDUSTRI

INSTITUT TEKNOLOGI PADANG

2019
BAB I

Tipe data

Contoh Program 1

program pertama;

uses wincrt;

var p,l,luas:real;

begin

writeln('Ini Program Pertama');

writeln('Program ini menghitung luas persegi panjang');

write('Panjang :');readln(p);

Write('Lebar:');readln(l);

Luas :=p*l;

Writeln('Luasnya :',Luas: 9:2);

end.

Contoh Program 2

Program TipeInteger;

uses wincrt;

var A,B,C:integer;

D:real;

begin

write('A=');readln(A);

write('B=');readln(B);

C:=A+B;writeln('A+B=',C);

C:=A-B;writeln('A-B=',C);

C:=A*B;writeln('A*B=',C);

D:=A/B;writeln('A/B=',D:7:2);

C:=A Div B;writeln ('A Div B =',C);

C:=A Mod B;writeln ('A Mod B =',C);


end.

Contoh Program 3

program typechar;

uses wincrt;

var A,B:char;

D:byte;

begin

write('Ketik 1 karakter:');readln(A);

writeln('Karakter',A,' dalam tabel ASCII ada pada urutan :',ord(A));

write('Masukkan angka 0 - 255 :');readln(D);

writeln('Karakter ke-',D,'pada tabel ASCII :',chr(D));

write('Masukkan sebuah karakter :');readln(B);

writeln('Predessor dari',B,'adalah :',pred (B));

writeln('Sucessor dari',B,'adalah :',succ (B));

end.
TUGAS

*Buatlah program yang menghitung luas sisi dan volume tabung

- Input jari-jari tabung, tinggi tabung

- Luas = 2 x luas alas + tinggi + keliling alas

- Volume = luas alas x tinggi

program luas_dan_volume_tabung;

uses wincrt;

var r,t:integer;

l,v:real;

begin

write('Masukkan panjang jari-jari :');readln(r);

write('Masukkan tinggi tabung :');readln(t);

l:=(2*(3.14*r*r)+(3.14*(2*r)*t));

v:=(3.14*r*r)*t;

writeln('Luas tabung :',l:1:1,'');

writeln('Volume tabung :',v:1:1,'');

readln;

end.
BAB II

Prosedur & Fungsi

Contoh 1

program contoh1;

uses wincrt;

var p,l,t,vol:real;

procedure MASUKAN (var p,l,t:real);

begin

write('panjang :' );readln(p);

write('lebar :' );readln(l);

write('tinggi : ')readln(t);

end;

procedure Volume (p,l,t : real;var vol:real);

begin

MASUKAN (p,l,t);

vol:=p*l*t;

end;

begin

VOLUME (p,l,t,vol);

writeln('volume : ' ,vol:6:2);

end.

Contoh 2

program contoh2;

uses crt;

var s:string;

function BOBOT(s:string):integer;

var i,nilai,jumlah:integer;

begin

jumlah:=0;
for i:=1 to length(s) do

begin

nilai:=0;

case s[i] of

'A' , 'a':nilai:=1;

'E' , 'e':nilai:=2;

'O' , 'o':nilai:=0;

'I' , 'i':nilai:=-1;

'U' , 'u':nilai:=-2;

end;

jumlah:=jumlah+nilai;

writeln('huruf' , s[i], ' berbobot=', nilai:2,'total saat ini:' , jumlah:3);

end;

BOBOT:=jumlah;

end;

begin

write('Masukkan sebuah kata:');readln(s);

writeln('Nilai bobot kata : ' , BOBOT(s))

end.

Tugas 1

Buatlah sebuah program untuk menghitung luas segitiga menggunakan prosedur

program meghitung_luas;

uses crt;

var a,t,luas : real;

procedure segitiga;

begin

writeln('LUAS SEGITIGA');
write('Masukkan nilai alas :=');readln(a);

write('Masukkan nilai tinggi :=');readln(t);

luas:=0.5*(a*t);

writeln('Luas Segitiga =',Luas:0:0);

end;

begin

segitiga;

end.

Tugas 2

*Buatlah sebuah program untuk menghitung nilai factorial menggunakan fungsi

program faktorial;

uses crt;

Function Fakt(N:integer):integer;

begin

if N=0 then

fakt:=1

else

fakt:=N*Fakt(N-1);

end;

var angka,hasil:integer;

begin

clrscr;

write('Nilai Faktorial :');readln(angka);

hasil:=Fakt(angka);

write('Hasil : ',hasil);

readkey;

end.
BAB III

Rekursif

Contoh Program

PROGRAM SUSUN_PERMUTASI;

uses crt;

const MAX=5;

type larik=array[1..MAX]of char;

var A : larik;

C_Permutasi,C_Elemen,I:integer;

Lagi :char;

procedure PERMUTASI (var B:integer;A:larik;K,N:integer);

var I:integer;

temp:char;

begin

if K=N then

begin

B:=SUCC (B);

Write(' Permutasi ke ',B:2,':');


for I:=1 to N do;

write(A[I]:3);

end

else

for I:=K to N do

begin

temp:=A[I];

A[I]:=A[K];

A[K]:=temp;

PERMUTASI(B,A,K+1,N);

end;

end;

begin

repeat

clrscr;

write('Banyaknya karakter yang akan dipermutasikan :');

repeat

gotoxy(47,1);write(' ');

gotoxy(47,1);readln(C_Elemen);

until C_Elemen<=MAX;

for I:=1 to C_Elemen do

A[I]:=chr(I+64);

clrscr;

write('Menyusun Permutasi Untuk ');

write(C_Elemen:2,' Karakter ');

writeln;

C_Permutasi:=0;

PERMUTASI(C_permutasi,A,1,C_Elemen);

writeln(' Banyaknya Permutasi ;',C_permutasi:3);

writeln;

write('Akan Coba Lagi? [Y/T]:');readln(lagi);

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

end.
Latihan 1

*Buatlah program untuk menghitung Nilai Faktorial dengan cara Rekursif , bila diketahui:

- Faktorial (0)=1

- Faktorial (N)=N*Faktorial (N-1)

program deretfibonacci;

uses crt;

var a, b, c, d, f : integer;

begin

clrscr;

writeln('Program Deret Fibonacci ');

writeln;

write('Masukkan Jumlah Deret : ');

readln(a);

write('Deret Fibonacci ',a,' Deret : ');

d := 0;

f := 1;

c := 0;

for b := 1 to a do

begin

c := d + c;

d :=f;

f :=c;

write(c);

write(' ');

end;

readln;

end.
Latihan 2

*Buatlah program untuk menghitung Deret Fibonacci dengan cara Rekursif , bila diketahui :

- Fibo(1)=1

- Fibo(2)=1

Program Faktorial;

uses crt;

var

i, n, x : integer;

begin

clrscr;

writeln('Program Faktorial');

writeln('============');

writeln;

write('Masukkan Nilai Faktorial : ');readln(n);

writeln;

if (n <= 0) then

writeln('Hasil Faktorial : ',1)

else

begin

x := 1;

for i := 1 to n do

x :=x*i;

writeln('Hasil Faktorial : ',x);

end;

readkey;

end.
BAB IV

Tumpukan (Stack)
Contoh Program 1

program Konversi_Infix_Ke_Postfix;

uses crt;

const max_elemen=255;

type s255 = string[max_elemen];

tumpukan = record

rinci : s255;

atas : 0..max_elemen;

end;

var infix : s255;

lagi : char;

function VALENSI (tanda_op : char) : integer;

begin

case tanda_op of

'$' :VALENSI :=3;

'*','/' :VALENSI :=2;

'+','-' :VALENSI :=1;

'(' :VALENSI :=0;

end;

end;

Procedure push (var T : tumpukan; elemen:char);

begin
T.Atas:=T.Atas+1;

T.Rinci[T.Atas]:=elemen

end;

function pop (var T:tumpukan):char;

begin

pop:=T.Rinci[T.Atas];

T.Atas:=T.Atas-1;

end;

procedure KONVERSI_CETAK (infix:s255);

var I : integer;

Operator : set of char;

Temp,kar : char;

T : Tumpukan;

Test : Boolean;

begin

Operator := ['$']+['*']+['/']+['+']+['-'];

for I:=1 to length(infix) do

begin

kar := Infix[I];

if kar = '(' then push (T,Kar)

else if kar = ')' then

begin

while T.rinci[T.Atas]<>'(' do

write(pop (T):2);

temp:=pop(T);

end

else if kar in operator then

begin

while (T.Atas<>0) and (Valensi

(kar)<= Valensi (T.Rinci[T.Atas])) do

write (pop(T):2);

push (T,Kar)

end

else if kar<>' ' then

write (kar:2)

end;
if T.Atas <> 0 then

repeat

write (pop(T):2)

until T.Atas = 0;

end;

begin

clrscr;

writeln('MENGUBAH NOTASI INFIX MENJADI POSTFIX');

writeln('DENGAN MEMANFAATKAN STRUKTUR TUMPUKAN');

writeln('-------------------------------------');

writeln;

repeat

write('Masukkan Ungkapan Infix :');

readln(infix);writeln;

write('Ungkapan Postfix :');

KONVERSI_CETAK(infix);

writeln;writeln;

write('Akan Mencoba Lagi ? Y(a)/T(idak) :');

readln (lagi);

writeln;

until not (Lagi in ['Y','y'])

end.

TUGAS 1

*Buatlah Program untuk membalik kalimat dengan manfaat struktur tumpukan(stack)

program membalik_kata;

uses crt;

const elemen = 255;


type s255 = string[elemen];

tumpukan = record

isi:s255;

atas: 0..elemen;

end;

var t: tumpukan;

i: integer;

kata: s255;

ulang : string;

procedure awalan(var t: tumpukan);

begin

t.atas:=0;

end;

procedure push (var t:tumpukan; x: char);

begin

t.atas:=t.atas+1;

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

end;

function pop(var t:tumpukan):char;

begin

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

t.atas:=t.atas-1;

end;

begin

clrscr;

writeln;

awalan(t);

writeln('PROGRAM MEMBALIK KATA DENGAN METODE TUMPUKAN');

writeln('*==========================================*');

writeln;

repeat

write('ketik kata: '); readln(kata);

clrscr;

writeln('kata sebelum dibalik : ',kata);


writeln;

write('Kata setelah dibalik : ');

for i:= 1 to length(kata) do

push(t, kata[i]);

for i:= 1 to length(kata) do

write(pop(t)); writeln;

writeln;

writeln;

writeln ( 'Mau Coba lagi ??? [Y / T] ');readln (ulang);

writeln;

clrscr;

until (ulang = 'T')OR (ulang = 't');

writeln;

readln;

clrscr;

end.
BAB V

Senarai Berantai (Linked List)

Contoh program

Program Senarai_Berantai;

uses crt;

const garis ='---------------------------------------';

pesan ='Senarai Berantai Masih Kosong';

type simpul = ^data;

data = record

nama : string;

alamat : string;

berikut : simpul;

end;

var

awal,akhir : simpul;

pilih : char;

cacah : integer;

function MENU : char;

var P : char;

begin

clrscr;

gotoxy(30,3); write('DAFTAR MENU PILIHAN');

gotoxy(20,8); write('A. MENAMBAH SIMPUL BARU DI AWAL SENARAI');

gotoxy(20,9); write('B. MENAMBAH SIMPUL BARU DI TENGAH SENARAI');

gotoxy(20,10); write('C. MENAMBAH SIMPUL BARU DI AKHIR SENARAI');

gotoxy(20,11); write('D. MENGHAPUS SIMPUL PERTAMA');

gotoxy(20,12); write('E. MENGHAPUS SIMPUL DI TENGAH');

gotoxy(20,13); write('F. MENGHAPUS SIMPUL TERAKHIR');

gotoxy(20,14); write('G. MENCETAK ISI SENARAI');

gotoxy(20,15); write('H. SELESAI');

repeat

gotoxy(48,20); write('':10);

gotoxy(30,20); write('Pilih salah satu: ');


P := upcase(readkey);

until P in ['A'..'H'];

MENU := P;

end;

function SIMPUL_BARU : simpul;

var B : simpul;

begin

new(B);

with B^ do

begin

write('Nama : '); readln(nama);

write('Alamat: '); readln(alamat);

berikut := nil;

end;

SIMPUL_BARU := B;

end;

procedure TAMBAH_AWAL (N : integer);

var

baru : simpul;

begin

if N <> 0 then

begin

writeln('MENAMBAH SIMPUL BARU DI AWAL SENARAI BERANTAI');

writeln(copy(garis,1,45));

end;

writeln;

baru := SIMPUL_BARU;

if awal=nil then

akhir:= baru

else

baru^.berikut := awal;

awal := baru;

end;

procedure TAMBAH_AKHIR (N : integer);

var

baru : simpul;
begin

if N <> 0 then

begin

writeln('MENAMBAH SIMPUL BARU DI AKHIR SENARAI BERANTAI');

writeln(copy(garis,1,46));

end;

writeln;

baru := SIMPUL_BARU;

if awal=nil then

awal := baru

else

akhir^.berikut := baru;

akhir := baru;

end;

procedure TAMBAH_TENGAH;

var baru,bantu : simpul;

posisi,i : integer;

begin

writeln('MENAMBAH SIMPUL BARU DI TENGAH SENARAI BERANTAI');

writeln(garis); writeln;

writeln('SENARAI BERANTAI BERISI:',cacah:2,' SIMPUL');

repeat

gotoxy(52,5); write(' ');

gotoxy(1,5); write('SIMPUL BARU AKAN DITEMPATKAN SEBAGAI SIMPUL NOMOR: ');

readln(posisi)

until posisi in [1..cacah+1];

if posisi=1 then TAMBAH_AWAL(0)

else if posisi=cacah+1 then TAMBAH_AKHIR(0)

else

begin

writeln;

baru := SIMPUL_BARU;

bantu:= awal;

for i:=1 to posisi-2 do

bantu := bantu^.berikut;

baru^.berikut := bantu^.berikut;
bantu^.berikut := baru;

end;

end;

procedure HAPUS_PERTAMA;

begin

if awal <> nil then

begin

awal := awal^.berikut;

writeln('SIMPUL PERTAMA TELAH TERHAPUS');

end

else

writeln(pesan);

writeln; writeln('TEKAN <RETURN> UNTUK KEMBALI KE MENU UTAMA');

repeat until keypressed

end;

procedure HAPUS_TERAKHIR;

var bantu : simpul;

H : integer;

begin

if awal=nil then

begin

writeln(pesan);

H := 0;

end

else if awal=akhir then

begin

awal := nil;

akhir:= nil;

H := 1;

end

else

begin

bantu := awal;

while bantu^.berikut <> akhir do

bantu := bantu^.berikut;

akhir := bantu;
akhir^.berikut := nil;

H := 1;

end;

if H=1 then

writeln('SIMPUL TERAKHIR TELAH TERHAPUS'); writeln;

writeln('TEKAN <RETURN> UNTUK KEMBALI KE MENU UTAMA');

repeat until keypressed

end;

procedure HAPUS_TENGAH;

var posisi,i : integer;

bantu,bantu1 : simpul;

begin

if cacah=0 then

begin

writeln(pesan); writeln;

writeln('TEKAN <RETURN> UNTUK KEMBALI KE MENU UTAMA');

repeat until keypressed

end

else

begin

writeln('MENGHAPUS SIMPUL YANG ADA DI TENGAH');

writeln(copy(garis,1,35)); writeln;

writeln('SENARAI BERANTAI SEKARANG BERISI :',cacah:2,' SIMPUL');

repeat

gotoxy(37,5); write('':5);

gotoxy(1,5); write('Akan menghapus simpul nomor berapa: ');

readln(posisi);

until posisi in [1..cacah];

if posisi=1 then HAPUS_PERTAMA

else if posisi=cacah then HAPUS_TERAKHIR

else

begin

bantu := awal;

for i:=1 to posisi-2 do

bantu:= bantu^.berikut;

bantu1 := bantu^.berikut;
bantu^.berikut := bantu1^.berikut;

bantu1^.berikut := nil;

dispose(bantu1);

end;

end;

end;

procedure BACA_SENARAI;

var bantu : simpul;

i : integer;

begin

i := 1;

writeln('MEMBACA ISI SENARAI BERANTAI');

writeln('TEKAN <RETURN> UNTUK KEMBALI KE MENU UTAMA');

writeln(copy(garis,1,42)); writeln;

bantu := awal;

if bantu=nil then

writeln(pesan)

else

while bantu <> nil do

begin

writeln('Simpul: ',i:2,'---> Nama : ',bantu^.nama);

writeln('':15,'Alamat: ',bantu^.alamat);

bantu := bantu^.berikut;

inc(i);

end;

repeat until keypressed

end;

{PROGRAM UTAMA}

begin

cacah := 0;

awal := nil;

akhir := nil;

repeat

pilih := MENU;

clrscr;

case pilih of
'A' : TAMBAH_AWAL(1);

'B' : TAMBAH_TENGAH;

'C' : TAMBAH_AKHIR(1);

'D' : HAPUS_PERTAMA;

'E' : HAPUS_TENGAH;

'F' : HAPUS_TERAKHIR;

'G' : BACA_SENARAI;

end;

if pilih in ['A','B','C'] then inc(cacah)

else if (pilih in ['D','E','F']) and (cacah <> 0) then

dec(cacah)

until pilih='H'

end.
TUGAS

Buatlah program senarai berantai dengan operasi menghapus simpul tengah


BAB VI

Senarai Berantai Sebagai Tumpukkan

Program Hitung_Ungkapan_Postfix;

Uses crt;

Const Max=80;

Operand =['0'..'9'];

Operator =['*','/','+','-','^'];

Type kalimat =string[Max];

tumpukan =^Elemen;

elemen =record

Huruf :char;

Angka :real;

Berikut :Tumpukan;

End;

Var Infix, Postfix : Kalimat;

Salah : Boolean;

Kode, Cacah,I : integer;

Lagi : char;

Hitungan : real;

Function CEK_NOTASI (Inf:Kalimat) : Boolean;

Var I,N,C_Buka,C_Tutup : integer;

Kar_Sah : set of char;

Salah : Boolean;

I1,I2 : char;

Begin

Salah:=false;

N:=length(inf);

if N<=2 then

Salah:=true

Else if (Inf[I]=')') or (Inf[N]='(') then

Salah:=true

Else

Begin
Kar_Sah:=operand+operator+['(',')'];

C_Buka:=0; C_Tutup:=0;

For I:=1 to N-1 do

Begin

I1:=Inf[I] ;I2:=Inf[I+1];

If ((I1 in operand) and (I2 in operand))

Or ((I1 in operator) and (I2 in operator))

Or ((I1=')') and (I2 in operand))

Or ((I1='(') and (I2=')'))

Or ((I1 in operand) and (I2='('))

Or ((I1=')') and (I2 in operand)) then

Begin

Salah:=true;

I:=N-1;

End

End;

If not salah then

Begin

For I:=1 to N do

If Inf[I] in Kar_Sah then

Case Inf[1] of

')':C_Tutup:=succ(C_Tutup);

')':C_Buka:=succ(C_Buka);

End

Else

Begin

Salah:=true;

I:=N

End;

If not salah then

If C_Tutup>C_BUka then

Salah:=true

Else if C_Tutup<C_Buka then


Salah:=true

End

End;

CEK_NOTASI:=Salah

End;

Procedure PUSH (Var T:Tumpukan; Hrf:char; digit:real);

var Baru:Tumpukan;

Begin

New(Baru);

Baru^.Huruf:=Hrf;

baru^.Angka:=Digit;

if T=nil then

Begin

T:=Baru;

T^.Berikut:=nil

End

Else

Begin

Baru^.Berikut:=T;

T:=Baru

End

End;

Procedure POP (var T:Tumpukan;var Hrf:char;var digit:real);

var bantu : Tumpukan;

Begin

Bantu:=T;

Hrf:=T^.Huruf;

Digit:=T^.Angka;

T:=T^.Berikut;

Dispose (Bantu)

End;

Procedure INFIX_KE_POSTFIX (infix:Kalimat; var postfix:Kalimat; Var J:integer);

Var I : integer;

Tanda,Operand : set of char;

Temp, Kar : char;


T : Tumpukan;

Buram : real;

Function VALENSI (Tanda_Op:char) : integer;

Begin

Case Tanda_Op of

'^' : VALENSI:=3;

'*','/' : VALENSI:=2;

'+','-' : VALENSI:=1;

'(' : VALENSI:=0;

End

End;

Procedure OPER;

Begin

POP (T,Temp,Buram);

J:=J+1;

Write (Temp:2);

Postfix[J]:=Temp

End;

Begin

T:=nil;

For I:=1 to length(infix) do

Begin

Kar:=Infix[I];

If Kar='(' then

PUSH (T,Kar,0)

Else if Kar=')' then

Begin

while T^.Huruf<>'(' do OPER;

POP (T,Temp,Buram)

End

Else if Kar in operator then

begin

While (T<>nil) and (VALENSI (kar)<= VALENSI (T^.huruf)) do

OPER;
PUSH (T,Kar,0)

End

Else

Begin

J:=J+1;

Write (kar:2);

Postfix[J]:=Kar

End

End;

if T<>nil then

Repeat

OPER

Until T=nil;

End;

Procedure HITUNG_UNGKAPAN (Cacah:integer; Var Postfix:kalimat; Var hitungan:real; Var


nol:Boolean);

Var Awal : Tumpukan;

Temp, Kar : char;

Satu, Dua : real;

Kode, Kode1, I : integer;

Hsl : real;

Procedure HASIL (op:char; satu,dua:real; Var nol:Boolean; var Hsl:real);

Begin

Nol:=false;

Case op of

'*' : hsl:= satu*dua;

'/' : if dua<>0 then hsl:=satu/dua

Else nol:=true;

'+' : hsl:= satu+dua;

'-' : hsl:= satu-dua;

'^' : hsl:= exp (dua * ln (satu))

End

End;
Begin

For I:=1 to cacah do

begin

Kar:=postfix [I];

if kar in operator then

Begin

POP (awal,temp,dua);

POP (awal,temp,satu);

HASIL (Kar,satu,dua,nol,hsl);

if nol then I:=cacah

Else PUSH (awal,' ',hsl)

End

ELse

Begin

Val (Kar,Kode,kode1);

PUSH (Awal,' ',Kode)

End

End;

If not nol then

Begin

POP (awal,temp,satu);

Hitungan:=Satu

End

End;

Begin

Repeat

Clrscr;

Writeln(' MENGHITUNG NILAI UNGKAPAN POSTFIX ');

Write (' ( OPERAND HARUS BERUPA ANGKA ');

Writeln ('DAN HARUS TERDIRI DARI 1 DIGIT )');

Write ('--------------------------------');

Writeln ('-----------------------------------');

Writeln;

Write('Isikan sembarang notasi infix:');

Readln (infix);writeln;
if CEK_NOTASI (infix) then

Writeln('Notasi di atas adalah SALAH.')

Else

Begin

Writeln('Notasi di atas sudah BENAR.');

Write ('Notasi POSTFIX nya:');

Cacah:=0;

INFIX_KE_POSTFIX (infix,postfix,cacah);

Writeln;writeln;

HITUNG_UNGKAPAN (Cacah,postfix,hitungan,salah);

if salah then

begin

Write('Pembagian dengan nol');

Writeln('hasil tak terdefinisi')

End

Else

begin

Write ('Hail perhitungan:');

Writeln(Hitungan:0:0)

End;

End;

Writeln;

Write ('Akan coba lagi (Y/T):'); readln(lagi);

Until not (Lagi in ['Y','y'])

End.
BAB VII

Antrian (Queue)
Contoh program

program Ilustrasi_Antrian;

uses crt;

const max_elemen=10;

type Antri=Array [1..Max_Elemen] of char;

Var Antrian : Antri;

Depan,Belakang,Pilih : Integer;

Elemen : Char;

Procedure KOTAK;

Var I:integer;
Begin

Gotoxy (20,15);

For I := 1 to Max_Elemen * 4+1 do write ('-');

Gotoxy (20,16);

For I:= 1 to Max_Elemen do write ('| ');

writeln ('| ');Gotoxy (20,17);

For I := 1 to Max_Elemen * 4-1 do write ('-');

Gotoxy (8,16);write('<-- Keluar');

Gotoxy (22 + Max_Elemen*4+1,16);

Writeln('<-- Masuk');

End;

Procedure LETAKKAN (X:Char; R:integer);

Begin

Gotoxy(18+4*R,16);

Write(X);

End;

Function KOSONG (Q:Antri):Boolean;

Begin

Kosong:=(depan=belakang)

End;

Procedure TAMBAH (var Antrian:antri; X:char);

Begin

If Belakang=Max_Elemen then Belakang:=0

Else Belakang:=Belakang+1;

if not (Kosong(Antrian)) then

Begin

Antrian[Belakang]:=X;

LETAKKAN(X,Belakang)

End

else

Begin

Gotoxy(40,9);
Write('Antrian Sudah Penuh');

Repeat

Until keypressed;

Gotoxy(40,9);

write(' ':30); Belakang:=Belakang-1;

If Belakang=0 then

Belakang:=Max_Elemen

End

End;

Function HAPUS (var Antrian:antri):char;

Begin

If Depan=Max_Elemen then

Depan:=1

Else

Begin

Depan:=Depan+1;

Hapus:=Antrian[Depan]

End

End;

Begin

Clrscr;

KOTAK;

Depan:=0; Belakang:=0;

Repeat

For Pilih:=5 to 9 do

Begin

Gotoxy(40,Pilih); write(' ':39);

End;

Gotoxy(1,1);

Writeln('Daftar Menu Pilihan');

Writeln('-------------------');

Writeln;

Writeln('1.Menambah Elemen Baru');

Writeln('2.Menghapus Elemen');
Writeln('3.Selesai');

Writeln;Writeln;

Writeln ('Pilih Salah Satu :');

repeat

Gotoxy(22,9); writeln(' ');

gotoxy(22,9); readln(pilih)

until (pilih>=1) and (pilih<=3);

case pilih of

1:begin

Gotoxy (40,5);

Writeln('Menambah Elemen');

Gotoxy (40,6);

Writeln('-----------------------');

Gotoxy (40,8);

Write('Isikan Elemennya : ');

Readln (Elemen);

TAMBAH (Antrian,Elemen);

End;

2:begin

If not (KOSONG(Antrian)) then

Begin

Elemen:=HAPUS(Antrian);

LETAKKAN(' ',Depan)

End

Else

Begin

Gotoxy (30,9);

Writeln('Antrian Kosong...');

Elemen:=readkey;

Gotoxy (30,9); write(' ':30)

End

End

End;

Until Pilih=3

End.
TUGAS

*Buatlah Program untuk simulasi tempat parkir dengan memanfaatkan struktur antrian.

Program Parkiran;

Uses Crt;

Const Loket = 55;

Kanan = 75;

UpBound = 5;

LowBound = 1;

Type Orang = Object

Badan : Array[1..3] Of String[6];

X,Y,Mentok : Byte;

Procedure init;

Procedure gerak;

End;

Antrian = object

Queue : Array[LowBound..UpBound] Of Orang;

Noel : integer;

Procedure Input(Var Out : Char);


Procedure Create;

Procedure insertion;

Procedure deletion;

Procedure doproses;

End;

Procedure Orang.Init;

Begin

X := 1; Y := 20; Mentok := Loket;

Badan[1] := (' ');

Badan[2] := (' <[MB] ');

End;

Procedure Orang.Gerak;

Begin

repeat

GotoXY(X,Y); Write(Badan[1]);

GotoXY(X,Y+1); Write(Badan[2]);

GotoXY(X,Y+2); Write(Badan[3]);

Inc(X); GotoXY(16,6); Delay(20);

If X = 75 Then

Begin

GotoXY(X,Y); Clreol;

GotoXY(X,Y+1); Clreol;

Delay(20);

End;

Until X = Mentok;

End;

Procedure Antrian.input;

Var Pil : char;

Begin

GotoXY(1,2); Write('1. Enqueue');

GotoXY(1,3); Write('2. Dequeue');

GotoXY(1,4); Write('3. Quit');


GotoXY(1,5); Write('PILIHAN [1..3] ? ');

Pil := Readkey; Write(Pil); Out := Pil;

End;

Procedure Antrian.create;begin

GotoXY(1,19);
Write('________________________________________________________________________________ ');

GotoXY(1,18); Write('<-------------------------Jalur Masuk (Jalur A)<-------------------------------- ');

GotoXY(1,22);
Write('________________________________________________________________________________ ');

GotoXY(1,26); Write('------------------------>Jalur Keluar (Jalur B)--------------------------------> ');

GotoXY(1,27);
Write('________________________________________________________________________________ ');

GotoXY(1,30);
Write('________________________________________________________________________________ ');

End;

Procedure Antrian.Insertion;

Begin

If Noel >= upbound Then

Begin

GotoXY(3,21);

Write('Parkiran Sudah Penuh'); readln;

gotoxy(3,21);

write(' ');

Noel := UpBound;

End

Else

Begin

Inc(Noel); Queue[Noel].Init;

Queue[Noel].Mentok := (Loket - Noel * 5) + 5;

Queue[Noel].Gerak;

End;

End;

Procedure Antrian.Deletion;
Var I : integer;

Front : Orang;

Begin

If Noel < lowbound Then

Begin

GotoXY(59,21);

Write('Mobil Sudah Tidak ada');

End

Else

Begin

Dec(Noel);

GotoXY(55,21); Write(' ');

GotoXY(35,29); Write(' [MB]> ');

readln;

GotoXY(35,29); clreol;

Front := Queue[1];

Front.Mentok := 75;

Front.X := 72;

Front.Gerak;

For I := 1 To Noel Do Queue[I].X := Queue[I+1].X;

For I := 1 To Noel Do Queue[I].Gerak;

End;

End;

Procedure Antrian.DoProses;

Var Menu : char;

Begin

create;

Noel := 0;

Repeat

Textcolor(15); Input(Menu);

GotoXY(1,23); Clreol;

Case Menu Of

'1' : Insertion;
'2' : Deletion;

End;

until Menu = '3';

End;

{* PROGRAM UTAMA *}

Var Queue : Antrian;

Begin

Clrscr;

queue.doproses;

End.

Mobil Masuk

Mobil sudah keluar


BAB VIII

Pengurutan (Sorting)
Contoh Program

program sorting;

uses crt;

type LARIK=array[1..100] of real;

var

VEKTOR:LARIK;

CACAH, I, BANTU : INTEGER;

PROCEDURE SORT_SELEKSI(VAR X:LARIK; N:INTEGER);

VAR I, J, LOKASI : INTEGER;

BANTU : REAL;

BEGIN

FOR I:= 1 TO N-1 DO

BEGIN

LOKASI:=I;

FOR J:= I + 1 TO N DO

IF X [LOKASI]>X[J] THEN

LOKASI:=J;

BANTU:=X[I];

X [I]:=X[LOKASI];

X [LOKASI] :=BANTU
END

END.

PROCEDURE CETAK_LARIK (X:LARIK; N:INTEGER);

VAR I:INTEGER;

BEGIN

FOR I:=1 TO N DO

BEGIN

WRITE (X[I]:8:2);

IF 1 MOD 8=0 THEN

WRITELN

END

END;

BEGIN

CLRSCR;

WRITELN ('MENSORTING BILANGAN'); WRITELN;

WRITE ('CACAH DATA : '); READLN (CACAH); WRITELN;

WRITELN ('MASUKAN DATANYA 10 DATA BERBARIS');

BANTU:=1;

FOR I:=1 TO CACAH DO

BEGIN

READ(VEKTOR[I]);

WRITE(' ');

IF I=BANTU*10 THEN

BEGIN

BANTU:=BANTU + 1;

WRITELN

END

END;

WRITELN ('MENSORTIR BILANGAN DENGAN METODE SELEKSI');

WRITELN ('-----------------------------------------');

WRITELN;

WRITELN ('DATA SEBELUM DISORTIR (DIBACA PERBARIS)');

WRITELN;

CETAK_LARIK (VEKTOR, CACAH);

WRITELN; WRITELN;

SORT_SELEKSI (VEKTOR, CACAH);


WRITELN ('DATA SETELAH DISORTIR (DIBACA PERBARIS)');

WRITELN;

CETAK_LARIK (VEKTOR, CACAH);

END;

Tugas1

*Buatlah program untuk mengurutkan data dngan menggunakan metode bubble.

program bubble_sort;

uses crt;

type

data=array [1..100] of integer;

var

i,n:integer;

a:data;

procedure tukar(var a,b:integer);

var c:integer;

begin

c:=a;

a:=b;

b:=c;

end;

procedure tampil(a:data);

var i:integer;

begin

for i:=1 to n do

write (a[i]:5);

writeln;

end;

procedure buble(var a:data);

var i,j:integer;
begin

for i:=1 to n-1 do

begin

writeln ('langkah ',i,'');

tampil(a);

for j:=n downto i+1 do

begin

if (a[j]<a[j-1]) then tukar (a[j],a[j-1]);

tampil(a);

end;

end;

end;

begin

clrscr;

write (' input banyak bilangan ='); readln(n);

for i:=1 to n do

begin

write (' data ke',i,' ='); readln(a[i]);

end;

writeln;

writeln ('data sebelum diurutkan');

tampil(a);

writeln;

writeln;

buble(a);

writeln ('data sesudah diurutkan');

tampil(a);

writeln;

readln;

end.
Tugas2

*Buatlah program untuk mengurutkan data dengan menggunakan metode insertion sort

program insertion_sort;

uses wincrt;

var

jmldata,i,j:integer;

data,x:array[1..100] of integer;

procedure asc_insert;

var temp:integer;

begin

for i:=2 to jmldata do

begin

temp:=data[i];

j:=i-1;

while (data[j]>temp)and(j>0)do

begin

data[j+1]:=data[j];

dec(j);

end;

data[j+1]:=temp;

end;
writeln('urutan datanya adalah : ');

for i:=1 to jmldata do

begin

write(data[i],' ');

end;

readln;

end;

begin

clrscr;

write('masukan berapa angka yang akan di urut : ');

readln(jmldata);

for i:=1 to jmldata do

begin

write('masukan angka ke-',i,':');

readln(data[i]);

end;

asc_insert;

readln;

end.
BAB XII

SEARCHING
Contoh program

PROGRAM MENCARI_DATA

USES CRT;

type angka= array[1..100] of integer;

var

indeks,cari,n, jumlah :integer;

data:angka;

procedure Input(var n:integer);

var i:integer;

begin

for i := 1 to n do

begin

write ('Data ke- ',i,' = ');

readln (data[i]);

end;

end;

Procedure CariBiner(Var n,Posisi : Integer; Var Elemen : integer);

Var Atas, Bawah, Tengah:integer; ada:boolean;


Begin

Ada:=False;

Atas:=n;

Bawah:=1;

While Atas >= Bawah Do

Begin

Tengah := (Atas + Bawah) Div 2;

If Elemen < data[Tengah] Then

Atas:=Tengah - 1

Else If Elemen > data[Tengah] Then

Bawah := Tengah + 1

Else

Begin

Ada:=True;

Posisi:=Tengah;

Bawah := Atas + 1;

End;

End;

If Ada then writeln('Data ditemukan, pada indeks ke ',posisi)

else writeln('Maaf. data tidak ditemukan!');

End;

Begin

clrscr;

write('Masukkan jumlah data = ');

readln(n);

Input(n);

write('Masukkan nilai yang ingin dicari = ');

readln(cari);

CariBiner(n,indeks,cari);

readln;

end.
TUGAS

uses wincrt;

Var

arr : array [1..100] of integer;

i,j,temp, kiri,tengah,kanan,cari,x :integer;

ketemu :boolean;

Begin

write('Masukkan Banyak bilangan : ');readln(x);

for i:=1 to x do

begin

write('Masukkan data : ');readln(arr[i]);

end;

write('Data sebelum diurutkan : ');

for i := 1 to x do

begin

write(arr[i],' ');

end;

for i:=1 to x do

for j:=x-1 downto i do

begin

if (arr[i]>arr[j+1]) then

begin

temp:=arr[i];

arr[i]:=arr[j+1];

arr[j+1]:=temp;

end;

end;
writeln;

write('Data setelah diurutkan : ');

for i:=1 to x do

begin

write(arr[i], ' ');

end;

writeln;

write('Masukan data yang dicari : ');

readln(cari);

kiri:=arr[x];

kanan:=1;

ketemu:=false;

while not(ketemu) do

begin

tengah:=(kiri + kanan) div 2;

If arr[tengah]=cari then

begin

ketemu:=true;

writeln('Data yang anda cari berada pada posisi ke -',tengah);

end

else if (cari < arr[tengah]) then

kiri := tengah - 1

else

kanan:= tengah+1;

if (kanan > kiri) then

begin

ketemu:=true;

writeln('Data yang Anda cari tidak ada !');

end;

end;

readln;

end.

Anda mungkin juga menyukai