MODULPRAKTIKUM STRUKTURDATA I
Oleh: Tim PengamPu
LABORATORIUM PELAYAN KOMPUTER JURU SAN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM LINIVERSITAS DIP ONEGORO SEMARANG 2011
BAB I TUJUAN DAN LANDASAN TEORI 1.T
TUJUAN Mahasiswa mampu memahami konsep pengulangan dan subprogram. 2. Mahasiswa mampu mendefenisikan subprogram. 1.
3. Mahasiswa mampu menyelesaikan permasarahan program menggunakan pengulangan.
I.2 LANDASAN TEORJ Dalam menyelesaikan persoalan, sering dihadapkan pada suatu pilihan untuk bias melanjutkan ke proses berikutnya' Da]am pascal, pernyataan pilihan terdiri atas pemyataan if dan case ( untuk pemyataan yang lebih danZ).
Secara umum bentuk pernyataan if If kondisi then Pernyataan Sedangkan untuk case
:
:
Case ni_Iai of
Daftar_ni1ai_1 : pernyataan 1; Daftar nilai
m
: pernyataan_m;
LJ.SC
Daftar_ni Iai_n : pernyataan_n;
End;
Persoalan yang dihadapi sering memerlukan penl.elesaian tidak han;.a sekali tetapi dilakukan berulang-ulang hingga jauaban -r.ang dikehendaki rercapai. Dalam pascal, proses pengulangan ada j :
l.
For nama_var Begin
::
nilai_arval to
nilai akhir
do
End; Pengulangan dengan jumlah pengulangan sudah pasti
2.
While kondisi do Begin
End; Pengulangan yang berjalanjika kondisi benar.
3.
Repeat
Untilkondisi Pengulangan yang berjalanjika kondisi salah.
Bahasa pemrogr'rman pascal, dapat rnembagi rangkaian program menjadi beberap& subprogram
/
modul' setiap subprogram mempuryai kepala subprogram, b4gian deklarasi ( kalau dl.perlukan ) dan bagian pemyataan. Subprogram dalam bahasa pascal adalah prosedur dan ftrction.
1. Procedure nama_prosedur Bag deklarasj_ Bag pernyataan
2. Function nama_fungsi : tipe_nama_fungsi Bag deklarasi Bag pernyataan
BAB II PERMASALAIIAN
a.
Buatlah daftar nilai mahasiswa didasarkan pada table berikut.
no
ntm
1
0001
2 3
0002 0003 0004 0005
4 5
nama Andre Rohman Eka
Dewi Siska
uilan mid 80 45 50 90 40
akhir
akhir 90
95 30 50
35 50
60
7A
10
20
nilai huruf
A D
c B E
Dengan ketentuan:
1. Nilai akhir diperoleh dari rumus {ujian mid + 2x ujian akhir) / 3 2. nilai huruf :
range nilai
nilai huruf
0 -20
E
21-40 D 41 -60 C 61 -80 B 81 - 100 A ANALISIS:
Masalah di atas perlu di pecah menjadi beberapa sub program untuk mempermudah penyelesaian. Tahapannya adalah sebagai berikut : 1. dibuat struktur data yang sesuai dengan table tersebut. 2. dibuat prosedur masuk data, dimana di dalamnya terdapat rumus untuk mengisi field nilai akhir dan pemanggilan fungsi konversi ke nilai huruf. 3. dibuat presedur cetak data. 4. dibuat fungsi untuk memperoleh nilai huruf
b.
Membuat laporan praktikum
Bab
III
ALGORITMA Fuction koversi*ke_huruf (input angka : real):char Deskripsi
lf(angka <= 20 ) then konversi ke
€,E,
Else if ((angka >20 ) and (angka <= 40 ) then konversi_ke_huruf
€
,D,
Else
if ((angka >40 ) and (angka <= 60 ) then konversi_ke_huruf
€
,C,
Else
if ((angka >60 )and (angka <= 80 ) then konversi_ke_huruf
6
,8,
Else konversi_ke_huruf
€ ?'
Procedure masuk*data(output mhs : mhs : array t1..201 of dai+ input n : integer) Deklarasi Type data = record <
No: byte NIM : String[8] Alamat:string [30] I : integer
Deskripsi
Fori€ltondo with mhs [i] do Read (no) Read (nim) Read (nama)
Read(ujian_mid) Read(ujian_akhir)
Nilai
€
(ujian_mid + ujian_ak[ir+2)
NilairhyJuf Epdwith
endfor
€
konversi-ke_huruf
l3
BAB I TUJUAN DAN LANDASAN TEORI I.T TUJUAI\
l.
Mahasiswa mampu memahami konsep array dan stack.
2. Mahasiswa mampu mendefenisikan stack dan array.
3. Mahasiswa mampu menyelesaikan permasalahan program menggunakan stack.
I.2 LANDASAN TEORI 1.2.1 Defenisi
Array
Array adalah deretan rinci data yang masing-masing mempunyai tipe data sejenis. Tipe data disebut elemen atau komponen array. Untuk mengoperasikan array
ini digunakan
pemilih elemen anay yang disebut index, yang dapat berupa variabel, konstanta ataupun ungkapan. Index diletakkan dalam tanda kurung dan titik setelah nama array yang dioperasikan. 1.2.2 DefenisiStack
Stack adalah kumpulan data dengan gambaran seperti sebuah tumpukkan (misalnya tumpukan piring, tumpukan buku). Sifat khusus yang dimiliki oleh stack ialah penambahan data selalu diletakkan pada bagian atas dan pengambilan
dilakukan pada data yang terletak
di
data selalu
atas tersebut. Data pada bagian atas stack
disebut top. Dengan sifat tersebut maka aturan stack dikenal juga istilah LIFO (Last In First Out). I.2.3 Operasi Stack Berdasarkan sifat khusus stack, maka ada 2 operasi terhadap stack, yaitu:
l. Pengambilan
data dilakukan pada top, yang disebut sebagai pOp.
2. Penambahan data dilakukan pada top, yang disebut sebagai PUSH.
BAB ilI
PERMASALAHAN t. Buatlah piogram untuk menentukan banyak nya huruf vokal dan konsonan dalam dengan menggunakan staclc Output seperti gambar di bawah:
l,la6uk|.ao clenea
Elenen
Uokal
efter
Push€d :
bagaiaanakah
Elenen l(on5ol}an
l.l lal tit lal
l.l Inl lcl
nilei tos = s
l_:=l nilal tos = s
l-:-l
.i 2.
LalirEt -
i
Membuat laporan praktikum
ii
suatu kalimat
Bab
III
ALGORITMA ogram elemen stack const max : 5 {ukuran maksimum st.ack} tlpe stack = record
isi € array [1--max] of char tos <- 0..max; {elemen dimulai dari kosong s/d
end
var {deklarasi variabel} x,y ) stack {deklarasi stack} elemen ) string arb,i,m ) integer {a,bri deklarasl untuk prosedur cetak} rocedure input var t:stack) begin t. tos )0 end
function
(t: stack) )
kos
bool-ean
begi-n
kosong )
(
t . tos:0)
end
function
penuh
(
begin penuh ) end
ii
t : stack) ) boolean I J - -...--
t,
.
rocedure sh(var t:stack, begin if not penuh(t) then begin t . tos ) t. tos+1
t .i.siIt.tos]
)
x:char)
x
end end
ocedure pop(var t:stack; var elemen:char) begin if not kosong (t) then begin elemen ) t. isi I t tos l t. t.os ) t. tos-l end end
maxJ
rocedure cetak (t : stack;a,b begin
for i ) 1 to t.tos
cetak out
r)
do
begin
wrire(t.isilil
e)
)
end
write (nilai
tos =
end
)
?edure pisah (elemen:string) {memisahkjn begin
a)0 b+0 i+1
write (After pushed repeat.
:
)
if (elementil=a) or (elemenriJ=A) or (elementir=e) or (elemenlil=E) or (elemenlil=i) or (elementil:I) or (elemen[1]=o) or (elemenIi]:O) or (elementil:u) or (elementil:U) then
begin
push (x, el-emen
inc
(a)
Ii]
)
Ii]
)
end
else begin push (y, elemen
inc
(b)
end
inc(i) {i-nc artinya naj-k ke array ber;kut nya} uncil (x. to5=max) or (y. tos=max) or (i>Iength (elemen) i)nax write (After Popped : ) if x.tos = max then
begin
repeat
until end
pop(x,elemenIi]) dec(a) {dec : mundur- / turun pop(y,elemenlil ) dec (b) dec (i )
kosong(x) or kosong(y) or (i=0)
else begin repeat
pop(y,el-emenlil
)
dec (b)
pop(x,elemenlil
)
dec (a)
' end
dec(i) unti1 kosong(x) or kosong(y) or (i=0)
}
)
Program utama begin
write
(Masukkan elemen kalimat read (eLemen) input (x) input (y)
write(Elemen Vokal,)
write (Elemen Konsonan) pisah (elemen) end
=)
BAB I TUJUAN DAN LANDASAN TEORI I.I TUJUAN l. Mahasiswa mampu memahami konsep array
terhadap queue.
2. Mahasiswa mampu mendefenisikan queue dengan array.
3. Mahasiswa mampu menyelesaikan permasalahan program menggunakan queue.
I.2 LANDASAN TEORI 1.2.1
.
DefenisiArray Array adalah deretan rinci data yang masing-masing mempunyai tipe data sejenis. Tipe data disebut elemen atau komponen array. Untuk mengoperasikan anay ini digunakan pemilih elemen array yang disebut index, yang dapat berupa variabel, konstanta ataupun ungkapan. Index diletakkan dalam tanda
kurung dan titik
setelah nama array yang dioperasikan. 1.2.2 Defenisi Queue
Queue adalah sekumpulan data dengan penanda pada elemen pertama dan terakhir. Elemen pertama disebut sebagai front dan elemen terakhir disebut rear. penambahan data
dilakukan pada akhir elemen, sedangkan penghapusan data dilakukan pada elemen pertama. Sifat Queue tersebut dikenal dengan istilah FIFO (First ln Forst Out). 1.2.3 Operasi Stack Berdasarkan sifatny,a, maka ada dua operasi terhadap queue 1..aitu: l. Penambahan dala pada elemen akhir queue- disc.but Enqueue
2. Penghapusan data pada elemen pertama queue, disebut Dequeue
tsAB
II
PERMASALAIIAN 1. Buatlah prognrm antrian
. Dengan 3 pilihan, yaitu
:
l. masukkan antrian 2. ambil antrian 3. selesai jika, opsi pertama dipilitt, maka user diminta untuk menginput beberapa karakter yang sesuai dengan yang dia inginkan. Jika opsi pertama dipilih lagi, karakter baru akan di tambahkan di belakang. Jika opsi kedua dipilih, rnaka karakter terdepan akan menghilang dan karakler di belakangnya akan maju. Apabila opsi kedua dipilih, sedangkan antrian kosong maka akan ada penanganan nya (penanganan untuk kasus kosong). Jika dipilih selesai, maka program selesai. SELAMAT MENGERIAKAN I
Contoh output
*
:
SAAT OPSI PERTAMA
DIPILIH
i;i':1"t""':;'"''.'
'
::::::::-:::::::::-:::::
Es0ll:n iuruf t!-l hfrhlrn iu.uf la-2 Hsultas iuruf ta-3 El.*tr d!l.r :ntrlin
: I : S : 0
:
-:.
=19!
"
: e s
_-_ |
D
!"".:::ii!ii!:iii:::: :"-.r &nq : l.Esutkm antrl.a 2-r-11 .otrl:r 3-S.lasal hgut.n ,lllh.o
:
L
*SAA.T OPSI KEDUA
DIPILIH
€l?*n.ill tr.rn y.hg dl)dll ElaH dala. .trlan
I
m88nx
:
-o x:l
:.so : a : t O
tntrrx
I
l-Butkil.ntrl.a 2,1-ll.ntrl.n !.lcl.rrl Esd.n
plllh.n
: _
J]
'li
*
ANTRIAN TIDAK ADA
f$i:*;li;i-;i;:;;,.k",,;i,,,r1;1;:.r::;.,i*i.;1:,_i llaif , .otrlan *osongt
Elemnasll
EleEn ying diarbil €lemn drlan atrlan
I
P[oGncH
,.. ;:.:: ,, *, ,i, . , ri.,,,: .,
:o :o
:
,,,, -lgp1l
-*-l :]l Ji
;
nHrnrAH
I
llenu :
i .lLgukkatr .ntrlan
2-inbll aotrlan 3.Sellsal
Itasukan pi"lihan
:
_
I I
.l
-'jj
rl
I
2. Membuat laporan praktikum
Bab
III
ALGORITMA ram queue
tlpe antri €record isi:array[1 . .501 of char belakang € 0. .50 end
var
q €antri y €char i,pil,n (inteqer rocedure init(var que €antri begin que.belakang €0
)
end
function
kosonq
begin
(
e:antri) € boolean
kosong € (que belakang:Q ) end
function
penuh
begin
(que:antri) € boolean
penuh € (qr..beIakang=$Q1 end
not (penuh (que) ) then
in que.belakang € que-belakang+1 que. isi Ique.belakang] € x beg
end
else writeln (Maaf, antrian penuh ! ) rocedure deque(var var i € integer
begin
ue:antri;var x: char)
if not (kosong (que) ) then begin
x € que.isi[1] for i )1 to que.belakang-1 do que.isi Ij-] € que.isili+11 que.belakang € que.belakang-1 end
else Lriiteln
anlrian
(Maaf ,
kosong ! )
end
rocedure cetak(que:antri) {cetak output var i € integer begin
for i:=l- to que.belakang do (que- isi Ii] , ' '
write end
)
PROGRAM UTAMA
begin
writeln (=====:==: ==:==:=:) writel-n(l PROGRAMANTRIAN l) writeln (:====:==::===:===========:= ),writeln (Menu : ) wrj-teln ( l.Masukkan antrian) writeln (2.Ambi1 antrian)
j-tel-n (3 . Selesa j- ) write (Masukan pilihan wr
: ) readln (piI) clrscr case pil of 1 : begin (Masukkan banyaknya huruf : )readln(n) write :::====:) writeln (=:===:=== for i€1 to n do begin write (Masukkan huruf ke-' , i, ' : ) readln (y) enque (q, y) end
r2:+:=:.:;_;.-;:.--::=:. ;:::: cerakiqj
:
end
2 : begin deque (q, y)
write('Elemen asli | ,,y)write(' cetak (q) ;writeln; write('Elemen yang diambil : ',y) writeln write ('Elemen da-l-am atrian : ') cetak (q) 'writeln end end end
until- (pi1=3 end
)
')
BAB I TUJUAN DAN LANDASAN TEORI I.I
TUJUAN
l. Mahasiswa mampu mendefenisikan stack dengan Iist pointer. 2. Mahasiswa mampu mendefenisikan queue dengan list pointer. 3. Mahasiswa mampu menggunakan struktur data stack dan queue dengan list pointer dalam menyelesaikan masalah pemprogaman.
I.2 LANDASA}{ TEORI 1.2.1 Defenisi Stack dan Queue dengan List Pointer
List pointer adalah list linier yang direpresentasikan dengan menggunakan pointer. Stack, queue dan
list memiliki
satu kesamaan, yaitu ketiganya adalah sekumpulan data yang
mempunyai keterurutan posisi. Bila diketahui sebuah elernen maka dapat diketahui juga elemen berikutnya. Berdasarkan kesamaan tersebut, maka stack dan queue dapat dinyatakan sebagai list
linier. Apabila stack dan queue dinyatakan dalam list maka terdapat kesamaan operasi, yaitu
:
l. Antara stack dengan list linier. PUSH pada stack : InserrFirsr pada Iist linier POP pada stack : DelereFint pada list linier
2. Antara queue dengan list linier. Enqueue pada antrian : InsertFirst pada list linier Dequeue pada antrian : Deletef irst pada list linier 1.2.2 Implemenrasi Stack dan Queue dengan List pointer Secara umunl operasi-operasi stack dan queue dengan menggunakan list pointer dapat
menggunakan prosedur list linier yang telah didefenisikan pada modul sebelumrya.
BAB
II
PERMASALAHAN Buatlah program untuk melakukan operasi matematika dengan ketentuan sebagai berikut
:
1. operasiyang dilakukan adalah penjumlahan dua buah operand bilangan bulat. 2. Bilangan hanya bisa untuk bilangan bulat banyak (long integer) yang bernilai positif dan tidak
menerima inputan bilangan negatif. 3. Program akan menanyakan ada perhitungan lagi atau tidak, apabila tidak, program akan keluar. 4. Prosedur yang dibuat adalah prosedur untuk mengecek keabsahan inputan, prosedur untuk
membuat simpul baru, prosedur untuk membuat dan membaca list linier, prosedur untuk mengecek banyaknya karakter pada dua operand, dan prosedur untuk menghitung hasil penjumlahan dan
menyimpan hasil
Contoh out1>ut
:
# Tampilan program dengan inputan yang sah
;i+rj..;ii4,;jii;f,
ii.l:
'---..'a,j.'
-!:.:.
':{1..
:.
-
:
-
.]slr
ilenjunlah Dua Bilangan Bulat yang positif Bilangan Pertana : 89 Bilangan Nedua : srt
Hasil Perhitungan
:
89
5Il +
--143
Akan Hencoba
rl
I
Lagi ?? {y/t,
:
I
# Tampilan pro€ram untun inputan yang tidak sah
:
ttll:l:t_::t_1 ll:]ry_y1::-t:11_ry1:I__ Silafigan PertaBa Bilangan l(edua
Rda t
:
:
rla]onz
1g
rrakter ti.lak srh
nkao llencoba Lagl ??
.l
(y/f) : _
I
Atau -.1
.r'.
Itenjurqlah Dua Eilangan Bulat yang
Bilangan Perta.oa : -76 gilangan Nedua : g4 Rda
karakter tidak
Akan lGncoba
sah
Lagi ?? (V/f) :
2. Membuat laporan praktikum
positif
=lel-41 JI^rl i!
JI
t
Bab
III
ALGORITMA Dua B
€ 80 type Str80 € stringfMax] Simpul € ^Data const Max
Data
)
record
Info : char Kiri, Kanan: Simpul end
var
bill, bil2, bil3 € Simpul
angkal,angka2
I
e
Str80
: integer : char
function cek (Bil : Str80) Function yang berguna var
I€
Angka
)
boolean keabsahan
integer
€ setofchar € boolean
Valid begin
€ ['0'..'9] € true forl ) I to length(Bil)do Angka
Valid
if not(Bil[I] in Angka) then begin
Valid 3 false I € length(Bil) end:
cek€ Valid cnd
procedure arvalan (var B aru € Simpul) Prosedur sebagai dan na membuat begin
baru
new(Baru)
with Baru^ do begin
Info €ch(32)
Kiri €Baru Kanan € Kiri end end
pmcedure buat_list (var List € Simpul, Bil € Strg0) Prosedur yang digunakan sebagai senarai berantai var I, Cch_Kar, J, Kode € integer
Baru Begin
For
€
I€l
Simpul to leneth(Bil) do
begin awalan(Baru)
val(Bil[I]J,Kode) Baru^.Info€Chr(J) B
aru^.Kiri €List^.Kiri
Baru^.Kanan€List Li st^.Kiri^.Kanan
€B aru
List^.Kiri€Baru end
List^.Info €Chr(length(Bil)) end
procedure baca(Kepala € Simpul) untuk membaca isi senarai var Bantu € Simpul Kode € integer begin
Bantu
€
Kepala^.Kanan;
repeat
Kode
€
ord(Bantu^.lnfo)
if Kode:32 then rwite(' ,) else
\wite(Kode) Bantu:B antu^.Kanan until Bantu: Kepala
'
rwiteln end
procedure cek_operand(var
Bill, Bin e Simpul)
Prosedur untuk mengecek banl'akn1,a dan mcnghituns karakler oada keduaooerand) var Jmll. Jml2
€
i
proceduretambah_nol (varT
€
simpul, C
€
integer)
{Prosedur urduk mengecek banyaknya dan menghitung karakter pada kedua
( Simpul integer
var Baru
I
€
Begin
forl:€ltoCdo begin
awalan(Baru)
Baru^.Kiri
€
Baru^.Kanan
T
€
T^.Kanan^.Kiri T^.Kanan
T^.lnfo
€
€
T^.kanan
€
Baru
Baru
ch(ord(T^.lnfo)+t )
end errd
begin Jml I
Jml2
€ ord(Bill^.lnfo) € ord(Bi12^.lnfo)
if Jmll
o
Jml2 then
if Jmll > Jml2 then tambah nol(Bil2,Jml 1-Jml2) else
tambah_nol(Bil l,Jml2-Jml I ) end
procedure hasil(var
bill, bil2, bil3 € Simpul)
lrosedur sebagai penghitung peniumlahan
var sisa, jumlah, dgt, dgtl € integer Bantul. B Baru € Simoul
procedure oper Prosedur tampilan cetaknya perhitunsan raDi ko begin
Baru^.Kanan € Bil3^.Kanan Baru^.Kiri <- Bil3 Bil3^.Kanan^.Kiri € Baru Bil3^.Kanan € Baru End begin
Bantul € Bill^.Kiri Bantu2 + Bil2".Kiri
sisa € 0 repeat
€ ord(Bantul^.lnfo) e ord(Bantu2^.lnfo) ifdgtt :32 then dgtl e 0 if dgl=32 then dgt € 0 dgt
dgtl
jumlah€ dgt+dgtl+sisa ifjumlah >:10 then
{ada Carr-r,}
begin
jumlah€jumlah- t0 sisa€ I end
else
{tidak ada Carry}
sisa€0 ne*(Baru) Baru^.lnfo
€
ch(Jumlah)
op€r
Bantul
€
Bantul^.Kiri
Bantu2 € Bantu2^.Kiri until Bantul:Bill
ifsisa=l
then
begin
awalan(Baru)
Baru^-lnfo
€
chr(sisa)
oper
awalan(Baru) awalan(Bantu I )
Baru^.Kanan
€
Bil l^.Kanan
Baru^.Kiri € Bil I Bil l^.Kanan^.Kiri
Bill^.Kanan
€
€
Baru
Baru Bantul^.Kanan € Bil2^.Kanan
Bantul^.Kiri
€
Bil2
Bil2^.Kanan^.Kiri € Bantul Bil2^.Kanan € Bantul Bil l^.Info € ch(ord(Bil l^.Info)+
l)
end end
Utama begin repeat
{Tampilan layar yang akan meminta input bilangan pertama dan kedua} clrscr writeln(' -') writeln('-plsniumlah Dua Bilangan Bulat Yang Positif-')
\4riteln('-----rvrite('Bilangan Pertama : ') readln(Angkal) ntite('Bilangan Kedua :') readln(Angka2) writeln if cek(Angka I ) and cek(Angka2) then {Mengecek Keabsahan kedua bilangan sesuai atau tidak(sesuai)} begin
awalan(bill) arvalan(bil2) arvalan(bil3)
buat_list(bil I nAngkal ) buat_lis(bil2r4ngka2 ) { Mengecek carakter panjangnya kedua bilangan } cek_operand(bil l,bil2) {Menjumlahkan kedua bilangan sah tersebut}
hasil(bil l,bil2,bil3) {Mencetak/menampilkan hasilnya pada layar} writeln('Hasil Perhitungan : ') baca(bil I ): baca(bi12) for I€l to ord(bill^.lnlo) do urite('-')
srite('+') uriteln baca(bil3) end else
{Ada karakter negative yang tidak sah(tidak sesuai)) writeln('Ada karaller tidak sah') {Perulangan program bila program akan melakukan perhitungan kembali) writeln write('Akan Mencoba Lagi ?? (Y/T) : ') readln(Lagi) until not (Lagi in ['Y','y']) end
BAB I TUJUAN DAN LANDASAN TEORI 1.I TUJUAN
l. Mengetahui implementasi
beberapa metode pengurutan data.
2. Mampu menerapkan metode pengurutan data pada sebuah program. 3. Mengetahui perbandingan kompleksitas dari beberapa metode pengurutan data.
I.2 LANDASAN TEORI Pengurutan data adalah proses yang dilakukan terhadap himpunan data, disusun
sedimikian rupa sehingga diperoleh himpunan data yang terurut. Ada dua jenis data terurut yaitu terurut membesar (ascending) dan data terurut mengecil (descending).Bila dalam proses pengurutan data berada dalam memori disebut internal sorting sedangkan bila tidak seluruhnya berada dalam memori disebut external sorting.
Masalah utama dalam pengurutan data adalah bagaimana mendapatkan metode yang
terbaik yang akan memberikan jumlah operasi perbandingan dan jumlah operasi pemindahan data yang paling minimal. Kedua operasi tersebut akan mempengaruhi algoritma pengurutan data. Umumnya kompleksitas algoritma bias dilihat dari waktu (time complexiry) atau ruang memori (space complexity).
Terdapat banyak metode pengurutuan data. beberapa diantaranya dan akan dilakukan di dalam praktikum ini adalah
:
l. Insertion Sort (Metode Peny isipan) 2. Selection Son (Nletode Pemilihan)
3. Bubble Sort (Metode Gelembung)
lnsertion Sort Prinsip kerja dari metode ini adalah membagi dua data sedemikian rupa sehingga pada bagian pertama adalah data yang sudah terurut dan bagian kedua data yang belum terurut. Selanjutnya diambil satu data dari bagian yang belum terurut dan dilakukan penyisipan ke bagian data yang sudah terurut.
Selection Sort Prinsip kerja selection sort adalah memiliki dua metode yang tergolong selection sort, yaitu minimum
sort dan maksimum sort. Pada metode minimum sort, untuk meletakan data pada posisi yang ke-i maka dicari nilai minimum data mulai dari posisi ke-i sampai posisi ke-N dengan N adalah banyak data. Bubble sort Prinsip kerja dari metode bubble sort adalah untuk meletakan nilai pada posisi ke-i adalah dengan
menggelembungkan/ mengangkat nilai minimum dari i+1 sampai dengan N.
BAB II PERMASALAIIAN Buatlah program dengan ketentuan sebagai berikut 1 Pengurutan (sorting) menggunakan ketiga
:
metode:
2.1 lnsertion sort 2.2 Selection sort 2.3 Bubble sort 2
Masukan awal adalah data bertipe record mahasiswa dengan elemen
:
NIM : integer; Nama: string[30J; Alamat : string[So]; 3 Proses pengurutan berdasarkan NIM mahasiswa secara ascending.
4 Keluaran adalah data yang diurutkan. 5. selamat mengerjakan 1!!
Contoh output
':'ri,:
,i
:
..
-
. ':.:.i..
:-
JJI
bangaknga nahasiswa: 4
HItl llahasisr,ra ke-l
^li
---1
21
: andrP Alan3t !'lahasisrua ke-1 : senarang XII'I |{ahasisua ke-2 : 3q llJB3 t'l3hasiva ke-2 : huda Alanat tlahasisua ke-2: jogja HII'I llahasiswa ke-3 : 22 Hana l,lahasiwa ke-3 : nanan elaBat llahasis$a ke-s: kudus HII{ I'lahasisora ke-q : 3 Nana llahasirua ke-lr : danon Rlanat l{ahasLsrua ke-4: Jakarta Nama t'tahasilra
ke-l
z
-=Pilih lietode Pengurutan== 1. Insertion Sorting 2- Selectlon Sorting 3- Bubble SortLng 4. Er(lt pillhan :
.l
I
lri xll I
_-ir
i j I I I
# Tampilan program untuk pilihan insertion sort:
2. Selection Sorting il. Bubble Sorting l- Exit pilihar : 1 -Insertion SortingNIll : 3 Hama : danon Slanat : Jakarta HII{ : 21 Hana : andre Rlanat : senarang ilIH : 22 Nana : manan Rlamat : kudus }IIfl : 3tr Hana : huda
Rlaoat
: jogja
lx 2- Membuat laporan praktikum
! -:J
Bab
III
ALGORITMA a
label
fMen Qlqunakan Label"
€
]
const max 100 {Data record type data € array [..max] of integer type mahasiswa € record
nim
€
programs
J
integer
nama € string [30] alamat € string [30] mhs
:
array
[..max] of mahasiswa
deklarasi variabel
m€mhs n
6
integer
s,p,pilih,pil z
€
€
integer
byte
procedure insertsort(var c:mhs;n :integer)
{Listing Program jnsert sorting, menggunakan Jogika metode pengurutan dengan menyisipkan e-Iemen larik pada posisi yang tepat. prinsip metodenya adaLah menbagi dua datat pada baqian pertana menampunq data yang sudah terurut dan bagian kedua menampunq data yanq befum terurut] Deklarasi variabel
€ integer € integer tcmpl,temp2 € string pass.i
temp begin
florpass€2tondo begin temp
e c[pass].nim € c[pass].nama temp2 € c[pass].alamat i € pass-l templ
while ((temp < c[i].nim) and (i > l)) do begin
c[i+l].nim € c[i].nim c[i+1;.1rru € c[i].nama
c[i+l ].alamat € c[i].alamat
i€i-r
end
if(temp < c[i].nim)then begin
€ c[i].nim € c[i].nama ].alamat € c[i].alamat
c[i+l].nim
c[i+1 ].nama
c[i+l
i€i-r end
c[i+l].nim
€
temp
c[i+l].nama € templ c[i+l].alamat € temp2 end end
procedure switch(var a,b:integer)
{procedure swicth merupakan procedure sel-ection} Deklarasi variabel Temp € integer begin
temp
€
a€b b
€
a
temp
end
procedure minsort(var c:rnhs;n:integer)
{procedure minsort adal-ah saiah satu metode sefection sort, yanq ne).etakkan data pada posisi yang ke- r maka di cari niLai minimum data nuLai dari
posisi ke- I sampai posjsi ke- N dengran N adaLah banyaknya data) Deklarasi variabel pass,i € integer imin € integer begin
for pass
€
I to n-l
do
begin
imin C
pass
fori€pass+ltondo if (c[imin].nim > c[i].nim) then imin if (imin o pass)then
€
i
s* itch(c[pass].n im,cIimin].ni m) end cnd
procedure bubblesort(var c:mhs;
n :i
nteger)
{Procedure bubLesort akan neletakkan niLai
pada posisi ke-j
dengan nenggelenbungkan atau mengangkat nil-ai minimum dai j+7 sampai denqan Nl Deklarasi variabel pass,i € integer tukar € boolean begin tukar € true pass
€
I
while((tukar) and (pass < n)) do begin
tukar
e
false
fori€ndowntopass+l
do
if (c[i].nim < c[i-l].nim) then begin switch (c[i].nim,c[i-l ].nim) tukar € true end
end end
utama begin
{Meaanggil Label}
a€ clrscr {TanpiTan
writeln('v\riteln('-:
-----}
:=::---'\ :::::=::.:::='j
writeln
{neminta junTah masukkan Input data} write('banyaknya mahasiswa:') readln(n)
writeln
{meminta peru}angan data sebanyak A.l-amat i
dari ke-1 s,/d ke-N,yaitu
fors€Itondo begin
write(NlM Mahasisrva ke-',s,' :) readln(m[s].nim) rrite(Nama Mahasiwa ke-',s,' :) readln(m[s].nama) \wite(Alamat Mahasiswa ke-',s,':) readl n(mIs].al amat) rwiteln end
{tanpilan mencatak meminta metode peniJihan} writeln; rwiteln(==Pilih Metode Pengurutan==) writeln( 1. Insertion Sorting) writeln(2. Selection Sorting) wrireln(3. Bubble Sorting)
$riteln(4. Exit)
l.,neminca r espo.'rs pi j i.:a.:
:
write('pilihan : ') readln(pil)
{nengqunakan pemilihan pil of
opsi dengan Case..
case
l:begin writeln('-lnseltion Sorti ng-') {
nenanggi 1 procedu
re insertsortl
insertsort(m,n)
fors€ltondo begin
write(NIM :) writeln(m[s].nim) urite(Nama :) writiln(m[s].nama) write(AIamat : ) *riteln(m [s].alamat) writeln end
writeln end
2:begin iteln(-Selection Sortin
Of...}
NrM,Nama,
{nenanqgiT procedure minsort } minsort(m,n) for s€l to n do begrn
wdte(NIM J writeln(m[s].nim)
writ{Nama : ) writeln(m[s].nama) write(Alamat :) writeln(m[s].alamat) writeln end
writeln end
3:begin
writeln(-Bubble Sorting-:)
{nenanggil proced.ure Bubblesort
}
bubblesort(m,n)
fors€ltondo begin
write(NlM :) writeln(m[sJ.nim) write(Nama : ) writeln(m[s].nama) write(Alamat :) writeln(m[s].alamat) writeln end
writeln end
4:begin
{Cetak \\progran Diakhiri
}
writeln(Program Diakhiri.. ! !) end else
{Mencetak "Pj-ljhan Anda Salah" bila !)enoci}na saTah nen.:jt-)ct:tLanj *rirclnl
Pi I ihan And6-Stt*r, for s::l to n do goto a
end
readkey end
BAB I TUJUAN DAN LANDASAN TEORI I.I
TUJTJAN
l. Mahasiswa mampu rnemahami struklur data list linier 2. Mahasiswa mengetahui list linier dengan pointer dan tabel berkait. 3. Mahasiswa marnpu menggunakan struktur data list
linier dalam menyelesaikan masalah
pemprogaman.
I.2 LANDASAI\ TEORI I .2.1 Defenisi List
Linier
List adalah suatu struktur data dinamis sebaliknya array dikenal sebagai struktur data statis. List linier adalah sekumpulan data yang mempunyai keteturutan posisi. Ciri linier dapat
terlihat dari adanya data sebelum (prosedecessor) dan sesudah (successor) dari suatu urutan data. Komponen dasar dari suatu list disebut sebagai node. Sebuah node terdiri dari dua buah bagian. Bagian pertama adalah bagian yang memuat inforrnasi data, bagian kedua adalah bagian yang menunjukkan alamat data berikutnya atau disebutjuga dengan bagian penunjuk. Elemen pertama sebuah list linier disebut dengan elemen first. First menyimpan alamat pertama dari sebuah list. Istilah alamat disini, bila list diimplementasikan dengan pointer maka
alamat akan menunjuk pada alamat di memori, bila list diimplementasikan dengan tabel berkait maka alamat menunjuk pada indeks table umum yang digunakan untuk menyimpan list.
Operasi lang dilak-ukan terhadap sebuah lisr adalah
l.
:
Insert first : menambah satu elemen ke list sebagai elemen pertama
2. Insert Last : menambah satu elemen ke list sebagai elemen terakhir 3. Delete
first:
menghapus elemen peftama list
4. Delete Last : menghapus elemen terakhir list
1.2.2 Implementasi List Linier dengan Pointer
Dengan menggunakan tipe data pointer yang disediakan oleh pascal, maka struktur data
list linier dapat didefenisikan sebagai berikut
:
Type
Tlpe data= ...;{tipe Address=^eImt1ist,. Elmtl i s t=record
data yang disimpan ke dal-am fist)
lnfo : tipe data {penyimpan data} Next: address {alamat data berikutnya)
End,'
Fi.rst = address;
List = first; 1.2.3 Implementasi tist Linier dengan Tabel Berkait Dengan menggunakan tabel berkait, tempat untuk menyimpan data
list
adalah sebuah
ini meskipun bersifat statis tetapi bisa dibuat seolah-olah dinamis. Tabel untuk list yang tidak hanya sahr. Perhatikan data list linier dengan tabel berkait
tabel besar. Tabel bisa digunakan
berikut: Const
= ... ; {ukuran tabel} : 0; {menyatakan indeks tabel" yang tidak terdefenisi} Kosong = -maxint+1; {isi sesuai dengan tipe data dari list} NMAX
NULL
Type
Tipe data = ..-i {tipe data yang tersimpan daLam list} Address = NULL -. NMAX; Elmtlist : record Info: tipedata; Next : address; End;
Tabelmt = array[1..NMAX] of elmtli.st; First = address;
List = first,'
Konstanta NULL untuk menyatakan indeks tidak terdefenisi (sama dengan nilai untuk pointer). Karena strulctur ini menggunakan tabel yang digunakar bersama (bisa lebih dari satu
list) maka perlu dibuat mekanisme penggunaan tabel, misalnya kapan sebuah tempat pada table dinyatakan kosong, kapan tidak. Untuk itu perlu dilakukan inisialisasi terhadap tabel untuk menyatakan kosong. Sebuah elemen table dinyatakan kosong jika bernilai
-
max int
+ I yang
dinyatakan sebagai konstanta yang kosong. Procedure allocate dan deallocatejuga berubah-
(var L:lisE) {IS : -} iFS : L ciin.zarakan sebaga: ilsr Beg ir, L :: NULL: Procedure fnisialisai
::::::.;
End,.
Function Emptyl,ist (L : list) : boo.Lean; {mengirimkan nilai true jika L adalah list
kosong}
Begin
Emptylist s= (t:[ULL];
End;
(var L : list; x : tipedata), {IS : L adalah list yang mungkin kosong atau tidak dan terdefenisi dengan sebuah nl1ai) {FS : X sebagal elemen pertama ]ist L)
Procedure InsertFirst
Var
P : address; Begin
Aflocate(p) ; (pesan tempat kosong) If (p<>NULL) then {masih ada tempat kosong) Begin
Tabel-mt [P]
.
inf
o: =X;
Tabelmt [P] . info:=L;
X
End; End;
Procedure Insertlast
Var
(var L : li.st; X : tipedata); {IS : L adalah list yang rnrngkin kosong atau tidak dan terdefenisi dengan sebuah niLai) {FS : X sebagaj- elemen terakhir list L}
X
Pbaru : address; {alarnat untuk data baru} plast : address; {aLamat untuk elemen data baru}
Begin
AlLocate(pbaru) ; {pesan tempat kosong} ff {p<>NULL) then {masih ada tempat kosong}
Begin
Tabelmt Ipbaru] - info: =X;
fabelmt Ipbaru] . next:
If
=NULI,;
(L=NULI) then 1, 1= pbaru;
{t ada}ah list
kosong}
Else Begin
Plast := Li While {tabeLmt[plast].next<>NULL) do p"Last := tabelmtlplastl,. {plast adalah elemen terakhir 1ist L} {sisipkan pbaru sebagai elemen terakhir, setelah p}ast} End;
End; End;
(var L : List; X : tlpedata); {IS : L adalah list 1'3ng tidak kosong} {FS : X sebagai elemen pertama list L yang dihapus, kemungkinan list L menjadi kosong)
Procedure DeleteFirst
Var
P : address; Begi n
:. , = aua":= .r-tt::; X := tabelmr=i.'-, [p] - imfo, DeallocaEe(p); {kembali.kan tempat memori yang tidak dipakai tagi}
End;
Procedure Deletel,ast (var L : List; X : tipedata).. {IS : L adalah list yang tidak kosong} {FS : X sebagai elemen pertama list t yang dihapus.kemungkinan Var
lj,st L menjadi kosong)
Last, prevl"ast : address;
Begin
rf (t^.next=NULL) then Begin
Last := L; L := NULL; End;
Else Begin
Prevl-ast : = L; Last := tabelmt IL] .next, While (tabe1 [last] .next<>NULL)
.do
tsegin End;
Prevlast :: last; Last := tabel-mt [lastJ . next;
{prevlast adalah elemen list Tabelmt Iprevlast] End;
X:= tabelmt [1ast] . info; Deallocate (]ast); End;
.
sebelum e}emen terakhir}
next : :NULL;
BAB II PERMASALAHAN 1.
Telaga BIRU, Swalayan akan melakukan pengecekan stock barang yang
o
program Data Stock Barang pada Telaga Biru Swalayan ini memiliki ketentuan sebagai berikut Menerima masukkan berupa data record stock barang yang terdiri dari field-field :
r r . r
o Kode barang o Nama barang o Jumlah barang o Keadaan barang SetiaP kali menerima masukkan disisipkan ke list sebagai elemen terakhir. Program akan menanyakan ada lagi data atau tidak. Apabila tidak, program mencetak semua data yang masuk. List yang digunakan adalah list dengan menggunakan tabel terkait
ada di toko ini. Adapun pengecekan yang dilakukan adalah dengan bantuan sebuah program, di mana
Contoh output
:
# tampilan memasukkan stock barang
:
ci G\Pn(EnA-r\?A5€tL-t.t\8ot\lrn!{r.GBt DAIN STOCX INHNHC "TELNCN UIBU
SI'OLNYNN"
| 2L2 : sdbuar nlah bar.ans : ? adaan bar.ang : baik ln:cr.c 0g.rin(Y/I>. Y har.rog :2Oz har.aog : . ik.t odc b.rran3J ana barang
Iah baranS : I ada.rn bal.rnq : ba ik
Inscrt ng.\in(9/I):
I-
# tampilan daftar stock barang c
i L\Pf, (EnA-
I iPASf
At-
t.
I
:
\Dlr{\IInEOI)(t
ITEIEI
DATA HRRGA BARANG IELAGA BIHU SI.IRLAYAN
IXODE BARR'{C
72
i
HRI1A BRBANC
sabun ikat
s
ekan EXTER trntrrk nrenrrakhir.l-
2.
Membuat laporan praktikum
i
JUI1Lf,H
BARANG i
2 I
XEADREH BORRHG|
.baik ha il<
:
Bab
III
ALGORITMA Deklarasi variabel : Kode)stri.ng [ 50] nama)string [50J jumlah) string [50] keadaan) string[100] barang)^brg {Tipe data yang tersimpan di daTan list) brg)record kode)kode nama)nama j umlah) jumlah keadaan) keadaan
berikut)barang
{Penyimpan data dan alamat datg berikutnya)