Anda di halaman 1dari 21

MODUL 1

REKURSI

A. TUJUAN
1. Agar mahasiswa dapat mengetahui apa yang dimaksud dengan rekursi
2. Agar mahasiswa dapat mengetahui proses terjadinya rekursi, dimana kelebihan dari rekursi
adalah dapat memanggil dirinya sendiri.

B. PERALATAN
1. Komputer
2. Kertas HVS kosong
3. Alat tulis menulis
4. Buku Struktur data menggunakan Turbo Pascal

C. LANDASAN TEORI
Rekursi adalah suatu proses yang bisa memanggil diriya sendiri. Dalam rekursi sebenarnya
terkandung pengertian prosedur atau fungsi. Perbedaannya adalah rekursi bisa memanggil
dirinya sendiri, terapi peosedur atau fungsi harus dipanggil lewat pemanggil prosedur atau
fungsi. Rekursi merupakan teknik pemograman yang penting, dan beberapa bahasa
pemograman modern mendukung keberadaan proses rekursi ini. Dalam prosedur atau fungsi,
pemanggilan ke dirinya sendiri bisa berarti proses berulang yang tidak bisa diketahui kapan akan
berakhir. Dalam pemakaian sehari-hari, rekursi merupakan teknik pemograman yang
berdayaguna untuk digunakan pada pekerjaan pemograman dengan mengekspresikannya ke
dalam suku-suku dari program lain dengan menambalkan langkah-langkah sejenis.

D. TUGAS PENDAHULUAN
1. Susunlah algoritma dari cuplikan program di bawah ini, sehingga embentuk proses rekursi
2. Ketiklah cuplikan program di bawah ini untuk menyajikan dari proses rekursi yang akan
disajikan yaitu dalam bentuk menyusun semua permutasi yang mungkin dari sekelompok
karakter. Yaitu dimana kita mempunyai 3 buah karakter A, B, dan C, maka semua permutasi
yang mungkin dari ketiga karakter ini adalah

A B C B A C C A B
A C B B C A C B A
Secara umum, banyaknya permutasi dari N buah karakter adalah N faktorial. Dan di dalam
contoh di atas N=3, sehingga banyaknya permutasi adalah 3! = 6
Proses penyusunan permutasinya bisa dijelaskan sebagai berikut:
 Cetak elemen ke 1 dan cetak permutasi elemen ke 2 sampai ke N (permutasi
dengan N-1 elemen)
 Cetak elemen kedua dan cetak permutasi elemn ke-1, elemen ke 3 sampai ke N
(permutasi dengan N-1 elemen)
 Cetak elemen ke 3 dan cetak permutasi elemen ke 1, elemen ke 2, elemen ke 4
sampai ke N (permutasi dengan N-1 elemen)
 Dan seterusnya sampai langkah terakhir adalah cetak ke N, elemen permutasi
elemen ke 1 sampai elemen ke (N-1) (permutasi dengan N-1 elemen)

Proses di atas diulang terus sampai dicetak permutasi dengan 1 elemen dimana N=3, maka
caranya adalah:
 Cetak ‘A’, dan cetak permutasi (‘B’,’C’);
 Cetak ‘B’, dan cetak permutasi (‘A’,’C’);
 Cetak ‘C’, dan cetak permutasi (‘A’,’B’);

1
Dan program selengkapnya adalah di bawah ini

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 penyusunan permutasi}


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('Permutasike',B:2,':');
for I:= 1 to N do
write(A[I]:3);
writeln;
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;

{Program Utama}
begin
repeat
clrscr;
write('Banyak Karakter yang akan ');
write('Dipermutasikan:');
repeat
gotoxy(47,1);write(' ');
gotoxy(47,1);readln(C_Elemen)
until C_Elemen <=max;

{Menyusun Karakter yang akan dipermutasikan}


for I:=1 to C_Elemen do
A[I]:=chr(I+64);
clrscr;
write('Menyusun Permutasi Untuk');
writeln(C_Elemen:2,' Karakter');
writeln('=====================================');
writeln;

{Proses Mencari Permutasi}


C_Permutasi:=0;
Permutasi(C_Permutasi,A,1,C_Elemen);

{Mencetak Hasil}

2
writeln;
writeln('Banyak Permutasi :',C_Permutasi:3);
writeln;
write('Akan coba Lagi ?(Y/T): ');readln(lagi)
until not (Lagi in ['Y','y'])
end.

E. TUGAS AKHIR PRAKTIKUM


1. Bagaimana hasil print out / running program rekursi dari cuplikan program di atas
2. Bagaimana cara kerja prosedur rekursi dari program susun permutasi tersebut.

3
MODUL 2
TUMPUKAN

A. TUJUAN
1. Agar mahasiswa dapat mengetahui apa yang dimaksud dengan tumpukan.
2. Agar mahasiswa dapat mengetahui sistematika tumpukan atau stack.

B. PERALATAN
1. 1 personal komputer (PC)
2. Kertas HVS kosong
3. Alat tulis menulis
4. Buku struktur data menggunakan Turbo Pascal

C. LANDASAN TEORI
Tumpukan secara sederhana, tumpukan bisa diartikan sebagai kumpulan data yang seolah-olah
data diletakkan di atas data yang lain. Satu hal yang perlu diingat adalah bahwa kita bisa
menambah (menyisipkan data), dan mengambil (menghapus)data lewat ujung yang sama, yang
disebut sebagai ujung atas tumpukan.

PUSH adalah salah satu operasi yang dapat dilakukan pada data berbentuk tumpukan atau stack.
Tumpukan atau stack adalah operasi penyisipan atau penambahan data pada ujung stack,
operasi ini disebut dengan PUSH

POP adalah untuk mengeluarkan data pada suatu tumpukan atau stack. Operasi pengambilan
data atau penghapusan data sari stack disebut dengan POP

ARRAY dapat didefinisikan sebagai suatu himpunan hingga elemen terurut dan homogen.

TERURUT dapat diartikan bahwa elemen tersebut dapat teridentifikasikan sebagai elemen
pertama, kedua dan seterusnya hingga elemen ke n.

HOMOGEN bahwa setiap elemen dari sebuah arrau tentulah harus mempunyai tipe data yang
sama.

D. TUGAS PENDAHULUAN
1. Susunlah algoritma dati cuplikan program di bawah ini.
2. Buatlah cuplikan program dbawah ini untuk membalikkan kalimat.

Program Balik_Kalimat;
uses crt;
Const MaxElemen = 100; {Batas Maksimum Karakter}
Type S100 = String [MaxElemen];
Tumpukan = record
Isi : S100;
Atas : 0..MaxElemen
end;
var T : Tumpukan; {Nama Tumpukan}
I : Integer; {Pencacah}
Kalimat : S100;

{*******************************
Procedure inisialisasi tumpukan
********************************}
Procedure Awalan (var T : Tumpukan);
Begin
T.Atas :=0
end; { Procedure Awalan }

4
{************************************************
Procedure untuk memasukan MaxElemen ke dalam
tumpukan. Dalam hal ini Cacah karakter maksimum
tidak boleh lebih dari 100
************************************************}
Procedure PUSH (var T : Tumpukan; X:char);
begin
T.Atas:= T.Atas + 1;
T.isi[t.atas]:= x;
end; {Procedure PUSH}

{Fungsi untuk mengambil MaxElemen dari tumpukan}


Function POP (var T:Tumpukan) : char;
begin
POP := T.Isi[T.Atas];
T.Atas := T.Atas-1
end; {fungsi POP}

{Program Utama}
begin
clrscr;
Awalan(T);
writeln('Tumpukan Untuk Membalik Kalimat');
writeln('-------------------------------');
writeln;

{Kalimat yang dibalik}


write('Isikan Sembarang kalimat : ');
readln(Kalimat);

clrscr;
writeln('Kalimat Asli :'); writeln(Kalimat);
writeln('--------------');

writeln;writeln('Setelah di Balik :');


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

{MemPUSH kalimat dalam tumpukan}


for I:= 1 to length (Kalimat) do
PUSH (T,Kalimat[I]);

{MemPOP kalimat tumpukan}


for I:= 1 to length (Kalimat) do
write(POP(T));
writeln;
readln;
end. {Program Utama}

E. TUGAS AKHIR PRAKTIKUM


1. Bagaimana hasil print out / running program balik kalimat dari cuplikan program di atas itu.
2. Bagimana cara kerja prosedur PUSH pada program balik kalimat dari pcuplikan program di
atas tersebut
3. Bagaimana pula proses kerja fungsi POP pada program balik kalimat dari cuplikan program
kerja di atas tersebut.

5
MODUL 3
TIPE DATA POINTER

A. TUJUAN
1. Mahasiswa dapat mengetahui apa yang dimaksud dengan pointer
2. Mahasiswa dapat mengetahui sistematika dari cara kerja penggunaan pointer

B. PERALATAN
1. 1 Personal Komputer (PC)
2. Kertas HVS kosong
3. Alat tulis menulis
4. Buku struktur data dengan menggunakan Turbo Pascal

C. LANDASAN TEORI
Perubahan dinamis adalah suatu perubah yang akan dialokasikan hanya pada saat dikompilasi,
lokasi untuk perubah tersebut belum ditentukan.Kompiler hanya mencatat bahwa suatu
perubah akan diperlukan sebagai perubah dinamis.

Nama perubah yang kita gunakan untuk mewakili suatu nilai data sebenarnya merupakan atau
menunjukkan lokasi tertentu dala pengingat komputer di mana data yang diwakili oleh nama
perubah tersebut disimpan. Perubah-perubah yang demikina ini dinamakan dengan perubah
statis

Secara umum ada dua operasi dasar yang biasa kita lakukan menggunakan data yang bertipe
pointer. Operasi yang pertama adalah mengkopi pointer, sehingga sebuah simpul akan ditunjuk
oleh lebih dari sebuah pointer yang berbeda. Opersi yang kedua adalah mengkopi isi simpul
sehingga mempunyai dua atau lebih simpul yang ditunjuk oleh pointer yang berbeda yang
mempunyai isi yang sama. Syarat yang harus dipenuhi untuk kedua operasii ini adalah bahwa
pointer dioperasikan harus mempunyai deklarasi yang sama.

D. TUGAS PENDAHULUAN
1. Susunlah algoritma dari proses tipe data pointer
2. Sebutkan perbedaan dan persamaan dari peruba statis dan perubah dinamis.
3. Buatlah cuplikan dari program dibawah ini:

uses crt;
type p=^simpul;
simpul=record
info :integer;
Nama :string[20];
Alamat:string[20];
Ipk :real;
Next :p;
end;

var L,Temp :P;


N,I :integer;

begin
clrscr;
write('Masukan jumlah data : ');readln(n);
New(L);
I := N;
L^.info := n;
L^.next := nil;
while (n>0) do

6
begin
New(temp);
N := N - 1;
writeln;
write('Data ke ',(L^.info-N));writeln;
write('Nama Anda : ');readln(Temp^.nama);
write('Alamat : ');readln(Temp^.alamat);
write('I P K : ‘);readln(Temp^.ipk);
writeln;
temp^.next := l^.next;
l^.next := temp;
end;

writeln;
clrscr;
writeln('======================');
writeln('Data Yang anda masukan');
writeln('======================');
temp := L;
writeln('Banyak data : ',l^.info);writeln;
writeln('Data Tersebut adalah : ');
writeln;
temp := temp^.next;

repeat
writeln('Nama Anda : ',temp^.nama);
writeln('Alamat : ',temp^.alamat);
writeln('I p k : ',temp^.ipk:0:2);writeln;
temp := temp^.next
until temp = nil;

readln;
end.

E. TUGAS AKHIR PRAKTIKUM


1. Bagaimana proses kerja dari listing program telah dihasilkam
2. Bagaimana proses dari pengoperasian dengan operasi mengkopi pointer dan mengkopi isi
simpul. Jelaskan!

7
MODUl 4
ANTRIAN
( IMPLEMENTASI ANTRIAN DENGAN POINTER )

A. TUJUAN
1. Mahasiswa dapat mengetahui apa yang dimaksud dengan antrian
2. Mahasiswa dapat mengetahui sistematika antrian

B. PERALATAN
1. 1 personal komputer
2. Kertas HVS kosong
3. Alat tulis menulis
4. Buku struktur data menggunakana Turbo Pascal

C. LANDASAN TEORI
ANTRIAN adalah suatu kumpulan data yang mana penambahan elemen hanya bisa dilakukan
pada suatu ujung (yang disebut dengan sisi belakang atau hear), dan penghapusan(pengambilan
elemen dilakukan lewat ujung lain yang disebut dengan sisi depan)
Contohnya adalah mobil-mobil yang antri membeli karcis di pintu jalan tol yang akan
membentuk antrian

LIFO (Last In First Out) adalah model antrian dimana yang terakhir masuk adalah yang pertama
keluar.

FIFO (First In First Out) adalah model antrian dimana yang masuk pertama akan keluar pertama.

ANTRIAN BERPRIORITAS adalah setiap elemen yang akan masuk dalam antrian sudah ditentukan
lebih dahulu prioritasnya, dalam hal ini berlaku dua ketentuan, yaitu:
 Elemen-elemen yang mempunyai prioritas lebih tinggi akan diproses terlebih dahulu.
 Dua elemen yang mempunyai prioritas sama akan dikerjakan sesuai dengan urutan pada
saat kedua elemen ini masuk dalam antrian.

D. TUGAS PENDAHULUAN
1. Buatlah algoritma dari cuplikan program di bawah ini
2. Ketiklah cuplikan program di bawah ini dan perbaikilah program tersebut jika terdapat
kesalahan.

uses crt;
const max = 10;
type node =^queue;
queue = record
kar : char;
next : node;
end;
var pil : char;
jml : byte;
head,now,tail : node;

procedure Push (ch :char);


begin
new (now);
if head = nil then
head := now
else
tail^.next := now;
tail := now;
tail^.next := nil;

8
now^.kar := ch;
end;

Procedure Pop;
begin
now := head;
head := head^.next;
dispose(now);
end;

Procedure Enqueue;
Var i : byte; temp : char;
begin
gotoxy (1,6); ClrEol; write ('Masukan @ Karakter : ');
repeat
gotoxy (25,6); Clreol; temp := readkey; write (temp);
until temp <> '';
push (temp);
for i := 1 to 75 - Jml * 6 do
begin
gotoxy (i + 1,20); write (' 0');
gotoxy (i+1, 21); write (' =(',now^.kar,')=');
gotoxy (i + 3, 22); write ('/ \'); delay(10);
if i <> 25 - jml * 6 then
begin
gotoxy (i + 1, 20); write(' ');
gotoxy (i, 21); write (' ');
gotoxy (i + 1, 22); write (' ');
end;
end;
end;

Procedure Dequeue;
var i,byk : byte;
begin
now := head;
for i := 69 to 76 do
begin
gotoxy (i + 1, 20); write ('O');
gotoxy (i +3, 21); write ('=(',now^.kar,')=');
gotoxy (i + 3, 22); write ('/ \'); delay (10);
gotoxy (i + 1, 20); write (' ');
gotoxy (i , 21); write (' ');
gotoxy (i + 1, 22); write (' '); end;
byk := 0;
while Byk <> jml do
begin
inc (byk);
Now := now^.next;
for i := 69 - byk * 6 to 75 - byk * 6 do
begin
gotoxy (i + 1, 20); write (' O ');
gotoxy (i , 21); write ('=(',now^.kar,')=');
gotoxy (i + 1, 20); write ('/ \');delay (25);
if i <> 75 - byk * 6 then
begin
gotoxy (i + 1, 20); write (' ');
gotoxy (i , 21); write (' ');
gotoxy (i + 1, 22); write (' ');
end;
end;

9
end;
end;

Procedure Input;
begin
gotoxy (1,1); writeln ('1. Engueue ');
gotoxy (1,2); writeln ('2. Degueue ');
gotoxy (1,3); writeln ('3. Exit');
repeat
repeat
gotoxy (1,4);ClrEol; write ('Your Choice : ');
pil := readkey; write (Pil);;
until pil in ['1','2','3'];
case Pil of
'1' : begin
if jml < max then
begin
inc (Jml);
Enqueue;
end else
begin
gotoxy (1,8); write ('Antrian Penuh !');
delay (500);
gotoxy (1,8); ClrEol;
end;
end;
'2' : begin
if jml >= 1 then
begin
Dec (Jml);
Dequeue;
Pop;
end else
begin
gotoxy (1,8); write ('Antrian Kosong !');
delay (500);
gotoxy (1,8); ClrEol;
end;
end;
end;
Until Pil = '3';
end;

begin
Jml := 0;
Clrscr;
Input;
end.

E. TUGAS AKHIR PRAKTIKUM


1. Bagaimana hasil print out / running dari program antrian dengan menggunakan pointer
2. Bagaimana cara kerja dari antrian dengan menggunakan pointer dari hasil program yang
telah anda hasilkan
3. Bagaimana proses tambah antrian dengan menggunakan PUSH
4. Bagaimana proses ambil antrian dengan menggunakan POP

10
MODUL 5
POHON

A. TUJUAN
1. Mengetahui apa yang dimaksuud dengan pohon pada struktur data
2. Memahami cara kerja pohon dalam struktur data

B. PERALATAN
1. Personal komputer
2. Kertas HVS kosong
3. Alat tulis menulis
4. Buku struktur data menggunakan Turbo Pascal

C. LANDASAN TEORI
1. POHON
Pohon atau tree adalah salah satubentuk graph terhubung yang tidak mengandung sirkuit.
Karena merupakan graph terhubung maka pohon selalu terdapat path atau jalur yang
menghubungkan setiap duasimpul dalam pohon.
Secara sederhana bisa didefinisikan sebagai kumpulan elemen yang lain (yang disebut
simpul) terpecah menjadi sejumlah himpunan yang tidak terhubung satu dengan yang lain
yang disebut subpohon (subtree) atau juga disebut cabang. Jika kita melihat pada setiap
subpohon, maka setiap suubpohon inipun mempunyai akar dan subpohon masing-masing

2. POHON BINER
Pohon biner (binery tree) bisa didefinisikan sebagai suatu kumpulan simpul yang mugkin
kosong atau mempunyai akar dan dua subpohon yang saling terpisah yang disebut dengan
subpohon kiri (left subtree) dan subpohon kanan (right subtree)

3. MEMBUAT POHON BINER


Perlu diperhatikan suatu simpul dipasang sebagai cabang kiri dan kapan cabang kanan.
Cabang kiri dan cabang kanan ditentukan dengan cara simpul yang berinformasi yang
nilainya lebih besardari simpul ayah akan ditempatkan sebagai cabang kanan. Jika lebih
kecilakan ditempatkan sebagai cabang kiri.pohon dibuat dengan menggunakan senarai
berantai.

D. TUGAS PENDAHULUAN
1. Buatlah algoritma dari cuplikan program dibawah ini, yaitu untuk mendeklarasikan simpul
untuk membuat pohon biner.
2. Ketiklah cuplikan program dibawah ini.

Program Binary_tree;
uses crt;
type
ptr =^pohon;
pohon = record
isi : byte;
left, right : ptr;
end;
var
root, now : ptr;
x,y,cari : byte;

Procedure Push (var Tree : Ptr; data, level : byte);


var Now : ptr;
begin
if tree = nil then
begin
new(now);

11
now^.isi := data;
now^.left := nil;
now^.right := nil;
Tree := now;
end else
if data < Tree^.isi then
Push (Tree^.left, data, level)
else
if data >= Tree^.isi then
Push (Tree^.right, data, level);
end;

Procedure Input (var Tree:Ptr; Nilai, Selisih, Level : byte);


var x : byte;
begin
if (level < 6 ) then
begin
Push (Tree, Nilai, Level);
Input (Tree^.left, Nilai-Selisih, Selisih div 2,
Level+1);
Input (Tree^.right, Nilai+Selisih, Selisih div 2,
Level+1);
end;
end;

Procedure Show (var Tree:Ptr; x,y,sel : byte);


var i : byte;
begin
gotoxy (x,y); write (Tree^.isi);
if (Tree^.left <> nil) or (Tree^.right <> nil) then
begin
gotoxy(x - sel, y+1); write ('|-');
gotoxy(x + sel, y+1); write ('-|');
for i := (x - sel)+1 to (x + sel)-1 do
begin
gotoxy (i,y+1); write('-');
end;
gotoxy (x,y+1); write('-|-');
end;
inc (y,2);
if Tree^.left <> nil then {membuat tampilan anak kiri}
show (Tree^.left, x-sel, y, sel div 2);
if Tree^.right <> nil then {membuat tampilan anak kanan}
show (Tree^.right, x+sel, y, sel div 2);
end;

Procedure Search (var Tree : Ptr; x,y,Selisih,Cari:byte);


{mencari data}
begin
inc (y,2);
if cari < Tree^.isi then
begin
if Tree^.left <> nil then {mencari ke anak kiri}
search (Tree^.left, x-selisih, y, selisih div 2,cari)
end else
if cari > Tree^.isi then
begin
if Tree^.right <> nil then {mencari ke anak kanan}
search (Tree^.right, x+selisih, y, selisih div 2,cari)
end else
if cari = Tree^.isi then

12
begin
dec(y,2);
gotoxy (x,y);textcolor(10); write(cari); Readkey;
gotoxy (x,y);textcolor(15); write(cari);
end;

{menampilkan tidak ditemukannya hasil search}


if ((Tree^.left=nil) or (Tree^.right=nil)) and
(cari <> Tree^.isi) then
begin
gotoxy (2,2); write('Data Tidak Ada'); Readkey;
gotoxy (2,2); ClrEol;
end;
end;
Procedure CursorOff; assembler; {mematikan kursor}
asm {sifatnya optional / tidak wajib}
mov ah,1
mov cx, 0100h;
int 10h;
end;

Procedure CursorOn; assembler;{menyalakan kursor}


asm {sifatnya optional / tidak wajib}
mov ah,1
mov cx, 0607h;
int 10h;
end;
begin {main program}
clrscr;
Textcolor (15);
Randomize;
x:= random (20);
Input (Root, x+30,(x+30) div 2,1); {membangun tree}
repeat
Show (Root,40,5,20);
gotoxy (2,1); ClrEol; write ('Find (0 = Quit : ');
readln (cari);
Now := Root; x :=40; y :=5;
CursorOff;
if Cari <> 0 then Search (Now,x,y,20,cari);
CursorOn;
Until cari = 0;
end.

E. TUGAS AKHIR PRAKTIKUM


1. Bagaimana caranya untuk menyisipkan simpul dalam pohon
2. Pohon dapat dideklarasikan dengan apa saja
3. Berikan keterangan unutk setiap baris program yang anda buat.

13
MODUL 7

PREORDER, INORDER, DAN POSTORDER

A. TUJUAN
1. Mengetahui apa yang dimaksud dengan preorder, inorder, dan postorder
2. Memahami cara kerja kunjungan preorder, inorder, dan postorder pada pohon

B. PERALATAN
1. Personal komputer (PC)
2. Kertas Kosong
3. Alat tulis menulis
4. Disket kerja
5. Buku sturktur data

C. LANDASAN TEORI
Atas sebuah pohon kita dapat melakukan sejumlah operasi, salah astu operasi yang sering
dilakukan adalah melakukan kunjungan pada setiap simpul pada suatu pohon biner tepat satu
kali dengan melakukan kunjungan secara lengkap. Seperti yang telah dijelaskan di atas bahwa
urutan informasi yang tersimpan dalam pohon biner akan berbeda jika letak simpul ditukar.
Dengan alasan inilah kita bisa melakukan kunjungan dengan tiga cara yaitu secara
preorder,inorder, dan postorder. Kunjungan preorder dilaksanakan dengan mencetak simpul
yang dikunjungi, kunjungan cabang kiri dan kunjungan cabang kanan. Kunjungan inorder
dimulai dari kunjungan ke cabang kiri, kemudian mencetak akar dan diteruskan dengan
kunjungan ke cabang kanan. Ketiga macam kunjungan ini akan kita perlakukan kembali
terhadap cabang kiri atau cabang kanan. Urut-urutan dalam kunjungan postorder adalah
kunjungi cabang kiri, cabang kanan dan cetak simpul. Langkah ini diulang untuk cabang kiri dan
cabang kanan.

D. TUGAS PENDAHULUAN
1. Buatlah algoritma dari cuplikan program dibawah ini
2. Ketiklah program dibawah ini.
uses crt;
const
max=10;
type
arr=array[1..max] of byte;
var
i :byte;
data :arr;
procedure input;
begin
clrscr;
writeln(' Insert 10 Bilangan : ');
writeln('======================');
for i:=1 to max do
begin
write('Data ke-',i,'=');readln(data[i]);
end;
clrscr; write(data[i] , ' ');
writeln('Data Yang Terurut :');
writeln('===================');
end;
procedure Move(x,y:byte); {untuk menggeser data ke depana satu
var i:byte; langkah }
begin
for i:= y downto x do
data[i]:=data[i-1];
end;

14
procedure FindPos(x:byte; var y:byte);

var i:byte;
begin
y:=x; i:=0;
repeat
inc (i)
until data[x]<=data[i];
y:=i;
end;
procedure insert;
var
i,j,temp :byte;
begin
for i:=2 to max do
begin
temp:= data[i]; findpos(i,j);
move(j,i);data[j]:=temp;
end;
end;

procedure cari;
function search(x,n:integer):integer;
var
find : boolean;
l,r,mid,temp: integer;
begin
l:=1; r:=n;
find:=false;
repeat
mid:=(l + r) div 2;
if x=data[mid] then
begin
temp:=mid;find:=true;
end else
d+1;
until find or (l > r);
if not find then temp:=0;
search:=temp;
end;
var bil:byte;
begin
gotoxy(1,7); write(' Bilangan yang dicari : ');readln(bil);
gotoxy(1,8); write(' Data yang dicari pada urutan ke- ',
search(bil,max));
end;

procedure output;
begin
for i := 1 to max do
write(data[i] ,' ');
end;
begin
input;
insert;
output;
cari;readkey;
end.

15
Uses crt;
Const
Max = 5;
Type
Tipe_data = byte;
Rec_arr = array[1..max] of tipe_data;
Var
I : byte;
Data :rec_arr;
Procedure CetakLangkah(data:rec_arr;step,source,target:byte);
Var I : byte;
Begin
Gotoxy(20,7+step);write(‘I I I I I I’);
Gotoxy(4,7+step);write(‘Langka ‘, step,’ :’);
For I := 1 to max do
Begin
Gotoxy(17+i*5,7+step);write(data[i]);
End;
Gotoxy(47,7+step);write(‘data ‘,source,’ Insert data ‘,target);
End;
Procedure insert(var data:rec_arr;mulai,akhir:byte);
Var temp, I : byte;
Begin
Temp := data[akhir];
For I := akhir downto mulai do
Begin
Data[i] := data[i-1];
End;
Data[mulai]:= temp;
End;
Procedure insertanim (var data:rec-arr; jml_data:byte);
Var
Ketemu :Boolean;
Count,I,x,step :byte;
Begin
Step := 0;
For I := 2 to jml_data do

Begin

Ketemu := false;

Count := 0;

Repeat

Inc (count);

If data[i] < data[count] then

Begin

Inc (step);

Insert(data,count,i);

Ketemu := true;

16
End;

Until ketemu of (count = i);

If ketemu then cetaklangkah (data,step,I,count);

End;

Gotoxy(67,7+step);write(‘ tersort ‘);

Gotoxy(20,8+step);write (‘I___I___I___I___I___I ‘);

End;

Procedure cetakdata;

Var I : byte;

Begin

Clrscr;

Gotoxy(30,1);write(‘Insertion Sort’);

Gotoxy(30,1);write(‘================’);

Gotoxy(30,1);write(‘’); ----------------------
--

Gotoxy(30,1);write(‘’); I I I II I III I
IV I ’);

Gotoxy(30,1);write(‘’); I-----I-----I-----I---
--I ’);

Gotoxy(30,1);write(‘ Data Awal : I I I I


I ’);

Gotoxy(30,1);write(‘’); I I I
I I ’);

For I := 1 to 5 do

Begin

Gotoxy (17+i*5,6);write(data[i]);

End;
End;
Procedure RandomData;
Var I : byte;
Begin
Randomize;
For I := 1 to 5 do data[i] := random(100);
End;
Begin
Randomdata;
Cetakdata;
Insertanim(data,5);
Readkey;

End.

17
MODUL 8
PENGURUTAN / SORTING

A. TUJUAN
1. Mengetahui apa yang dimaksud dengan metode penyimpanan dan metode seleksi dalam
pengurutan
2. Memahami cara kerja metode penyisipan dan metode seleksi dalam pengurutan

B. PERALATAN
1. Personal Kimputer (PC)
2. Kertas kosong
3. Alat tulis menulis
4. Buku struktur data

C. LANDASAN TEORI
 Pengurutan
Pengurutan data/ sorting (ada juga yang menyebutnya sebagai pemilihan data) secara
umum bisa didefinisikan sebagai suatu proses untuk menyusun kembali himpunan objek
menggunakan aturan tertentu. Secara umum ada dua jenis pengurutan data, yaitu
pengurutan secara urut naik (ascending), yaitu pengurutan dari data dengan nilai terkecil
sampai pada data yang nilanya paling besar. Kedua pengurutan data secara urut turun
(descending), yaitu pengurutan dari data yang memunyai nilai paling besar sampai paling
kecil. Dalam hal ini pengurutan data yang bertipe string atau char, nilai data dikatakan lebih
besar atau lebih kecil dari yang lain didasarkan pada urutan relatif. Tujuan pengurutan
adalah untuk mempermudah pencarian data dikemudian hari.

 Metode Penyisipan Biner


Metode penyisipan biner pada pengurutan data perbandingan tidak dilakukan mulai dari
elemen pertama sampai ke 1-1, tetapi dengan perbandingan biner. Caranya, kelompok yang
sudah urut (elemen ke 1 sampai 1-1) dibagi menjadi dua bagian, kemudian elemen yang
akan disisipkan dilihat, apakah kira-kira akan disisipkan pada bagian pertama atau kedua.
Jika diperkirakan akan menempati bagian, maka bagian kedua tidak perlu dilihat lagi. Cara
ini diulang sampai posisi yang tepat untuk elemen yang baru.

 Metode Seleksi
Cara kerja metode seleksi didasarkan pada pencarian elemen dengan nilai terkecil,
kemudian dilakukan penukaran dengan elemen ke 1. Secara singkat metode ini bisa
dijelaskan sebagai berikut: Pada langkah pertama dicari data yang terkecil dari data pertama
sampai data terakhir, kemudian data terkecil tersebut kita tukar dengan data pertama.
Dengan demikian data pertama memiliki nilai terkecil dibandingkan nilai yang lain. Pada
langkah kedua data terkecil yang kita peroleh dibandingkan dengan data sampai data
terakhir. Demikian seterusnya samapi seluruh data dalam keadaan terurutkan.

D. TUGAS PENDAHULUAN
1. Buatlah algoritma dari cuplikan program di bawah ini.
2. Ketiklah program berikut ini.

18
Uses crt;
Const
Max = 5;
Type
Tipe_data = byte;
Rec_arr = array[1..max] of tipe_data;
Var
I : byte;
Data :rec_arr;
Procedure CetakLangkah(data:rec_arr;step,source,target:byte);
Var I : byte;
Begin
Gotoxy(20,7+step);write(‘I I I I I I’);
Gotoxy(4,7+step);write(‘Langka ‘, step,’ :’);
For I := 1 to max do
Begin
Gotoxy(17+i*5,7+step);write(data[i]);
End;
Gotoxy(47,7+step);write(‘data ‘,source,’ Insert data ‘,target);
End;
Procedure insert(var data:rec_arr;mulai,akhir:byte);
Var temp, I : byte;
Begin
Temp := data[akhir];
For I := akhir downto mulai do
Begin
Data[i] := data[i-1];
End;
Data[mulai]:= temp;
End;
Procedure insertanim (var data:rec-arr; jml_data:byte);
Var
Ketemu :Boolean;
Count,I,x,step :byte;
Begin
Step := 0;
For I := 2 to jml_data do
Begin
Ketemu := false;
Count := 0;
Repeat
Inc (count);
If data[i] < data[count] then
Begin
Inc (step);
Insert(data,count,i);
Ketemu := true;
End;
Until ketemu of (count = i);
If ketemu then cetaklangkah (data,step,I,count);
End;
Gotoxy(67,7+step);write(‘ tersort ‘);
Gotoxy(20,8+step);write (‘I___I___I___I___I___I ‘);

19
End;
Procedure cetakdata;
Var I : byte;
Begin
Clrscr;
Gotoxy(30,1);write(‘Insertion Sort’);
Gotoxy(30,1);write(‘================’);
Gotoxy(30,1);write(‘ --------------------
----‘);
Gotoxy(30,1);write(‘ I I I II I III
I IV I ’);
Gotoxy(30,1);write(‘ I-----I-----I-----I-
----I ’);
Gotoxy(30,1);write(‘ Data Awal : I I I I
I ’);
Gotoxy(30,1);write(‘ I I I
I I ’);
For I := 1 to 5 do
Begin
Gotoxy (17+i*5,6);write(data[i]);
End;
End;
Procedure RandomData;
Var I : byte;
Begin
Randomize;
For I := 1 to 5 do data[i] := random(100);
End;
Begin
Randomdata;
Cetakdata;
Insertanim(data,5);
Readkey;
End.

E. TUGAS AKHIR PRAKTIKUM


1. Apa yang dimaksud dengan pengurutan?
2. Ada berapa jenis pengurutan yang ada dalam modul ini? Jelaskan!
3. Apakah kegunaan pengurutan?
4. Berikan keterangan untuk setiap baris program yang telah anda buat!

20

Anda mungkin juga menyukai