Anda di halaman 1dari 132

Berikut ini adalah versi HTML dari berkas

http://elista.akprind.ac.id/staff/bukualgo_ebook_suwanto.pdf.
G o o g l e membuat versi HTML dari dokumen tersebut secara otomatis pada saat menelusuri
web.
Page 1
1
Page 2
2

LOGIKA INFORMATIKA
TIFS 1604
3 SKS
Suwanto Raharjo,S.Si.,M.Kom
Teknik Informatika
Teknologi Industri
IST AKPRIND Yogyakarta
Page 3
3
Kata Pengantar
Logika proposisional merupakan ilmu dasar
untuk mempelajari algoritma dan logika yang terkait di
dalamnya berperanan sangat penting dalam
pemrograman. Proses kerja komputer tidak dapat
dilepaskan dari program-program, di mana komputer
akan menerjemahkan program-program tersebut dengan
sistem logika. Dengan alasan di atas maka belajar logika
proporsisional sebagai dasar logika algoritma sangat
diperlukan dalam belajar pemrograman maupun belajar
bahasa pemrograman.
Algoritma mempunyai peranan yang
sangat penting dalam bidang teknik informatika pada
umumnya dan bidang pemrograman pada khususnya.
Algoritma membantu mahasiswa mengembangkan daya
penalaran atau kerangka berpikir yang sistematis dalam
memahami masalah dan membuat perencanaan atau
konsep pemecahan masalah yang lebih baik sehingga
dapat menghasilkan yang tepat pula.
Pada buku ini banyak diberikan contoh
kasus disertai alternatif solusi penyelesaiannya dengan
harapan pembaca dapat mengembangkan sesuai dengan
kreatifitas masing-masing. Demikian pula dengan contoh-
Page 4
4
contoh latihan diharapkan dapat membantu pembaca
untuk lebih memahami algoritma.
Pada kesempatan ini penulis menghaturkan
beribu-ribu terima kasih yang tak terkira kepada ALLAH
SWT yang telah memberikan Rahmat dan Hidayah-Nya
sehingga penulis mampu menyelesaikan buku ini. Penulis
juga mengucapkan banyak terima kasih kepada civitas
akademika IST AKPRIND Yogyakarta yang telah
berkenan menerbitkan buku ini, untuk istri tercinta Ema
Utami, S.Si, M.Kom atas ide-ide yang kreatifnya serta
untuk putra-putri tercinta Naufal Rasendriya Apta
Raharema dan Najwa Rashika Az-Zahra Raharema yang
telah memberikan semangat untuk selalu berkarya.
Akhir kata semoga buku ini dapat
memberikan manfaat dan menambah wawasan bagi
pembaca yang ingin mempelajari konsep logika
informatika. Saran dan kritik yang ditujukan untuk
membangun buku ini dengan lebih baik dapat ditujukan
ke alamat email wa2n@nrar.net.
Yogyakarta, Desember 2007
Penulis
Suwanto Raharjo,S.Si,M.Kom
Page 5
5
Page 6
6
Daftar Isi
Kata Pengantar
Daftar Gambar
Daftar Tabel
1 Logika Proposisional
1.1 Proposisi
1.2 Relasi Proposisional
1.3 Interpretasi
1.4 Sifat-Sifat Kalimat Logika
1.5 Kalimat Berkuantor
1.5.1 Ingkaran Kalimat Berkuantor
1.6 Pembuatan Kesimpulan Berdasarkan Implikasi
1.7 Latihan
2 Algoritma
2.1 Algoritma
2.2 Penyajian Algoritma
2.3 Tahap-Tahap Pemrograman
2.4 Struktur Algoritma
2.5 Latihan
Page 7
7
3 Struktur Runtunan
3.1 Runtunan
3.2 Contoh-Contoh Kasus Runtunan
3.3 Latihan
4 Struktur Pemilihan
4.1 Instruksi IF
5.1.1 Instruksi IF Sederhana
5.1.1.1 Instruksi IF dengan Syarat Tunggal
5.1.1.2 Instruksi IF dengan Syarat Majemuk
5.1.2 Instruksi IF - ELSE
4.2 Contoh-Contoh Kasus IF dan IF – ELSE
4.3 Instruksi IF Bertingkat
4.4 Contoh-Contoh Kasus Instruksi IF Bertingkat
4.5 Instruksi SWITCH
4.6 Contoh-Contoh Kasus Instruksi SWITCH
4.7 Latihan
5 Struktur Perulangan
5.1 Instruksi FOR
5.2 Contoh-Contoh Kasus FOR
5.3 Instruksi WHILE – DO
5.4 Contoh-Contoh Kasus Instruksi WHILE - DO
5.5 Latihan
Page 8
8
6 Subprogram
6.1 Subprogram
6.2 Contoh-Contoh Kasus Subprogram
6.3 Rekursi
6.4 Contoh-Contoh Kasus Rekursi
6.5 Latihan
7 Array
7.1 Array
7.2 Contoh-Contoh Kasus Array
7.3 Latihan
8 Sorting
8.1 Metode Selection Sort
8.1.1 Pengurutan Naik (Ascending)
8.1.2 Pengurutan Turun (Descending)
8.2 Metode Bubble Sort
8.2.1 Pengurutan Naik (Ascending)
8.2.2 Pengurutan Turun (Descending)
8.3 Metode Insertion Sort
8.3.1 Pengurutan Naik (Ascending)
8.3.2 Pengurutan Turun (Descending)
8.4 Metode Merge Sort
Page 9
9
8.4.1 Pengurutan Naik (Ascending)
8.4.2 Pengurutan Turun (Descending)
8.5 Latihan
9 Searching
9.1 Metode Sequential Search
9.1.1 Pencarian Pada Array Belum Terurut
9.1.2 Pencarian Pada Array Terurut
10.1.2.1 Pencarian Pada Array Terurut Naik
10.1.2.2 Pencarian Pada Array Terurut Turun
9.2 Metode Binary Search
10.2.1 Pencarian Pada Array Terurut Naik
10.2.2 Pencarian Pada Array Terurut Turun
9.3 Latihan
Daftar Pustaka
Profil Penulis
Page 10
10
Daftar Gambar
2.1 Flowchart Hitung Rata-Rata
2.2 Flowchart Cetak Tiket Parkir
2.3 Tahapan Pemrograman
3.1 Flowchart Runtunan
3.2 Flowchart Hitung Luas Persegi Panjang
3.3 Flowchart Hitung Luas dan Keliling Lingkaran
3.4 Flowchart Konversi Detik
3.5 Ilustrasi Pertukaran Data
4.1 Flowchart Instruksi IF
4.2 Flowchart Instruksi IF – ELSE
4.3 Flowchart Instruksi SWITCH
5.1 Flowchart Instruksi FOR Format Naik
5.2 Flowchart Instruksi FOR Format Turun
5.3 Flowchart Instruksi WHILE – DO
6.1 Gambaran Umum Subprogram
6.2 Ilustrasi Hitung Faktorial
6.3 Ilustrasi Bilangan Fibonacci
Page 11
11
6.4 Ilustrasi Hitung Perkalian
6.5 Ilustrasi Hitung Perpangkatan
Page 12
12
Daftar Tabel
1.1 Aturan NOT
1.2 Aturan AND
1.3 Aturan OR
1.4 Aturan IF – THEN
1.5 Aturan IF AND ONLY IF
1.6 Aturan IF – THEN - ELSE
Page 13
13

Bab 1
Logika Proposisional
Tujuan pembelajaran umum:
1. memahami logika proposisi
2. memahami relasi proposisi
3. memahami sifat-sifat logika
4. memahami interpretasi dari proposisi
5. memahami kalimat berkuantor
6. membuat kesimpulan berdasarkan implikasi
Logika proposisional merupakan ilmu dasar untuk
mempelajari algoritma dan logika yang terkait di
dalamnya berperanan sangat penting dalam
pemrograman. Proses kerja komputer tidak dapat
dilepaskan dari program-program, di mana komputer
akan menerjemahkan program-program tersebut dengan
sistem logika. Dengan alasan di atas maka belajar logika
proporsisional sebagai dasar logika algoritma sangat
diperlukan dalam belajar pemrograman maupun belajar
bahasa pemrograman.
Page 14
14
1.1 Proposisi
Proposisi atau pernyataan merupakan komponen
penyusun logika dasar yang dilambangkan dengan huruf
kecil (p, q, r, ...). Proposisi hanya dapat diiwakili oleh
kalimat deklaratif. Kalimat deklaratif adalah kalimat yang
mengandung nilai kebenaran yaitu dapat bernilai benar
atau salah tetapi tidak mungkin memiliki kedua nilai
tersebut.
Contoh:
p : 9 adalah bilangan ganjil.
q : 10 x 8 = 88
Lawan kalimat deklaratif adalah kalimat terbuka, artinya
kalimat yang nilai kebenarannya tidak bisa ditentukan.
Contoh:
1.Ke mana anda akan pergi ?
2.Kerjakan latihan soal ini !
3.Jam berapakah saat ini ?
Contoh di atas tidak berfungsi sebagai proposisi karena
kalimat tersebut tidak benar atau tidak salah (tidak
mempunyai nilai benar atau salah).
Page 15
15
1.2 Relasi Proposisional
Untuk mengkombinasikan dua buah proposisi atau lebih
diperlukan connective atau penghubung.
Propositions + Propositional Connectives → Sentences
Untuk menggabungkan proposisi-proposisi dan
penghubungnya diperlukan Syntactics Rules yaitu suatu
aturan yang diperlukan untuk mengkombinasikan antara
propositions dan propositional connectives untuk
menghasilkan sentences (kalimat logika).
1.Setiap propositions adalah sentence tanpa ada
propositional connectives.
2.Jika p suatu sentence maka negasinya not p juga
sentence. Negasi atau ingkaran adalah proposisi yang
nilai kebenarannya berlawanan dengan proposisi
semula. Suatu proposisi yang disertai dengan kata-kata
'tidak', 'bukan' dan sebagainya. Misalkan terdapat
proposisi p maka negasinya adalalah - p atau ~p.
Contoh:
p : Semua mahasiswa adalah pelajar
Page 16
16
~p : Tidak semua mahasiswa adalah pelajar
3.Jika p dan q sentences maka conjunction-nya yaitu 'p
and q' juga sentences. Conjunction yaitu dua
proposisi atau lebih yang dihubungkan dengan kata
'dan' atau 'and'. Lambang yang digunakan adalah ^, &.
Contoh :
p : 2 adalah bilangan prima.
q:2>3
p&q : 2 adalah bilangan prima dan 2 > 3.
4.Jika p dan q sentences maka disjunction-nya yaitu 'p
or q' juga sentences. Disjunction yaitu dua
proposisi atau lebih yang dihubungkan dengan kata
'atau' atau 'or'. Lambang yang digunakan adalah v, +.
Contoh :
p : 2 adalah bilangan prima.
q:2>3
pvq : 2 adalah bilangan prima atau 2 > 3.
5.Jika p dan q sentences maka implication-nya yaitu 'if
p then q' juga sentences. Implication adalah
penggabungan dua proposisi dengan bentuk 'jika p
maka q'. Lambang yang digunakan adalah →.
Page 17
17
Proposisi pertama (p) disebut anteseden sedangkan
proposisi kedua (q) disebut konsekuen.
Contoh :
p : 2 adalah bilangan prima.
q:2>3
p•q : Jika 2 adalah bilangan prima maka 2 > 3.
6.Jika p dan q sentences maka equivalence-nya yaitu 'p
if and only if q' juga sentences. Equivalence
atau biimplikasi adalah penggabungan dua proposisi
dengan bentuk 'p jika dan hanya jika q'.
Kata penghubung yang lain adalah iof, iff, bila dan
hanya bila (bhb). Lambang yang digunakan adalah ↔.
Contoh :
p : 4 adalah bilangan genap.
q : 4 habis dibagi 2.
p↔q : 4 adalah bilangan genap jhj 4 habis dibagi 2.
7.Jika p, q dan r sentences maka conditional-nya yaitu
'if p then q else r' juga sentences.
Contoh :
if x=5 then y= x else y=2x
1.3 Interpretasi
Page 18
18
Interpretasi adalah pemberian nilai kebenaran (benar atau
salah) pada setiap simbol proposisi dari suatu kalimat
logika. Semantic Rules adalah suatu aturan yang
digunakan untuk menentukan truth value (nilai
kebenaran) dari suatu sentence. Untuk mempermudah
penyajiannya dibuatlah tabel kebenaran.
1.Negation Rule (Aturan NOT)
Negasi bernilai benar jika proposisi mula-mula bernilai
salah dan sebaliknya apabila proposisi mula-mula
bernilai benar maka negasinya mempunyai nilai
kebenaran salah.
p
not p
True
False
False
True
Tabel 1.1 Aturan NOT
2.Conjunction Rule (Aturan AND)
Konjungsi bernilai benar jika setiap proposisi
penyusunnya benar.
p
q
p and q
Page 19
19
True
True
True
True
False
False
False
True
False
False
False
False
Tabel 1.2 Aturan AND
3.Disjunction Rule (Aturan OR)
Minimal satu proposisi penyusunnya benar maka
disjungsi bernilai benar.
p
q
p or q
True
True
True
True
False
True
False
True
True
False
False
False
Tabel 1.3 Aturan OR
Untuk relasi konjungsi dan disjungsi berlaku sifat-sifat
aljabar logika sebagai berikut :
a.Hukum Idempoten
pvp = p
p∧p = p
Page 20
20
b.Hukum Komutatif
pvq = qvp
p∧q = q∧p
c.Hukum Assosiatif
pvq)v r = pv(qvr)
p∧q)∧r = p∧(q∧r)
d.Hukum Distributif
pv(q∧r) = (pvq) ∧ (pvr)
p∧(qvr) = (p∧q) v (p∧r)
e.Hukum Identitas
p v False
=p
p ∧ True
=p
p v True
= True
p ∧ False
= False
f.Hukum Komplemen
p v not p = True
p ∧ not p = False
not(not p)= p
g.Hukum De Morgan
Negasi dari konjungsi dan disjungsi:
Page 21
21
~ (pvq) = ~p ∧ ~q
~ (p∧q) = ~p v ~q
4.Implication Rule (Aturan IF-THEN)
Implikasi bernilai salah bila anteseden benar dan
konsekuen salah.
p
q
if p then q
True
True
TRUE
True
False
False
False
True
True
False
False
True
Tabel 1.4 Aturan IF – THEN
Terdapat beberapa definisi:
a)Jika (p→q) adalah implikasi maka (q→p) adalah
konvers
b)Jika (p→q) adalah implikasi maka (~p → ∼q)
adalah invers
c)Jika (p→q) adalah implikasi maka (~q→ ∼p)
adalah kontraposisi
d)Jika (p→q) bernilai benar maka (q→p), (~p →
~q), dan (~q → ~p) belum tentu bernilai benar.
Page 22
22
5.Equivalence Rule (Aturan IF AND ONLY IF)
Jika penyusun proposisi mempunyai nilai yang sama
maka biimplikasi bernilai benar,
p
q
p if and only if q
True
True
True
True
False
False
False
True
False
False
False
True
Tabel 1.5 Aturan IF AND ONLY IF
6.Conditional Rule (Aturan IF - THEN - ELSE)
Jika p bernilai benar maka q berlaku.
Jika p bernilai salah maka r berlaku
p
q
r
if p then q else r
True
True
True
True
True
True
False
True
True
False
True
False
True
False
False
False
False
True
True
True
False
True
False
False
False
False
True
True
False
False
False
False
Page 23
23
Tabel 1.6 Aturan IF-THEN-ELSE
1.4 Sifat-Sifat Kalimat Logika
1.Valid
Suatu sentence f disebut valid, jika untuk setiap
interpretation I for f maka f true.
Contoh:
a. (p and q) if and only if (q and p)
b. p or not p
c. (p and (if r then s)) if and only
if
((if r then s) and p)
d. (p or q) or not (p or q)
e. (if p then not q) if and only if
not
(p and q)
2.Satisfiable
Suatu sentence f disebut satisfiable, jika untuk suatu
interpretation I for f maka f true.
Contoh:
a. if (if p then q) then q
b. (if p then q) or (r and s)
c. (if p then q) or r
Page 24
24
3.Kontradiksi
Suatu sentence f disebut kontradiksi, jika untuk setiap
interpretation I for f maka f false.
Contoh:
a. p and not p
b. ((p or q) and not r) if and only if
((if p then r) and (if q then r)
1.5 Kalimat Berkuantor
Kalimat berkuantor adalah pernyataan yang memuat
ekspresi kuantitas obyek yang terlibat. Misalnya: semua,
ada, beberapa, tidak semua, dan lain-lain. Ada dua
macam kuantor yaitu:
1.Universal Quantifier (for all ...)
Kuantor universal mempunyai makna umum atau
menyeluruh. Notasi yang digunakan adalah ∀ yang
dibaca sebagai semua, seluruh atau setiap.
Penulisannya: ∀x ∈ S → p(x), dibaca semua x dalam
semesta S mempunyai sifat p.
Contoh:
1. Tiap-tiap orang yang hidup di dunia akan mati
2. Seluruh pelajar pasti pandai
Page 25
25
2.Existential Quantifier (for some ...)
Kuantor eksistensial mempunyai makna khusus atau
sebagian. Notasi yang digunakan adalah ∃ yang dibaca
terdapat, ada, atau beberapa. Penulisannya ∃y ∈S →
q(y), dibaca terdapat y dalam semesta S mempunyai
sifat q.
Contoh:
Beberapa mahasiswa yang menempuh mata kuliah
Logika dan Algoritma mendapat nilai A.
1.5.1 Ingkaran Kalimat Berkuantor
Terdapat dua ketentuan yaitu:
1.Apabila kalimatnya memuat kuantor universal maka
ingkarannya menjadi kuantor eksistensial dan sifatnya
diingkari.
~((∀x) p(x)) = (∃ x) (~p(x))
Contoh:
p : Semua mahasiswa Informatika harus kreatif.
~p : Ada mahasiswa Informatika yang tidak kreatif.
2.Apabila kalimatnya memuat kuantor eksistensial maka
ingkarannya menjadi kuantor universal dan sifatnya
diingkari.
Page 26
26
~((∃y) q(y)) = (∀y) (~q(y))
Contoh:
q : Ada pejabat yang korupsi.
~p : Semua pejabat tidak korupsi.
1.6Pembuatan Kesimpulan Berdasarkan
Implikasi
1.Modus Ponens
p→q
p
q
Contoh:
Jika seseorang itu adalah mahasiswa maka ia pasti
pandai
Naufal adalah seorang mahasiswa
Naufal pasti pandai
2. Modus Tollens
p→q
~q
~p
Page 27
27
Contoh:
Jika seseorang itu adalah pejabat yang baik maka
ia pasti tidak korupsi
Bapak X korupsi
Bapak X bukan pejabat yang baik
3.Prinsip Syllogisme
p→q
q→r
p→r
Contoh:
Jika ia rajin maka ia pasti pandai
Jika ia pandai maka ia pasti sukses
Jika ia rajin maka ia pasti sukses
1.7Latihan
1.Buktikan jika implikasi bernilai benar maka konvers,
invers, dan kontraposisinya belum tentu bernilai
benar.
2.Apabila terdapat n buah proposisi penyusun maka
sentence yang dihasilkan akan mempunyai berapa
Page 28
28
kemungkinan nilai kebenaran ?
3.Tentukan nilai kebenaran dari kalimat logika berikut
menggunakan tabel kebenaran:
a. (p and q) if and only if (p and q)
b. if (if p then q) then q
c. ((p or q) and not r) if and only if
(if p then r) and (if q then r)
d. ((if p then q) and (if q then p) if
and only if (q or not p)
e. (p and (if r then s)) if and only if
((if r then s) and p)
f. (if (p and q) then (not r or not s)
else not (r and s)) if and only if
(if r then not s)
g. if (if q then not p) or not q) then
(p if and only if q) else not r
4.Diketahui suatu kalimat logika sebagai berikut :
if(p and q) then (r and not p) else
(r and not q)
a. Jika diketahui interpretasi p, q, r semua false
maka tentukan kebenaran kalimat tersebut.
b)Tentukan suatu interpretasi (selain p, q, r semua
false) sedemikian kalimat tersebut bernilai true.
Page 29
29
5.Diketahui suatu kalimat logika sebagai berikut :
if(p and q) then (if r then s) if
and only if if p then (q or not r
or s)
a. Tentukan nilai kebenaran kalimat tersebut jika
p=true, q=false, r=true, s=true.
b. Tentukan suatu interpretasi sedemikian kalimat
tersebut bernilai false.
6.Jika kalimat 'if p then q' bernilai false maka
tentukan kebenaran kalimat berikut: if (not p or
not q) then q
7.Jika kalimat 'if p then q' bernilai true maka
tentukan kebenaran kalimat berikut: not p or (if
p then q)
8.Buktikan bahwa sentence berikut memiliki sifat valid
(p and (if r then s)) if and only if
((if r then s) and p)
9.Jika diberikan interpretasi p, q, dan r berturut turut
adalah True, False, dan True. Tentukan truth value
dari sentence berikut:
Page 30
30
a. if ((if q then not p) or not q) then
(p if and only if q) else not r
b. if (if p then (if q then r)) then
(if(if p then q) else (if p then
r))
10.Jika diberikan dua implikasi seperti berikut:
a. if (p or q) or not (p or q) then
((f and g) if and only if (g and f)
b. if ((f and g) if and only if (g
and f) then ( p and not p)
Tentukan kesimpulannya dengan menggunakan
prinsip Syllogisme, serta berikan truth value-nya
dengan menggunakan truth table.
11.Dengan menggunakan sifat-sifat aljabar logika,
tentukan validitas dari kalimat logika berikut ini:
a. if (if r then (if q then p)) then
(if (if r then q) then (if r then
p))
b. if (if not q then not p) then (if p
then q)
c. if (if p then (if q then r)) then
(if (if p then q) then (if p then
Page 31
31
r))
d. (if ((p and q) or (p and r)) then
s) if and only if (not p or (not q
and not r) or s)
12.Diberikan kalimat logika sebagai berikut:
((p or q) or q) if and only if (if p
then (p and r))
Tentukan semua interpretasi untuk p, q, dan r yang
akan mengakibatkan kalimat di atas bernilai benar.
13.Berikan suatu interpretasi untuk setiap proposisi
penyusunnya supaya kalimat logika berikut bernilai
false.
if (p and q) then (r or s)
14.Interpretasi p, q dan r berturut-turut adalah true, false
dan true. Tentukan nilai kebenaran dari kalimat
berikut:
if ((q then not p) or not q) then (p
if and only if q) else r
15.Dengan menggunakan sifat-sifat aljabar logika,
tentukan sifat dari kalimat berikut:
((p or q) and not r) if and only if
Page 32
32
((if p then r) and (if q then r))
16.Dapatkah saudara menentukan suatu interpretasi untuk
p, q, r, s agar kalimat-kalimat di bawah ini
bernilai false?
a. if (p and q) then (not r or not s)
else ((not r and not s) if and only
if (if r then not s)
b. (if ((p and q) or (p and r)) then
s) if and only if (not p or (not q
and not r)) or s)
17.Dapatkah saudara menentukan suatu interpretasi untuk
p, q, r agar kalimat di bawah ini bernilai true?
(if p then q else r) if and only if
(if not q then not p else not r)
18.Buktikan bahwa Modus Ponnens, Modus Tollens dan
Prinsip Syllogism merupakan kalimat yang valid.
Page 33
33

Bab 2
Algoritma
Tujuan pembelajaran umum:
1. memahami penggunaan algoritma dalam
menyelesaikan permasalahan
2. memahami alur dan syarat pembuatan algoritma
yang baik
3. membuat algoritma untuk menyelesaikan suatu
permasalahan.
Pada saat kita dihadapkan dengan suatu masalah maka
tindakan
kita
selanjutnya
adalah
mencari
penyelesaiannya. Sekarang kita tidak langsung
memecahkan masalah dengan langsung menuliskan
solusinya berupa program dalam suatu bahasa
pemrograman, namun suatu cara penyelesaian masalah
yang akan diprogram dengan menekankan pada desain
atau rancangan yang mewakili pemecahan masalah.
Page 34
34
Masalah --------------> Algoritma --------------> Penyelesaian
Pemecahan Masalah
Tahap Implementasi
(Fase Problem Solving) (Fase Implementasi)
Algoritma mempunyai peranan yang sangat penting
dalam bidang teknik informatika pada umumnya dan
bidang pemrograman pada khususnya. Algoritma
membantu mahasiswa mengembangkan daya penalaran
atau kerangka berpikir yang sistematis dalam memahami
masalah dan membuat perencanaan atau konsep
pemecahan masalah yang lebih baik sehingga dapat
menghasilkan yang tepat pula.
2.1 Algoritma
Algoritma merupakan urutan atau deskripsi langkah-
langkah penyelesaian masalah yang tersusun secara logis,
ditulis dengan notasi yang mudah dimengerti sedemikian
hingga langkah-langkah tersebut dapat dilaksanakan oleh
pemroses. Algoritma mencerminkan cara berpikir
pemrogram dalam menyelesaikan masalah dalam hal ini
konsep logika menyelesaikan suatu masalah, sedangkan
program merupakan realisasi algoritma dalam bahasa
pemrograman, dengan kata lain program adalah
implementasi algoritma dalam bahasa pemrograman
Page 35
35
tertentu. Dengan membuat algoritma akan
mempermudah pemrogram dalam mengkonversikan suatu
permasalahan ke dalam bahasa pemrograman karena
dalam algoritma tersebut telah tertuang langkah-langkah,
konsep-konsep maupun dasar dalam scripting program
yang akan dibuat. Algoritma yang ditulis merupakan
sketsa program atau desain pemecahan masalah yang
akan direalisasikan menjadi suatu program. Jika
algoritmanya benar dan dapat dipertanggungjawabkan
maka sudah pasti scripting program tersebut dalam
operasi logikanya juga benar.
Pembuatan algoritma mempunyai banyak keuntungan
diantaranya:
1.Pembuatan atau penulisan algoritma tidak tergantung
pada bahasa pemrograman manapun, artinya
penulisan algoritma independen dari bahasa
pemrograman dan komputer yang mengeksekusinya.
2.Notasi algoritmik dapat diterjemahkan ke dalam
berbagai bahasa pemrograman.
3.Apapun bahasa pemrogramannya, output yang akan
dikeluarkan sama karena algoritmanya sama.
Beberapa hal yang perlu dalam membuat algoritma
Page 36
36
diperhatikan:
1.Teks algoritma berisi deskripsi langkah-langkah
penyelesaian masalah. Deskripsi tersebut dapat ditulis
dalam notasi apapun asalkan mudah dimengerti dan
dipahami.
2.Tidak ada notasi yang baku dalam penulisan teks
algoritma seperti pada notasi bahasa pemrograman.
Notasi yang digunakan dalam menulis algoritma
disebut notasi algoritmik.
3.Tiap orang dapat membuat aturan penulisan dan notasi
algoritmik sendiri. Hal ini karena teks algoritma tidak
sama dengan teks program. Namun supaya notasi
algoritmik mudah ditranslasikan ke dalam notasi
bahasa pemrograman tertentu, maka sebaiknya notasi
algoritmik tersebut berkorespondensi dengan notasi
bahasa pemrograman secara umum.
4.Notasi algoritmik bukan notasi bahasa pemrograman,
karena itu pseudocode dalam notasi algoritmik tidak
dapat dijalankan oleh komputer. Agar dapat dijalankan
oleh komputer, pseudocode dalam notasi algoritmik
harus ditranslasikan atau diterjemahkan ke dalam
notasi bahasa pemrograman yang dipilih. Perlu diingat
bahwa orang yang menulis program sangat terikat
dalam aturan tata bahasanya dan spesifikasi mesin
Page 37
37
yang menjalankannya.
5.Algoritma sebenarnya digunakan untuk membantu kita
dalam mengkonversikan suatu permasalahan ke dalam
bahasa pemrograman.
6.Algoritma merupakan hasil pemikiran konseptual,
supaya dapat dilaksanakan oleh komputer, algoritma
harus ditranslasi ke dalam notasi bahasa
pemrograman. Ada beberapa hal yang harus
diperhatikan ketika translasi tersebut yaitu:
a)Pendeklarasian variabel.
Apakah bahasa pemrograman yang akan digunakan
membutuhkan pendeklarasian variabel karena tidak
semua bahasa pemrograman membutuhkannya.
b)Pemilihan tipe data.
Apabila bahasa pemrograman yang akan digunakan
membutuhkan pendeklarasian variabel maka perlu
dipertimbangkan pada saat pemilihan tipe data.
c)Pemakaian instruksi-instruksi.
Beberapa instruksi mempunyai kegunaan yang
sama tetapi masing-masing memiliki kelebihan dan
kekurangan yang berbeda.
d)Aturan sintaks.
Pada saat menulis program kita terikat dengan
Page 38
38
aturan sintaks dari bahasa pemrograman yang akan
digunakan.
e)Tampilan hasil.
Pada saat membuat algoritma kita tidak
memikirkan tampilan hasil yang akan disajikan.
Hal-hal teknis ini kita perhatikan ketika
mengkonversikannya menjadi program.
f)Cara pengopersian compiler atau interpreter.
Bahasa pemrograman yang digunakan termasuk
kelompok compiler atau interpreter.
2.2 Penyajian Algoritma
Penyajian algoritma secara garis besar bisa dalam 2
bentuk penyajian yaitu tulisan dan gambar.
Algoritma yang disajikan dengan tulisan yaitu dengan
struktur bahasa tertentu (misalnya bahasa Indonesia atau
bahasa Inggris) dan pseudocode. Pseudocode adalah kode
yang mirip dengan kode pemrograman yang sebenarnya.
Pseudocode ditulis berbasis pada bahasa pemrograman
tertentu misalnya Pascal, C atau Python, sehingga lebih
tepat digunakan untuk menggambarkan algoritma yang
akan dikomunikasikan kepada pemrogram. Pseudocode
lebih rinci daripada struktur bahasa Inggris, misalnya
Page 39
39
dalam menyatakan sintaks, tipe data yang digunakan dan
lain-lain. Sedangkan algoritma yang disajikan dengan
gambar, misalnya dengan flowchart. Flowchart bukan
satu-satunya cara untuk menjelaskan atau menerangkan
algoritma. Cara yang lain diantaranya :
1.Structure chart
2.DFD (Data Flow Diagram)
3.Warnier diagram
4.IPO (Input Process Output)
5.HIPO (Hierarchical Input Process Output)
Flowchart (bagan alir) merupakan representasi secara
grafik dari suatu algoritma atau prosedur untuk
menyelesaikan suatu masalah. Dengan menggunakan
flowchart akan memudahkan kita untuk melakukan
pengecekan apakah ada bagian-bagian yang terlupakan
dalam analisis masalah. Di samping itu flowchart juga
berguna sebagai fasilitas untuk berkomunikasi antara
pemrogram yang bekerja dalam tim suatu proyek.
Flowchart ada dua macam :
1.Flowchart Sistem
Yaitu diagram alir yang menggambarkan suatu sistem
peralatan komputer yang digunakan dalam proses
pengolahan data dan hubungan antar peralatan
Page 40
40
tersebut. Flowchart sistem digunakan untuk
menggambarkan urutan langkah untuk memecahkan
masalah tetapi hanya untuk menggambarkan prosedur
dalam sistem yang dibentuk.
Simbol yang digunakan :
Contoh :
Page 41
41
2. Flowchart program
Yaitu bagan yang menggambarkan urutan logika dari
suatu prosedur pemecahan masalah.
Simbol yang digunakan adalah American National
Standard Inc.:
Page 42
42
: (terminal symbol), menunjukkan awal dan
akhir dari program
: (preparation symbol), memberikan niai
awal pada suatu variabel atau counter
: (processing symbol), menunjukkan
pengolahan aritmatika dan pemindahan data
: (input/output symbol), menunjukkan proses
input atau output
: (decision symbol), untuk mewakili operasi
perbandingan logika
: (predefined process symbol), proses yang
ditulis sebagai sub program, yaitu
prosedur/ fungsi
: (connector symbol), penghubung pada
halaman yang sama
: (off page connector symbol), penghubung
pada halaman yang berbeda
: arah proses
Contoh kasus :
1.Menghitung rata-rata tiga buah data
a.Algoritma dengan struktur bahasa Indonesia
Page 43
43
- Baca bilangan a, b, dan c
- Jumlahkan ketiga bilangan tersebut
- Bagi jumlah tersebut dengan 3
- Tulis hasilnya
b.Algoritma dengan pseudocode
input (a,b,c)
Jml = a+b+c
Rerata = Jml/3
output (Rerata)
c. Algoritma dengan flowchart
Gambar 2.1 Flowchart Hitung Rata-Rata
End
Start
Input (a,b,c)
Jml = a+b+c
Output (Rerata)
Rerata = Jml/3

Page 44
44
2.Algoritma mencetak tiket parkir.
Penyelesaian menggunakan flowchart:
End
Start
Baca waktu masuk, waktu keluar, jenis
kendaraan, biaya perjam (sesuai dgn
jenis kendaraan)
Lama parkir = waktu keluar – wWaktu masuk
Biaya parkir = lama parkir * biaya perjam
Cetak Tiket
(memuat data-data tentang waktu masuk,
waktu keluar, jenis kendaraan dan biaya)

Page 45
45
Gambar 2.2 Flowchart Cetak Tiket Parkir
4.Algoritma konversi suhu dalam derajat Celcius ke
derajat Kalvin.
Penyelesaian menggunakan pseudocode:
input (Celcius)
Kalvin = Celcius + 273
output (Kalvin)
2.3Tahap-Tahap Pemrograman
Sebelumnya perlu dipahami tiga
pengertian pokok yakni program, bahasa pemrograman
dan pemrograman. Program adalah kata, ekspresi,
pernyataan yang disusun dan dirangkai menjadi satu
kesatuan prosedur yang berupa urutan langkah untuk
menyelesaikan masalah yang diimplementasikan dengan
menggunakan bahasa pemrograman sehingga dapat
dieksekusi oleh komputer. Bahasa pemrograman adalah
prosedur atau tata cara penulisan program. Sedangkan
pemrograman adalah proses mengimplementasikan
urutan langkah untuk menyelesaikan suatu masalah
dengan menggunakan suatu bahasa pemrograman.
Page 46
46
Pemrograman meliputi dua tahapan yaitu:
1.Fase Problem Solving
2.Fase Implementation
Fase I
Fase II
Fase Problem Solving
Fase Implementasi
Gambar 2.3 Tahapan Pemrograman
Langkah-langkah untuk dapat menyelesaikan masalah
Analisa Problem
Perancangan
Algoritma
Test
Pembuatan
Program
Test
Dokumentasi
Dipakai
Page 47
47
adalah sebagai berikut:
1.Memahami atau menganalisis masalah
Hal-hal yang harus diketahui dalam analisis masalah
supaya kita mengetahui bagaimana permasalahan
tersebut:
a)Kondisi awal, yaitu input yang tersedia.
b)Kondisi akhir, yaitu output yang diinginkan
c)Data lain yang tersedia
d)Operator yang tersedia
e)Syarat atau kendala yang harus dipenuhi
Contoh kasus 1:
Menghitung biaya percakapan telepon di wartel.
a)Input yang tersedia adalah jam mulai bicara dan jam
selesai bicara.
b)Output yang diinginkan adalah biaya percakapan.
c)Data lain yang tersedia adalah besarnya pulsa yang
digunakan dan biaya per pulsa.
d)Operator yang tersedia adalah pengurangan (-),
penambahan (+) dan perkalian (*).
e)Syarat kendala yang harus dipenuhi adalah aturan
jarak dan aturan waktu.
Page 48
48
Contoh kasus 2:
Menghitung luas dan keliling lingkaran.
a)Input yang tersedia adalah jari-jari lingkaran.
b)Output yang diinginkan adalah luas dan keliling
lingkaran.
c)Data lain yang tersedia adalah nilai phi (3.14).
d)Operator yang tersedia adalah perkalian (*).
e)Syarat kendala yang harus dipenuhi tidak ada.
2.Merancang atau merumuskan algoritma
Bila masalahnya kompleks maka kita bagi ke dalam
modul-modul. Tahap penyusunan algoritma seringkali
dimulai dari langkah yang global terlebih dahulu.
Langkah global ini diperhalus sampai menjadi langkah
yang lebih rinci atau detail. Cara pendekatan ini sangat
bermanfaat dalam membuat algoritma untuk masalah
yang kompleks. Penghalusan lanngkah dengan cara
memecah langkah menjadi beberapa langkah. Tiap
langkah diuraikan lagi menjadi beberapa langkah yang
lebih sederhana. Penghalusan langkah ini akan terus
berlanjut sampai setiap langkah sudah cukup rinci dan
tepat untuk dilaksanakan oleh pemroses.
Contoh kasus:
Page 49
49
Algoritma menghitung lama percakapan di wartel.
A1 : Baca jam mulai (jm:mm:dm)
A2 : Baca jam selesai (js:ms:ds)
A3 : Hitung selisih (jm:mm:dm) dengan (js:ms:ds)
js-jm : ms-mm : ds-dm
A4 : Tulis hasil.
Hasil tersebut mudah manakala :
jam mulai bicara = 10:12:30
jam selesai bicara = 10:20:32
Lama bicara : 10:20:32
10:12:30
0: 8: 2
Masalah akan muncul apabila :
jam mulai bicara = 10:50:28
jam selesai bicara = 11:10:15
Lama bicara : 11:10:15
10:50:28
1:-40:-13
Disini memuat negatif, masalah muncul karena
Page 50
50
ms<mm dan ds<dm. Solusinya semua jam dihitung
total detiknya, total detik jam selesai bicara
dikurangkan total detik jam mulai bicara kemudian
dikonversikan kembali dalam format jam : menit :
detik.
A1 : Baca jam mulai (jm:mm:dm)
A2 : Baca jam selesai (js:ms:ds)
A3.1 : Konversikan jam mulai bicara ke dalam total
detik.
totdetmulai=(jm*3600)+(mm*60)+dm
A3.2 : Konversikan jam selesai bicara ke dalam total
detik.
totdetselesai=(js*3600)+(ms*60)+ds
A3.3 : Hitung selisih jam mulai bicara dan jam selesai
bicara dalam detik.
totdetbicara = totdetselesai – totdetmulai
A3.4 : Konversikan lama bicara ke dalam format jam :
menit : detik
jb = totdetbicara div 3600
sisa = totdetbicara mod 3600
mb = sisa div 60
db = sisa mod 60
A4 : Tulis hasil (jb:mb:db).
Page 51
51
Masalah baru akan muncul apabila :
jam mulai bicara = 23:58:30
jam selesai bicara = 01:04:12
Muncul masalah karena js<jm sehingga nilai
totdetselesai lebih kecil daripada totdetmulai,
akibatnya totdetbicara bernilai negatif. Sebagai
solusinya js harus ditambah dengan 24.
A1 : Baca jam mulai (jm:mm:dm)
A2 : Baca jam selesai (js:ms:ds)
A3.0 : Jika js<jm maka js=js+24
A3.1 : Konversikan jam mulai bicara ke dalam total
detik.
totdetmulai=(jm*3600)+(mm*60)+dm
A3.2 : Konversikan jam selesai bicara ke dalam total
detik.
totdetselesai=(js*3600)+(ms*60)+ds
A3.3 : Hitung selisih jam mulai bicara dan jam selesai
bicara dalam detik.
totdetbicara = totdetselesai – totdetmulai
A3.4 : Konversikan lama bicara ke dalam format jam :
menit : detik
Page 52
52
jb = totdetbicara div 3600
sisa = totdetbicara mod 3600
mb = sisa div 60
db = sisa mod 60
A4 : Tulis hasil (jb:mb:db).
Ciri-ciri algoritma yang baik :
a)Precise (tepat, betul, teliti)
Setiap instruksi harus ditulis dengan seksama dan
tidak ada keragu-raguan, dengan demikian setiap
instruksi harus dinyatakan secara eksplisit dan
tidak ada bagian yang dihilangkan karena
pemroses dianggap sudah mengerti. Setiap
langkah harus jelas dan pasti.
Contoh: Tambahkan 1 atau 2 pada x.
Instruksi di atas terdapat keraguan.
b)Jumlah langkah atau instruksi berhingga dan
tertentu.
Artinya untuk kasus yang sama, banyaknya
langkah tetap dan tertentu meskipun datanya
berbeda.
c)Efektif
Tidak boleh ada instruksi yang tidak mungkin
Page 53
53
dikerjakan oleh pemroses yang akan
menjalankannya.
Contoh: Hitung akar 2 dengan presisi sempurna.
Instruksi di atas tidak efektif, agar efektif instruksi
tersebut diubah. Misal: Hitung akar 2 sampai lima
digit di belakang koma.
d)Harus terminate
Jalannya algoritma harus ada kriteria berhenti.
Pertanyaannya adalah apakah apabila jumlah
instruksinya berhingga maka pasti terminate?
e)Output yang dihasilkan tepat
Jika langkah-langkah algoritmanya logis dan
diikuti dengan seksama maka dihasilkan output
yang diinginkan.
3.Menulis program
Algoritma yang telah dibuat diterjemahkan dalam
bahasa komputer menjadi sebuah program. Perlu
diperhatikan bahwa pemilihan algoritma yang salah
akan menyebabkan program memiki unjuk kerja yang
kurang baik. Program yang baik memiliki standar
penilaian :
a. Standar teknik pemecahan masalah
Page 54
54
a.Teknik Top-Down
Teknik pemecahan masalah yang paling
umum digunakan. Prinsipnya adalah suatu
masalah yang kompleks dibagi-bagi ke
dalam beberapa kelompok masalah yang
lebih kecil. Dari masalah yang kecil
tersebut dilakukan analisis. Jika
dimungkinkan maka masalah tersebut
akan dipilah lagi menjadi subbagian-
subbagian dan setelah itu mulai disusun
langkah-langkah untuk penyelesaiannya
secara lebih detail.
b.Teknik Bottom-Up
Prinsip teknik bottom up adalah
pemecahan masalah yang kompleks
dilakukan dengan menggabungkan
prosedur-prosedur yang ada menjadi satu
kesatuan program sebagai penyelesaian
masalah tersebut.
b. Standar penyusunan program
a.Kebenaran logika dan penulisan
b.Waktu minimum untuk penulisan program
c.Kecepatan maksimum eksekusi program
Page 55
55
d.Ekspresi penggunaan memori
e.Kemudahan merawat dan mengembangkan
program
f.User friendly
g.Portability
h.Pemrograman modular
c. Standar perawatan program
a.Dokumentasi
b.Penulisan instruksi
d. Standar prosedur
4.Uji hasil
Pertama kali harus diuji apakah program dapat
dijalankan. Apabila program tidak dapat dijalankan
maka perlu diperbaiki penulisan sintaksnya tetapi bila
program dapat dijalankan maka harus diuji dengan
menggunakan data-data yang biasa yaitu data yang
diharapkan oleh sistem yang dibuat maupun data-data
yang ekstrem yaitu data yang tidak diharapkan oleh
sistem. Contoh data ekstrem misalnya program
menghendaki masukan jumlah data tetapi user
mengisikan dengan bilangan negatif. Program
sebaiknya diuji menggunakan data yang relatif
banyak.
Page 56
56
Contoh kasus:
Menghitung luas persegi panjang.
a)Baca panjang dan lebar (P,L)
b)Hitung luas (Luas = P + L)
c)Cetak hasil
Misalkan algoritma di atas dites dengan data panjang
= 2 dan lebar = 2. Luas yang dihasilkan sama dengan
4. Apabila kita menguji hanya dengan data tersebut
maka bisa jadi kita beranggapan bahwa algoritma tadi
sudah benar karena 2 x 2 = 4. Padahal tanpa kita
sadari langkah yang ditulis adalah Luas = P + L dan
bukan Luas = P x L. Hal ini terjadi karena salah
dalam memilih data untuk melakukan test.
5.Membuat dokumentasi
Dokumentasi program ada dua macam yaitu
dokumentasi internal dan dokumentasi eksternal.
Dokumentasi internal adalah dokumentasi yang dibuat
di dalam program yakni setiap kita menuliskan baris
program sebaiknya kita beri komentar atau keterangan
supaya mempermudah kita untuk mengingat logika
yang terdapat dalam instruksi tersebut, hal ini sangat
Page 57
57
bermanfaat ketika suatu saat program tersebut akan
dikembangkan. Dokumentasi eksternal adalah
dokumentasi program yang dilakukan dari luar
program yaitu membuat user guide atau tbuku
petunjuk aturan atau cara menjalankan program
tersebut.
6.Program dipakai
2.4 Struktur Dasar Algoritma
Algoritma berisi langkah-langkah penyelesaian suatu
masalah. Langkah-langkah tersebut dapat berupa
runtunan aksi (sequence), pemilihan aksi (selection),
pengulangan aksi (iteration) atau kombinasi dari
ketiganya. Jadi struktur dasar pembangun algoritma ada
tiga, yaitu :
1.Struktur Runtunan
Digunakan untuk program yang instruksinya
sequential atau urutan.
2.Struktur Pemilihan
Digunakan untuk program yang menggunakan
pemilihan atau penyeleksian kondisi.
Page 58
58
3.Struktur Perulangan
Digunakan untuk program yang instruksinya akan
dieksekusi berulang-ulang.
2.5 Latihan
1.Belajar memprogram dan belajar bahasa pemrograman
adalah dua hal yang berbeda. Jelaskan.
2.Buatlah pseudocode dan flowchart untuk menghitung
rata-rata dari sepuluh bilangan yang diinputkan oleh
user.
3.Buatlah pseudocode dan flowchart untuk menghitung
volume bola.
4.Buatlah pseudocode dan flowchart untuk menentukan
suatu bilangan bulat positif, ganjil atau genap.
5.Buatlah pseudocode
dan flowchart untuk
menenampilkan sepuluh bilangan ganjil pertama.
6.Buatlah pseudocode dan flowchart untuk mengurutkan
tiga buah kartu.
Page 59
59

Bab 3
Struktur Runtunan
Tujuan Pembelajaran Umum:
1. Memahami struktur dasar algoritma runtunan
2. Membuat algoritma runtunan untuk menyelesaikan
suatu permasalahan mengunakan flowchart
3.1 Runtunan
Suatu masalah yang diselesaikan menggunakan struktur
runtunan mempunyai logika bahwa setiap instruksi akan
dikerjakan satu persatu. Setiap instruksi dilaksanakan
tepat satu kali, tidak ada instruksi yang diulang maupun
tidak dilaksanakan. Urutan instruksi yang dilaksanakan
pemroses sama dengan urutan aksi sebagaimana yang
tertulis di dalam teks algoritmanya. Akhir dari instruksi
terakhir merupakan akhir algoritma. Bila runtunan
instruksi dalam algoritma berturut-turut dilambangkan
dengan A1, A2, A3, A4, dan A5, maka pelaksanaan
instruksi tersebut adalah :
Page 60
60
Gambar 3.1 Flowchart Runtunan
Perhatikan runtunan instruksi yang dilambangkan dengan
A1, A2,
A3, A4
dan A5. Mula-mula pemroses
melaksanakan instruksi A1. Instruksi A2 dilaksanakan
setelah instruksi A1 selesai. Selanjutnya instruksi A3
dilaksanakan setelah instruksi A2 selesai, dan seterusnya
sampai terakhir instruksi A5
dilaksanakan. Setelah
instruksi A5 selesai dilaksanakan, algoritma berhenti.
Urutan penulisan instruksi di dalam algoritma penting
sekali diperhatikan karena urutan instruksi yang berbeda
dalam struktur runtunan dapat menghasilkan keluaran
yang berbeda juga. Urutan langkah di dalam struktur
runtunan mencerminkan cara berpikir penyusun algoritma
Page 61
61
tersebut dalam menuliskan langkah-langkah penyelesaian
masalah. Output dari aksi sebelumnya menjadi input bagi
aksi berikutnya. Sebagai contoh perhatikan dua algoritma
berikut :
Algoritma pertama
A = 10
A = A2+2
B=A–5
C=A+B+3
C=C+5
Output (A,B,C)
Algoritma pertama menghasilkan keluaran:
A = 102
B = 97
C = 207
Algoritma kedua
A = 10
B=A–5
A = A2+2
C=A+B+3
C=C+5
Output (A,B,C)
Page 62
62
Algoritma pertama menghasilkan keluaran:
A = 102
B=5
C = 115
4.2 Contoh-Contoh Kasus Runtunan
1.Menghitung luas persegi panjang dimana besarnya
panjang dan lebar persegi panjang dimasukkan melalui
keyboard.
Jawab :
a.Algoritma dengan struktur bahasa Indonesia
- Masukkan panjang dan lebar
- Kalikan panjang dengan lebar dan simpan
hasilnya sebagai luas.
- Tulis hasilnya
b.Algoritma dengan pseudocode
input (P,L)
Luas = P * L
output (Luas)
c.Algoritma dengan flowchart
Page 63
63
Gambar 3.2 Flowchart Hitung Luas Persegi Panjang
2.Menghitung nilai rata-rata dari dua buah data.
Jawab :
Algoritma menggunakan pseudocode
input (x,y)
Rerata = (x + y)/2
output (Rerata)
3.Menghitung luas dan keliling lingkaran dengan
besarnya jari-jari lingkaran dimasukkan melalui
keyboard.
Page 64
64
Jawab :
a. Algoritma dengan struktur bahasa Indonesia
- Tentukan nilai phi sama dengan 3.14
- Masukkan jari-jari lingkaran
- Kalikan phi dengan kuadrat dari jari-jarinya dan
simpan hasilnya sebagai luas.
- Kalikan phi dengan dua kali jari-jarinya dan
simpan hasilnya sebagai keliling.
- Tulis hasilnya
b. Algoritma dengan pseudocode
phi = 3.14
input ( R )
L = phi * R * R
K = 2 * phi * R
output (L,K)
c. Algoritma dengan flowchart
Input ( R )
Start
phi = 3.14

Page 65
65
Gambar 3.3 Flowchart Hitung Luas dan Keliling
Lingkaran
4. Konversi total detik menjadi berapa jam lebih berapa
menit lebih berapa detik.
Jawab :
a. Algoritma dengan struktur bahasa Indonesia
- Baca data atau total detik (misalkan Dt)
- Bagilah Dt dengan 3600 (misalkan hasil sama
dengan J dan sisa hasil bagi sama dengan S)
- Bagilah S dengan 60 (misalkan hasil sama
dengan M dan sisa hasil bagi sama dengan D)
Page 66
66
- Tulis hasilnya (J, M, D)
b. Algoritma dengan pseudocode
input (Dt)
J = Dt div 3600
S = Dt mod 3600
M = S div 60
D = S mod 60
output (J, M, D)
c. Algoritma dengan flowchart
Page 67
67
Gambar 3.4 Flowchart Konversi Detik
5. Konversi jam, menit dan detik ke dalam total detik.
Jawab :
Algoritma dengan pseudocode:
input (J, M, D)
D1 = J * 3600
D2 = M * 60
Dtot = D1 + D2 + D
Page 68
68
output (Dtot)
6. Menghitung sisi miring dan keliling segitiga siku-siku
dengan sisi tegak dan sisi mendatar merupakan input dari
masukkan keyboard.
Jawab :
Algoritma dengan pseudocode
input(alas,tinggi)
sisimiring= sqrt(alas*alas
+tinggi*tinggi)
keliling = alas + tinggi + sisimiring
output(sisimiring,keliling)
7. Menukarkan 2 buah nilai A dan B
Jawab :
Algoritma dengan pseudocode
input (A,B)
A=B
B=A
output (A,B)
Algoritma di atas mempunyai logika yang salah.
Hasil dari pseudocode tersebut :
Page 69
69
Sebelum Pertukaran
Bilangan pertama = 14
Bilangan kedua = 32
Setelah Pertukaran
Bilangan pertama = 32
Bilangan kedua = 32
Supaya salah satu variabel nilainya tidak hilang
karena tertimpa oleh nilai dari variabel yang lain
maka sebelum ditukar nilai tersebut harus
diamankan terlebih dahulu yaitu disimpan di
variabel ketiga sebagai variabel bantu. Logikanya
mirip dengan pertukaran dua buah gelas yang berisi
cairan berwarna berbeda. Misalkan gelas pertama
berisi sirup berwarna biru sedangkan gelas kedua
berisi sirup berwarna kuning. Dua gelas tersebut
akan dipertukarkan isinya sehingga diperlukan gelas
ketiga untuk menampung isi salah satu gelas.
Setelah logika algoritma di atas diperbaiki:
input (A,B)
temp = A
A=B
B = temp
Page 70
70
output (A,B)
Proses mempertukarkan nilai A dan B dengan
menggunakan Temp sebagai tempat menyimpan
sementara nilai A.
Ilustrasi sebelum pertukaran
14
32
A
temp
B
Ilustrasi proses pertukaran
14
14
32
temp=A
A
temp
B
32
14
32
A=B
A
temp
B
32
14
14
B=temp
A
temp
B
Page 71
71
Ilustrasi setelah pertukaran
32
14
14
A
temp
B
Gambar 3.5 Ilustrasi Pertukaran Data
Setelah pertukaran nilai A dan B, nilai temp masih
berisi nilai semula yaitu 14. Hal ini karena pengisian
nilai A ke dalam temp sama dengan menyalin atau
mencopy nilai A ke dalam temp. A sendiri tidak
kehilangan nilai akibat pengisian nilai tersebut.
Sehingga pengisian nilai temp ke dalam B tetap
meninggalkan nilai di dalam temp yaitu 14.
8. Konversi penulisan sebuah huruf kecil menjadi huruf
besar.
Jawab :
Perlu menggunakan tabel ASCII (American Standard
Code for Information Interchange) yang memuat
secara lengkap daftar informasi karakter baku beserta
urutannya. Yang termasuk karakter adalah huruf
Page 72
72
alfabet ('A' .. 'Z', 'a' .. 'z'), angka bulat ('0' .. '9'),
operator aritmatika ('+', '-', '*', '/'), tanda baca ('.', ';', ',',
'?', '!', ':' dan lain-lain) serta karakter-karakter khusus
('@', '#', '$', ' ', '%', dan lain-lain). Untuk mengetahui
posisi atau urutan suatu karakter yang ada dalam tabel
ASCII digunakan fungsi ordinal. Fungsi ini mencari
angka urutan dalam tabel ASCII yang digunakan untuk
melambangkan karakter tersebut. Fungsi ini tidak
dapat berdiri sendiri instruksinya, berarti
penggunaannya antara lain ditampung nilainya dalam
suatu variabel atau dilibatkan dalam instruksi lain
misalnya assignment, langsung dicetak atau
dimasukkan dalam ekspresi aritmatika. Bentuk umum
fungsi ordinal yaitu :
variabel=ord(argumen)
ord berarti ordinal dan argumen disini adalah karakter
yang akan dicari urutannya di tabel ASCII. Karakter
'A' terdapat pada urutan 65 dan 'Z' terdapat di posisi
90. Sedangkan 'a' pada posisi 97 serta 'z' pada posisi
122. Dengan demikian antara huruf besar dan huruf
kecil terpisah dengan jarak posisi 32. Tiap bilangan
bulat mempunyai sifat keterututan. Ini berarti bila
sebuah nilai bilangan bulat diketahui maka nilai
Page 73
73
sebelumnya (predecessor) dan nilai sesudahnya
(sucessor) dapat diketahui. Untuk mengetahui karakter
pada urutan tertentu dalam tabel ASCII digunakan
fungsi karakter dengan bentuk umum :
variabel=chr(argumen)
chr berarti character dan argumen disini adalah
informasi urutan atau posisi.
Algoritma dengan pseudocode
input (huruf_kecil)
posisi_hurufkecil = ord (huruf_kecil)
posisi_hurufbesar = posisi_hurufkecil – 32
huruf_besar = chr (posisi_hurufbesar)
output (huruf_besar)
Misal :
huruf_kecil = a
posisi_hurufkecil = ord ('a') = 97
posisi_hurufbesar = 97 – 32 = 65
huruf_besar = chr (65) = A
9. Buatlah program untuk mengkonversikan penulisan
sebuah huruf besar menjadi huruf kecil.
Jawab :
Page 74
74
Logikanya sama dengan contoh soal 9.
Algoritma dengan pseudocode
input (huruf_besar)
posisi_hurufbesar = ord (huruf_besar)
posisi_hurufkecil = posisi_hurufkecil +
32
huruf_kecil = chr (posisi_hurufkecil)
output (huruf_kecil)
Misal :
huruf_besar = A
posisi_hurufbesar = ord ('A') = 65
posisi_hurufkecil = 65 + 32 = 97
huruf_kecil = chr (97) = a
10. Program untuk mengkonversikan penulisan sebuah
karakter angka menjadi bilangan bulat.
Jawab :
Kita berpedoman bahwa karakter angka '0' dalam tabel
ASCII berada pada posisi 48. Disini angka 0 berupa
karakter sedangan nilai 48 adalah sebuah bilangan
bulat. Supaya angka 0 sebagai karakter dapat
ditampilkan sebagai angka 0 tetapi berstatus bilangan
bulat maka 48 harus dikurangi dengan dirinya sendiri
yaitu 48 sehingga menghasilkan bilangan 0.
Page 75
75
Algoritma dengan pseudocode
input (bil_karakter)
posisi_bilkarakter=ord(bil_karakter)
bil_bulat=posisi_bilkarakter–48
output (bil_bulat)
Misal :
bil_karakter = 1
posisi_bilkarakter = ord ('1') = 49
bil_bulat = 49 – 48 = 1
bil_bulat = 1
3.3 Latihan
1.Buatlah algoritma untuk menghitung lama pembicaraan
di telepon. Kemudian implementasikan algoritma
tersebut dalam bahasa Python.
2.Buatlah algoritma untuk menukar nilai dari tiga buah
bilangan. Kemudian implementasikan algoritma
tersebut dalam bahasa Python.
3.Buatlah algoritma untuk konversi derajat Celcius ke
derajat Reamur, Kalvin dan Fahrenheit. Kemudian
implementasikan algoritma tersebut dalam bahasa
Python.
Page 76
76

Bab 4
Struktur Pemilihan
Tujuan Pembelajaran Umum:
1.Memahami penggunaan struktur if dalam
pengambilan keputusan
2. Memahami penggunaan struktur switch dalam
pengambilan keputusan
3.Membuat algoritma program untuk mengambil
keputusan berdasarkan struktur pemilihan if dan
switch.
Penyelesaian masalah dengan struktur pemilihan atau
percabangan adalah suatu cara pemecahan masalah
dengan instruksi-instruksi tertentu yang dapat digunakan
untuk mengambil keputusan berdasarkan suatu kondisi.
Pernyataan percabangan memungkinkan suatu pernyataan
dieksekusi hanya jika suatu kondisi terpenuhi atau tidak
terpenuhi. Artinya tidak setiap baris atau langkah
algoritma akan dikerjakan. Suatu baris algoritma akan
Page 77
77
dikerjakan jika kondisinya memenuhi syarat. Struktur
pemilihan adalah struktur algoritma yang melakukan
proses pengujian untuk mengambil suatu keputusan atau
tindakan apakah suatu baris instruksi atau blok instruksi
akan diproses atau tidak. Contoh : Jika suatu bilangan
tidak habis dibagi 2 maka bilangan tersebut adalah
bilangan ganjil. Disini keputusan untuk menyatakan suatu
bilangan adalah ganjil berdasarkan kondisi jika bilangan
tersebut tidak habis dibagi 2.
Bentuk instruksi percabangan
1.Instruksi IF
a. Pernyataan IF Sederhana
b. Pernyataan IF-ELSE
c. Pernyataan IF Bertingkat
2.Instruksi SWITCH
4.1 Instruksi IF
Secara umum flowchartnya, sebagai berikut:
Page 78
78
Gambar 4.1 Flowchart Instruksi IF
4.1.1 Pernyataan IF Sederhana
Instruksi ini digunakan untuk memeriksa sebuah kondisi
dan akan mengeksekusi satu instruksi atau blok instruksi,
jika dan hanya jika kondisinya terpenuhi. Test kondisi ini
sering disebut test satu arah.
Bentuk umum pseudocode :
pernyataan_A
if <kondisi> then <pernyataan>
pernyataan_B
Page 79
79
atau
pernyataan_A
if <kondisi> then
<pernyataan1>
<pernyataan2>
...
<pernyataann>
endif
pernyataan_B
4.1.1.1 Instruksi IF dengan Syarat Tunggal
Instruksi ini digunakan untuk memeriksa sebuah kondisi
saja.
Contoh :
Untuk menyatakan mahasiswa lulus jika nilai akhir >=65
if (nilai=65) then write ('Lulus')
4.1.1.2 Instruksi IF dengan Syarat Majemuk
Instruksi ini adalah pernyataan IF yang menggunakan
pemeriksaan lebih dari satu kondisi. Kondisi-kondisi
tersebut dihubungkan dengan operator-operator logika
yaitu digunakan operator logika AND dan OR.
Page 80
80
Contoh :
1.Untuk menyatakan apakah mahasiswa dapat mengikuti
tes laboran apabila nilai mata kuliah yang
bersangkutan adalah B atau A.
if (nilai = 'A') or (nilai = 'B')
then
write('Dapat mengikuti tes asisten')
endif
2.Untuk menyatakan mahasiswa lulus jika nilai akhir
>=65 dan presensi kehadiran lebih dari 10 kali.
if (nilai>=65) and (presensi>=10)
then write('Lulus')
endif
Program merupakan pengimplementasian dari algoritma
yang ditulis dengan bahasa pemrograman, dengan
demikian program juga harus dapat mencabang, meloncat
atau berulang. Untuk melakukan langkah-langkah itu
maka program harus dikendalikan. Dengan menggunakan
perintah-perintah pengendali program maka hal tersebut
dapat dilakukan. Pengendalian program bahasa Python
seperti bahasa pemrograman lainnya dapat menggunakan
instruksi if dan if-else. Pada pengambilan keputusan
biasanya operator logika banyak digunakan.
Page 81
81
Perintah if digunakan untuk mewujudkan percabangan
bersyarat, di dalam bahasa Python pernyataan if
mempunyai bentuk dasar yaitu :
if kondisi:
pernyataan
4.1.2 Instruksi IF - ELSE
Instruksi ini digunakan untuk menentukan tindakan yang
akan digunakan apabila kondisi bernilai benar dan
tindakan yang akan digunakan apabila kondisi bernilai
salah.
Bentuk umum pseudocode :
pernyataan_A
if <kondisi> then <pernyataan1>
else <pernyataan2>
endif
pernyataan_B
Pengujian kondisi ini dilakukan untuk memilih salah satu
dari dua alternatif yang tersedia sehingga sering disebut
test dua arah. Secara flowchart dapat digambarkan seperti
berikut:
Page 82
82
Gambar 4.2 Flowchart Instruksi IF-ELSE
Instruksi percabangan if dengan else dalam Python
seperti di bawah ini
if kondisi :
pernyataan1
else : pernyataan2
4.2 Contoh-Contoh Kasus IF dan IF-
ELSE
1.Menentukan bilangan genap dan bilangan ganjil.
Page 83
83
Jawab :
Algoritma dengan pseudocode:
if (x mod 2 = 0) then
write(“x adalah bilangan genap”)
else write(“x adalah bilangan
ganjil”)
endif
2.Menentukan nilai absolut dari bilangan yang
dimasukkan melalui keyboard.
Jawab :
Algoritma dengan pseudocode
input (x)
if x>=0 then output (x)
else
x=x*-1
output (x)
atau :
input (x)
if x<0 then x=x*-1
output (x)
Page 84
84
4.3 Instruksi IF Bertingkat
Bentuk umum pseudocode:
if <kondisi_1> then <pernyataan_1>
else
if
<kondisi_2>
then
<pernyataan_2>
else
if
<kondisi_3>
then
<pernyataan_3>
.
.
.
else <pernyataan_m>
endif
endif
endif
4.4 Contoh-Contoh Kasus IF Bertingkat
1.Konversi huruf besar ke huruf kecil dan sebaliknya dari
huruf kecil ke huruf besar. Input adalah sembarang
huruf.
Jawab :
Page 85
85
Algoritma dengan pseudocode
Algoritma pertama:
input (huruf)
kode = ord (huruf)
if kode>=97 then kodebaru = kode –
32
else kodebaru = kode + 32
hurufbaru = chr (kodebaru)
output (hurufbaru)
Algoritma kedua:
input (huruf)
kode = ord (huruf)
if kode<=90 then kodebaru = kode +
32
else kodebaru = kode - 32
hurufbaru = chr (kodebaru)
output (hurufbaru)
Algoritma ketiga:
input (huruf)
kode = ord (huruf)
if kode>=65 and kode<=90 then
kodebaru = kode + 32
else kodebaru = kode - 32
hurufbaru = chr (kodebaru)
output (hurufbaru)
Page 86
86
Algoritma keempat:
input (huruf)
kode = ord (huruf)
if kode>=97 and kode<=122 then
kodebaru = kode - 32
else kodebaru = kode + 32
hurufbaru = chr (kodebaru)
output (hurufbaru)
2.Mencari data terbesar diantara tiga buah data.
Jawab :
Algoritma dengan pseudocode
input (A,B,C)
if A>=B then
if A>=C then output (A)
else output (C)
endif
else if B>=C then output (B)
else output (C)
endif
endif
3.Pengelompokan nilai dengan ketentuan:
Page 87
87
Jika nilai angka >= 90 maka nilai huruf = A
Jika nilai angka >= 80 maka nilai huruf = B
Jika nilai angka >= 70 maka nilai huruf = C
Jika nilai angka >= 60 maka nilai huruf = D
Jika nilai angka < 60 maka nilai huruf = E
Jawab :
Algoritma dengan pseudocode
input(grade)
if grade>=90 then write ("Nilai=A")
else if grade >= 80 then
write ("Nilai=B")
else if grade >= 70 then
write ("Nilai=C")
else if grade >= 60 then
write ("Nilai=D")
else write
("Nilai=E")
4.Konversi nilai huruf menjadi nilai angka.
Jawab :
Algoritma dengan pseudocode
Page 88
88
input (nilaihuruf)
if nilaihuruf='A' then
nilaiangka=4
else if nilaihuruf='B' then
nilaiangka=3
else if nilaihuruf='C' then
nilaiangka=2
else if nilaihuruf='D' then
nilaiangka=1
else if nilaihuruf='E'
then
nilaiangka=0
endif
endif
endif
endif
endif
output (nilaiangka)
5.Buatlah komentar kelulusan untuk teman anda.
Jawab :
Algoritma dengan pseudocode
input(na)
if na>=85 then
nh = 'A'
komentar='Anda layak dapat bintang'
else
if na>=70 and na<=84 then
Page 89
89
nh = 'B'
komentar='Good...Good...Good'
else
if na>=55 and na<= 69 then
nh = 'C'
komentar='Lumayan deh'
else
if na>=30 and na<= 54 then
nh = 'D'
komentar='Don't worry,
next time better'
else
if na<=29 then
nh = 'E'
komentar='Anda tidak lulus'
else
komentar='Nilai tidak dikenal'
endif
endif
endif
endif
endif
output (nh,komentar)
6.Buatlah program untuk mencari akar-akar dari
persamaan kuadrat ax
2
+ bx + c = 0.
Jawab :
Koefisien a, b, dan c bisa mempunyai sembarang nilai
termsuk nol. Akar-akar persamaan kuadrat bergantung
Page 90
90
dari nilai-nilai koefisiennya. Berdasarkan nilai-nilai
koefisien tersebut disusun kemungkinan-kemungkinan
sebagai berikut:
Bila koefisien a = 0 maka ax
2
+ bx + c = 0 bukan
persamaan kuadrat.
Perhitungan determinan D = b
2
–4ac.
Jika D negatif (D<0) maka ax
2
+ bx + c = 0
mempunyai akar imajiner. Dalam perhitungan,
komponen imajiner i akan diabaikan, tetapi akan
dicetak pada keluarannya sebagai status akar.
Jika D nol (D=0) maka ax
2
+ bx + c = 0 mempunyai
dua akar riil yang kembar yaitu:
x1=x2=-b/2a
Jika D positif (D>0) maka ax
2
+ bx + c = 0
mempunyai dua akar yang berlainan yaitu:
x1=(-b+sqrt(d))/2a
x2=(-b-sqrt(d))/2a
Algoritma dengan pseudocode
input (a,b,c)
if a=0 then
write ('Bukan persamaan kuadrat')
else
Page 91
91
D=(b*b)-(4*a*c)
if D<0 then write ('Akar imajiner')
else if D=0 then
x=-b/2*a
output (x)
else
x1=(-b+sqrt(d))/2*a
x2=(-b-sqrt(d))/2*a
output (x1,x2)
endif
endif
endif
7. Mengurutkan tiga huruf yang dimasukkan dari
keyboard dan user disediakan pilihan model penyajian
yaitu ascending atau descending.
Jawab
:
Tiga huruf yang dimasukkan bisa huruf besar semua,
huruf kecil semua atau kombinasi huruf besar dan
huruf kecil.
Algoritma dengan pseudocode
input (h1,h2,h3)
input (pilihan)
if pilihan=1 then
if h1>h2 then
Page 92
92
temp=h1
h1=h2
h2=temp
endif
if h1>h3 then
temp=h1
h1=h3
h3=temp
endif
if h2>h3 then
temp=h2
h2=h3
h3=temp
endif
endif
output (h1,h2,h3)
else if pilihan=2 then
if h1<h2 then
temp=h1
h1=h2
h2=temp
endif
if h1<h3 then
temp=h1
h1=h3
h3=temp
endif
if h2<h3 then
Page 93
93
temp=h2
h2=h3
h3=temp
endif
endif
output (h1,h2,h3)
8. Mencetak nama bulan berdasarkan nomor urutannya.
Jawab :
Algoritma dengan pseudocode
if (nobulan=1) then write ('Januari')
else
if
(nobulan=2)
then
write
('Februari')
else if (nobulan=3) then write ('Maret')
else if (nobulan=4) then write ('April')
else if (nobulan=5) then write ('Mei')
else if (nobulan=6) then write
('Juni')
else if (nobulan=7) then write
('Juli')
else if (nobulan=8) then
write ('Agustus')
else if (nobulan=9) then
write ('September')
else if (nobulan=10) then
write ('Oktober')
else if (nobulan=11) then
write ('Nopember')
else if (nobulan=12) then
Page 94
94
write ('Desember')
Untuk mempermudah pencarian kesalahan, sebaiknya
penulisan pseudocode tidak dibuat rata kiri.
4.5 Instruksi SWITCH
Pemilihan proses menggunakan instruksi IF selalu
didasarkan pada dua pilihan yang bisa terjadi. Dengan
demikian untuk mentest lebih dari dua pilihan harus
digunakan sejumlah instruksi IF seperti terlihat pada
bentuk umum instruksi IF untuk pilihan jamak. Struktur
statemen yang demikian seringkali membuat bingung.
Pemilihan proses untuk sejumlah pilihan kondisi bisa
dilaksanakan dengan instruksi SWITCH. Pernyataan
SWITCH digunakan untuk menyederhanakan instruksi
IF-ELSE yang bertingkat-tingkat. Semua masalah yang
bisa diselesaikan menggunakan instruksi SWITCH pasti
juga bisa ditangani dengan menggunakan instruksi IF,
tetapi tidak berlaku sebaliknya
c.Bentuk umum pseudocode:
switch <pilihan>
Page 95
95
case <pilihan1> : <aksi1>
case <pilihan2> : <aksi2>
...
case <pilihann> : <aksin>
{otherwise aksi}
endcase
pilihan1, pilihan2, ..., pilihann mempunyai nilai
kebenaran. Tiap pilihan diperiksa nilai kebenarannya,
mulai dari pilihan pertama sampai ditemukan pilihan
yang bernilai benar. Jika pilihan ke-i bernilai benar maka
aksi ke-i dilaksanakan. Pilihan berikutnya yakni pilihan
ke-i+1 sampai dengan pilihan ke-n tidak
dipertimbangkan lagi. Aksi yang dipasangkan dengan ke-
i dapat berupa satu baris instruksi atau blok instruksi.
Apabila tidak ada satupun pilihan yang bernilai benar
maka aksi sesudah otherwise dikerjakan. Penulisan
otherwise bersifat optional.
Page 96
96
Gambar 4.3 Flowchart Instruksi SWITCH
4.6 Contoh-Contoh Kasus SWITCH
1.Konversi nilai huruf menjadi nilai angka.
Jawab:
Algoritma dengan pseudocode
input (na)
Page 97
97
switch (na)
case 'A' : nh=4
case 'B' : nh=3
case 'C' : nh=2
case 'D' : nh=1
case 'E' : nh=0
otherwise write ('Masukkan
A/B/C/D/E')
endcase
2.Pemilihan mobil.
Jawab:
Algoritma dengan pseudocode
input (no)
switch (no)
case 1 : write ('PEUGEOT')
case 2 : write ('BMW')
case 3 : write ('AUDI')
case 4 : write ('FIAT')
case 5 : write ('VW')
case 6 : write ('TIMOR')
otherwise write ('Masukkan 1 s/d
6')
endcase
3. Menampilkan nama bulan berdasar atas input bilangan
integer 1 s/d 12.
Jawab :
Page 98
98
Algoritma dengan pseudocode
input (nobulan)
switch (nobulan)
case 1 : write ('Bulan Januari')
case 2 : write ('Bulan Februari')
case 3 : write ('Bulan Maret')
case 4 : write ('Bulan April')
case 5 : write ('Bulan Mei')
case 6 : write ('Bulan Juni')
case 7 : write ('Bulan Juli')
case 8 : write ('Bulan Agustus')
case 9 : write ('Bulan September')
case 10 : write ('Bulan Oktober')
case 11 : write ('Bulan Nopember')
case 12 : write ('Bulan Desember')
otherwise write ('Nomor bulan salah')
end case
4.7 Latihan
1.Tuliskan algoritma untuk menentukan bilangan yang
dimasukkan antara 0 sampai 10 adalah bilangan prima
atau bukan
2.Tuliskan algoritma untuk menentukan tahun kabisat
3.Tuliskan algoritma untuk menentukan jumlah hari
dalam bulan, yang dimasukkan adalah kode bulan
1..12.
Page 99
99
4.Tuliskan algoritma untuk menentukan wujud air .
Jika suhu <=0 maka benda padat.
Jika suhu>=100 maka uap/gas.
Jika suhu>0 dan suhu<100 maka cair.
5.Tuliskan algoritma untuk menentukan luas dan volume
bola ( L = 4.phi.R
2
, V = 4/3.phi.R
3
).
6.Tuliskan algoritma untuk menentukan jarak atau titik
tengah dari 2 titik yang diinputkan.
7.Tuliskan pseudocode dari flowchart sebagai berikut ini:
Page 100
100
8.Tuliskan algoritma untuk menentukan koordinat titik
ada di kuadran I, II, III, atau IV.
9.Tuliskan algoritma untuk menyelesaikan persamaan
linier dari
ax + by = c
dx + ey = f
Page 101
101
9.Tuliskan algoritma untuk menampilkan zodiac
berdasarkan bulan dan tanggalnya.
10.Tuliskan algoritma dimana user diberi pilihan sebagai
berikut:
Menu Pilihan Bidang
A. Jajaran Genjang
B. Persegi Panjang
C. Bujur Sangkar
D. Lingkaran
E. Segitiga
F. Trapesium
Setiap pilihan bidang menghitung luas dan keliling
dari bidang yang dipilih. Ukuran-ukuran yang
berkaitan dimasukkan melalui keyboard.
12.Tuliskan algoritma untuk mengetahui apakah data
kedua bisa digunakan untuk membagi data pertama.
Apabila data pertama tidak bisa dibagi oleh data kedua
maka algoritma akan mengeluarkan pesan. Apabila
data pertama bisa dibagi oleh data kedua maka
algoritma akan menampilkan hasil dari pembagian
tersebut serta seandainya terdapat sisa pembagian
maka algoritma harus dapat menampilkan nilainya
Page 102
102
Page 103
103

Bab 5
Struktur Perulangan
Tujuan pembelajaran umum:
1.memahami algoritma perulangan dengan struktur
FOR
2.memahami algoritma perulangan dengan struktur
WHILE
3.memahami algoritma perulangan dengan struktur
DO-WHILE.
Andaikan kita diminta menjumlahkan 10 buah bilangan
yang dimasukkan melalui keyboard dan kita
menyelesaikan masalah di atas menggunakan struktur
sequence atau runtunan maka algoritmanya berupa
pseudocode sebagai berikut :
input(x1)
input(x2)
input(x3)
Page 104
104
input(x4)
input(x5)
input(x6)
input(x7)
input(x8)
input(x9)
input(x10)
jumlah=x1+x2+x3+x4+x5+x6+x7+x8+x9+x10
output(jumlah)
Pseudocode di atas benar tetapi tidak efisien, bayangkan
saja seandainya data yang harus dijumlahkan relatif besar
misalnya 1000 buah maka berapa banyaknya baris
instruksi untuk membaca data dan panjangnya penulisan
instruksi untuk menjumlahkan datanya. Untuk masalah
ini solusinya kita menggunakan struktur iteration atau
perulangan.
jumlah=0
for i=1 to 1000 do
input(x)
jumlah=jumlah+x
endfor
output(jumlah)
Instruksi perulangan digunakan untuk menjalankan satu
atau beberapa instruksi sebanyak beberapa kali jika suatu
Page 105
105
kondisi terpenuhi. Dengan instruksi perulangan
memungkinkan kita untuk menjalankan beberapa
instruksi hanya dengan menuliskan intruksi tersebut satu
kali saja. Proses perulangan biasanya digunakan, untuk :
1.Mengulang proses pamasukan data.
2.Mengulang proses perhitungan.
3.Mengulang proses penampilan hasil pengolahan data.
Struktur perulangan terdiri dari empat bagian :
1.Kondisi perulangan, yaitu ekspresi boolean yang harus
dipenuhi untuk melaksanakan pengulangan. Kondiisi
ini bisa dinyatakan secara eksplisit oleh pemrogram
atau dikelola secara implisit oleh komputer.
2.Badan perulangan, yaitu satu atau lebih instruksi yang
akan diulang.
3.Inisialisasi, yaitu aksi yang dilakukan sebelum
perulangan dilakukan pertama kali.
4.Terminasi, yaitu aksi yang mengakibatkan perulangan
dihentikan.
Di dalam algoritma terdapat beberapa macam struktur
perulangan. Beberapa struktur dapat dipakai untuk
menyelesaikan masalah yang sama tetapi ada struktur
perulangan yang hanya cocok dipakai untuk masalah
Page 106
106
tertentu. Pemilihan struktur perulangan untuk
penyelesaian suatu masalah dapat mempengaruhi
kebenaran algoritma yang dibuat. Pemilihan struktur
perulangan yang tepat bergantung pada masalah yang
akan diselesaikan.
Macam-macam struktur perulangan :
1.Instruksi FOR
2.Instruksi WHILE-DO
5.1 Instruksi FOR
Instruksi perulangan yang paling sering digunakan adalah
instruksi FOR. Instruksi ini digunakan apabila kita tahu
secara pasti banyaknya perulangan yang akan dilakukan.
Bentuk umum pseudocode FOR format naik:
for indeks=nilai_awal to nilai_akhir
do
<instruksi/blok instruksi>
endfor
Bentuk umum flowchart :
Page 107
107
Gambar 5.1 Flowchart Instruksi FOR Format Naik
Cara kerjanya:
1.Indeks diassign dengan nilai awal.
2.Indeks dibandingkan dengan nilai akhir.
3.Jika indeks <= nilai akhir maka
a. Badan loop dikerjakan.
b. Secara otomatis nilai indeks ditambah 1.
c. Indeks dibandingkan dengan nilai akhir.
4.Jika indeks > nilai akhir maka akan dikerjakan statemen
pertama sesudah “endfor” (badan loop).
Page 108
108
Bentuk umum pseudocode FOR format turun:
for
indeks=nilai_awal
downto
nilai_akhir do
<instruksi/blok instruksi>
endfor
Bentuk umum flowchart :
Gambar 5.2 Flowchart Instruksi FOR Format Turun
Cara kerjanya:
1.Indeks diassign dengan nilai awal.
2.Indeks dibandingkan dengan nilai akhir.
Page 109
109
3.Jika indeks >= nilai akhir maka
a. Badan loop dikerjakan.
b. Secara otomatis nilai indeks dikurangi 1.
c. Indeks dibandingkan dengan nilai akhir.
4.Jika indeks < nilai akhir maka akan dikerjakan statemen
pertama sesudah “endfor” (badan loop).
Contoh :
1.Indeks perulangan menaik
for i=1 to 3 do
output (i)
endfor
2.Indeks perulangan menurun
for i=1 downto 3 do
output (i)
endfor
Pengembangan instruksi FOR selanjutnya adalah
instruksi FOR bertingkat, dimana urutan instruksi dimulai
dari perulangan yang paling dalam. Syarat-syarat yang
harus dipenuhi dalam penggunaan instruksi ini adalah:
1.Setiap perulangan tidak boleh menggunakan variabel
Page 110
110
counter atau indeks yang sama.
2.Antara perulangan-perulangan tersebut tidak boleh
saling berpotongan (overlapping).
5.2 Contoh-Contoh Kasus FOR
1.Menuliskan angka 1 s/d 10 dengan masing-masing
output diberi keterangan yang berbeda pada saat 3 dan
8. Output yang dihasilkan misal :
angka = 1
angka = 2
angka = 3 ini angka favoritku
angka = 4
angka = 5
angka = 6
angka = 7
angka = 8 ini angka favorit temenku
angka = 9
angka = 10
Jawab :
Algoritma dengan pseudocode:
for angka=1 to 10 do
Page 111
111
if angka=3 then
komentar ('ini angka favoritku')
output (angka,komentar)
else if angka=8 then
komentar ('ini angka favorit
temenku')
output (angka,komentar)
endif
else output (angka)
endif
endif
endfor
2.Buatlah program untuk menghitung banyaknya data
bernilai positif, negatif dan nol dari n buah data yang
dimasukkan melalui keyboard.
Jawab :
Algoritma dengan pseudocode
input (n)
cacahpos=0
cacahneg=0
cacahnol=0
for i=1 to n do
input (x)
if x>0 then cacahpos=cacahpos+1
else if x<0 then cacahneg=cacahneg+1
Page 112
112
else cacahnol=cacahnol+1
endfor
output (cacahpos,cacahneg,cacahnol)
3.Buatlah program untuk menjumlahkan n buah data
kemudian dihitung rata-ratanya.
Jawab :
Algoritma dengan pseudocode:
input (n)
jumlah=0
for i=1 to n do
input (bil)
jumlah=jumlah+bil
endfor
rata=jumlah/n
output (rata)
4.Buatlah program untuk menjumlahkan n buah data
tetapi yang dijumlahkan hanya data ganjil.
Jawab :
Page 113
113
Algoritma dengan pseudocode:
input (n)
jganj=0
for i=1 to n do
input (bil)
if bil mod 2 = 1 then jganj=jganj+bil
endfor
output (jganj)
5.Buatlah program untuk menjumlahkan n buah data
tetapi hanya data bernilai positif saja yang
dijumlahkan.
Jawab :
Algoritma dengan pseudocode:
input (n)
jumlah=0
for i=1 to n do
input (bil)
if bil>0 then jumlah=jumlah+bil
endfor
output (jumlah)
6.Buatlah program untuk menjumlahkan bilangan ganjil
Page 114
114
bernilai negatif yang lebih kecil dari -99 dari n buah
data.
Jawab :
Algoritma dengan pseudocode:
input(n)
jganj=0
for i=1 to n do
input(bil)
if bil<-99 then
if bil%2!=0 then
jganj=jganj+bil
endif
endif
endfor
output (jganj)
7.Buatlah program untuk mencari data terbesar dan data
terkecil dari n buah data.
Jawab :
Cara Pertama:
Page 115
115
Asumsikan nilai maksimum (max) sementara adalah
bilangan bulat -32768 sedangkan nilai minimum (min)
sementara adalah 32767. Bacalah data bilangan dari
piranti masukan. Setiap kali pemasukan data,
bandingkan data tersebut dengan nilai max dan min
untuk menentukan data terbesar dan data terkecil. Pada
akhir perulangan, max berisi data terbesar dan min
berisi data terkecil.
Cara Kedua :
Nilai maksimum sementara dan nilai minumum
sementara mula-mula diinisialisasikan nilainya sama
dengan nilai data pertama. Langkah ini diambil untuk
mengantisipasi apabila ternyata dari n buah data
tersebut nilainya tidak terdapat pada range -32767 s/d
32768 karena jika tidak dikendalikan dengan baik
maka di akhir pencarian tidak memberikan hasil yang
sesuai dengan kenyataan.
Algoritma dengan pseudocode:
Cara Pertama:
input (n)
max=-32767
min=32768
for i=1 to n do
Page 116
116
input (bil)
if bil>max then max=bil
if bil<min then min=bil
endfor
output (max,min)
Cara Kedua:
input (n)
input (bil)
max=bil
min=bil
for i=2 to n do
input (bil)
if bil>max then max=bil
if bil<min then min=bil
endfor
output (max,min)
8.Buatlah program untuk mencari data terkecil pertama
dan data terkecil kedua dari n buah data yang
dimasukkan melalui keyboard.
Jawab :
Algoritma dengan pseudocode:
Page 117
117
input(n)
input(a)
input(b)
if a>b then
min1=b
min2=a
endif
else:
min1=a
min2=b
endif
for i=2 to n do
input(bil)
if bil>min1 and bil<min2 then
min2=bil
endif
else if bil<min1 and bil<min2 then
temp=min1
min1=bil
min2=temp
endif
endfor
output (min1,min2)
Page 118
118
9.Buatlah program untuk mencari data negatif terbesar
dan data positif terkecil dari n buah data yang
dimasukkan melalui keyboard.
Jawab :
Algoritma dengan pseudocode:
input (n)
maxneg=-32768
minpos=32767
for i=1 to n do
input (bil)
if bil>0 then
if bil<minpos then minpos=bil
endif
else if x<0 then
if x>maxneg then maxneg=bil
endif
endif
endfor
output (maxneg,minpos)
5.3 Instruksi WHILE - DO
Instruksi perulangan ini dapat digunakan apabila kita
belum tahu secara pasti berapa kali banyaknya
perulangan yang akan dilakukan. Berakhirnya proses
perulangan ditentukan oleh sutu kondisi. Selama kondisi
Page 119
119
terpenuhi maka perulangan terus dilakukan dan
sebaliknya bila kondisinya tidak terpenuhi maka
perulangan dihentikan.
Bentuk umum pseudocode:
while <kondisi> do
<instruksi/blok instruksi>
endwhile
Bentuk umum flowchart :
Gambar 5.3 Flowchart Instruksi WHILE - DO
Cara kerjanya:
1.Sebelum masuk ke “while-loop” kondisi yang
merupakan ekspresi boolean harus dudah mempunyai
Page 120
120
nilai.
2.Jika kondisi bernilai true maka seluruh badan loop
dikerjakan.
3.Dicek kembali apakah kondisi bernilai true atau false.
Jika kondisi bernilai true maka maka tidak ada
perubahan, artinya kembali mengerjakan badan loop.
Jika kondisi bernilai false maka langsung mengerjakan
statemen pertama sesudah “endwhile”.
4.Looping berhenti setelah kondisi bernilai false,
sehingga harus ada statemen yang mengakibatkan
kondisi bernilai false. Tetapi jika kondisi tetap true
maka terjadi infinite true, artinya jika tidak ada
statemen yang mengakibatkan kondisi bernilai false
maka terjadi infinite loop.
5.4 Contoh-Contoh Kasus WHILE_DO
1.Menuliskan angka 1 s/d 10 dengan masing-masing
output diberi keterangan yang berbeda pada saat 3 dan
8. Output yang dihasilkan misal :
angka = 1
angka = 2
angka = 3 ini angka favoritku
angka = 4
Page 121
121
angka = 5
angka = 6
angka = 7
angka = 8 ini angka favorit temenku
angka = 9
angka = 10
Jawab :
Algoritma dengan pseudocode:
angka=1
while angka<=10 do
if angka=3 then
komentar ('ini angka favoritku')
output (angka,komentar)
endif
else
if angka=8 then
komentar ('ini angka favorit
temenku')
output (angka,komentar)
endif
else output (angka)
endwhile
2. Buatlah algoritma untuk menghitung banyaknya data
Page 122
122
bernilai positif, negatif dan nol dari n buah data yang
dimasukkan melalui keyboard.
Jawab :
Algoritma dengan pseudocode
input (n)
cacahpos=0
cacahneg=0
cacahnol=0
i=1
while i<=n do
input (x)
if x>0 then cacahpos=cacahpos+1
else if x<0 then
cacahneg=cacahneg+1
else cacahnol=cacahnol+1
endif
endwhile
output (cacahpos,cacahneg,cacahnol)
3.Buatlah program untuk menjumlahkan n buah data
kemudian dihitung rata-ratanya.
Jawab :
Page 123
123
Algoritma dengan pseudocode
input (n)
jumlah=0
i=1
while i<=n do
input (bil)
jumlah=jumlah+bil
endwhile
rata=jumlah/n
output (rata)
4.Buatlah algoritma untuk menjumlahkan n buah data
tetapi yang dijumlahkan hanya data ganjil.
Jawab :
Algoritma dengan pseudocode
input (n)
jganj=0
i=1
while i<=n do
input (bil)
if bil mod 2 = 1 then
jganj=jganj+bil
endwhile
output (jganj)
Page 124
124
5. Buatlah program untuk menjumlahkan bilangan ganjil
bernilai negatif yang lebih kecil dari -99 dari n buah data.
Jawab :
Algoritma dengan pseudocode:
input(n)
jganj=0
i=1
while i<=n do
input(bil)
if bil<-99 then
if bil%2!=0 then
jganj=jganj+bil
endif
endif
i=i+1
endwhile
output (jganj)
6. Buatlah program untuk mencari data terbesar dan data
terkecil dari n buah data.
Jawab :
Page 125
125
Algoritma dengan pseudocode:
input (n)
input (bil)
max=bil
min=bil
i=2
while i<=n do
input (bil)
if bil>max then max=bil
if bil<min then min=bil
endwhile
output (max,min)
7.Buatlah algoritma untuk mencari data negatif terbesar
dan data positif terkecil dari n buah data yang
dimasukkan melalui keyboard.
Jawab :
Algoritma dengan pseudocode:
input (n)
maxneg=-1999999999
minpos=1999999999
i=1
while i<=n do
input (bil)
Page 126
126
if bil>0 then
if bil<minpos then minpos=bil
endif
else if x<0 then
if x>maxneg then maxneg=bil
endif
endif
endwhile
output (maxneg,minpos)
8.Buatlah program untuk mencari rata-rata dimana sejak
awal banyaknya data yang akan dimasukkan belum
ditentukan.
Jawab :
Banyaknya perulangan tidak diketahui secara pasti
tetapi kita tahu kapan perulangan akan berhenti yaitu
ketika sudah tidak ada lagi data yang akan
dimasukkan. Supaya perulangan terjadi walaupun
hanya sekali, perlu diasumsikan bahwa mula-mula
memang ada data yang akan dibaca, untuk selanjutnya
akan disediakan pesan interaktif apakah ada data lagi
yang akan dibaca. Perulangan dihentikan apabila
pesan interaktif tersebut dijawab dengan jawaban
Page 127
127
bahwa tidak ada data lagi yang akan dibaca.
Algoritma dengan pseudocode:
masih='ya'
jumlah=0
cacah=0 {banyaknya data mula-mula}
while masih='ya' do
input (bil)
jumlah=jumlah+bil
cacah=cacah+1
input(masih)
endwhile
rata=jumlah/cacah
output (rata)
9.Buatlah algoritma untuk mencari pembagi bersama
terbesar dari dua buah bilangan bulat positif.
Jawab :
Algoritma dengan pseudocode:
input (x,y)
sisa=x mod y
while sisa <> 0 do
x=y
y=sisa
sisa=x mod y
endwhile
Page 128
128
output (y)
10.Buatlah algoritma untuk menghitung Indeks Prestasi
Jawab :
Langkah-langkah:
a. Membaca bobot sks bobot sks dan nilai huruf yang
diperoleh setiap mata kuliah.
b. Mengkonversikan nilai huruf ke nilai angka.
c. Menghitung point yang didapat pada setiap mata
kuliah. Besarnya point diperoleh dari perkalian nilai
angka dengan bobot sks.
d. Menjumlahkan point seluruh mata kuliah.
e. Menjumlahkan bobot sks seluruh mata kuliah.
f. Melakukan pembagian jumlah point dengan jumlah
sks untuk mendapatkan Indeks Prestasi seorang
mahasiswa.
Algoritma dengan pseudocode:
masih='y'
jpoint=0
jsks=0
while masih='y'
Page 129
129
input (sks,nh)
if nh='A' then na=4
else if nh='B' then na=3
else if nh='C' then na=2
else if nh='D' then na=1
else na=0
point=sks*na
jpoint=jpoint+point
jsks=jsks+sks
input (masih)
endwhile
IP=jpoint/jsks
output (IP)
11.Buatlah program untuk mengetahui dari n buah data
yang dimasukkan dari keyboard, berapakah banyaknya
data yang merupakan bilangan prima, semua data yang
berupa bilangan prima dijumlahkan kemudian dihitung
rata-ratanya.
Jawab :
Ada beberapa cara untuk mengecek suatu bilangan
apakah berstatus prima atau bukan.
Cara pertama:
Membagi bilangan yang dicek mulai dari 2 hingga
Page 130
130
bilangan yang akan dicek dikurangi 1 (2 s/d bilangan-
1)
input (bil)
if x=2 then status='prima'
else if x<=1 or x mod 2 = 0
then st='bukan prima'
else
pembagi=3
st='prima'
batascek=bil-1
while pembagi<=batascek and st='prima'
do
if x mod pembagi=0 then st='bukan
prima'
else pembagi=pembagi+1
endwhile
endif
endif
output (st)
Cara kedua:
Membagi bilangan yang dicek dengan bilangan-
bilangan mulai dari 2 hingga ((bilangan-1)/2). Pada
metode kedua ini semua pembagi bulat yang mungkin
sudah tercakup. Mengapa batas atas pembagi adalah
(bilangan-1)/2 ? Karena:
a. Pembagi-pembagi di atas bilangan/2 sampai dengan
bilangan akan membuahkan hasil yang real dalam
Page 131
131
interval 1 sampai 2.
b. Pembagian dengan bilangan/2 tentu tidak dibutuhkan
lagi karena telah diwakili oleh pembagian dengan 2.
Oleh karena itu pembagi bulat yang bukan 1 dan 2
yang mungkin terletak di antara 2 dan bilangan adalah
di dalam interval 2 hingga ((bilangan-1)/2).
input (bil)
if x=2 then status='prima'
else if x<=1 or x mod 2 = 0
then st='bukan prima'
else
pembagi=3
st='prima'
batascek=round ((bil-1)/2)
while pembagi<=batascek and st='prima'
do
if x mod pembagi=0 then st='bukan
prima'
else pembagi=pembagi+1
endwhile
endif
endif
output (st)
Cara ketiga:
Membagi bilangan yang dicek dengan bilangan mulai
Page 132
132
dari 2 hingga akar dari bilangan tersebut. Dasar
pemikirannya adalah bilangan-bilangan yang berada di
atas akar dari bilangan yang akan dicek itu selalu
merupakan kelipatan dari 2, 3, dan bilangan-bilangan
prima di bawah akar bilangan yang akan dicek itu.
Contoh : Cek bilangan 101 prima atau bukan.
Akar dari 101 dibulatkan menjadi 10. Dengan
membagi 101 dengan bilangan-bilangan mulai 2
hingga 10 sama halnya dengan membagi 101 dengan
bilangan-bilangan dari 2 hingga 100 karena hampir
semua bilangan di atas 10 merupakan kelipatan dari
bilangan-bilangan antara 2 hingga 10. Mengapa tidak
membagi dengan 11 atau bilangan-bilangan prima
yang lain? Karena kelipatan dari bilangan prima sudah
pasti bukan bilangan prima.
input (bil)
if x=2 then status='prima'
else if x<=1 or x mod 2 = 0
then st='bukan prima'
else
pembagi=3
st='prima'
batascek=round (sqrt(bil))
while pembagi<=batascek and st='prima'
do
Page 133
133
if x mod pembagi=0 then st='bukan
prima'
else pembagi=pembagi+1
endwhile
endif
endif
output (st)
Cara keempat:
Membagi bilangan yang dicek dengan bilangan 2, 3, 5
sampai ((bilangan-1)/2). Cara ini merupakan
penyederhanaan dari cara kedua karena:
a. Pada cara kedua kita membagi bilangan yang akan
dicek dengan semua bilangan mulai dari 2 hingga
(bilangan-1)/2.
b. Pada cara keempat ini kita hanya membagi bilangan
yang akan dicek dengan 2 dan bilangan-bilangan
ganjil di atas 2 sampai ((bilangan-1)2).
Dasar pemikirannya adalah bilangan-bilangan genap di
atas 2 merupakan kelipatan dari 2.
input (bil)
if x=2 then status='prima'
else if x<=1 or x mod 2 = 0
then st='bukan prima'
else
pembagi=3
st='prima'
Page 134
134
batascek=round ((bil-1)/2)
while pembagi<=batascek and st='prima'
do
if x mod pembagi=0 then st='bukan
prima'
else pembagi=pembagi+2
endwhile
endif
endif
output (st)
Cara kelima:
Menggabungkan cara ketiga dan cara keempat. Pada
cara ketiga kita melakukan pembagian mulai dari 2
hingga akar dari bilangan yang akan dicek, jadi
bilangan pembagi tersebut termasuk juga 4, 6, 8, 10
dan bilangan-bilangan genap selanjutnya, padahal
bilangan-bilangan tersebut adalah kelipatan 2. Dengan
membagi bilangan yang akan dicek dengan 2, 3, 5, 7
dan seterusnya hingga akar dari bilangan yang akan
dicek tentu akan diperoleh hasil yang sama, dengan
keuntungan penyingkatan waktu yang sangat drastis.
input (bil)
if x=2 then status='prima'
else if x<=1 or x mod 2 = 0
then st='bukan prima'
else
pembagi=3
st='prima'
Page 135
135
batascek=round (sqrt(bil))
while pembagi<=batascek and st='prima'
do
if x mod pembagi=0 then st='bukan
prima'
else pembagi=pembagi+2
endwhile
endif
endif
output (st)
Algoritma dengan pseudocode:
jumlah=0
cacah=0
input (n)
for i=1 to n do
input (bil)
if x=2 then status='prima'
else
if x<=1 or x mod 2 = 0
then st='bukan prima'
endif
else
pembagi=3
st='prima'
batascek=round (sqrt(bil))
while pembagi<=batascek and st='prima'
do
if x mod pembagi=0 then st='bukan
prima'
else pembagi=pembagi+2
endwhile
Page 136
136
endif
endif
if st='prima' then
jumlah=jumlah+bil
cacah=cacah+1
endif
endfor
rata=jumlah/cacah
output (rata)
5.5 Latihan
1.Buatlah algoritma untuk mengkonversikan bilangan
desimal ke biner.
2.Buatlah algoritma untuk menjumlahkan data yang
diinputkan tetapi yang dijumlahkan hanya data yang
merupakan bilangan yang habis dibagi oleh variabel
counter-nya saja.
3.Buatlah algoritma untuk menjumlahkan bilangan bulat
positif antara 2 sampai 100 tetapi yang dijumlahkan
hanya bilangan yang prima saja.
4.Buatlah algoritma untuk menjumlahkan deret 0+0-
2+8+22-52+... dimana banyaknya suku adalah n buah.
5.Buatlah algoritma untuk menjumlahkan deret 0+7-
Page 137
137
26+63-... dimana banyaknya suku adalah n buah
6.Buatlah algoritma untuk menghitung penjumlahan deret
kuadrat terbesar tetapi masih lebih dari suatu nilai
tertentu. Model deretnya adalah 1+4+9+16+...
Contoh tampilan program setelah dijalankan:
Masukkan batas maksimum = 100
1 4 9 16 25 36
Hasil penjumlahan deret terbesar =
91
Banyaknya suku = 6
7.Diberikan pseudocode sebagai berikut :
sum1=0
for i=20 to 24 do
sum=sum1+(5*i-20)^2
sum1=(sum+20)mod 20
endfor
output(sum1)
Apa hasil akhir dari pseudocode di atas?
8.Diberikan pseudocode sebagai berikut :
a=0
Page 138
138
b=1
while b<=8 do
input(c)
if c mod b = 0 then
a=a+c
endif
b=b+1
endwhile
output(a)
Apa hasil akhir dari pseudocode di atas?
9.Diberikan pseudocode sebagai berikut :
a=3
b=1
while b<=5 do
input(c)
if c mod b <> 0 then
a=a+c
endif
b=b+1
endwhile
output(a)
Page 139
139
Apa hasil akhir dari pseudocode di atas?
10.Buatlah algoritma untuk menghitung banyaknya data
yang merupakan kelipatan 3 sekaligus kelipatan 5 dari
3000 s/d 7000.
11.Buatlah algoritma untuk mengecek dari 1000 s/d 4000
mana saja yang merupakan bilangan prima dan berapa
banyaknya.
12.Suatu perusahaan garmen mengadakan rekruitmen
karyawan. Terdapat 500 pelamar. Tahap pertama
adalah seleksi data fisik yaitu untuk jenis kelamin laki-
laki yang dibutuhkan mempunyai tinggi minimal 165
cm dengan berat badan maksimal 80 kg sedangkan
untuk jenis kelamin perempuan mempunyai tinggi
minimal 155 cm dengan berat badan maksimal 65 kg.
Buatlah algoritma untuk menghitung berapa
banyaknya calon karyawan yang lolos pada tahap
pertama.
13.Sebuah warung menjual 9 bahan pokok. Buatlah
algoritma untuk membuat nota penjualan yang memuat
informasi nomor nota, barang-barang yang dibeli
(nama barang, harga satuan, banyak barang yang
dibeli, diskon dan harga total) serta biaya yang harus
Page 140
140
dibayar.
14.Bagaimana mengkonversikan bilangan sebagai
karakter yang panjangnya lebih dari satu karakter
menjadi bilangan sebagai interger? Buatlah
algoritmanya.
15.Algoritma mengubah kata yang ditulis dengan huruf
kecil menjadi kata yang ditulis dengan huruf kapital.
Page 141
141

Bab 6
Subprogram
Tujuan pembelajaran umum:
1. memahami algoritma untuk membuat fungsi yang
tidak mengembalikan nilai
2.
memahami algoritma untuk membuat fungsi yang mengembalikan nilai
3. membedakan variable local dan variable global
4. memahami algoritma untuk membuat fungsi
rekursi
Terdapat 4 buah data yang diwakili oleh a, b, c dan d.
Diberikan ketentuan :
a. Jika a > b maka nilai datanya ditukar.
b. Jika b > c maka nilai datanya ditukar.
c. Jika c > d maka nilai datanya ditukar.
Kita buat desain atau rancangan yang mewakili
pemecahan masalah berupa pseudocode.
Page 142
142
input (a,b,c,d)
if a > b then
temp = a
a = b
b = temp
endif
if b > c then
temp = a
a = b
b = temp
endif
if c > d then
temp = a
a = b
b = temp
endif
output (a,b,c,d)
Pseudocode di atas tidak efektif karena ada proses yang
sama yaitu menukar nilai data tetapi dituliskan lebih dari
satu kali. Seharusnya proses yang sama tadi cukup
dituliskan satu kali sebagai subpseudocode dan dapat
dipanggil berkali-kali sesuai kebutuhan. Oleh karena itu
untuk menyelesaikan suatu permasalahan yang relatif
besar, algoritma perlu dipecah-pecah menjadi
Page 143
143
subalgoritma-subalgoritma dan ketika ditranslasikan
menjadi program maka di dalamnya terdapat subprogram-
subprogram. Subprogram merupakan blok dari kode yang
dirancang khusus untuk melaksanakan tugas tertentu.
6.1 Subprogram
Pemrograman terstruktur adalah pemrograman yang
menitikberatkan pada pemecahan masalah yang kompleks
menjadi masalah yang sederhana yang disebut modul.
Program yang terdiri dari modul-modul atau subprogram-
subprogram disebut dengan program yang modular.
Alasan adanya sub program adalah:
1.Pemrograman modular.
2.Teknik top down design.
3.Mempersingkat atau memperpendek panjang program.
4.Menghemat kode program.
5.Mempermudah cek kesalahan.
Gambaran umum sub program :
Page 144
144
Gambar 6.1 Gambaran Umum Subprogram
Bentuk umum pseudocode :
function NamaFungsi [(daftar parameter)]
<blok instruksi>
NamaFungsi = Ungkapan
endfunction
Cara pemanggilan fungsi sebagai berikut:
1. Langsung dimanipulasi.
aNilai fungsi dicetak, misal:
print y,"pangkat ",m,"= ",pangkat(y,m)
bNilai fungsi dijadikan kondisi dalam struktur pemilihan,
misal:
Program Utama
Sub program
Sub program
Sub program
Sub program
Page 145
145
if hitung(x)>0 :
cNilai fungsi dijadikan kondisi dalam struktur
perulangan, misal:
while hitung(x):
dNilai fungsi dimasukkan dalam suatu ekspresi, misal:
a=10
b=hitung(x)+10
2. Ditampung ke dalam nama variabel lain, misal:
y=hitung(x)
6.2 Contoh-Contoh Kasus Subprogram
1.Menghitung bilangan faktorial.
Jawab :
Mengapa 0! = 1 sedangkan 1! = 1 pula? Penelusurannya
adalah sebagai berikut:
n! = (n-1)! * n
n!/n = (n-1)!
untuk n = 1 maka
1!/1 = (1-1)!
1! = 0!
karena 0! = 1 maka 1! = 1
Faktorial bilangan negatif tidak ada dan faktorial nol
Page 146
146
sama dengan faktorial satu yaitu sama dengan 1.
Algoritma dengan pseudocode:
function Faktorial(n)
if n=0 or n=1 then hasil = 1
else
hasil = 1
for i = 2 to n do
hasil=hasil * i
endfor
endif
Faktorial=hasil
endfunction
2. Perkalian dua buah bilangan bulat positif.
Jawab:
Algoritma dengan pseudocode:
function Kali (m,n)
Hasil=0
for i=1 to n do
Hasil=Kali+m
endfor
Kali=Hasil
endfunction
Page 147
147
3. Perpangkatan x
n
. n bernilai nol atau bilangan-bilangan
bulat positif.
Jawab:
Algoritma dengan pseudocode:
function Pangkat (x,n)
if n=0 then hasil=1
else
for i=1 to n do
hasil=hasil*x
endfor
Pangkat=hasil
endif
endfunction
4. Menghitung sigma 1+2+3+4+...+n.
Jawab :
Algoritma dengan pseudocode:
function Sigma (n)
S=0
for i=1 to n do
S=S+i
endfor
Sigma=S
Page 148
148
endfunction
5. Buatlah program untuk menentukan status setiap
bilangan dari n buah data. Status suatu data dibedakan
dalam tiga macam yakni apakah data tersebut bernilai
positif, negatif atau nol.
Jawab :
Algoritma dengan pseudocode:
function Status (x)
if x>0 then St='positif'
else if n=0 then St='nol'
else St='negatif'
endif
endif
endfunction
6. Buatlah program untuk menghitung x
n
/n!.
Jawab :
Untuk menyelesaikan soal di atas perlu dibuat dua
subprogram. Subprogram pertama untuk menghitung
perpangkatan x
n
sedangkan subprogram kedua untuk
Page 149
149
menghitung faktorial n!.
Algoritma dengan pseudocode:
function pangkat(y,m)
if m=0 then pangkat=1
else
pangkat=1
for i=1 to m do
pangkat=pangkat*y
endfor
endif
endfunction
function factorial(h)
if h=0 then facto=1
else
y=1
fakto=1
for i=1 to h do
fakto=y*fakto
y=y+1
endfor
endif
endfunction
input(x)
input(n)
Page 150
150
g=pangkat(x,n)/factorial(n)
output (g)
7. Dalam Ilmu Statistika terdapat rumus kombinasi yaitu
n!/(x!*(n-x)!). Buatlah program untuk menghitung
kombinasi.
Jawab :
Algoritma dengan pseudocode:
function factorial(h)
if h==0 then fakto=1
else
y=1
fakto=1
for i=1 to h do
fakto=y*fakto
y=y+1
endfor
endif
factorial=fakto
endfunction
input(x)
input(n)
Page 151
151
g=(factorial(n))/((factorial(x))*fac
torial(n-x))
output (g)
8.Buatlah program untuk menghitung perkalian dua buah
kombinasi (n!/(x!*(n-x)!))*(m!/(z!*(m-z)!)).
Jawab :
Algoritma dengan pseudocode:
function factorial(h)
if h==0 then fakto=1
else
y=1
fakto=1
for i=1 to h do
fakto=y*fakto
y=y+1
endfor
endif
factorial=fakto
endfunction
input(x)
input(n)
input(z)
input(m)
g=((factorial(n))/((factorial(x))*factorial(
Page 152
152
n-
x)))*((factorial(m))/((factorial(z))*factori
al(m-z)))
output (g)
6.3 Rekursi
Rekursi adalah proses yang bisa memanggil dirinya
sendiri. Bentuk rekursi merupakan alternatif dari bentuk
iterasi atau perulangan. Ada beberapa masalah yang lebih
cocok dipecahkan dengan bentuk rekursi. Tetapi secara
umum bentuk rekursi biasanya kurang efisien
dibandingkan bentuk iterasi karena rekursi memanggil
dirinya sendiri sehingga menyebabkan waktu pemrosesan
yang lebih besar dibandingkan bentuk iterasi biasa.
Proses rekursi akan menggunakan memory stack, semakin
lama proses rekursi dikerjakan maka memory stack akan
terus berkurang yang berakibat memory stack habis.
Dalam rekursi sebenarnya terkandung pengertian fungsi,
perbedaannya adalah:
a. Rekursi bisa memanggil dirinya sendiri.
b. Fungsi harus dipanggil lewat pemanggil fungsi
(function call).
Page 153
153
Rekursi mempunyai beberapa kelemehan yaitu :
1.Penggunaan rekursi seringkali harus mengorbankan
efisiensi dan kecepatan.
2.Masalah yang sering muncul di dalam rekursi adalah
eksekusi yang tidak pernah berhenti akibatnya stack
memori akan habis dan komputer hang.
Walaupun rekursi mempunyai kelemahan, mengapa kita
memerlukan rekursi? Karena ada beberapa masalah yang
akan lebih mudah diselesaikan dengan menggunakan
rekursi.
Semua instruksi yang disusun secara rekursi dapat pula
disusun secara non rekursi, demikian juga hampir semua
instruksi non rekursi dapat disusn secara rekursi.
Untuk menyelesaikan suatu kasus menggunakan cara
rekursi perlu diidentifikasikan terlebih dahulu hal-hal
sebagai berikut:
1.Kapankah langkah-langkah rekursi terjadi. Misalnya
dalam kasus perhitungan bilangan faktorial, langkah-
langkah rekursi dilakukan selama suatu bilangan lebih
besar daripada 1.
2.Bagaimana cara untuk menghentikan rekursi.
Suatu fungsi tidak hanya bisa memanggil fungsi lain,
Page 154
154
melainkan juga bisa memanggil dirinya sendiri.
Pemanggilan kepada dirinya sendiri bisa berarti proses
berulang yang tidak bisa diketahui kapan berakhir
sehingga dalam rekursi harus ada syarat-syarat berikut:
a. Ada titik pemberhentian (stopping state) sebagai
pengendali rekursi.
b. Adanya langkah induksi yang menuju pada titik
pemberhentian.
6.4 Contoh-Contoh Kasus Rekursi
1. Menghitung bilangan faktorial.
Jawab :
Merupakan proses perhitungan deret bilangan dengan
rumus :
n=0, maka n! = 1
n>0, maka n! = n*(n-1)!
1, jika n = 0
(penghentian rekursi)
n!
n*(n-1)!, jika n > 0 (langkah induksi)
Gambaran Proses Rekursi:
Page 155
155
Faktorial (4)
=
Faktorial (4)
=
4
Faktorial (3)
=
3
Faktorial (2)
=
2
Faktorial (1)
=
1
Jadi 4! = 4*3*2*1 = 24
Hasil dari proses di tiap tingkat merupakan input
untuk proses di tingkat atasnya. Faktorial (n) bisa
dihitung dari Faktorial (n-1), Faktorial (n-1) bisa
dihitung dari Faktorial (n-2), dan seterusnya.
Ilustrasi penelusuran 4! :
Page 156
156
Gambar 6.2 Ilustrasi Hitung Faktorial
Algoritma dengan pseudocode:
function Faktorial(n)
if n=0 then Fakto = 1
else Fakto = n * Faktorial(n-1)
endif
Faktorial=Fakto
endfunction
Keterangan:
a. Dari fungsi di atas bisa dilihat bahwa factorial(x)
bisa dihitung dari factorial(x-1), dimana
factorial(x-1)
bisa
dihitung
dari
factorial(x-2), dan seterusnya.
Page 157
157
b. Untuk menghitung factorial(x) maka fungsi
memanggil nilai factorial(x-1) yang telah
diperoleh, demikian juga untuk menghitung nilai
factorial(x-1) maka fungsi harus memanggil
nilai factorial(x-2), dan seterusnya.
c. Notasi factorial(x-1) yang digunakan untuk
memanggil nilai fungsi sebelumnya sering disebut
dengan pemanggil rekursi (recursion call). Rekursi
dijalankan dengan jumlah x yang semakin menurun.
factorial(x-1) artinya rekursi dengan jumlah x
yang semakin menurun.
2. Menghitung bilangan Fibonacci.
Jawab :
Bilangan Fibonacci dapat didefinisikan berdasar deret
integer tak berhingga dengan logika sebagai berikut:
n=1 atau n=2, maka Fibo(n) = 1
n>2, maka Fibo(n) = Fibo(n-1) + Fibo(n-2)
1 1 2 3 5 8 13 21 34 55…..
Dari deret di atas dapat dilihat bahwa bilangan ke-n (n>2)
dalam deret bisa dicari dari dua bilangan sebelumnya
yang terdekat dengan bilangan ke-n, yaitu bilangan ke-(n-
1) dan bilangan ke-(n-2). Oleh karena itu jika Fibo(n)
Page 158
158
menunjukkan bilangan Fibonacci ke-n maka Fibo(n) bisa
dihitung berdasarkan hubungan rekurens berikut:
Fibo(n)=Fibo(n-1)+Fibo(n-2)
Karena Fibo(n) ditentukan oleh dua nilai yang berbeda
dengan argumen yang nilainya lebih kecil, maka untuk
mencari bilangan Fibonacci diperlukan dua nilai awal,
yaitu Fibo(1)=1 dan Fibo(2)=1.
Fibo(1)=1
Fibo(2)=1
Fibo(3)=Fibo(2)+Fibo(1)
Fibo(4)=Fibo(3)+Fibo(2)
dan seterusnya.
Implementasi pencarian Fibonacci (4) :
Fibo(4)
Page 159
159
Fibo(3)
Fibo(2)
Fibo(1)
Fibo(0)
Fibo(2)
Fibo(1)
Fibo(1)
Fibo(0)
Gambar 6.3 Ilustrasi Bilangan Fibonacci
Algoritma dengan pseudocode:
function Fibonacci(n)
if n=0 or n=2 then Fibo =1
else Fibo = Fibonacci(n-1) +
Fibonacci(n-2)
endif
Fibonacci=Fibo
endfunction
3.Perkalian dua buah bilangan bulat positif.
Jawab :
Misal :
4x3=(4x2)+4
Page 160
160
=(4x1)+4+4
= 4+4+4
Secara umum dapat dituliskan dalam notasi sebagai
berikut :
mxn=(mx(n-1)+m
Gambar 6.4 Ilustrasi Hitung Perkalian
Algoritma dengan pseudocode:
function Kali (m,n)
if n=1 then hasil=m
else hasil=m+Kali(m,n-1)
endif
Kali=hasil
Page 161
161
endfunction
4. Perpangkatan x
n
.
Jawab :
Ditentukan bahwa pemangkatnya adalah nol dan
bilangan-bilangan positif. Ilustrasi penelusuran 4
3
adalah
sebagai berikut:
Page 162
162
Gambar 6.5 Ilustrasi Hitung Perpangkatan
Algoritma dengan pseudocode:
function Pangkat(x,n)
if n=0 then hasil=1
else hasil=x*Pangkat(x,n-1)
endif
Pangkat=hasil
endfunction
Page 163
163
5. Menghitung sigma 1+2+3+4+...+n.
Jawab :
Penelusuran Sigma (5) sebagai berikut:
Sigma (5) = Sigma (5-1) + 5
= Sigma (4) + 5
= Sigma (4-1) + 4 + 5
= Sigma (3) + 4 + 5
= Sigma (3-1) + 3 + 4 + 5
= Sigma (2) + 3 + 4 + 5
= Sigma (2-1) + 2 + 3 + 4 + 5
= Sigma (1) + 2 + 3 + 4 + 5
=1+2+3+4+5
Algoritma dengan pseudocode:
Function Sigma (n)
if n=1 then hasil=1
else hasil=Sigma(n-1)+ n
endif
Sigma=hasil
endfunction
6.5 Latihan
Page 164
164
1. Buatlah sebuah fungsi dengan metode rekursi
untuk menghitung nilai dari deret 125+25+5+1+...
dimana banyaknya suku adalah n buah suku.
2. Buatlah sebuah fungsi dengan metode rekursi
untuk menghitung nilai dari deret 6+11-
18+29+48-... dimana banyaknya suku adalah n
buah suku.
3. Buatlah sebuah fungsi dengan metode rekursi
untuk menghitung nilai dari deret -6+10+16-
26+44-... dimana banyaknya suku adalah n buah
suku.
4. Buatlah sebuah fungsi dengan metode rekursi
untuk menghitung nilai dari deret 100/24-
80/12+60/6-40/3+... dimana banyaknya suku
adalah n buah suku.
5. Buatlah sebuah fungsi dengan metode rekursi
untuk menghitung nilai dari deret 12/5-
15/20+18/80-21/320+... dimana banyaknya suku
adalah n buah suku.
6. Buatlah sebuah fungsi dengan metode rekursi
untuk
menghitung
nilai
dari
deret
100+125+150+175+... dimana banyaknya suku
adalah n buah suku.
Page 165
165
7. Buatlah sebuah fungsi dengan metode rekursi
untuk menghitung nilai dari deret 2-6+18-54+...
dimana banyaknya suku adalah n buah suku.
8. Buatlah sebuah fungsi dengan metode rekursi
untuk
menghitung
nilai
dari
deret
4+12+36+108+... dimana banyaknya suku adalah
n buah suku.

Bab 7
Array
Page 166
166
Tujuan pembelajaran umum:
1. memahami penggunaan array satu dimensi dalam
menyusun algoritma
2. memahami penggunaan array multidimensi
dalam menyusun algoritma
Perhatikan penggalan algoritma pertama berikut:
for i=1 to 8 do
input (x)
endfor
for i=1 to 8 do
output (x)
endfor
Misalkan algoritma di atas dijalankan dengan runtunan
nilai x yang dibaca dari keyboard sebagai berikut:
10 20 30 40 50 60 70 80
maka keluaran dari algoritma tersebut adalah:
80
80
80
Page 167
167
80
80
80
80
80
Mengapa 10, 20, 30, 40, 50, 60 dan 70 tidak tercetak?
Karena variabel x hanya dapat menampung satu buah
nilai dan nilai yang disimpan oleh x adalah nilai yang
terakhir kali dimasukkan (contoh disini adalah 80). Nilai
yang terakhir inilah yang dicetak ke piranti keluaran pada
setiap kali perulangan. Bandingkan dengan algoritma
berikut:
input (x1)
input (x2)
input (x3)
input (x4)
input (x5)
input (x6)
input (x7)
input (x8)
output (x1)
output (x2)
output (x3)
output (x4)
Page 168
168
output (x5)
output (x6)
output (x7)
output (x8)
Algoritma kedua ini memerlukan 8 buah variabel (x1, x2,
x3, x4, x5, x6, x7, x8) untuk menyimpan nilai-nilai x.
Bagaimana kalau ada 1000 buah elemen x yang harus
disimpan? Apakah harus menggunakan 1000 buah
variabel? Jelas ini tidak praktis, selain itu akan ada 1000
buah perintah input dan output untuk membaca dan
menuliskan nilai-nilai x tersebut.
Variabel dengan tipe data tunggal hanya dapat digunakan
untuk menyimpan satu buah nilai saja. Untuk menyimpan
lebih dari satu nilai data sekaligus dalam sebuah variabel
dengan tipe data array. Sehingga pada kasus di atas
dengan menggunakan array akan menghemat penggunaan
nama-nama variabel yang banyak dan perintah input dan
output seluruh elemen array cukup ditulis satu kali di
struktur loop.
7.1 Array
Page 169
169
Dalam beberapa literatur array sering diartikan larik.
Array merupakan koleksi data dengan setiap elemen data
menggunakan nama yang sama dan tiap elemen data
bertipe sama. Setiap elemen array dapat diakses melalui
indeks array.
Berdasarkan jumlah dimensi indeks dalam sebuah
variabel array dibedakan menjadi array berdimensi satu
dan array berdimensi banyak. Terdapat beberapa hal yang
perlu diperhatikan apabila akan memasukkan deretan data
dalam variabel array:
1.Mengetahui tipe data yang digunakan dalam variabel
array. Variabel array numerik hanya dapat menerima
data numeric dan variabel array string hanya dapat
menerima data karakter. String merupakan kumpulan
dari karakter, biasanya merupakan kumpulan dari
huruf dalam alphabet. String didefinisikan sebagai
kumpulan dari tipe data char yang diakhiri dengan null
character. Array merupakan kumpulan dari data yang
bertipe sama. String merupakan salah satu kasus
khusus dari array, string merupakan array dengan tipe
data char.
2.Banyaknya data harus lebih kecil atau sama dengan
besarnya ukuran array.
3.Instruksi perulangan digunakan untuk membaca deretan
Page 170
170
data dalam suatu variabel indeks.
4.Banyaknya indeks yang digunakan menunjukkan
banyaknya ruang memori yang dialokasikan. Supaya
tidak terjadi pemborosan ruang memori maka
banyaknya indeks harus disesuaikan dengan
banyaknya data.
7.2 Contoh-Contoh Kasus Array
1.Konversi kata dalam huruf besar menjadi kata dalam
huruf kecil.
Jawab:
Algoritma dengan pseudocode:
input(besar)
n=len(besar)
for i=1 to n do
posisi=ord(besar[i])
kecil=chr(posisi+32)
output (kecil)
2.Konversi kata dalam huruf kecil menjadi kata dalam
Page 171
171
huruf besar.
Jawab:
Algoritma dengan pseudocode:
input(kecil)
n=len(kecil)
for i=1 to n do
posisi=ord(kecil[i])
besar=chr(posisi-32)
output (besar)
3.Konversi sembarang penulisan kata
Jawab:
Algoritma dengan pseudocode:
input (kata)
n=len(kata)
for i=1 to n do
posisi=ord(kata[i])
if posisi>=65 and posisi<=90 then
kecil=chr(posisi+32)
output (kecil)
endif
else
Page 172
172
besar=chr(posisi-32)
output (besar)
endif
endfor
4.Konversi karakter bilangan menjadi bilangan integer.
Jawab:
Algoritma dengan pseudocode:
input (bilkar)
n=len(bilkar)
for i=1 to n do
posisi=ord(bilkar[i])
bilint=posisi-48
output (bilint)
endfor
5.Jumlah dan rata-rata khusus untuk data-data positif dari
n buah data.
Jawab:
Algoritma dengan pseudocode:
jumlah=0
cacah=0
Page 173
173
for i=1 to n do
input (x)
if x>0 then
jumlah=jumlah+x
cacah=cacah+1
endif
endfor
rata=jumlah/cacah
output (rata)
6.Mencari data terbesar dan data terkecil beserta letaknya.
Jawab:
Algoritma dengan pseudocode:
input (n)
max=A[1]
indexmax=1
min=A[1]
indexmin=1
for i=2 to n do
if A[i] > max then
max=A[i]
indexmax=i
endif
if A[i] < min then
min=A[i]
Page 174
174
indexmin=i
endif
endfor
output (max,indexmax,min,indexmin)
7.Mencari data terkecil pertama dan terkecil kedua
beserta letaknya.
Jawab:
Algoritma dengan pseudocode:
input (n)
if A[1] > A[2] then
min1=A[2]
imin1=2
min2=A[1]
imin2=1
else
min1=A[1]
imin1=1
min2=A[2]
imin2=2
endif
for i=3 to n do
if (A[i]>min1) and (A[i]<min2)
then
min2=A[i]
Page 175
175
imin2=i+2
else
if (A[i]<min1) and (A[i]<min2)
then
temp=min1
min1=A[i]
imin1=i+3
min2=temp
imin2=i+2
endif
endif
endfor
output
(min1,indexmin1,min2,indexmin2)
8. Menghitung standar deviasi.
Jawab:
Algoritma dengan pseudocode:
input (n)
jumlah=0
JKR=0
for i=1 to n do
input (x[i])
jumlah=jumlah+x[i]
Page 176
176
endfor
rata=jumlah/n
for i=1 to n do
KR=sqr(x[i]-rata)
JKR=JKR+KR
endfor
SD=sqrt(JKR/n)
output (SD)
7.3 Latihan
1. Buatlah algoritma untuk mencari bilangan prima
terbesar kedua dan bilangan prima terkecil kedua
disertai posisi atau letaknya dan berapa banyaknya
cacah untuk masing-masing bilangan prima
terbesar kedua dan bilangan prima terkecil kedua
dari n buah data.
2. Buatlah algoritma untuk menjumlahkan dua buah
matriks.
3. Buatlah algoritma untuk melakukan operasi
perkalian dua buah matriks.
4. Buatlah algoritma untuk menentukan matriks
transpose.
Page 177
177
5. Buatlah algoritma untuk menghitung banyaknya
huruf kecil dan huruf besar dari sebuah kata yang
dimasukkan dari keyboard.

Bab 8
Sorting
Tujuan pembelajaran umum:
1. memahami algoritma selection sort
2. memahami algoritma buble sort
3. memahami algortima insertion sort
4. memahami algoritma merge sort
Pengurutan (sorting) diartikan sebagai proses penyusunan
kembali sekumpulan obyek ke dalam urutan tertentu.
Tujuan pengurutan untuk mendapatkan kemudahan dalam
pencarian anggota dari suatu himpunan disamping dapat
mempercepat mengetahui data terbesar dan data terkecil,
misalkan kita ingin mengetahui perolehan nilai tertinggi
dan nilai terendah dari hasil ujian. Contoh obyek
Page 178
178
terurutkan seperti daftar isi, daftar pustaka dan lain-lain.
Proses yang terjadi pada pengurutan adalah sebagai
berikut:
1.Perbandingan data.
2.Pertukaran data.
Terdapat bermacam-macam metode pengurutan,
diantaranya adalah:
1.Selection sort.
2.Bubble sort.
3.Insertion sort.
4.Merge sort.
8.1 Metode Selection Sort
8.1.1 Pengurutan Naik (Ascending)
Proses dari pengurutan dengan menggunakan metode
Selection Sort secara terurut naik adalah sebagai berikut:
1.Mencari data terkecil dari data pertama sampai dengan
data terakhir, kemudian ditukar posisinya dengan data
pertama.
2.Mencari data terkecil dari data kedua sampai dengan
data terakhir, kemudian ditukar posisinya dengan data
Page 179
179
kedua.
3.Mencari data terkecil dari data ketiga sampai dengan
data terakhir, kemudian ditukar posisinya dengan data
ketiga.
4.dan seterusnya sampai semua data terurut naik. Apabila
terdapat n buah data yang akan diurutkan maka
membutuhkan (n-1) langkah pengurutan, dimana
data terakhir yaitu data ke-n tidak perlu diurutkan
karena hanya tinggal satu-satunya.
Contoh kasus:
Terdapat 8 buah data yang nilainya belum terurut:
44 55 12 42 94 18 6 67
Data-data di atas akan ditampilkan secara terurut naik
menggunakan metode Selection Sort. Proses
pengurutannya adalah sebagai berikut:
Proses 1
indexmin=1
Data ke-2 : A[indexmin] < A[2]
Data ke-3 : A[indexmin] > A[3]
indexmin=3
Data ke-4 : A[indexmin] < A[4]
Data ke-5 : A[indexmin] < A[5]
Page 180
180
Data ke-6 : A[indexmin] < A[6]
Data ke-7 : A[indexmin] > A[7]
indexmin=7
Data ke-8 : A[indexmin] < A[8]
Karena A[1] <> A[indexmin] maka dilakukan pertukaran
nilai data ke-1 dan data ke-indexmin (data ke-7). Akhir
dari proses 1 adalah:
6 55 12 42 94 18 44 67
Kondisi data pada akhir proses pertama ini digunakan
sebagai masukan pada proses kedua.
Proses 2
indexmin=2
Data ke-3 : A[indexmin] > A[3]
indexmin=3
Data ke-4 : A[indexmin] < A[4]
Data ke-5 : A[indexmin] < A[5]
Data ke-6 : A[indexmin] < A[6]
Data ke-7 : A[indexmin] < A[7]
Data ke-8 : A[indexmin] > A[8]
Karena A[2] <> A[indexmin] maka dilakukan pertukaran
nilai data ke-2 dan data ke-indexmin (data ke-3). Akhir
Page 181
181
dari proses 2 adalah:
6 12 55 42 94 18 44 67
Kondisi data pada akhir proses kedua ini digunakan
sebagai masukan pada proses ketiga.
Proses 3
indexmin=3
Data ke-4 : A[indexmin] > A[4]
indexmin=4
Data ke-5 : A[indexmin] < A[5]
Data ke-6 : A[indexmin] > A[6]
indexmin=6
Data ke-7 : A[indexmin] < A[7]
Data ke-8 : A[indexmin] < A[8]
Karena A[3] <> A[indexmin] maka dilakukan pertukaran
nilai data ke-3 dan data ke-indexmin (data ke-6). Akhir
dari proses 3 adalah:
6 12 18 42 94 55 44 67
Kondisi data pada akhir proses ketiga ini digunakan
sebagai masukan pada proses keempat.
Proses 4
indexmin=4
Page 182
182
Data ke-5 : A[indexmin] < A[5]
Data ke-6 : A[indexmin] < A[6]
Data ke-7 : A[indexmin] < A[7]
Data ke-8 : A[indexmin] < A[8]
Karena A[4] = A[indexmin] maka tidak dilakukan
pertukaran nilai. Awal dan akhir dari proses 4 tidak
terjadi perubahan yaitu kondisi datanya tetap:
6 12 18 42 94 55 44 67
Kondisi data pada akhir proses keempat ini digunakan
sebagai masukan pada proses kelima.
Proses 5
indexmin=5
Data ke-6 : A[indexmin] > A[6]
indexmin=6
Data ke-7 : A[indexmin] > A[7]
indexmin=7
Data ke-8 : A[indexmin] < A[8]
Karena A[5] <> A[indexmin] maka dilakukan pertukaran
nilai data ke-5 dan data ke-indexmin (data ke-7). Akhir
dari proses 5 adalah:
6 12 18 42 44 55 94 67
Page 183
183
Kondisi data pada akhir proses kelima ini digunakan
sebagai masukan pada proses keenam.
Proses 6
indexmin=6
Data ke-7 : A[indexmin] < A[7]
Data ke-8 : A[indexmin] < A[8]
Karena A[6] = A[indexmin] maka tidak dilakukan
pertukaran nilai. Awal dan akhir dari proses 6 tidak
terjadi perubahan yaitu kondisi datanya tetap:
6 12 18 42 44 55 94 67
Kondisi data pada akhir proses keenam ini digunakan
sebagai masukan pada proses ketujuh.
Proses 7
indexmin=7
Data ke-8 : A[indexmin] > A[8]
indexmin=8
Karena A[7] <> A[indexmin] maka dilakukan pertukaran
nilai data ke-7 dan data ke-indexmin (data ke-8). Akhir
dari proses 7 adalah:
6 12 18 42 44 55 67 94
Page 184
184
Kondisi data pada akhir proses ketujuh ini merupakan
akhir dari pengurutan secara menaik.
Dengan asumsi sudah terdapat array A yang menyimpan
n buah elemen, algoritma Selection Sort disajikan dengan
metode pseudocode:
for i=1 to (n-1) do
indexmin=i
for j=i+1 to n do
if A[indexmin] > A[j] then
indexmin=j
endif
endfor
if A[i] <> A[indexmin] then
temp=A[i]
A[i]=A[indexmin]
A[indexmin]=temp
endif
endfor
8.1.2 Pengurutan Turun (Descending)
Apabila akan mengurutkan menurun menggunakan
metode Selection Sort maka langkah-langkah sebagai
berikut:
Page 185
185
1.Mencari data terbesar dari data pertama sampai dengan
data terakhir, kemudian ditukar posisinya dengan data
pertama.
2.Mencari data terbesar dari data kedua sampai dengan
data terakhir, kemudian ditukar posisinya dengan data
kedua.
3.Mencari data terbesar dari data ketiga sampai dengan
data terakhir, kemudian ditukar posisinya dengan data
ketiga.
4.dan seterusnya sampai semua data terurut turun.
Apabila terdapat n buah data yang akan diurutkan
maka membutuhkan (n-1) langkah pengurutan,
dimana data terakhir yaitu data ke-n tidak perlu
diurutkan karena hanya tinggal satu-satunya.
Contoh kasus:
Terdapat 8 buah data yang nilainya belum terurut:
44 55 12 42 94 18 6 67
Data-data di atas akan ditampilkan secara terurut turun
menggunakan metode Selection Sort. Proses
pengurutannya adalah sebagai berikut:
Proses 1
indexmax=1
Page 186
186
Data ke-2 : A[indexmax] < A[2]
indexmax=2
Data ke-3 : A[indexmax] > A[3]
Data ke-4 : A[indexmax] > A[4]
Data ke-5 : A[indexmax] < A[5]
indexmax=5
Data ke-6 : A[indexmax] > A[6]
Data ke-7 : A[indexmax] > A[7]
Data ke-8 : A[indexmax] > A[8]
Karena A[1] <> A[indexmax] maka dilakukan pertukaran
nilai data ke-1 dan data ke-indexmax (data ke-5). Akhir
dari proses 1 adalah:
94 55 12 42 6 18 44 67
Kondisi data pada akhir proses pertama ini digunakan
sebagai masukan pada proses kedua.
Proses 2
indexmax=2
Data ke-3 : A[indexmax] > A[3]
Data ke-4 : A[indexmax] > A[4]
Data ke-5 : A[indexmax] > A[5]
Data ke-6 : A[indexmax] > A[6]
Data ke-7 : A[indexmax] > A[7]
Page 187
187
Data ke-8 : A[indexmax] < A[8]
indexmax=8
Karena A[2] <> A[indexmax] maka dilakukan pertukaran
nilai data ke-2 dan data ke-indexmax (data ke-8). Akhir
dari proses 2 adalah:
94 67 12 42 6 18 44 55
Kondisi data pada akhir proses kedua ini digunakan
sebagai masukan pada proses ketiga.
Proses 3
indexmax=3
Data ke-4 : A[indexmax] < A[4]
indexmax=4
Data ke-5 : A[indexmax] > A[5]
Data ke-6 : A[indexmax] > A[6]
Data ke-7 : A[indexmax] > A[7]
Data ke-8 : A[indexmax] < A[8]
indexmax=8
Karena A[3] <> A[indexmax] maka dilakukan pertukaran
nilai data ke-3 dan data ke-indexmax (data ke-8). Akhir
dari proses 3 adalah:
94 67 55 42 6 18 44 12
Page 188
188
Kondisi data pada akhir proses ketiga ini digunakan
sebagai masukan pada proses keempat.
Proses 4
indexmax=4
Data ke-5 : A[indexmax] > A[5]
Data ke-6 : A[indexmax] > A[6]
Data ke-7 : A[indexmax] < A[7]
indexmax=7
Data ke-8 : A[indexmax] > A[8]
Karena A[4] <> A[indexmax] maka dilakukan pertukaran
nilai data ke-4 dan data ke-indexmax (data ke-7). Akhir
dari proses 4 adalah:
94 67 55 44 6 18 42 12
Kondisi data pada akhir proses keempat ini digunakan
sebagai masukan pada proses kelima.
Proses 5
indexmax=5
Data ke-6 : A[indexmax] < A[6]
indexmax=6
Data ke-7 : A[indexmax] < A[7]
indexmax=7
Page 189
189
Data ke-8 : A[indexmax] > A[8]
Karena A[5] <> A[indexmax] maka dilakukan pertukaran
nilai data ke-5 dan data ke-indexmax (data ke-7). Akhir
dari proses 4 adalah:
94 67 55 44 42 18 6 12
Kondisi data pada akhir proses kelima ini digunakan
sebagai masukan pada proses keenam.
Proses 6
indexmax=6
Data ke-7 : A[indexmax] > A[7]
Data ke-8 : A[indexmax] > A[8]
Karena A[6] = A[indexmax] maka tidak dilakukan
pertukaran nilai. Awal dan akhir dari proses 6 tidak
terjadi perubahan yaitu kondisi datanya tetap:
94 67 55 44 42 18 6 12
Kondisi data pada akhir proses keenam ini digunakan
sebagai masukan pada proses ketujuh.
Proses 7
indexmax=7
Page 190
190
Data ke-8 : A[indexmax] < A[8]
indexmax=8
Karena A[7] <> A[indexmax] maka dilakukan pertukaran
nilai data ke-7 dan data ke-indexmin (data ke-8). Akhir
dari proses 7 adalah:
94 67 55 44 42 18 12 6
Kondisi data pada akhir proses ketujuh ini merupakan
akhir dari pengurutan secara menaik.
Algoritma Selection Sort apabila disajikan dengan
metode pseudocode berikut (diasumsikan sudah terdapat
array A yang menyimpan n buah elemen):
for i=1 to (n-1) do
indexmax=i
for j=i+1 to n do
if A[indexmax] < A[j] then
indexmax=j
endif
endfor
if A[i] <> A[indexmax] then
temp=A[i]
A[i]=A[indexmax]
A[indexmax]=temp
endif
Page 191
191
endfor
8.2 Metode Bubble Sort
Proses yang terjadi pada pengurutan dengan metode
Bubble Sort adalah selalu membandingkan dua data yang
berdekatan.
8.2.1 Pengurutan Naik (Ascending)
Apabila data yang berada di sebelah kanannya bernilai
lebih kecil maka dipertukarkan sampai semua data terurut
sehingga memunculkan data terbesar di posisi paling
terakhir.
Contoh kasus:
Terdapat 6 buah data yang nilainya belum terurut:
756342
Data-data di atas akan ditampilkan secara terurut naik
menggunakan metode Bubble Sort. Proses pengurutannya
adalah sebagai berikut:
Proses 1
Data 1-2 : A[1] > A[2] → ditukar
576342
Page 192
192
Data 2-3 : A[2] > A[3] → ditukar
567342
Data 3-4 : A[3] > A[4] → ditukar
563742
Data 4-5 : A[4] > A[5] → ditukar
563472
Data 5-6 : A[5] > A[6] → ditukar
563427
Akhir dari proses pertama adalah menempatkan data
terbesar pertama pada posisi ke-n (posisi ke-6).
Proses 2
Data 1-2 : A[1] < A[2]
Data 2-3 : A[2] > A[3] → ditukar
536427
Data 3-4 : A[3] > A[4] → ditukar
534627
Data 4-5 : A[4] > A[5] → ditukar
534267
Akhir dari proses kedua adalah menempatkan data
terbesar kedua pada posisi ke-n-1 (posisi ke-5).
Page 193
193
Proses 3
Data 1-2 : A[1] > A[2] → ditukar
354267
Data 2-3 : A[2] > A[3] → ditukar
345267
Data 3-4 : A[3] > A[4] → ditukar
342567
Akhir dari proses ketiga adalah menempatkan data
terbesar ketiga pada posisi ke-n-2 (posisi ke-4).
Proses 4
Data 1-2 : A[1] < A[2]
Data 2-3 : A[2] > A[3] → ditukar
324567
Akhir dari proses keempat adalah menempatkan data
terbesar keempat pada posisi ke-n-3 (posisi ke-3).
Proses 5
Data 1-2 : A[1] > A[2]
Data 2-3 : A[2] > A[3] → ditukar
234567
Akhir dari proses kelima atau terakhir adalah
Page 194
194
menempatkan data terbesar kelima dan keenam pada
posisi ke-n-4 dan ke-n-5 (posisi ke-2 dan ke-1).
Penyajian pseudocode algoritma Bubble Sort (dengan
asumsi sudah terdapat array A yang menyimpan n buah
elemen):
for i=1 to (n-1) do
for j=1 to (n-i) do
if A[j] > A[j+1] then
temp=A[j]
A[j]=A[j+1]
A[j+1]=temp
endif
endfor
endfor
8.2.2 Pengurutan Turun (Descending)
Kebalikan dari pengurutan yang menurun apabila data
yang berada di sebelah kanannya bernilai lebih besar
maka dipertukarkan sampai semua data terurut sehingga
memunculkan data terkecil di posisi paling terakhir.
Contoh kasus:
Terdapat 8 buah data yang nilainya belum terurut:
Page 195
195
44 55 12 42 94 18 6 67
Data-data di atas akan ditampilkan secara terurut turun
menggunakan metode Bubble Sort. Proses pengurutannya
adalah sebagai berikut:
Proses 1
Data 1-2 : A[1] < A[2] → ditukar
55 44 12 42 94 18 6 67
Data 2-3 : A[2] > A[3]
Data 3-4 : A[3] < A[4] → ditukar
55 44 42 12 94 18 6 67
Data 4-5 : A[4] < A[5] → ditukar
55 44 42 94 12 18 6 67
Data 5-6 : A[5] < A[6] → ditukar
55 44 42 94 18 12 6 67
Data 6-7 : A[6] > A[7]
Data 7-8 : A[7] < A[8] → ditukar
55 44 42 94 18 12 67 6
Akhir dari proses pertama adalah menempatkan data
terkecil pertama pada posisi ke-n (posisi ke-8).
Proses 2
Data 1-2 : A[1] > A[2]
Page 196
196
Data 2-3 : A[2] > A[3]
Data 3-4 : A[3] < A[4] → ditukar
55 44 94 42 18 12 67 6
Data 4-5 : A[4] > A[5]
Data 5-6 : A[5] > A[6]
Data 6-7 : A[6] < A[7] → ditukar
55 44 94 42 18 67 12 6
Akhir dari proses kedua adalah menempatkan data
terkecil kedua pada posisi ke-n-1 (posisi ke-7).
Proses 3
Data 1-2 : A[1] > A[2]
Data 2-3 : A[2] < A[3] → ditukar
55 94 44 42 18 67 12 6
Data 3-4 : A[3] > A[4]
Data 4-5 : A[4] > A[5]
Data 5-6 : A[5] < A[6] → ditukar
55 94 44 42 67 18 12 6
Akhir dari proses ketiga adalah menempatkan data
terkecil ketiga pada posisi ke-n-2 (posisi ke-6).
Proses 4
Page 197
197
Data 1-2 : A[1] < A[2] → ditukar
94 55 44 42 67 18 12 6
Data 2-3 : A[2] > A[3]
Data 3-4 : A[3] > A[4]
Data 4-5 : A[4] < A[5] → ditukar
94 55 44 67 42 18 12 6
Akhir dari proses keempat adalah menempatkan data
terkecil keempat pada posisi ke-n-3 (posisi ke-5).
Proses 5
Data 1-2 : A[1] > A[2]
Data 2-3 : A[2] > A[3]
Data 3-4 : A[3] > A[4] → ditukar
94 55 67 44 42 18 12 6
Akhir dari proses kelima adalah menempatkan data
terkecil kelima pada posisi ke-n-4 (posisi ke-4).
Proses 6
Data 1-2 : A[1] > A[2]
Data 2-3 : A[2] < A[3] → ditukar
94 67 55 44 42 18 12 6
Page 198
198
Akhir dari proses keenam adalah menempatkan data
terkecil keenam pada posisi ke-n-5 (posisi ke-3).
Proses 7
Data 1-2 : A[1] > A[2]
Akhir dari proses ketujuh adalah menempatkan data
terkecil ketujuh dan kedelapan pada posisi ke-n-6 dan ke-
n-7 (posisi ke-2 dan ke-1).
Penyajian pseudocode algoritma Bubble Sort
(diasumsikan sudah terdapat array A yang menyimpan n
buah elemen):
for i=1 to (n-1) do
for j=1 to (n-i) do
if A[j] < A[j+1] then
temp=A[j]
A[j]=A[j+1]
A[j+1]=temp
endif
endfor
endfor
8.3 Metode Insertion Sort
Proses yang terjadi pada pengurutan dengan
Page 199
199
menggunakan metode Insertion Sort adalah dimulai dari
data ke-2 kemudian disisipkan pada tempat yang sesuai.
Data pada posisi pertama diandaikan memang sudah pada
tempatnya.
8.3.1 Pengurutan Naik (Ascending)
Mulai dari data ke-2 nilainya dibandingkan dengan data-
data sebelumnya kemudian mencari posisi yang tepat
untuk menyisipkan.
Contoh kasus:
Terdapat 6 buah data yang nilainya belum terurut:
8 5 15 12 7 2
Data-data di atas akan ditampilkan secara terurut naik
menggunakan metode Insertion Sort. Proses
pengurutannya adalah sebagai berikut:
Proses :
i=2
0=temp
1
2
3
4
5
6
5
8
5
15
12
7
2
Page 200
200
j=2-1=1
A[1] > temp
A[2] ← A[1]
0=temp
1
2
3
4
5
6
5
8
8
15
12
7
2
j=1-1=0
A[0] = temp
A[1] ← temp
0=temp
1
2
3
4
5
6
5
5
8
15
12
7
2
i=3
0=temp
1
2
3
4
5
6
15
5
8
15
12
7
2
j=3-1=2
A[2] < temp
A[3] ← A[2]
Page 201
201
i=4
0=temp
1
2
3
4
5
6
12
5
8
15
12
7
2
j=4-1=3
A[3] > temp
A[4] ← A[3]
0=temp
1
2
3
4
5
6
12
5
8
15
15
7
2
j=3-1=2
A[2] < temp
A[3] ← temp
0=temp
1
2
3
4
5
6
12
5
8
12
15
7
2
i=5
Page 202
202
0=temp
1
2
3
4
5
6
7
5
8
12
15
7
2
j=5-1=4
A[4] > temp
A[5] ← A[4]
0=temp
1
2
3
4
5
6
7
5
8
12
15
15
2
j=4-1=3
A[3] > temp
A[4] ← A[3]
0=temp
1
2
3
4
5
6
7
5
8
12
12
15
2
j=3-1=2
A[2] > temp
A[3] ← A[2]
Page 203
203
0=temp
1
2
3
4
5
6
7
5
8
8
12
15
2
j=2-1=1
A[1] < temp
A[2] ← temp
0=temp
1
2
3
4
5
6
7
5
7
8
12
15
2
i=6
j=6-1=5
A[5] > temp
A[6] ← A[5]
0=temp
1
2
3
4
5
6
2
5
7
8
12
15
15
j=5-1=4
A[5] > temp
A[5] ← A[4]
Page 204
204
0=temp
1
2
3
4
5
6
2
5
7
8
12
12
15
j=4-1=3
A[3] > temp
A[4] ← A[3]
0=temp
1
2
3
4
5
6
2
5
7
8
8
12
15
j=3-1=2
A[2] > temp
A[3] ← A[2]
0=temp
1
2
3
4
5
6
2
5
7
7
8
12
15
j=2-1=1
A[1] > temp
A[2] ← A[1]
0=temp
1
2
3
4
5
6
2
5
5
7
8
12
15
j=1-1=0
Page 205
205
A[0] = temp
A[1] ← temp
0=temp
1
2
3
4
5
6
2
2
5
7
8
12
15
Sebelumnya diasumsikan sudah terdapat array A yang
menyimpan n buah elemen, maka algoritma Insertion Sort
disajikan dengan pseudocode berikut:
for i=2 to n do
temp=A[i]
{ambil elemen A[i] agar nilainya tidak
dihilang karena tertimpa pergeseran}
A[0]=temp {sentinel}
j=i-1
{cari posisi yang tepat untuk A[i] di dalam
A[1..i-1] sambil menggeser}
while A[j]>temp do
A[j+1]=A[j] {pergeseran}
j=j-1
endwhile
A[j+1]=temp {menemukan tempat yang tepat}
endfor
8.3.2 Pengurutan Turun (Descending)
Page 206
206
Proses akan dimulai dengan membandingkan data ke-2
dengan data-data sebelumnya kemudian mencari posisi
yang tepat untuk menyisipkan.
Contoh kasus:
Terdapat 6 buah data yang nilainya belum terurut:
8 5 15 12 7 2
Data-data di atas akan ditampilkan secara terurut turun
menggunakan metode Insertion Sort. Proses
pengurutannya adalah sebagai berikut:
Proses :
i=2
0=temp
1
2
3
4
5
6
5
8
5
15
12
7
2
j=2-1=1
A[1] > temp
A[2] ← temp
0=temp
1
2
3
4
5
6
5
8
5
15
12
7
2
Page 207
207
i=3
0=temp
1
2
3
4
5
6
15
8
5
15
12
7
2
j=3-1=2
A[2] < temp
A[3] ← A[2]
0=temp
1
2
3
4
5
6
15
8
5
5
12
7
2
j=2-1=1
A[1] < temp
A[2] ← A[1]
0=temp
1
2
3
4
5
6
15
8
8
5
12
7
2
j=1-1=0
A[0] = temp
Page 208
208
A[1] ← temp
0=temp
1
2
3
4
5
6
15
15
8
5
12
7
2
i=4
0=temp
1
2
3
4
5
6
12
15
8
5
12
7
2
j=4-1=3
A[3] < temp
A[4] ← A[3]
0=temp
1
2
3
4
5
6
12
15
8
5
5
7
2
j=3-1=2
A[2] < temp
A[3] ← A[2]
Page 209
209
0=temp
1
2
3
4
5
6
12
15
8
8
5
7
2
j=2-1=1
A[2] > temp
A[2] ← temp
0=temp
1
2
3
4
5
6
12
15
12
8
5
7
2
i=5
j=5-1=4
A[4] < temp
A[5] ← A[4]
0=temp
1
2
3
4
5
6
7
15
12
8
5
5
2
j=4-1=3
A[3] > temp
A[4] ← temp
Page 210
210
0=temp
1
2
3
4
5
6
7
15
12
8
7
5
2
i=6
j=6-1=5
A[5] > temp
A[6] ← temp
0=temp
1
2
3
4
5
6
2
15
12
8
7
5
2
Sebelumnya diasumsikan sudah terdapat array A yang
menyimpan n buah elemen, maka algoritma Insertion Sort
disajikan dengan pseudocode berikut:
for i=2 to n do
temp=A[i]
{ambil elemen A[i] agar nilainya tidak
dihilang karena tertimpa pergeseran}
A[0]=temp {sentinel}
j=i-1
{cari posisi yang tepat untuk A[i] di dalam
A[1..i-1] sambil menggeser}
while A[j]<temp do
A[j+1]=A[j] {pergeseran}
j=j-1
Page 211
211
endwhile
A[j+1]=temp {menemukan tempat yang tepat}
endfor
Dari tiga metode pengurutan di atas, metode Selection
Sort mempunyai unjuk kerja yang lebih baik. Proses
pertukaran data pada setiap langkah hanya dilakukan satu
kali sehingga waktu pengurutan data dapat lebih cepat.
Metode Insertion Sort mempunyai kelemahan pada
jumlah pergeseran yang dilakukan untuk mencari posisi
yang tepat untuk meletakkan data. Pada setiap langkah
pengurutan, misalkan pada langkah ke-i maka proses
pergeseran yang dilakukan paling banyak adalah (i-1)
kali. Sehingga apabila akan mengurutkan data yang
tersimpan dalam array berukuran n, dimana nilai n adalah
besar maka banyaknya proses pergeseran akan meningkat
secara kuadratik. Oleh karena itu metode ini tidak efisien
digunakan seandainya datanya besar. Kelebihan dari
metode Bubble Sort adalah kesederhanannya sehingga
mudah untuk dipahami, tetapi pengurutan data
menggunakan metode Bubble Sort tidak efisien karena
banyaknya proses pertukaran data yang diperlukan pada
setiap langkah mencari data terkecil maupun data
terbesar. Untuk penggurutan array data berukuran besar
Page 212
212
menggunakan metode ini akan membutuhkan waktu yang
relatif lebih lama.
8.4 Metode Merge Sort
Metode Merge Sort adalah menggabungkan dua buah
array yang sudah terurut.
8.4.1 Pengurutan Naik (Ascending)
1.Dua buah array yang masing-masing terurut naik akan
digabungkan menjadi terurut naik.
Contoh kasus:
Array pertama : 5 8 12 15 20 25 29
Array kedua : 4 6 21 22
Proses penggabungan dua buah array di atas menjadi
sebuah array yang terurut naik adalah sebagai berikut:
1
2
3
4
5
6
7 a=1 s/d n
A=5
8 12 15 20 25 29
1
2
3
4
b=1 s/d m
B=4
6 21 22
Page 213
213
C=
c=1 s/d n+m
A[1] > B[1]
C[1] ← B[1]
C=4
b=1+1=2
A[1] < B[2]
C[2] ← A[1]
C=45
a=1+1=2
A[2] > B[2]
C[3] ← B[2]
C=456
b=2+1=3
A[2] < B[3]
C[4] ← A[2]
C=4568
a=2+1=3
A[3] < B[3]
Page 214
214
C[5] ← A[3]
C = 4 5 6 8 12
a=3+1=4
A[4] < B[3]
C[6] ← A[4]
C = 4 5 6 8 12 15
a=4+1=5
A[5] < B[3]
C[7] ← A[5]
C = 4 5 6 8 12 15 20
a=5+1=6
A[6] > B[3]
C[8] ← B[3]
C = 4 5 6 8 12 15 20 21
b=3+1=4
A[6] > B[4]
C[9] ← B[4]
C = 4 5 6 8 12 15 20 21 22
b=4+1=5
Page 215
215
Array kedua terdiri dari 4 elemen. Pada akhir proses ini
setelah indeks pada array kedua dinaikkan ternyata
indeksnya telah melampaui ukuran array kedua yang
sesungguhnya berarti semua elemen array kedua sudah
habis terlebih dahulu dan masuk ke dalam array
gabungan.
b>4 artinya b>m.
Elemen array pertama yang masih tersisa akan
dimasukkan ke dalam array gabungan satu persatu.
a=5+1=6
C[10] ← A[6]
C = 4 5 6 8 12 15 20 21 22 25
a=6+1=7
C[11] ← A[7]
C = 4 5 6 8 12 15 20 21 22 25 29
Algoritma dengan pseudocode untuk metode Merge Sort
(diasumsikan terdapat dua buah array yang masing-
masing menyimpan sekumpulan data dalam kondisi
terurut naik) :
Page 216
216
a=1
b=1
c=1
while (a<=n) or (b<=m) do
if A[a]<B[b] then
C[c]=A[a]
a=a+1
else
C[c]=B[b]
b=b+1
endif
c=c+1
endwhile
if b>m then
for p=a to n do
C[c]=A[p]
c=c+1
endfor
endif
if a>n then
for p=b to m do
C[c]=B[p]
c=c+1
endfor
endif
Page 217
217
2.Dua buah array yang masing-masing terurut turun akan
digabungkan menjadi terurut naik.
Contoh kasus:
Array pertama : 29 25 20 15 12 8 5
Array kedua : 22 21 6 4
Proses penggabungan dua buah array di atas menjadi
sebuah array yang terurut naik adalah sebagai berikut:
1
2
3
4
5
6
7 a=1 s/d n
A = 29 25 20 15 12 8
5
1
2
3
4
b=1 s/d m
B = 22 21 6
4
C=
c=1 s/d n+m
A[7] > B[4]
C[1] ← B[4]
C=4
b=4-1=3
Page 218
218
A[7] < B[3]
C[2] ← A[7]
C=45
a=7-1=6
A[6] > B[3]
C[3] ← B[3]
C=456
b=3-1=2
A[6] < B[2]
C[4] ← A[6]
C=4568
a=6-1=5
A[5] < B[2]
C[5] ← A[5]
C = 4 5 6 8 12
a=5-1=4
A[4] < B[2]
C[6] ← A[4]
C = 4 5 6 8 12 15
a=4-1=3
Page 219
219
A[3] < B[2]
C[7] ← A[3]
C = 4 5 6 8 12 15 20
a=3-1=2
A[2] > B[2]
C[8] ← B[2]
C = 4 5 6 8 12 15 20 21
b=2-1=1
A[2] > B[1]
C[9] ← B[1]
C = 4 5 6 8 12 15 20 21 22
b=1-1=0
Array kedua terdiri dari 4 elemen. Pada akhir proses ini
setelah indeks pada array kedua diturunkan ternyata
indeksnya menjadi sama dengan nol berarti semua
elemen array kedua sudah habis terlebih dahulu dan
masuk ke dalam array gabungan.
Elemen array pertama yang masih tersisa akan
dimasukkan ke dalam array gabungan satu persatu.
Page 220
220
a=3-1=2
C[10] ← A[2]
C = 4 5 6 8 12 15 20 21 22 25
a=2-1=1
C[11] ← A[1]
C = 4 5 6 8 12 15 20 21 22 25 29
Dengan mengasumsikan terdapat dua buah array yang
masing-masing menyimpan sekumpulan data dalam
kondisi terurut turun, algoritma Merge Sort dapat
dituliskan dengan pseudocode berikut:
a=n
b=m
c=1
while (a>=1) or (b>=1) do
if A[a]<B[b] then
C[c]=A[a]
a=a-1
else
C[c]=B[b]
b=b-1
endif
Page 221
221
c=c+1
endwhile
if b<1 then
for p=a downto 1 do
C[c]=A[p]
c=c+1
endfor
endif
if a<1 then
for p=b downto 1 do
C[c]=B[p]
c=c+1
endfor
endif
8.4.2 Pengurutan Turun (Descending)
1.Dua buah array yang masing-masing terurut naik akan
digabungkan menjadi terurut turun.
Contoh kasus:
Array pertama : 5 8 12 15 20 25 29
Array kedua : 4 6 21 22
Proses penggabungan dua buah array di atas menjadi
sebuah array yang terurut turun adalah sebagai berikut:
Page 222
222
1
2
3
4
5
6
7 a=1 s/d n
A=5
8 12 15 20 25 29
1
2
3
4
b=1 s/d m
B=4
6 21 22
C=
c=1 s/d n+m
A[7] > B[4]
C[1] ← A[7]
C = 29
a=7-1=6
A[6] > B[4]
C[2] ← A[6]
C = 29 25
a=6-1=5
A[5] < B[4]
C[3] ← B[4]
C = 29 25 22
b=4-1=3
Page 223
223
A[5] < B[3]
C[4] ← B[3]
C = 29 25 22 21
b=3-1=2
A[5] > B[2]
C[5] ← A[5]
C = 29 25 22 21 20
a=5-1=4
A[4] > B[2]
C[6] ← A[4]
C = 29 25 22 21 20 15
a=4-1=3
A[3] > B[2]
C[7] ← A[3]
C = 29 25 22 21 20 15 12
a=3-1=2
A[2] > B[2]
C[8] ← A[2]
C = 29 25 22 21 20 15 12 8
Page 224
224
a=2-1=1
A[1] < B[2]
C[9] ← B[2]
C = 29 25 22 21 20 15 12 8 6
b=2-1=1
A[1] > B[1]
C[10] ← A[1]
C = 29 25 22 21 20 15 12 8 6 5
a=1-1=0
Array pertama terdiri dari 7 elemen. Pada akhir proses ini
setelah indeks pada array pertama diturunkan ternyata
indeksnya menjadi sama dengan nol berarti semua
elemen array pertama sudah habis terlebih dahulu dan
masuk ke dalam array gabungan.
Elemen array kedua yang masih tersisa akan dimasukkan
ke dalam array gabungan.
b=2-1=1
C[11] ← B[1]
C = 29 25 22 21 20 15 12 8 6 5 4
Page 225
225
Dengan mengasumsikan terdapat dua buah array yang
masing-masing menyimpan sekumpulan data dalam
kondisi terurut naik, algoritma Merge Sort dapat
dituliskan dengan pseudocode berikut:
a=n
b=m
c=1
while (a>=1) or (b>=1) do
if A[a]>B[b] then
C[c]=A[a]
a=a+1
else
C[c]=B[b]
b=b+1
endif
c=c+1
endwhile
if b<1 then
for p=a downto 1 do
C[k]=A[p]
c=c+1
endfor
endif
if a<1 then
for p=b downto 1 do
Page 226
226
C[c]=B[p]
c=c+1
endfor
endif
2.Dua buah array yang masing-masing terurut turun akan
digabungkan menjadi terurut turun.
Contoh kasus:
Array pertama : 29 25 20 15 12 8 5
Array kedua : 22 21 6 4
Proses penggabungan dua buah array di atas menjadi
sebuah array yang terurut turun adalah sebagai berikut:
1
2
3
4
5
6
7 a=1 s/d n
A = 29 25 20 15 12 8
5
1
2
3
4
b=1 s/d m
B = 22 21 6
4
C=
c=1 s/d n+m
A[1] > B[1]
Page 227
227
C[1] ← A[1]
C = 29
a=1+1=2
A[2] > B[1]
C[2] ← A[2]
C = 29 25
a=2+1=3
A[3] < B[1]
C[3] ← B[1]
C = 29 25 22
b=1+1=2
A[3] < B[2]
C[4] ← B[2]
C = 29 25 22 21
b=2+1=3
A[3] > B[3]
C[5] ← A[3]
C = 29 25 22 21 20
a=3+1=4
Page 228
228
A[4] > B[3]
C[6] ← A[4]
C = 29 25 22 21 20 15
a=4+1=5
A[5] > B[3]
C[7] ← A[5]
C = 29 25 22 21 20 15 12
a=5+1=6
A[6] > B[3]
C[8] ← A[6]
C = 29 25 22 21 20 15 12 8
a=6+1=7
A[7] < B[3]
C[9] ← B[3]
C = 29 25 22 21 20 15 12 8 6
b=3+1=4
A[7] > B[3]
C[9] ← A[7]
C = 29 25 22 21 20 15 12 8 6 5
a=7+1=8
Page 229
229
Array pertama terdiri dari 7 elemen. Pada akhir proses ini
setelah indeks pada array pertama dinaikkan ternyata
indeksnya telah melampaui ukuran array pertama yang
sesungguhnya berarti semua elemen array pertama sudah
habis terlebih dahulu dan masuk ke dalam array
gabungan.
a>7 artinya a>n
Elemen array kedua yang masih tersisa akan dimasukkan
ke dalam array gabungan.
b=3+1=4
C[11] ← B[4]
C = 29 25 22 21 20 15 12 8 6 5 4
Dengan mengasumsikan terdapat dua buah array yang
masing-masing menyimpan sekumpulan data dalam
kondisi terurut turun, algoritma Merge Sort dapat
dituliskan dengan pseudocode berikut:
a=1
b=1
c=1
Page 230
230
while (a<=n) or (b<=m) do
if A[a]>B[b] then
C[c]=A[a]
a=a+1
else
C[c]=B[b]
b=b+1
endif
c=c+1
endwhile
if b>m then
for p=a to n do
C[c]=A[p]
c=c+1
endfor
endif
if a>n then
for p=b to m do
C[c]=B[p]
c=c+1
endfor
endif
8.5 Latihan
1.Buatlah program untuk mengurutkan array yang terurut
Page 231
231
naik menjadi terurut turun dan sebaliknya array yang
terurut turun menjadi terurut naik.
2.Buatlah program untuk mencari median dari n buah
data.
3.Buatlah program menggabungkan dua buah array.
Array pertama adalah satu yang telah terurut secara
menurun sedangkan array kedua adalah dua yang telah
terurut secara menaik menjadi array tiga yang terurut
secara menaik.
Misal:
satu : 55 43 37 23 19 13 7
dua : 3 9 13 22 39 41 47
tiga : 3 7 9 13 13 19 22 23 37 39 41
43 47 55
3.Diberikan sebuah matriks berukuran (n x m). Buatlah
program untuk mengurutkan elemen matriks tersebut.
Program yang dibuat harus dapat menawarkan kepada
pengguna apakah akan mengurutkan secara menaik
atau menurun.
Page 232
232

Bab 9
Searching
Tujuan pembelajaran umum:
1. memahami algoritma dalam metode sequential
search
2. memahami algoritma dalam metode binary search
Dalam kehidupan sehari-hari kita sering melakukan
pencarian (searching) data dari sejumlah data yang ada
untuk menemukan informasi yang dibutuhkan. Dalam
bab ini akan dibahas metode pencarian data dalam suatu
array, baik pada array yang sudah terurut maupun belum
terurut. Metode pencarian yang akan digunakan adalah:
Page 233
233
1.Sequential search
2.Binary search
9.1 Metode Sequential Search
Metode Sequential Search atau disebut pencarian
beruntun dapat digunakan untuk melakukan pencarian
data baik pada array yang sudah terurut maupun yang
belum terurut. Proses yang terjadi pada metode pencarian
ini adalah sebagai berikut:
1.Membaca array data.
2.Menentukan data yang dicari.
3.Mulai dari data pertama sampai dengan data terakhir,
data yang dicari dibandingkan dengan masing-masing
data di dalam array.
a. Jika data yang dicari tidak ditemukan maka semua
data atau elemen array dibandingkan sampai selesai.
b. Jika data yang dicari ditemukan maka perbandingan
akan dihentikan.
9.1.1 Pencarian Pada Array Belum Terurut
Contoh kasus:
Terdapat 6 buah data yang tersimpan dalam array.
Page 234
234
8 7 5 6 10 4
a. Dilakukan pencarian apakah dalam array tersebut
terdapat data yang bernilai 5.
1
2
3
4
5
6
i = 1 s/d n
A=8
7
5
6
10 4
x=5
ketemu ← false
i=1
A[1] <> x {ketemu ← false}
i=1+1=2
A[2] <> x {ketemu ← false}
i=2+1=3
A[3] = x {ketemu ← true}
Hasil dari pencarian data bernilai 5 ditemukan pada posisi
data ke-3.
b. Dilakukan pencarian apakah dalam array tersebut
Page 235
235
terdapat data yang bernilai 11.
1
2
3
4
5
6
i = 1 s/d n
A=8
7
5
6
10 4
x=11
ketemu ← false
i=1
A[1] <> x {ketemu ← false}
i=1+1=2
A[2] <> x {ketemu ← false}
i=2+1=3
A[3] <> x {ketemu ← false}
i=3+1=4
A[4] <> x {ketemu ← false}
i=4+1=5
A[5] <> x {ketemu ← false}
i=5+1=6
Page 236
236
A[6] <> x {ketemu ← false}
i=6+1=7
i > 6 berarti i > n, semua data sudah diperbandingkan
dengan nilai data yang dicari dan hasil dari pencarian data
bernilai 11 tidak ditemukan.
Algoritma metode Sequential Search untuk data yang
belum terurut:
for i=1 to n do
input(A[i])
endfor
input(x)
ketemu=false {inisialisasi belum
ditemukan}
i=1
while (ketemu=false) and (i<=n) do
if A[i]=x then
ketemu=true {menghentikan proses
pencarian}
posisi=i
else i=i+1 {maju ke elemen
berikutnya}
Page 237
237
endif
endwhile
if ketemu=false then write (“Tidak
ketemu”)
else
write (“Data ditemukan”)
output (posisi)
endif
9.1.2 Pencarian Pada Array Terurut
9.1.2.1 Pencarian Pada Array Terurut Naik
Contoh kasus:
Di dalam suatu array tersimpan 6 buah data yang terurut
naik.
2 7 11 15 17 18
Dilakukan pencarian apakah terdapat data bernilai 8 pada
array tersebut.
1
2
3
4
5
6
i = 1 s/d n
A=2
7 11 15 17 18
Page 238
238
x=8
ketemu ← false
i=1
A[1] <> x {ketemu ← false dan A[1] < x}
i=1+1=2
A[2] <> x {ketemu ← false dan A[2] < x }
i=2+1=3
A[3] <> x {ketemu ← false dan A[3] > x }
Pencarian hanya dilakukan dengan membandingkan nilai
data yang dicari dengan data ke-1 sampai dengan data ke-
3 pada array karena data ke-3 ternyata nilainya sudah
lebih besar daripada nilai data yang dicari, sehingga tidak
perlu dibandingkan dengan data berikutnya dalam array.
Kesimpulannya adalah data 11 tidak terdapat dalam array.
Sebelum dilakukan pencarian, pada algoritma di bawah
ini array diasumsikan sudah diurutkan menaik terlebih
dahulu .
input(x)
Page 239
239
ketemu=false {inisialisasi belum
ditemukan}
i=1
while (ketemu=false)and(i<=n)and(A[i]<=x)
do
if A[i]=x then
ketemu=true {menghentikan proses
pencarian}
posisi=i
else i=i+1 {maju ke elemen berikutnya}
endif
endwhile
if ketemu=false then write (“Tidak
ketemu”)
else
write (“Data ditemukan”)
output (posisi)
endif
10.1.2.2 Pencarian Pada Array Terurut Turun
Contoh kasus:
Di dalam suatu array tersimpan 6 buah data yang terurut
turun.
18 17 15 11 7 2
Dilakukan pencarian apakah terdapat data bernilai 16
Page 240
240
pada array tersebut.
1
2
3
4
5
6
i = 1 s/d n
A = 18 17 15 11
7
2
x=16
ketemu ← false
i=1
A[1] <> x {ketemu ← false dan A[1] > x}
i=1+1=2
A[2] <> x {ketemu ← false dan A[2] > x }
i=2+1=3
A[3] <> x {ketemu ← false dan A[3] < x }
Pencarian hanya dilakukan dengan membandingkan nilai
data yang dicari dengan data ke-1 sampai dengan data ke-
3 pada array karena data ke-3 ternyata nilainya sudah
lebih kecil daripada nilai data yang dicari, sehingga tidak
perlu dibandingkan dengan data berikutnya dalam array.
Kesimpulannya adalah data 16 tidak terdapat dalam array.
Page 241
241
Sebelum dilakukan pencarian, pada algoritma di bawah
ini array diasumsikan sudah diurutkan menurun terlebih
dahulu.
input(x)
ketemu=false {inisialisasi belum
ditemukan}
i=1
while (ketemu=false) and (i<=n) and
(A[i]>=x) do
if A[i]=x then
ketemu=true {menghentikan proses
pencarian}
posisi=i
else i=i+1 {maju ke elemen berikutnya}
endif
endwhile
if ketemu=false then write (“Tidak
ketemu”)
else
write (“Data ditemukan”)
output (posisi)
endif
Page 242
242
9.2 Metode Binary Search
Metode Binary Search atau sering pula dinamakan
pencarian biner, hanya digunakan untuk pencarian data
pada array yang sudah terurut.
9.2.1 Pencarian Pada Array Terurut Naik
Proses yang terjadi pada pencarian dengan metode ini
adalah sebagai berikut:
1.Membaca array data.
2.Apabila array belum terurut maka diurutkan dahulu.
3.Menentukan data yang akan dicari.
4.Menentukan elemen tengah dari array. Letak posisi
tengah dapat ditentukan dengan tengah=(n div
2)+1.
5.Jika nilai elemen tengah sama dengan data yang dicari
maka pencarian selesai.
6.Jika nilai elemen tengah tidak sama dengan data yang
dicari maka:
a. Jika nilai elemen tengah lebih besar daripada data
yang dicari maka pencarian dilakukan pada setengah
array pertama.
b. Jika nilai elemen tengah lebih kecil daripada data
yang dicari maka pencarian dilakukan pada setengah
Page 243
243
array berikutnya.
Contoh menentukan elemen tengah:
1. Di dalam suatu array tersimpan 6 buah data yang
terurut naik.
1
2
3
4
5
6
i = 1 s/d n
A=2
7 11 17 17 18
tengah=(n div 2)+1=(6 div 2)+1=4
elemen_tengah=A[tengah]=A[4]=17
Untuk array yang banyaknya data adalah genap maka
posisi tengahnya tidak tepat berada di tengah.
2. Di dalam suatu array tersimpan 7 buah data yang
terurut naik.
1
2
3
4
5
6
7 i = 1 s/d n
A=5
7
8
11 12 14 15
tengah=(n div 2)+1=(7 div 2)+1=4
elemen_tengah=A[tengah]=A[4]=11
Untuk array yang banyaknya data adalah ganjil maka
Page 244
244
posisi tengahnya dapat tepat berada di tengah.
Contoh kasus:
Di dalam suatu array tersimpan 6 buah data yang terurut
naik.
1
2
3
4
5
6
i = 1 s/d n
A=2
7 11 17 17 18
Sebelum dilakukan pencarian, pada algoritma Binary
Search di bawah ini, array A diasumsikan sudah
diurutkan menaik terlebih dahulu.
input(x)
t=(n div 2)+1
et=A[t]
ketemu=false
if x=et then
ketemu=true
posisi=t
else
if x<et then
i=1
while
(ketemu=false)and(i<t)and(A[i]<=x) do
if A[i]=x then
Page 245
245
ketemu=true
posisi=i
else i=i+1
endif
endwhile
else
i=t+1
while
(ketemu=false)and(i<=n)and(A[i]<=x) do
if A[i]=x then
ketemu=true
posisi=i
else i=i+1
endif
endwhile
endif
endif
if ketemu=false then write (“Data tidak
ketemu”)
else
write (“Data ditemukan”)
output (posisi)
endif
9.2.2 Pencarian Pada Array Terurut Turun
Proses yang terjadi pada pencarian dengan metode ini
adalah sebagai berikut:
Page 246
246
1. Membaca array data.
2. Apabila array belum terurut maka diurutkan dahulu.
3. Menentukan data yang akan dicari.
4. Menentukan elemen tengah dari array. Letak posisi
tengah dapat ditentukan dengan tengah=(n div
2)+1.
5. Jika nilai elemen tengah sama dengan data yang dicari
maka pencarian selesai.
6. Jika nilai elemen tengah tidak sama dengan data yang
dicari maka:
a. Jika nilai elemen tengah lebih besar daripada data
yang dicari maka pencarian dilakukan pada setengah
array kedua.
b. Jika nilai elemen tengah lebih kecil daripada data
yang dicari maka pencarian dilakukan pada setengah
array pertama.
Sebelum dilakukan pencarian, pada algoritma Binary
Search di bawah ini, array A diasumsikan sudah
diurutkan menurun terlebih dahulu.
input(x)
t=(n div 2)+1
et=A[t]
ketemu=false
Page 247
247
if x=et then
ketemu=true
posisi=t
else
if x<et then
i=t+1
while (ketemu=false)and(i<n)and(A[i]>=x)
do
if A[i]=x then
ketemu=true
posisi=i
else i=i+1
endif
endwhile
else
i=1
while (ketemu=false)and(i<t)and(A[i]>=x)
do
if A[i]=x then
ketemu=true
posisi=i
else i=i+1
endif
endwhile
endif
endif
if ketemu=false then write (“Data tidak
ketemu”)
else
write (“Data ditemukan”)
output (posisi)
endif
Page 254
254