You are on page 1of 254

1

LOGIKA INFORMATIKA
TIFS 1604
3 SKS
Suwanto Raharjo,S.Si.,M.Kom
Teknik Informatika
Teknologi Industri
IST AKPRIND Yogyakarta

2
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-

3
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

4
5
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

6
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

7
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

8
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

9
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

10
6.4 Ilustrasi Hitung Perkalian
6.5 Ilustrasi Hitung Perpangkatan

11
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

12
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.

13
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).

14
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

15
~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 →.

16
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

17
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

18
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

19
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:

20
~ (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.

21
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

22
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

23
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

24
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.

25
~((∃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

26
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

27
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.

28
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:

29
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

30
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

31
((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.

32
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.

33
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

34
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

35
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

36
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

37
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

38
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

39
tersebut. Flowchart sistem digunakan untuk
menggambarkan urutan langkah untuk memecahkan
masalah tetapi hanya untuk menggambarkan prosedur
dalam sistem yang dibentuk.
Simbol yang digunakan :

Contoh :

40
2. Flowchart program
Yaitu bagan yang menggambarkan urutan logika dari
suatu prosedur pemecahan masalah.
Simbol yang digunakan adalah American National
Standard Inc.:

41
: (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

42
- 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

Start

Input (a,b,c)

Jml = a+b+c

Rerata = Jml/3

Output (Rerata)

End

Gambar 2.1 Flowchart Hitung Rata-Rata

43
2.Algoritma mencetak tiket parkir.
Penyelesaian menggunakan flowchart:

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)

End

44
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.

45
Pemrograman meliputi dua tahapan yaitu:
1.Fase Problem Solving
2.Fase Implementation

Pembuatan
Analisa Problem
Program

Test
Perancangan
Algoritma

Dokumentasi

Test

Dipakai

Fase I Fase II
Fase Problem Solving Fase Implementasi

Gambar 2.3 Tahapan Pemrograman

Langkah-langkah untuk dapat menyelesaikan masalah

46
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.

47
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:

48
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

49
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).

50
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

51
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

52
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

53
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

54
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.

55
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

56
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.

57
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.

58
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 :

59
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

60
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
2
A = A +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)

61
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

62
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.

63
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

Start

phi = 3.14

64
Input ( R )
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)

65
- 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

66
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

67
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 :

68
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

69
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

70
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

71
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

72
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 :

73
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.

74
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.

75
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

76
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:

77
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

78
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.

79
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.

80
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:

81
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.

82
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)

83
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 :

84
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)

85
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:

86
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

87
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

88
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 ax2 + bx + c = 0.

Jawab :

Koefisien a, b, dan c bisa mempunyai sembarang nilai


termsuk nol. Akar-akar persamaan kuadrat bergantung

89
dari nilai-nilai koefisiennya. Berdasarkan nilai-nilai
koefisien tersebut disusun kemungkinan-kemungkinan
sebagai berikut:
Bila koefisien a = 0 maka ax2 + bx + c = 0 bukan
persamaan kuadrat.
Perhitungan determinan D = b2 –4ac.
Jika D negatif (D<0) maka ax2 + 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 ax2 + bx + c = 0 mempunyai


dua akar riil yang kembar yaitu:
x1=x2=-b/2a

Jika D positif (D>0) maka ax2 + 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

90
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

91
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

92
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

93
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>

94
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.

95
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)

96
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 :

97
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.

98
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.R2, V = 4/3.phi.R3).
6.Tuliskan algoritma untuk menentukan jarak atau titik
tengah dari 2 titik yang diinputkan.
7.Tuliskan pseudocode dari flowchart sebagai berikut ini:

99
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

100
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

101
102
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)

103
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

104
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

105
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 :

106
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).

107
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.

108
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

109
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

110
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

111
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 :

112
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

113
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:

114
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

115
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:

116
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)

117
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

118
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

119
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

120
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

121
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 :

122
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)

123
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 :

124
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)

125
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

126
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

127
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'

128
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

129
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

130
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

131
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

132
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'

133
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'

134
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

135
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-

136
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

137
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)

138
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

139
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.

140
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.

141
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

142
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 :

143
Program Utama

Sub program Sub program

Sub program Sub program

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:

144
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

145
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

146
3. Perpangkatan xn. 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

147
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 xn/n!.


Jawab :

Untuk menyelesaikan soal di atas perlu dibuat dua


subprogram. Subprogram pertama untuk menghitung
perpangkatan xn sedangkan subprogram kedua untuk

148
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)

149
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)

150
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(

151
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).

152
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,

153
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:

154
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! :

155
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.

156
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)

157
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)

158
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

159
=(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

160
endfunction

4. Perpangkatan xn.

Jawab :

Ditentukan bahwa pemangkatnya adalah nol dan


3
bilangan-bilangan positif. Ilustrasi penelusuran 4 adalah
sebagai berikut:

161
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

162
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

163
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.

164
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

165
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

166
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)

167
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

168
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

169
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

170
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

171
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

172
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]

173
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]

174
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]

175
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.

176
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

177
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

178
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]

179
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

180
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

181
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

182
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

183
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:

184
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

185
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]

186
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

187
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

188
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

189
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

190
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:
7 5 6 3 4 2
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
5 7 6 3 4 2

191
Data 2-3 : A[2] > A[3] → ditukar
5 6 7 3 4 2
Data 3-4 : A[3] > A[4] → ditukar
5 6 3 7 4 2
Data 4-5 : A[4] > A[5] → ditukar
5 6 3 4 7 2
Data 5-6 : A[5] > A[6] → ditukar
5 6 3 4 2 7

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
5 3 6 4 2 7
Data 3-4 : A[3] > A[4] → ditukar
5 3 4 6 2 7
Data 4-5 : A[4] > A[5] → ditukar
5 3 4 2 6 7

Akhir dari proses kedua adalah menempatkan data


terbesar kedua pada posisi ke-n-1 (posisi ke-5).

192
Proses 3
Data 1-2 : A[1] > A[2] → ditukar
3 5 4 2 6 7
Data 2-3 : A[2] > A[3] → ditukar
3 4 5 2 6 7
Data 3-4 : A[3] > A[4] → ditukar
3 4 2 5 6 7

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
3 2 4 5 6 7

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
2 3 4 5 6 7
Akhir dari proses kelima atau terakhir adalah

193
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:

194
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]

195
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

196
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

197
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

198
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

199
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]

200
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

201
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]

202
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]

203
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

204
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)

205
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

206
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

207
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]

208
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

209
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

210
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

211
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

212
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=4 5
a=1+1=2

A[2] > B[2]


C[3] ← B[2]
C=4 5 6
b=2+1=3

A[2] < B[3]


C[4] ← A[2]
C=4 5 6 8
a=2+1=3

A[3] < B[3]

213
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

214
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) :

215
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

216
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

217
A[7] < B[3]
C[2] ← A[7]
C=4 5
a=7-1=6

A[6] > B[3]


C[3] ← B[3]
C=4 5 6
b=3-1=2

A[6] < B[2]


C[4] ← A[6]
C=4 5 6 8
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

218
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.

219
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

220
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:

221
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

222
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

223
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

224
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

225
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]

226
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

227
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

228
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

229
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

230
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.

231
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:

232
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.

233
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

234
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

235
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}

236
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

237
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)

238
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

239
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.

240
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

241
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

242
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

243
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

244
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:

245
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

246
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

247
9.3 Latihan
1.Misalkan diketahui suatu array dengan nama larik
sebagai berikut:
46 44 42 36 34 25 22 21 20 15 12 8 6 5 4

Tentukan berapa jumlah perbandingan yang diperlukan


untuk mencari data 22 pada array dengan menggunakan
metode:
a. Sequential search
b. Binary search

2.Buatlah algoritma untuk melakukan pencarian data


pada sebuah matriks berukuran (m x n) dengan
menggunakan metode:
a. Sequential search
b. Binary search

248
Daftar Pustaka

1.Andre Dos Santos Lessa; Python Developer's


Handbook; Sams Publishing., 2001
2.David Harel; The Spirit of Computing; Second Edition,
Addison-Wesley Publishing Company, Inc., 1996
3.Manna, Z and Waldinger, R; The Logical Basis for

249
Computer Programming; Addison-Wesley Publishing
Company, Inc., 1985
4.Mano, M.M and Kime, C.R; Logic and Computer
Design Fundamentals; Prentice Hall, Inc., 2000
5.Saara Baase; Computer Algorithms Introduction to
Design and Analysis; Addison-Wesley Publishing
Company, Inc., 1993
6.T.E Bailey; Program Design with Pseudocode; Brooks
Cole Publishing Company, 1983
7.Tim Alton and Mitch Chapman; Programming with
Python; Prima Tech., 1999
8.Thomas A. Reed; An Introduction Algorithm Design
and Structured Programming; Prentice Hall, Inc.,
1988

Profil Penulis

Penulis bernama Suwanto Raharjo, S.Si,


M.Kom. Lahir di Yogyakarta, 19 Juli
1975. Tahun 2000 menyelesaikan studi S-
1 Statistika Fakultas Matematika dan

250
Ilmu Pengetahuan Alam Universitas Gadjah Mada dan
pada tahun 2002 menyelesaikan Program Pascasarjana
Magister Ilmu Komputer Universitas Gadjah Mada. Sejak
tahun 1998 aktif menjadi pembicara di seminar-seminar
nasional dan sebagai konsultan spesialisasi network
security dan open source programming. Mulai tahun 2000
menjadi dosen tidak tetap di STMIK AMIKOM
Yogyakarta, sedangkan sejak tahun 2003 menjadi dosen
tetap di Institut Sains dan Teknologi AKPRIND
Yogyakarta.

Penulis telah dianugerahi dua putera bernama Naufal


Rasendriya Apta Raharema dan Najwa Rashila Az-Zahra
Raharema

Buku-buku yang telah ditulis oleh penulis, yakni:


1.Keamanan Akses ke PostgreSQL melalui PHP
Menggunakan Apache Web Server di GNU/Linux.
2.Teori, Analisa dan Implementasi Jaringan Tanpa Disk
pada GNU/Linux.
3.Belajar C di GNU/Linux.
4.Struktur Data Menggunakan C di GNU/Linux.
5.Logika, Algoritma dan Implementasinya dalam Bahasa
Python di GNU/Linux

251
6.Visual Downloader untuk Microcontroller AT89C2051
7.RDBMS dengan PostgreSQL di GNU/Linux
8.Struktur Data: Konsep dan Implementasinya dalam
bahasa C & Free Pascal di GNU/Linux

Sinopsis

Logika proposisional merupakan ilmu dasar


untuk mempelajari algoritma dan logika yang terkait di
dalamnya berperanan sangat penting dalam
pemrograman. Sedangkan algoritma mempunyai peranan
yang sangat penting juga dalam bidang teknik

252
informatika pada umumnya dan bidang pemrograman
pada khususnya. Dengan Logika Informatika akan
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.
Implementasi Logika dan Algoritma dapat
dituangkan ke dalam beberapa bahasa pemrograman.
Buku ini menjelaskan konsep logika dasar dan
perancangan algoritma yang baik. 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-contoh latihan
diharapkan dapat membantu pembaca untuk lebih
memahami algoritma. Buku ini sangat cocok dan
berguna bagi mahasiswa yang sedang menempuh mata
kuliah Logika Informatika, Logika dan Algoritma,
Algoritma dan Pemrograman, Pemograman Komputer I
serta semua kalangan yang terarik mempelajari bidang
pemrograman.

253
254

You might also like