bukualgo ebook suwanto

254
1

Upload: uzy182

Post on 24-Jun-2015

1.426 views

Category:

Documents


13 download

TRANSCRIPT

Page 1: Bukualgo eBook Suwanto

1

Page 2: Bukualgo eBook Suwanto

2

LOGIKA INFORMATIKA

TIFS 1604

3 SKS

Suwanto Raharjo,S.Si.,M.Kom

Teknik Informatika

Teknologi Industri

IST AKPRIND Yogyakarta

Page 3: Bukualgo eBook Suwanto

3

Kata Pengantar

Logika proposisional merupakan ilmu dasar

untuk mempelajari algoritma dan logika yang terkait di

dalamnya berperanan sangat penting dalam

pemrograman. Proses kerja komputer tidak dapat

dilepaskan dari program-program, di mana komputer

akan menerjemahkan program-program tersebut dengan

sistem logika. Dengan alasan di atas maka belajar logika

proporsisional sebagai dasar logika algoritma sangat

diperlukan dalam belajar pemrograman maupun belajar

bahasa pemrograman.

Algoritma mempunyai peranan yang

sangat penting dalam bidang teknik informatika pada

umumnya dan bidang pemrograman pada khususnya.

Algoritma membantu mahasiswa mengembangkan daya

penalaran atau kerangka berpikir yang sistematis dalam

memahami masalah dan membuat perencanaan atau

konsep pemecahan masalah yang lebih baik sehingga

dapat menghasilkan yang tepat pula.

Pada buku ini banyak diberikan contoh

kasus disertai alternatif solusi penyelesaiannya dengan

harapan pembaca dapat mengembangkan sesuai dengan

kreatifitas masing-masing. Demikian pula dengan contoh-

Page 4: Bukualgo eBook Suwanto

4

contoh latihan diharapkan dapat membantu pembaca

untuk lebih memahami algoritma.

Pada kesempatan ini penulis menghaturkan

beribu-ribu terima kasih yang tak terkira kepada ALLAH

SWT yang telah memberikan Rahmat dan Hidayah-Nya

sehingga penulis mampu menyelesaikan buku ini. Penulis

juga mengucapkan banyak terima kasih kepada civitas

akademika IST AKPRIND Yogyakarta yang telah

berkenan menerbitkan buku ini, untuk istri tercinta Ema

Utami, S.Si, M.Kom atas ide-ide yang kreatifnya serta

untuk putra-putri tercinta Naufal Rasendriya Apta

Raharema dan Najwa Rashika Az-Zahra Raharema yang

telah memberikan semangat untuk selalu berkarya.

Akhir kata semoga buku ini dapat

memberikan manfaat dan menambah wawasan bagi

pembaca yang ingin mempelajari konsep logika

informatika. Saran dan kritik yang ditujukan untuk

membangun buku ini dengan lebih baik dapat ditujukan

ke alamat email [email protected].

Yogyakarta, Desember 2007

Penulis

Suwanto Raharjo,S.Si,M.Kom

Page 5: Bukualgo eBook Suwanto

5

Page 6: Bukualgo eBook Suwanto

6

Daftar Isi

Kata Pengantar

Daftar Gambar

Daftar Tabel

1 Logika Proposisional

1.1 Proposisi

1.2 Relasi Proposisional

1.3 Interpretasi

1.4 Sifat-Sifat Kalimat Logika

1.5 Kalimat Berkuantor

1.5.1 Ingkaran Kalimat Berkuantor

1.6 Pembuatan Kesimpulan Berdasarkan Implikasi

1.7 Latihan

2 Algoritma

2.1 Algoritma

2.2 Penyajian Algoritma

2.3 Tahap-Tahap Pemrograman

2.4 Struktur Algoritma

2.5 Latihan

Page 7: Bukualgo eBook Suwanto

7

3 Struktur Runtunan

3.1 Runtunan

3.2 Contoh-Contoh Kasus Runtunan

3.3 Latihan

4 Struktur Pemilihan

4.1 Instruksi IF

5.1.1 Instruksi IF Sederhana

5.1.1.1 Instruksi IF dengan Syarat Tunggal

5.1.1.2 Instruksi IF dengan Syarat Majemuk

5.1.2 Instruksi IF - ELSE

4.2 Contoh-Contoh Kasus IF dan IF – ELSE

4.3 Instruksi IF Bertingkat

4.4 Contoh-Contoh Kasus Instruksi IF Bertingkat

4.5 Instruksi SWITCH

4.6 Contoh-Contoh Kasus Instruksi SWITCH

4.7 Latihan

5 Struktur Perulangan

5.1 Instruksi FOR

5.2 Contoh-Contoh Kasus FOR

5.3 Instruksi WHILE – DO

5.4 Contoh-Contoh Kasus Instruksi WHILE - DO

5.5 Latihan

Page 8: Bukualgo eBook Suwanto

8

6 Subprogram

6.1 Subprogram

6.2 Contoh-Contoh Kasus Subprogram

6.3 Rekursi

6.4 Contoh-Contoh Kasus Rekursi

6.5 Latihan

7 Array

7.1 Array

7.2 Contoh-Contoh Kasus Array

7.3 Latihan

8 Sorting

8.1 Metode Selection Sort

8.1.1 Pengurutan Naik (Ascending)

8.1.2 Pengurutan Turun (Descending)

8.2 Metode Bubble Sort

8.2.1 Pengurutan Naik (Ascending)

8.2.2 Pengurutan Turun (Descending)

8.3 Metode Insertion Sort

8.3.1 Pengurutan Naik (Ascending)

8.3.2 Pengurutan Turun (Descending)

8.4 Metode Merge Sort

Page 9: Bukualgo eBook Suwanto

9

8.4.1 Pengurutan Naik (Ascending)

8.4.2 Pengurutan Turun (Descending)

8.5 Latihan

9 Searching

9.1 Metode Sequential Search

9.1.1 Pencarian Pada Array Belum Terurut

9.1.2 Pencarian Pada Array Terurut

10.1.2.1 Pencarian Pada Array Terurut Naik

10.1.2.2 Pencarian Pada Array Terurut Turun

9.2 Metode Binary Search

10.2.1 Pencarian Pada Array Terurut Naik

10.2.2 Pencarian Pada Array Terurut Turun

9.3 Latihan

Daftar Pustaka

Profil Penulis

Page 10: Bukualgo eBook Suwanto

10

Daftar Gambar

2.1 Flowchart Hitung Rata-Rata

2.2 Flowchart Cetak Tiket Parkir

2.3 Tahapan Pemrograman

3.1 Flowchart Runtunan

3.2 Flowchart Hitung Luas Persegi Panjang

3.3 Flowchart Hitung Luas dan Keliling Lingkaran

3.4 Flowchart Konversi Detik

3.5 Ilustrasi Pertukaran Data

4.1 Flowchart Instruksi IF

4.2 Flowchart Instruksi IF – ELSE

4.3 Flowchart Instruksi SWITCH

5.1 Flowchart Instruksi FOR Format Naik

5.2 Flowchart Instruksi FOR Format Turun

5.3 Flowchart Instruksi WHILE – DO

6.1 Gambaran Umum Subprogram

6.2 Ilustrasi Hitung Faktorial

6.3 Ilustrasi Bilangan Fibonacci

Page 11: Bukualgo eBook Suwanto

11

6.4 Ilustrasi Hitung Perkalian

6.5 Ilustrasi Hitung Perpangkatan

Page 12: Bukualgo eBook Suwanto

12

Daftar Tabel

1.1 Aturan NOT

1.2 Aturan AND

1.3 Aturan OR

1.4 Aturan IF – THEN

1.5 Aturan IF AND ONLY IF

1.6 Aturan IF – THEN - ELSE

Page 13: Bukualgo eBook Suwanto

13

Bab 1

Logika Proposisional

Tujuan pembelajaran umum:

1. memahami logika proposisi

2. memahami relasi proposisi

3. memahami sifat-sifat logika

4. memahami interpretasi dari proposisi

5. memahami kalimat berkuantor

6. membuat kesimpulan berdasarkan implikasi

Logika proposisional merupakan ilmu dasar untuk

mempelajari algoritma dan logika yang terkait di

dalamnya berperanan sangat penting dalam

pemrograman. Proses kerja komputer tidak dapat

dilepaskan dari program-program, di mana komputer

akan menerjemahkan program-program tersebut dengan

sistem logika. Dengan alasan di atas maka belajar logika

proporsisional sebagai dasar logika algoritma sangat

diperlukan dalam belajar pemrograman maupun belajar

bahasa pemrograman.

Page 14: Bukualgo eBook Suwanto

14

1.1 Proposisi Proposisi atau pernyataan merupakan komponen

penyusun logika dasar yang dilambangkan dengan huruf

kecil (p, q, r, ...). Proposisi hanya dapat diiwakili oleh

kalimat deklaratif. Kalimat deklaratif adalah kalimat yang

mengandung nilai kebenaran yaitu dapat bernilai benar

atau salah tetapi tidak mungkin memiliki kedua nilai

tersebut.

Contoh:

p : 9 adalah bilangan ganjil.

q : 10 x 8 = 88

Lawan kalimat deklaratif adalah kalimat terbuka, artinya

kalimat yang nilai kebenarannya tidak bisa ditentukan.

Contoh:

1.Ke mana anda akan pergi ?

2.Kerjakan latihan soal ini !

3.Jam berapakah saat ini ?

Contoh di atas tidak berfungsi sebagai proposisi karena

kalimat tersebut tidak benar atau tidak salah (tidak

mempunyai nilai benar atau salah).

Page 15: Bukualgo eBook Suwanto

15

1.2 Relasi Proposisional Untuk mengkombinasikan dua buah proposisi atau lebih

diperlukan connective atau penghubung.

Propositions + Propositional Connectives → Sentences

Untuk menggabungkan proposisi-proposisi dan

penghubungnya diperlukan Syntactics Rules yaitu suatu

aturan yang diperlukan untuk mengkombinasikan antara

propositions dan propositional connectives untuk

menghasilkan sentences (kalimat logika).

1.Setiap propositions adalah sentence tanpa ada

propositional connectives.

2.Jika p suatu sentence maka negasinya not p juga

sentence. Negasi atau ingkaran adalah proposisi yang

nilai kebenarannya berlawanan dengan proposisi

semula. Suatu proposisi yang disertai dengan kata-kata

'tidak', 'bukan' dan sebagainya. Misalkan terdapat

proposisi p maka negasinya adalalah - p atau ~p.

Contoh:

p : Semua mahasiswa adalah pelajar

Page 16: Bukualgo eBook Suwanto

16

~p : Tidak semua mahasiswa adalah pelajar

3.Jika p dan q sentences maka conjunction-nya yaitu 'p

and q' juga sentences. Conjunction yaitu dua

proposisi atau lebih yang dihubungkan dengan kata

'dan' atau 'and'. Lambang yang digunakan adalah ^, &.

Contoh :

p : 2 adalah bilangan prima.

q : 2 > 3

p&q : 2 adalah bilangan prima dan 2 > 3.

4.Jika p dan q sentences maka disjunction-nya yaitu 'p

or q' juga sentences. Disjunction yaitu dua

proposisi atau lebih yang dihubungkan dengan kata

'atau' atau 'or'. Lambang yang digunakan adalah v, +.

Contoh :

p : 2 adalah bilangan prima.

q : 2 > 3

pvq : 2 adalah bilangan prima atau 2 > 3.

5.Jika p dan q sentences maka implication-nya yaitu 'if

p then q' juga sentences. Implication adalah

penggabungan dua proposisi dengan bentuk 'jika p

maka q'. Lambang yang digunakan adalah →.

Page 17: Bukualgo eBook Suwanto

17

Proposisi pertama (p) disebut anteseden sedangkan

proposisi kedua (q) disebut konsekuen.

Contoh :

p : 2 adalah bilangan prima.

q : 2 > 3

p•q : Jika 2 adalah bilangan prima maka 2 > 3.

6.Jika p dan q sentences maka equivalence-nya yaitu 'p

if and only if q' juga sentences. Equivalence

atau biimplikasi adalah penggabungan dua proposisi

dengan bentuk 'p jika dan hanya jika q'.

Kata penghubung yang lain adalah iof, iff, bila dan

hanya bila (bhb). Lambang yang digunakan adalah ↔.

Contoh :

p : 4 adalah bilangan genap.

q : 4 habis dibagi 2.

p↔q : 4 adalah bilangan genap jhj 4 habis dibagi 2.

7.Jika p, q dan r sentences maka conditional-nya yaitu

'if p then q else r' juga sentences.

Contoh : if x=5 then y= x else y=2x

1.3 Interpretasi

Page 18: Bukualgo eBook Suwanto

18

Interpretasi adalah pemberian nilai kebenaran (benar atau

salah) pada setiap simbol proposisi dari suatu kalimat

logika. Semantic Rules adalah suatu aturan yang

digunakan untuk menentukan truth value (nilai

kebenaran) dari suatu sentence. Untuk mempermudah

penyajiannya dibuatlah tabel kebenaran.

1.Negation Rule (Aturan NOT)

Negasi bernilai benar jika proposisi mula-mula bernilai

salah dan sebaliknya apabila proposisi mula-mula

bernilai benar maka negasinya mempunyai nilai

kebenaran salah.

p not p

True False

False True

Tabel 1.1 Aturan NOT

2.Conjunction Rule (Aturan AND)

Konjungsi bernilai benar jika setiap proposisi

penyusunnya benar.

p q p and q

Page 19: Bukualgo eBook Suwanto

19

True True True

True False False

False True False

False False False

Tabel 1.2 Aturan AND

3.Disjunction Rule (Aturan OR)

Minimal satu proposisi penyusunnya benar maka

disjungsi bernilai benar.

p q p or q

True True True

True False True

False True True

False False False

Tabel 1.3 Aturan OR

Untuk relasi konjungsi dan disjungsi berlaku sifat-sifat

aljabar logika sebagai berikut :

a.Hukum Idempoten pvp = p

p∧p = p

Page 20: Bukualgo eBook Suwanto

20

b.Hukum Komutatif pvq = qvp

p∧q = q∧p

c.Hukum Assosiatif pvq)v r = pv(qvr)

p∧q)∧r = p∧(q∧r)

d.Hukum Distributif

pv(q∧r) = (pvq) ∧ (pvr)

p∧(qvr) = (p∧q) v (p∧r)

e.Hukum Identitas p v False = p

p ∧ True = p

p v True = True

p ∧ False = False

f.Hukum Komplemen p v not p = True

p ∧ not p = False

not(not p)= p

g.Hukum De Morgan

Negasi dari konjungsi dan disjungsi:

Page 21: Bukualgo eBook Suwanto

21

~ (pvq) = ~p ∧ ~q

~ (p∧q) = ~p v ~q

4.Implication Rule (Aturan IF-THEN)

Implikasi bernilai salah bila anteseden benar dan

konsekuen salah.

p q if p then q

True True TRUE

True False False

False True True

False False True

Tabel 1.4 Aturan IF – THEN

Terdapat beberapa definisi:

a)Jika (p→q) adalah implikasi maka (q→p) adalah

konvers

b)Jika (p→q) adalah implikasi maka (~p → ∼q)

adalah invers

c)Jika (p→q) adalah implikasi maka (~q→ ∼p)

adalah kontraposisi

d)Jika (p→q) bernilai benar maka (q→p), (~p →

~q), dan (~q → ~p) belum tentu bernilai benar.

Page 22: Bukualgo eBook Suwanto

22

5.Equivalence Rule (Aturan IF AND ONLY IF)

Jika penyusun proposisi mempunyai nilai yang sama

maka biimplikasi bernilai benar,

p q p if and only if q

True True True

True False False

False True False

False False True

Tabel 1.5 Aturan IF AND ONLY IF

6.Conditional Rule (Aturan IF - THEN - ELSE)

Jika p bernilai benar maka q berlaku.

Jika p bernilai salah maka r berlaku

p q r if p then q else r

True True True True

True True False True

True False True False

True False False False

False True True True

False True False False

False False True True

False False False False

Page 23: Bukualgo eBook Suwanto

23

Tabel 1.6 Aturan IF-THEN-ELSE

1.4 Sifat-Sifat Kalimat Logika 1.Valid

Suatu sentence f disebut valid, jika untuk setiap

interpretation I for f maka f true.

Contoh:

a. (p and q) if and only if (q and p)

b. p or not p

c. (p and (if r then s)) if and only if

((if r then s) and p)

d. (p or q) or not (p or q)

e. (if p then not q) if and only if not

(p and q)

2.Satisfiable Suatu sentence f disebut satisfiable, jika untuk suatu

interpretation I for f maka f true.

Contoh:

a. if (if p then q) then q

b. (if p then q) or (r and s)

c. (if p then q) or r

Page 24: Bukualgo eBook Suwanto

24

3.Kontradiksi Suatu sentence f disebut kontradiksi, jika untuk setiap

interpretation I for f maka f false.

Contoh:

a. p and not p

b. ((p or q) and not r) if and only if ((if p then r) and (if q then r)

1.5 Kalimat Berkuantor Kalimat berkuantor adalah pernyataan yang memuat

ekspresi kuantitas obyek yang terlibat. Misalnya: semua,

ada, beberapa, tidak semua, dan lain-lain. Ada dua

macam kuantor yaitu:

1.Universal Quantifier (for all ...)

Kuantor universal mempunyai makna umum atau

menyeluruh. Notasi yang digunakan adalah ∀ yang

dibaca sebagai semua, seluruh atau setiap.

Penulisannya: ∀x ∈ S → p(x), dibaca semua x dalam

semesta S mempunyai sifat p.

Contoh:

1. Tiap-tiap orang yang hidup di dunia akan mati

2. Seluruh pelajar pasti pandai

Page 25: Bukualgo eBook Suwanto

25

2.Existential Quantifier (for some ...)

Kuantor eksistensial mempunyai makna khusus atau

sebagian. Notasi yang digunakan adalah ∃ yang dibaca

terdapat, ada, atau beberapa. Penulisannya ∃y ∈S →

q(y), dibaca terdapat y dalam semesta S mempunyai

sifat q.

Contoh:

Beberapa mahasiswa yang menempuh mata kuliah

Logika dan Algoritma mendapat nilai A.

1.5.1 Ingkaran Kalimat Berkuantor Terdapat dua ketentuan yaitu:

1.Apabila kalimatnya memuat kuantor universal maka

ingkarannya menjadi kuantor eksistensial dan sifatnya

diingkari.

~((∀x) p(x)) = (∃ x) (~p(x))

Contoh:

p : Semua mahasiswa Informatika harus kreatif.

~p : Ada mahasiswa Informatika yang tidak kreatif.

2.Apabila kalimatnya memuat kuantor eksistensial maka

ingkarannya menjadi kuantor universal dan sifatnya

diingkari.

Page 26: Bukualgo eBook Suwanto

26

~((∃y) q(y)) = (∀y) (~q(y))

Contoh:

q : Ada pejabat yang korupsi.

~p : Semua pejabat tidak korupsi.

1.6Pembuatan Kesimpulan Berdasarkan

Implikasi 1.Modus Ponens

p → q

p

q

Contoh:

Jika seseorang itu adalah mahasiswa maka ia pasti

pandai

Naufal adalah seorang mahasiswa

Naufal pasti pandai

2. Modus Tollens

p → q

~q

~p

Page 27: Bukualgo eBook Suwanto

27

Contoh:

Jika seseorang itu adalah pejabat yang baik maka

ia pasti tidak korupsi

Bapak X korupsi

Bapak X bukan pejabat yang baik

3.Prinsip Syllogisme

p → q

q → r

p → r

Contoh:

Jika ia rajin maka ia pasti pandai

Jika ia pandai maka ia pasti sukses

Jika ia rajin maka ia pasti sukses

1.7Latihan

1.Buktikan jika implikasi bernilai benar maka konvers,

invers, dan kontraposisinya belum tentu bernilai

benar.

2.Apabila terdapat n buah proposisi penyusun maka

sentence yang dihasilkan akan mempunyai berapa

Page 28: Bukualgo eBook Suwanto

28

kemungkinan nilai kebenaran ?

3.Tentukan nilai kebenaran dari kalimat logika berikut

menggunakan tabel kebenaran:

a. (p and q) if and only if (p and q) b. if (if p then q) then q c. ((p or q) and not r) if and only if

(if p then r) and (if q then r)

d. ((if p then q) and (if q then p) if and only if (q or not p)

e. (p and (if r then s)) if and only if ((if r then s) and p)

f. (if (p and q) then (not r or not s) else not (r and s)) if and only if

(if r then not s)

g. if (if q then not p) or not q) then (p if and only if q) else not r

4.Diketahui suatu kalimat logika sebagai berikut : if(p and q) then (r and not p) else

(r and not q)

a. Jika diketahui interpretasi p, q, r semua false

maka tentukan kebenaran kalimat tersebut.

b)Tentukan suatu interpretasi (selain p, q, r semua

false) sedemikian kalimat tersebut bernilai true.

Page 29: Bukualgo eBook Suwanto

29

5.Diketahui suatu kalimat logika sebagai berikut : if(p and q) then (if r then s) if

and only if if p then (q or not r

or s)

a. Tentukan nilai kebenaran kalimat tersebut jika p=true, q=false, r=true, s=true.

b. Tentukan suatu interpretasi sedemikian kalimat

tersebut bernilai false.

6.Jika kalimat 'if p then q' bernilai false maka

tentukan kebenaran kalimat berikut: if (not p or not q) then q

7.Jika kalimat 'if p then q' bernilai true maka

tentukan kebenaran kalimat berikut: not p or (if p then q)

8.Buktikan bahwa sentence berikut memiliki sifat valid (p and (if r then s)) if and only if

((if r then s) and p)

9.Jika diberikan interpretasi p, q, dan r berturut turut

adalah True, False, dan True. Tentukan truth value

dari sentence berikut:

Page 30: Bukualgo eBook Suwanto

30

a. if ((if q then not p) or not q) then (p if and only if q) else not r

b. if (if p then (if q then r)) then (if(if p then q) else (if p then

r))

10.Jika diberikan dua implikasi seperti berikut: a. if (p or q) or not (p or q) then

((f and g) if and only if (g and f)

b. if ((f and g) if and only if (g

and f) then ( p and not p)

Tentukan kesimpulannya dengan menggunakan

prinsip Syllogisme, serta berikan truth value-nya

dengan menggunakan truth table.

11.Dengan menggunakan sifat-sifat aljabar logika,

tentukan validitas dari kalimat logika berikut ini:

a. if (if r then (if q then p)) then (if (if r then q) then (if r then

p))

b. if (if not q then not p) then (if p then q)

c. if (if p then (if q then r)) then (if (if p then q) then (if p then

Page 31: Bukualgo eBook Suwanto

31

r))

d. (if ((p and q) or (p and r)) then s) if and only if (not p or (not q

and not r) or s)

12.Diberikan kalimat logika sebagai berikut: ((p or q) or q) if and only if (if p

then (p and r))

Tentukan semua interpretasi untuk p, q, dan r yang

akan mengakibatkan kalimat di atas bernilai benar.

13.Berikan suatu interpretasi untuk setiap proposisi

penyusunnya supaya kalimat logika berikut bernilai

false. if (p and q) then (r or s)

14.Interpretasi p, q dan r berturut-turut adalah true, false

dan true. Tentukan nilai kebenaran dari kalimat

berikut: if ((q then not p) or not q) then (p

if and only if q) else r

15.Dengan menggunakan sifat-sifat aljabar logika,

tentukan sifat dari kalimat berikut: ((p or q) and not r) if and only if

Page 32: Bukualgo eBook Suwanto

32

((if p then r) and (if q then r))

16.Dapatkah saudara menentukan suatu interpretasi untuk

p, q, r, s agar kalimat-kalimat di bawah ini

bernilai false?

a. if (p and q) then (not r or not s) else ((not r and not s) if and only

if (if r then not s)

b. (if ((p and q) or (p and r)) then s) if and only if (not p or (not q

and not r)) or s)

17.Dapatkah saudara menentukan suatu interpretasi untuk

p, q, r agar kalimat di bawah ini bernilai true? (if p then q else r) if and only if

(if not q then not p else not r)

18.Buktikan bahwa Modus Ponnens, Modus Tollens dan

Prinsip Syllogism merupakan kalimat yang valid.

Page 33: Bukualgo eBook Suwanto

33

Bab 2

Algoritma

Tujuan pembelajaran umum:

1. memahami penggunaan algoritma dalam

menyelesaikan permasalahan

2. memahami alur dan syarat pembuatan algoritma

yang baik

3. membuat algoritma untuk menyelesaikan suatu

permasalahan.

Pada saat kita dihadapkan dengan suatu masalah maka

tindakan kita selanjutnya adalah mencari

penyelesaiannya. Sekarang kita tidak langsung

memecahkan masalah dengan langsung menuliskan

solusinya berupa program dalam suatu bahasa

pemrograman, namun suatu cara penyelesaian masalah

yang akan diprogram dengan menekankan pada desain

atau rancangan yang mewakili pemecahan masalah.

Page 34: Bukualgo eBook Suwanto

34

Masalah --------------> Algoritma --------------> Penyelesaian

Pemecahan Masalah Tahap Implementasi

(Fase Problem Solving) (Fase Implementasi)

Algoritma mempunyai peranan yang sangat penting

dalam bidang teknik informatika pada umumnya dan

bidang pemrograman pada khususnya. Algoritma

membantu mahasiswa mengembangkan daya penalaran

atau kerangka berpikir yang sistematis dalam memahami

masalah dan membuat perencanaan atau konsep

pemecahan masalah yang lebih baik sehingga dapat

menghasilkan yang tepat pula.

2.1 Algoritma Algoritma merupakan urutan atau deskripsi langkah-

langkah penyelesaian masalah yang tersusun secara logis,

ditulis dengan notasi yang mudah dimengerti sedemikian

hingga langkah-langkah tersebut dapat dilaksanakan oleh

pemroses. Algoritma mencerminkan cara berpikir

pemrogram dalam menyelesaikan masalah dalam hal ini

konsep logika menyelesaikan suatu masalah, sedangkan

program merupakan realisasi algoritma dalam bahasa

pemrograman, dengan kata lain program adalah

implementasi algoritma dalam bahasa pemrograman

Page 35: Bukualgo eBook Suwanto

35

tertentu. Dengan membuat algoritma akan

mempermudah pemrogram dalam mengkonversikan suatu

permasalahan ke dalam bahasa pemrograman karena

dalam algoritma tersebut telah tertuang langkah-langkah,

konsep-konsep maupun dasar dalam scripting program

yang akan dibuat. Algoritma yang ditulis merupakan

sketsa program atau desain pemecahan masalah yang

akan direalisasikan menjadi suatu program. Jika

algoritmanya benar dan dapat dipertanggungjawabkan

maka sudah pasti scripting program tersebut dalam

operasi logikanya juga benar.

Pembuatan algoritma mempunyai banyak keuntungan

diantaranya:

1.Pembuatan atau penulisan algoritma tidak tergantung

pada bahasa pemrograman manapun, artinya

penulisan algoritma independen dari bahasa

pemrograman dan komputer yang mengeksekusinya.

2.Notasi algoritmik dapat diterjemahkan ke dalam

berbagai bahasa pemrograman.

3.Apapun bahasa pemrogramannya, output yang akan

dikeluarkan sama karena algoritmanya sama.

Beberapa hal yang perlu dalam membuat algoritma

Page 36: Bukualgo eBook Suwanto

36

diperhatikan:

1.Teks algoritma berisi deskripsi langkah-langkah

penyelesaian masalah. Deskripsi tersebut dapat ditulis

dalam notasi apapun asalkan mudah dimengerti dan

dipahami.

2.Tidak ada notasi yang baku dalam penulisan teks

algoritma seperti pada notasi bahasa pemrograman.

Notasi yang digunakan dalam menulis algoritma

disebut notasi algoritmik.

3.Tiap orang dapat membuat aturan penulisan dan notasi

algoritmik sendiri. Hal ini karena teks algoritma tidak

sama dengan teks program. Namun supaya notasi

algoritmik mudah ditranslasikan ke dalam notasi

bahasa pemrograman tertentu, maka sebaiknya notasi

algoritmik tersebut berkorespondensi dengan notasi

bahasa pemrograman secara umum.

4.Notasi algoritmik bukan notasi bahasa pemrograman,

karena itu pseudocode dalam notasi algoritmik tidak

dapat dijalankan oleh komputer. Agar dapat dijalankan

oleh komputer, pseudocode dalam notasi algoritmik

harus ditranslasikan atau diterjemahkan ke dalam

notasi bahasa pemrograman yang dipilih. Perlu diingat

bahwa orang yang menulis program sangat terikat

dalam aturan tata bahasanya dan spesifikasi mesin

Page 37: Bukualgo eBook Suwanto

37

yang menjalankannya.

5.Algoritma sebenarnya digunakan untuk membantu kita

dalam mengkonversikan suatu permasalahan ke dalam

bahasa pemrograman.

6.Algoritma merupakan hasil pemikiran konseptual,

supaya dapat dilaksanakan oleh komputer, algoritma

harus ditranslasi ke dalam notasi bahasa

pemrograman. Ada beberapa hal yang harus

diperhatikan ketika translasi tersebut yaitu:

a)Pendeklarasian variabel.

Apakah bahasa pemrograman yang akan digunakan

membutuhkan pendeklarasian variabel karena tidak

semua bahasa pemrograman membutuhkannya.

b)Pemilihan tipe data.

Apabila bahasa pemrograman yang akan digunakan

membutuhkan pendeklarasian variabel maka perlu

dipertimbangkan pada saat pemilihan tipe data.

c)Pemakaian instruksi-instruksi.

Beberapa instruksi mempunyai kegunaan yang

sama tetapi masing-masing memiliki kelebihan dan

kekurangan yang berbeda.

d)Aturan sintaks.

Pada saat menulis program kita terikat dengan

Page 38: Bukualgo eBook Suwanto

38

aturan sintaks dari bahasa pemrograman yang akan

digunakan.

e)Tampilan hasil.

Pada saat membuat algoritma kita tidak

memikirkan tampilan hasil yang akan disajikan.

Hal-hal teknis ini kita perhatikan ketika

mengkonversikannya menjadi program.

f)Cara pengopersian compiler atau interpreter.

Bahasa pemrograman yang digunakan termasuk

kelompok compiler atau interpreter.

2.2 Penyajian Algoritma Penyajian algoritma secara garis besar bisa dalam 2

bentuk penyajian yaitu tulisan dan gambar.

Algoritma yang disajikan dengan tulisan yaitu dengan

struktur bahasa tertentu (misalnya bahasa Indonesia atau

bahasa Inggris) dan pseudocode. Pseudocode adalah kode

yang mirip dengan kode pemrograman yang sebenarnya.

Pseudocode ditulis berbasis pada bahasa pemrograman

tertentu misalnya Pascal, C atau Python, sehingga lebih

tepat digunakan untuk menggambarkan algoritma yang

akan dikomunikasikan kepada pemrogram. Pseudocode

lebih rinci daripada struktur bahasa Inggris, misalnya

Page 39: Bukualgo eBook Suwanto

39

dalam menyatakan sintaks, tipe data yang digunakan dan

lain-lain. Sedangkan algoritma yang disajikan dengan

gambar, misalnya dengan flowchart. Flowchart bukan

satu-satunya cara untuk menjelaskan atau menerangkan

algoritma. Cara yang lain diantaranya :

1.Structure chart

2.DFD (Data Flow Diagram)

3.Warnier diagram

4.IPO (Input Process Output)

5.HIPO (Hierarchical Input Process Output)

Flowchart (bagan alir) merupakan representasi secara

grafik dari suatu algoritma atau prosedur untuk

menyelesaikan suatu masalah. Dengan menggunakan

flowchart akan memudahkan kita untuk melakukan

pengecekan apakah ada bagian-bagian yang terlupakan

dalam analisis masalah. Di samping itu flowchart juga

berguna sebagai fasilitas untuk berkomunikasi antara

pemrogram yang bekerja dalam tim suatu proyek.

Flowchart ada dua macam :

1.Flowchart Sistem

Yaitu diagram alir yang menggambarkan suatu sistem

peralatan komputer yang digunakan dalam proses

pengolahan data dan hubungan antar peralatan

Page 40: Bukualgo eBook Suwanto

40

tersebut. Flowchart sistem digunakan untuk

menggambarkan urutan langkah untuk memecahkan

masalah tetapi hanya untuk menggambarkan prosedur

dalam sistem yang dibentuk.

Simbol yang digunakan :

Contoh :

Page 41: Bukualgo eBook Suwanto

41

2. Flowchart program

Yaitu bagan yang menggambarkan urutan logika dari

suatu prosedur pemecahan masalah.

Simbol yang digunakan adalah American National

Standard Inc.:

Page 42: Bukualgo eBook Suwanto

42

: (terminal symbol), menunjukkan awal dan

akhir dari program

: (preparation symbol), memberikan niai

awal pada suatu variabel atau counter

: (processing symbol), menunjukkan

pengolahan aritmatika dan pemindahan data

: (input/output symbol), menunjukkan proses

input atau output

: (decision symbol), untuk mewakili operasi

perbandingan logika

: (predefined process symbol), proses yang

ditulis sebagai sub program, yaitu

prosedur/ fungsi

: (connector symbol), penghubung pada

halaman yang sama

: (off page connector symbol), penghubung

pada halaman yang berbeda

: arah proses

Contoh kasus :

1.Menghitung rata-rata tiga buah data

a.Algoritma dengan struktur bahasa Indonesia

Page 43: Bukualgo eBook Suwanto

43

- Baca bilangan a, b, dan c

- Jumlahkan ketiga bilangan tersebut

- Bagi jumlah tersebut dengan 3

- Tulis hasilnya

b.Algoritma dengan pseudocode input (a,b,c)

Jml = a+b+c

Rerata = Jml/3

output (Rerata)

c. Algoritma dengan flowchart

Gambar 2.1 Flowchart Hitung Rata-Rata

End

Start

Input (a,b,c)

Jml = a+b+c

Output (Rerata)

Rerata = Jml/3

Page 44: Bukualgo eBook Suwanto

44

2.Algoritma mencetak tiket parkir.

Penyelesaian menggunakan flowchart:

End

Start

Baca waktu masuk, waktu keluar, jenis kendaraan, biaya perjam (sesuai dgn

jenis kendaraan)

Lama parkir = waktu keluar – wWaktu masuk Biaya parkir = lama parkir * biaya perjam

Cetak Tiket (memuat data-data tentang waktu masuk, waktu keluar, jenis kendaraan dan biaya)

Page 45: Bukualgo eBook Suwanto

45

Gambar 2.2 Flowchart Cetak Tiket Parkir

4.Algoritma konversi suhu dalam derajat Celcius ke

derajat Kalvin.

Penyelesaian menggunakan pseudocode: input (Celcius)

Kalvin = Celcius + 273

output (Kalvin)

2.3Tahap-Tahap Pemrograman Sebelumnya perlu dipahami tiga

pengertian pokok yakni program, bahasa pemrograman

dan pemrograman. Program adalah kata, ekspresi,

pernyataan yang disusun dan dirangkai menjadi satu

kesatuan prosedur yang berupa urutan langkah untuk

menyelesaikan masalah yang diimplementasikan dengan

menggunakan bahasa pemrograman sehingga dapat

dieksekusi oleh komputer. Bahasa pemrograman adalah

prosedur atau tata cara penulisan program. Sedangkan

pemrograman adalah proses mengimplementasikan

urutan langkah untuk menyelesaikan suatu masalah

dengan menggunakan suatu bahasa pemrograman.

Page 46: Bukualgo eBook Suwanto

46

Pemrograman meliputi dua tahapan yaitu:

1.Fase Problem Solving

2.Fase Implementation

Fase I Fase II

Fase Problem Solving Fase Implementasi

Gambar 2.3 Tahapan Pemrograman

Langkah-langkah untuk dapat menyelesaikan masalah

Analisa Problem

Perancangan Algoritma

Test

Pembuatan Program

Test

Dokumentasi

Dipakai

Page 47: Bukualgo eBook Suwanto

47

adalah sebagai berikut:

1.Memahami atau menganalisis masalah

Hal-hal yang harus diketahui dalam analisis masalah

supaya kita mengetahui bagaimana permasalahan

tersebut:

a)Kondisi awal, yaitu input yang tersedia.

b)Kondisi akhir, yaitu output yang diinginkan

c)Data lain yang tersedia

d)Operator yang tersedia

e)Syarat atau kendala yang harus dipenuhi

Contoh kasus 1:

Menghitung biaya percakapan telepon di wartel.

a)Input yang tersedia adalah jam mulai bicara dan jam

selesai bicara.

b)Output yang diinginkan adalah biaya percakapan.

c)Data lain yang tersedia adalah besarnya pulsa yang

digunakan dan biaya per pulsa.

d)Operator yang tersedia adalah pengurangan (-),

penambahan (+) dan perkalian (*).

e)Syarat kendala yang harus dipenuhi adalah aturan

jarak dan aturan waktu.

Page 48: Bukualgo eBook Suwanto

48

Contoh kasus 2:

Menghitung luas dan keliling lingkaran.

a)Input yang tersedia adalah jari-jari lingkaran.

b)Output yang diinginkan adalah luas dan keliling

lingkaran.

c)Data lain yang tersedia adalah nilai phi (3.14).

d)Operator yang tersedia adalah perkalian (*).

e)Syarat kendala yang harus dipenuhi tidak ada.

2.Merancang atau merumuskan algoritma

Bila masalahnya kompleks maka kita bagi ke dalam

modul-modul. Tahap penyusunan algoritma seringkali

dimulai dari langkah yang global terlebih dahulu.

Langkah global ini diperhalus sampai menjadi langkah

yang lebih rinci atau detail. Cara pendekatan ini sangat

bermanfaat dalam membuat algoritma untuk masalah

yang kompleks. Penghalusan lanngkah dengan cara

memecah langkah menjadi beberapa langkah. Tiap

langkah diuraikan lagi menjadi beberapa langkah yang

lebih sederhana. Penghalusan langkah ini akan terus

berlanjut sampai setiap langkah sudah cukup rinci dan

tepat untuk dilaksanakan oleh pemroses.

Contoh kasus:

Page 49: Bukualgo eBook Suwanto

49

Algoritma menghitung lama percakapan di wartel.

A1 : Baca jam mulai (jm:mm:dm)

A2 : Baca jam selesai (js:ms:ds)

A3 : Hitung selisih (jm:mm:dm) dengan (js:ms:ds)

js-jm : ms-mm : ds-dm

A4 : Tulis hasil.

Hasil tersebut mudah manakala :

jam mulai bicara = 10:12:30

jam selesai bicara = 10:20:32

Lama bicara : 10:20:32

10:12:30

0: 8: 2

Masalah akan muncul apabila :

jam mulai bicara = 10:50:28

jam selesai bicara = 11:10:15

Lama bicara : 11:10:15

10:50:28

1:-40:-13

Disini memuat negatif, masalah muncul karena

Page 50: Bukualgo eBook Suwanto

50

ms<mm dan ds<dm. Solusinya semua jam dihitung

total detiknya, total detik jam selesai bicara

dikurangkan total detik jam mulai bicara kemudian

dikonversikan kembali dalam format jam : menit :

detik.

A1 : Baca jam mulai (jm:mm:dm)

A2 : Baca jam selesai (js:ms:ds)

A3.1 : Konversikan jam mulai bicara ke dalam total

detik.

totdetmulai=(jm*3600)+(mm*60)+dm

A3.2 : Konversikan jam selesai bicara ke dalam total

detik.

totdetselesai=(js*3600)+(ms*60)+ds

A3.3 : Hitung selisih jam mulai bicara dan jam selesai

bicara dalam detik.

totdetbicara = totdetselesai – totdetmulai

A3.4 : Konversikan lama bicara ke dalam format jam :

menit : detik

jb = totdetbicara div 3600

sisa = totdetbicara mod 3600

mb = sisa div 60

db = sisa mod 60

A4 : Tulis hasil (jb:mb:db).

Page 51: Bukualgo eBook Suwanto

51

Masalah baru akan muncul apabila :

jam mulai bicara = 23:58:30

jam selesai bicara = 01:04:12

Muncul masalah karena js<jm sehingga nilai

totdetselesai lebih kecil daripada totdetmulai,

akibatnya totdetbicara bernilai negatif. Sebagai

solusinya js harus ditambah dengan 24.

A1 : Baca jam mulai (jm:mm:dm)

A2 : Baca jam selesai (js:ms:ds)

A3.0 : Jika js<jm maka js=js+24

A3.1 : Konversikan jam mulai bicara ke dalam total

detik.

totdetmulai=(jm*3600)+(mm*60)+dm

A3.2 : Konversikan jam selesai bicara ke dalam total

detik.

totdetselesai=(js*3600)+(ms*60)+ds

A3.3 : Hitung selisih jam mulai bicara dan jam selesai

bicara dalam detik.

totdetbicara = totdetselesai – totdetmulai

A3.4 : Konversikan lama bicara ke dalam format jam :

menit : detik

Page 52: Bukualgo eBook Suwanto

52

jb = totdetbicara div 3600

sisa = totdetbicara mod 3600

mb = sisa div 60

db = sisa mod 60

A4 : Tulis hasil (jb:mb:db).

Ciri-ciri algoritma yang baik :

a)Precise (tepat, betul, teliti)

Setiap instruksi harus ditulis dengan seksama dan

tidak ada keragu-raguan, dengan demikian setiap

instruksi harus dinyatakan secara eksplisit dan

tidak ada bagian yang dihilangkan karena

pemroses dianggap sudah mengerti. Setiap

langkah harus jelas dan pasti.

Contoh: Tambahkan 1 atau 2 pada x.

Instruksi di atas terdapat keraguan.

b)Jumlah langkah atau instruksi berhingga dan

tertentu.

Artinya untuk kasus yang sama, banyaknya

langkah tetap dan tertentu meskipun datanya

berbeda.

c)Efektif

Tidak boleh ada instruksi yang tidak mungkin

Page 53: Bukualgo eBook Suwanto

53

dikerjakan oleh pemroses yang akan

menjalankannya.

Contoh: Hitung akar 2 dengan presisi sempurna.

Instruksi di atas tidak efektif, agar efektif instruksi

tersebut diubah. Misal: Hitung akar 2 sampai lima

digit di belakang koma.

d)Harus terminate

Jalannya algoritma harus ada kriteria berhenti.

Pertanyaannya adalah apakah apabila jumlah

instruksinya berhingga maka pasti terminate?

e)Output yang dihasilkan tepat

Jika langkah-langkah algoritmanya logis dan

diikuti dengan seksama maka dihasilkan output

yang diinginkan.

3.Menulis program

Algoritma yang telah dibuat diterjemahkan dalam

bahasa komputer menjadi sebuah program. Perlu

diperhatikan bahwa pemilihan algoritma yang salah

akan menyebabkan program memiki unjuk kerja yang

kurang baik. Program yang baik memiliki standar

penilaian :

a. Standar teknik pemecahan masalah

Page 54: Bukualgo eBook Suwanto

54

a.Teknik Top-Down

Teknik pemecahan masalah yang paling

umum digunakan. Prinsipnya adalah suatu

masalah yang kompleks dibagi-bagi ke

dalam beberapa kelompok masalah yang

lebih kecil. Dari masalah yang kecil

tersebut dilakukan analisis. Jika

dimungkinkan maka masalah tersebut

akan dipilah lagi menjadi subbagian-

subbagian dan setelah itu mulai disusun

langkah-langkah untuk penyelesaiannya

secara lebih detail.

b.Teknik Bottom-Up

Prinsip teknik bottom up adalah

pemecahan masalah yang kompleks

dilakukan dengan menggabungkan

prosedur-prosedur yang ada menjadi satu

kesatuan program sebagai penyelesaian

masalah tersebut.

b. Standar penyusunan program

a.Kebenaran logika dan penulisan

b.Waktu minimum untuk penulisan program

c.Kecepatan maksimum eksekusi program

Page 55: Bukualgo eBook Suwanto

55

d.Ekspresi penggunaan memori

e.Kemudahan merawat dan mengembangkan

program

f.User friendly

g.Portability

h.Pemrograman modular

c. Standar perawatan program

a.Dokumentasi

b.Penulisan instruksi

d. Standar prosedur

4.Uji hasil

Pertama kali harus diuji apakah program dapat

dijalankan. Apabila program tidak dapat dijalankan

maka perlu diperbaiki penulisan sintaksnya tetapi bila

program dapat dijalankan maka harus diuji dengan

menggunakan data-data yang biasa yaitu data yang

diharapkan oleh sistem yang dibuat maupun data-data

yang ekstrem yaitu data yang tidak diharapkan oleh

sistem. Contoh data ekstrem misalnya program

menghendaki masukan jumlah data tetapi user

mengisikan dengan bilangan negatif. Program

sebaiknya diuji menggunakan data yang relatif

banyak.

Page 56: Bukualgo eBook Suwanto

56

Contoh kasus:

Menghitung luas persegi panjang.

a)Baca panjang dan lebar (P,L)

b)Hitung luas (Luas = P + L)

c)Cetak hasil

Misalkan algoritma di atas dites dengan data panjang

= 2 dan lebar = 2. Luas yang dihasilkan sama dengan

4. Apabila kita menguji hanya dengan data tersebut

maka bisa jadi kita beranggapan bahwa algoritma tadi

sudah benar karena 2 x 2 = 4. Padahal tanpa kita

sadari langkah yang ditulis adalah Luas = P + L dan

bukan Luas = P x L. Hal ini terjadi karena salah

dalam memilih data untuk melakukan test.

5.Membuat dokumentasi

Dokumentasi program ada dua macam yaitu

dokumentasi internal dan dokumentasi eksternal.

Dokumentasi internal adalah dokumentasi yang dibuat

di dalam program yakni setiap kita menuliskan baris

program sebaiknya kita beri komentar atau keterangan

supaya mempermudah kita untuk mengingat logika

yang terdapat dalam instruksi tersebut, hal ini sangat

Page 57: Bukualgo eBook Suwanto

57

bermanfaat ketika suatu saat program tersebut akan

dikembangkan. Dokumentasi eksternal adalah

dokumentasi program yang dilakukan dari luar

program yaitu membuat user guide atau tbuku

petunjuk aturan atau cara menjalankan program

tersebut.

6.Program dipakai

2.4 Struktur Dasar Algoritma Algoritma berisi langkah-langkah penyelesaian suatu

masalah. Langkah-langkah tersebut dapat berupa

runtunan aksi (sequence), pemilihan aksi (selection),

pengulangan aksi (iteration) atau kombinasi dari

ketiganya. Jadi struktur dasar pembangun algoritma ada

tiga, yaitu :

1.Struktur Runtunan

Digunakan untuk program yang instruksinya

sequential atau urutan.

2.Struktur Pemilihan

Digunakan untuk program yang menggunakan

pemilihan atau penyeleksian kondisi.

Page 58: Bukualgo eBook Suwanto

58

3.Struktur Perulangan

Digunakan untuk program yang instruksinya akan

dieksekusi berulang-ulang.

2.5 Latihan

1.Belajar memprogram dan belajar bahasa pemrograman

adalah dua hal yang berbeda. Jelaskan.

2.Buatlah pseudocode dan flowchart untuk menghitung

rata-rata dari sepuluh bilangan yang diinputkan oleh

user.

3.Buatlah pseudocode dan flowchart untuk menghitung

volume bola.

4.Buatlah pseudocode dan flowchart untuk menentukan

suatu bilangan bulat positif, ganjil atau genap.

5.Buatlah pseudocode dan flowchart untuk

menenampilkan sepuluh bilangan ganjil pertama.

6.Buatlah pseudocode dan flowchart untuk mengurutkan

tiga buah kartu.

Page 59: Bukualgo eBook Suwanto

59

Bab 3

Struktur Runtunan

Tujuan Pembelajaran Umum:

1. Memahami struktur dasar algoritma runtunan

2. Membuat algoritma runtunan untuk menyelesaikan

suatu permasalahan mengunakan flowchart

3.1 Runtunan

Suatu masalah yang diselesaikan menggunakan struktur

runtunan mempunyai logika bahwa setiap instruksi akan

dikerjakan satu persatu. Setiap instruksi dilaksanakan

tepat satu kali, tidak ada instruksi yang diulang maupun

tidak dilaksanakan. Urutan instruksi yang dilaksanakan

pemroses sama dengan urutan aksi sebagaimana yang

tertulis di dalam teks algoritmanya. Akhir dari instruksi

terakhir merupakan akhir algoritma. Bila runtunan

instruksi dalam algoritma berturut-turut dilambangkan

dengan A1, A2, A3, A4, dan A5, maka pelaksanaan

instruksi tersebut adalah :

Page 60: Bukualgo eBook Suwanto

60

Gambar 3.1 Flowchart Runtunan

Perhatikan runtunan instruksi yang dilambangkan dengan

A1, A2, A3, A4 dan A5. Mula-mula pemroses

melaksanakan instruksi A1. Instruksi A2 dilaksanakan

setelah instruksi A1 selesai. Selanjutnya instruksi A3

dilaksanakan setelah instruksi A2 selesai, dan seterusnya

sampai terakhir instruksi A5 dilaksanakan. Setelah

instruksi A5 selesai dilaksanakan, algoritma berhenti.

Urutan penulisan instruksi di dalam algoritma penting

sekali diperhatikan karena urutan instruksi yang berbeda

dalam struktur runtunan dapat menghasilkan keluaran

yang berbeda juga. Urutan langkah di dalam struktur

runtunan mencerminkan cara berpikir penyusun algoritma

Page 61: Bukualgo eBook Suwanto

61

tersebut dalam menuliskan langkah-langkah penyelesaian

masalah. Output dari aksi sebelumnya menjadi input bagi

aksi berikutnya. Sebagai contoh perhatikan dua algoritma

berikut :

Algoritma pertama

A = 10

A = A2+2

B = A – 5

C = A + B + 3

C = C + 5

Output (A,B,C)

Algoritma pertama menghasilkan keluaran: A = 102

B = 97

C = 207

Algoritma kedua A = 10

B = A – 5

A = A2+2

C = A + B + 3

C = C + 5

Output (A,B,C)

Page 62: Bukualgo eBook Suwanto

62

Algoritma pertama menghasilkan keluaran: A = 102

B = 5

C = 115

4.2 Contoh-Contoh Kasus Runtunan 1.Menghitung luas persegi panjang dimana besarnya

panjang dan lebar persegi panjang dimasukkan melalui

keyboard.

Jawab :

a.Algoritma dengan struktur bahasa Indonesia

- Masukkan panjang dan lebar

- Kalikan panjang dengan lebar dan simpan

hasilnya sebagai luas.

- Tulis hasilnya

b.Algoritma dengan pseudocode input (P,L)

Luas = P * L

output (Luas)

c.Algoritma dengan flowchart

Page 63: Bukualgo eBook Suwanto

63

Gambar 3.2 Flowchart Hitung Luas Persegi Panjang

2.Menghitung nilai rata-rata dari dua buah data.

Jawab :

Algoritma menggunakan pseudocode input (x,y) Rerata = (x + y)/2

output (Rerata)

3.Menghitung luas dan keliling lingkaran dengan

besarnya jari-jari lingkaran dimasukkan melalui

keyboard.

Page 64: Bukualgo eBook Suwanto

64

Jawab :

a. Algoritma dengan struktur bahasa Indonesia

- Tentukan nilai phi sama dengan 3.14

- Masukkan jari-jari lingkaran

- Kalikan phi dengan kuadrat dari jari-jarinya dan

simpan hasilnya sebagai luas.

- Kalikan phi dengan dua kali jari-jarinya dan

simpan hasilnya sebagai keliling.

- Tulis hasilnya

b. Algoritma dengan pseudocode phi = 3.14

input ( R )

L = phi * R * R

K = 2 * phi * R

output (L,K)

c. Algoritma dengan flowchart

Input ( R )

Start

phi = 3.14

Page 65: Bukualgo eBook Suwanto

65

Gambar 3.3 Flowchart Hitung Luas dan Keliling

Lingkaran

4. Konversi total detik menjadi berapa jam lebih berapa

menit lebih berapa detik.

Jawab :

a. Algoritma dengan struktur bahasa Indonesia

- Baca data atau total detik (misalkan Dt)

- Bagilah Dt dengan 3600 (misalkan hasil sama

dengan J dan sisa hasil bagi sama dengan S)

- Bagilah S dengan 60 (misalkan hasil sama

dengan M dan sisa hasil bagi sama dengan D)

Page 66: Bukualgo eBook Suwanto

66

- Tulis hasilnya (J, M, D)

b. Algoritma dengan pseudocode input (Dt)

J = Dt div 3600

S = Dt mod 3600

M = S div 60

D = S mod 60

output (J, M, D)

c. Algoritma dengan flowchart

Page 67: Bukualgo eBook Suwanto

67

Gambar 3.4 Flowchart Konversi Detik

5. Konversi jam, menit dan detik ke dalam total detik.

Jawab :

Algoritma dengan pseudocode: input (J, M, D) D1 = J * 3600

D2 = M * 60

Dtot = D1 + D2 + D

Page 68: Bukualgo eBook Suwanto

68

output (Dtot)

6. Menghitung sisi miring dan keliling segitiga siku-siku

dengan sisi tegak dan sisi mendatar merupakan input dari

masukkan keyboard.

Jawab :

Algoritma dengan pseudocode input(alas,tinggi) sisimiring= sqrt(alas*alas

+tinggi*tinggi)

keliling = alas + tinggi + sisimiring

output(sisimiring,keliling)

7. Menukarkan 2 buah nilai A dan B

Jawab :

Algoritma dengan pseudocode input (A,B) A = B

B = A

output (A,B)

Algoritma di atas mempunyai logika yang salah.

Hasil dari pseudocode tersebut :

Page 69: Bukualgo eBook Suwanto

69

Sebelum Pertukaran

Bilangan pertama = 14

Bilangan kedua = 32

Setelah Pertukaran

Bilangan pertama = 32

Bilangan kedua = 32

Supaya salah satu variabel nilainya tidak hilang

karena tertimpa oleh nilai dari variabel yang lain

maka sebelum ditukar nilai tersebut harus

diamankan terlebih dahulu yaitu disimpan di

variabel ketiga sebagai variabel bantu. Logikanya

mirip dengan pertukaran dua buah gelas yang berisi

cairan berwarna berbeda. Misalkan gelas pertama

berisi sirup berwarna biru sedangkan gelas kedua

berisi sirup berwarna kuning. Dua gelas tersebut

akan dipertukarkan isinya sehingga diperlukan gelas

ketiga untuk menampung isi salah satu gelas.

Setelah logika algoritma di atas diperbaiki:

input (A,B) temp = A

A = B

B = temp

Page 70: Bukualgo eBook Suwanto

70

output (A,B)

Proses mempertukarkan nilai A dan B dengan

menggunakan Temp sebagai tempat menyimpan

sementara nilai A.

Ilustrasi sebelum pertukaran

14 32 A temp B

Ilustrasi proses pertukaran

14 14 32 temp=A

A temp B

32 14 32 A=B

A temp B

32 14 14 B=temp

A temp B

Page 71: Bukualgo eBook Suwanto

71

Ilustrasi setelah pertukaran

32 14 14 A temp B

Gambar 3.5 Ilustrasi Pertukaran Data

Setelah pertukaran nilai A dan B, nilai temp masih

berisi nilai semula yaitu 14. Hal ini karena pengisian

nilai A ke dalam temp sama dengan menyalin atau

mencopy nilai A ke dalam temp. A sendiri tidak

kehilangan nilai akibat pengisian nilai tersebut.

Sehingga pengisian nilai temp ke dalam B tetap

meninggalkan nilai di dalam temp yaitu 14.

8. Konversi penulisan sebuah huruf kecil menjadi huruf

besar.

Jawab :

Perlu menggunakan tabel ASCII (American Standard

Code for Information Interchange) yang memuat

secara lengkap daftar informasi karakter baku beserta

urutannya. Yang termasuk karakter adalah huruf

Page 72: Bukualgo eBook Suwanto

72

alfabet ('A' .. 'Z', 'a' .. 'z'), angka bulat ('0' .. '9'),

operator aritmatika ('+', '-', '*', '/'), tanda baca ('.', ';', ',',

'?', '!', ':' dan lain-lain) serta karakter-karakter khusus

('@', '#', '$', ' ', '%', dan lain-lain). Untuk mengetahui

posisi atau urutan suatu karakter yang ada dalam tabel

ASCII digunakan fungsi ordinal. Fungsi ini mencari

angka urutan dalam tabel ASCII yang digunakan untuk

melambangkan karakter tersebut. Fungsi ini tidak

dapat berdiri sendiri instruksinya, berarti

penggunaannya antara lain ditampung nilainya dalam

suatu variabel atau dilibatkan dalam instruksi lain

misalnya assignment, langsung dicetak atau

dimasukkan dalam ekspresi aritmatika. Bentuk umum

fungsi ordinal yaitu :

variabel=ord(argumen)

ord berarti ordinal dan argumen disini adalah karakter

yang akan dicari urutannya di tabel ASCII. Karakter

'A' terdapat pada urutan 65 dan 'Z' terdapat di posisi

90. Sedangkan 'a' pada posisi 97 serta 'z' pada posisi

122. Dengan demikian antara huruf besar dan huruf

kecil terpisah dengan jarak posisi 32. Tiap bilangan

bulat mempunyai sifat keterututan. Ini berarti bila

sebuah nilai bilangan bulat diketahui maka nilai

Page 73: Bukualgo eBook Suwanto

73

sebelumnya (predecessor) dan nilai sesudahnya

(sucessor) dapat diketahui. Untuk mengetahui karakter

pada urutan tertentu dalam tabel ASCII digunakan

fungsi karakter dengan bentuk umum :

variabel=chr(argumen)

chr berarti character dan argumen disini adalah

informasi urutan atau posisi.

Algoritma dengan pseudocode

input (huruf_kecil) posisi_hurufkecil = ord (huruf_kecil)

posisi_hurufbesar = posisi_hurufkecil – 32

huruf_besar = chr (posisi_hurufbesar)

output (huruf_besar)

Misal : huruf_kecil = a

posisi_hurufkecil = ord ('a') = 97

posisi_hurufbesar = 97 – 32 = 65

huruf_besar = chr (65) = A

9. Buatlah program untuk mengkonversikan penulisan

sebuah huruf besar menjadi huruf kecil.

Jawab :

Page 74: Bukualgo eBook Suwanto

74

Logikanya sama dengan contoh soal 9.

Algoritma dengan pseudocode

input (huruf_besar) posisi_hurufbesar = ord (huruf_besar)

posisi_hurufkecil = posisi_hurufkecil +

32

huruf_kecil = chr (posisi_hurufkecil)

output (huruf_kecil)

Misal : huruf_besar = A

posisi_hurufbesar = ord ('A') = 65

posisi_hurufkecil = 65 + 32 = 97

huruf_kecil = chr (97) = a

10. Program untuk mengkonversikan penulisan sebuah

karakter angka menjadi bilangan bulat.

Jawab :

Kita berpedoman bahwa karakter angka '0' dalam tabel

ASCII berada pada posisi 48. Disini angka 0 berupa

karakter sedangan nilai 48 adalah sebuah bilangan

bulat. Supaya angka 0 sebagai karakter dapat

ditampilkan sebagai angka 0 tetapi berstatus bilangan

bulat maka 48 harus dikurangi dengan dirinya sendiri

yaitu 48 sehingga menghasilkan bilangan 0.

Page 75: Bukualgo eBook Suwanto

75

Algoritma dengan pseudocode

input (bil_karakter) posisi_bilkarakter=ord(bil_karakter)

bil_bulat=posisi_bilkarakter–48

output (bil_bulat)

Misal : bil_karakter = 1

posisi_bilkarakter = ord ('1') = 49

bil_bulat = 49 – 48 = 1

bil_bulat = 1

3.3 Latihan

1.Buatlah algoritma untuk menghitung lama pembicaraan

di telepon. Kemudian implementasikan algoritma

tersebut dalam bahasa Python.

2.Buatlah algoritma untuk menukar nilai dari tiga buah

bilangan. Kemudian implementasikan algoritma

tersebut dalam bahasa Python.

3.Buatlah algoritma untuk konversi derajat Celcius ke

derajat Reamur, Kalvin dan Fahrenheit. Kemudian

implementasikan algoritma tersebut dalam bahasa

Python.

Page 76: Bukualgo eBook Suwanto

76

Bab 4

Struktur Pemilihan

Tujuan Pembelajaran Umum:

1.Memahami penggunaan struktur if dalam

pengambilan keputusan

2. Memahami penggunaan struktur switch dalam

pengambilan keputusan

3.Membuat algoritma program untuk mengambil

keputusan berdasarkan struktur pemilihan if dan

switch.

Penyelesaian masalah dengan struktur pemilihan atau

percabangan adalah suatu cara pemecahan masalah

dengan instruksi-instruksi tertentu yang dapat digunakan

untuk mengambil keputusan berdasarkan suatu kondisi.

Pernyataan percabangan memungkinkan suatu pernyataan

dieksekusi hanya jika suatu kondisi terpenuhi atau tidak

terpenuhi. Artinya tidak setiap baris atau langkah

algoritma akan dikerjakan. Suatu baris algoritma akan

Page 77: Bukualgo eBook Suwanto

77

dikerjakan jika kondisinya memenuhi syarat. Struktur

pemilihan adalah struktur algoritma yang melakukan

proses pengujian untuk mengambil suatu keputusan atau

tindakan apakah suatu baris instruksi atau blok instruksi

akan diproses atau tidak. Contoh : Jika suatu bilangan

tidak habis dibagi 2 maka bilangan tersebut adalah

bilangan ganjil. Disini keputusan untuk menyatakan suatu

bilangan adalah ganjil berdasarkan kondisi jika bilangan

tersebut tidak habis dibagi 2.

Bentuk instruksi percabangan

1.Instruksi IF

a. Pernyataan IF Sederhana

b. Pernyataan IF-ELSE

c. Pernyataan IF Bertingkat

2.Instruksi SWITCH

4.1 Instruksi IF Secara umum flowchartnya, sebagai berikut:

Page 78: Bukualgo eBook Suwanto

78

Gambar 4.1 Flowchart Instruksi IF

4.1.1 Pernyataan IF Sederhana

Instruksi ini digunakan untuk memeriksa sebuah kondisi

dan akan mengeksekusi satu instruksi atau blok instruksi,

jika dan hanya jika kondisinya terpenuhi. Test kondisi ini

sering disebut test satu arah.

Bentuk umum pseudocode : pernyataan_A

if <kondisi> then <pernyataan>

pernyataan_B

Page 79: Bukualgo eBook Suwanto

79

atau

pernyataan_A

if <kondisi> then

<pernyataan1>

<pernyataan2>

...

<pernyataann>

endif

pernyataan_B

4.1.1.1 Instruksi IF dengan Syarat Tunggal Instruksi ini digunakan untuk memeriksa sebuah kondisi

saja.

Contoh :

Untuk menyatakan mahasiswa lulus jika nilai akhir >=65 if (nilai=65) then write ('Lulus')

4.1.1.2 Instruksi IF dengan Syarat Majemuk Instruksi ini adalah pernyataan IF yang menggunakan

pemeriksaan lebih dari satu kondisi. Kondisi-kondisi

tersebut dihubungkan dengan operator-operator logika

yaitu digunakan operator logika AND dan OR.

Page 80: Bukualgo eBook Suwanto

80

Contoh :

1.Untuk menyatakan apakah mahasiswa dapat mengikuti

tes laboran apabila nilai mata kuliah yang

bersangkutan adalah B atau A. if (nilai = 'A') or (nilai = 'B')

then

write('Dapat mengikuti tes asisten')

endif

2.Untuk menyatakan mahasiswa lulus jika nilai akhir

>=65 dan presensi kehadiran lebih dari 10 kali. if (nilai>=65) and (presensi>=10)

then write('Lulus')

endif

Program merupakan pengimplementasian dari algoritma

yang ditulis dengan bahasa pemrograman, dengan

demikian program juga harus dapat mencabang, meloncat

atau berulang. Untuk melakukan langkah-langkah itu

maka program harus dikendalikan. Dengan menggunakan

perintah-perintah pengendali program maka hal tersebut

dapat dilakukan. Pengendalian program bahasa Python

seperti bahasa pemrograman lainnya dapat menggunakan

instruksi if dan if-else. Pada pengambilan keputusan

biasanya operator logika banyak digunakan.

Page 81: Bukualgo eBook Suwanto

81

Perintah if digunakan untuk mewujudkan percabangan

bersyarat, di dalam bahasa Python pernyataan if

mempunyai bentuk dasar yaitu :

if kondisi:

pernyataan

4.1.2 Instruksi IF - ELSE

Instruksi ini digunakan untuk menentukan tindakan yang

akan digunakan apabila kondisi bernilai benar dan

tindakan yang akan digunakan apabila kondisi bernilai

salah.

Bentuk umum pseudocode : pernyataan_A

if <kondisi> then <pernyataan1>

else <pernyataan2>

endif

pernyataan_B

Pengujian kondisi ini dilakukan untuk memilih salah satu

dari dua alternatif yang tersedia sehingga sering disebut

test dua arah. Secara flowchart dapat digambarkan seperti

berikut:

Page 82: Bukualgo eBook Suwanto

82

Gambar 4.2 Flowchart Instruksi IF-ELSE

Instruksi percabangan if dengan else dalam Python

seperti di bawah ini

if kondisi :

pernyataan1

else : pernyataan2

4.2 Contoh-Contoh Kasus IF dan IF-

ELSE

1.Menentukan bilangan genap dan bilangan ganjil.

Page 83: Bukualgo eBook Suwanto

83

Jawab :

Algoritma dengan pseudocode:

if (x mod 2 = 0) then

write(“x adalah bilangan genap”)

else write(“x adalah bilangan

ganjil”)

endif

2.Menentukan nilai absolut dari bilangan yang

dimasukkan melalui keyboard.

Jawab :

Algoritma dengan pseudocode input (x)

if x>=0 then output (x)

else

x=x*-1

output (x)

atau :

input (x)

if x<0 then x=x*-1

output (x)

Page 84: Bukualgo eBook Suwanto

84

4.3 Instruksi IF Bertingkat Bentuk umum pseudocode:

if <kondisi_1> then <pernyataan_1>

else if <kondisi_2> then

<pernyataan_2>

else if <kondisi_3> then

<pernyataan_3>

.

.

.

else <pernyataan_m>

endif

endif

endif

4.4 Contoh-Contoh Kasus IF Bertingkat 1.Konversi huruf besar ke huruf kecil dan sebaliknya dari

huruf kecil ke huruf besar. Input adalah sembarang

huruf.

Jawab :

Page 85: Bukualgo eBook Suwanto

85

Algoritma dengan pseudocode

Algoritma pertama: input (huruf)

kode = ord (huruf)

if kode>=97 then kodebaru = kode –

32

else kodebaru = kode + 32

hurufbaru = chr (kodebaru)

output (hurufbaru)

Algoritma kedua:

input (huruf) kode = ord (huruf)

if kode<=90 then kodebaru = kode +

32

else kodebaru = kode - 32

hurufbaru = chr (kodebaru)

output (hurufbaru)

Algoritma ketiga: input (huruf)

kode = ord (huruf)

if kode>=65 and kode<=90 then

kodebaru = kode + 32

else kodebaru = kode - 32

hurufbaru = chr (kodebaru)

output (hurufbaru)

Page 86: Bukualgo eBook Suwanto

86

Algoritma keempat: input (huruf)

kode = ord (huruf)

if kode>=97 and kode<=122 then

kodebaru = kode - 32

else kodebaru = kode + 32

hurufbaru = chr (kodebaru)

output (hurufbaru)

2.Mencari data terbesar diantara tiga buah data.

Jawab :

Algoritma dengan pseudocode input (A,B,C)

if A>=B then

if A>=C then output (A)

else output (C)

endif

else if B>=C then output (B)

else output (C)

endif

endif

3.Pengelompokan nilai dengan ketentuan:

Page 87: Bukualgo eBook Suwanto

87

Jika nilai angka >= 90 maka nilai huruf = A

Jika nilai angka >= 80 maka nilai huruf = B

Jika nilai angka >= 70 maka nilai huruf = C

Jika nilai angka >= 60 maka nilai huruf = D

Jika nilai angka < 60 maka nilai huruf = E

Jawab :

Algoritma dengan pseudocode

input(grade)

if grade>=90 then write ("Nilai=A")

else if grade >= 80 then

write ("Nilai=B")

else if grade >= 70 then

write ("Nilai=C")

else if grade >= 60 then

write ("Nilai=D")

else write

("Nilai=E")

4.Konversi nilai huruf menjadi nilai angka.

Jawab :

Algoritma dengan pseudocode

Page 88: Bukualgo eBook Suwanto

88

input (nilaihuruf)

if nilaihuruf='A' then

nilaiangka=4

else if nilaihuruf='B' then

nilaiangka=3

else if nilaihuruf='C' then

nilaiangka=2

else if nilaihuruf='D' then

nilaiangka=1

else if nilaihuruf='E'

then

nilaiangka=0

endif

endif

endif

endif

endif

output (nilaiangka)

5.Buatlah komentar kelulusan untuk teman anda.

Jawab :

Algoritma dengan pseudocode input(na)

if na>=85 then

nh = 'A'

komentar='Anda layak dapat bintang'

else

if na>=70 and na<=84 then

Page 89: Bukualgo eBook Suwanto

89

nh = 'B'

komentar='Good...Good...Good'

else

if na>=55 and na<= 69 then

nh = 'C'

komentar='Lumayan deh'

else

if na>=30 and na<= 54 then

nh = 'D'

komentar='Don't worry,

next time better'

else

if na<=29 then

nh = 'E'

komentar='Anda tidak lulus'

else

komentar='Nilai tidak dikenal'

endif

endif

endif

endif

endif

output (nh,komentar)

6.Buatlah program untuk mencari akar-akar dari

persamaan kuadrat ax2 + bx + c = 0.

Jawab :

Koefisien a, b, dan c bisa mempunyai sembarang nilai

termsuk nol. Akar-akar persamaan kuadrat bergantung

Page 90: Bukualgo eBook Suwanto

90

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

Page 91: Bukualgo eBook Suwanto

91

D=(b*b)-(4*a*c)

if D<0 then write ('Akar imajiner')

else if D=0 then

x=-b/2*a

output (x)

else

x1=(-b+sqrt(d))/2*a

x2=(-b-sqrt(d))/2*a

output (x1,x2)

endif

endif

endif

7. Mengurutkan tiga huruf yang dimasukkan dari

keyboard dan user disediakan pilihan model penyajian

yaitu ascending atau descending.

Jawab :

Tiga huruf yang dimasukkan bisa huruf besar semua,

huruf kecil semua atau kombinasi huruf besar dan

huruf kecil.

Algoritma dengan pseudocode input (h1,h2,h3)

input (pilihan)

if pilihan=1 then

if h1>h2 then

Page 92: Bukualgo eBook Suwanto

92

temp=h1

h1=h2

h2=temp

endif

if h1>h3 then

temp=h1

h1=h3

h3=temp

endif

if h2>h3 then

temp=h2

h2=h3

h3=temp

endif

endif

output (h1,h2,h3)

else if pilihan=2 then

if h1<h2 then

temp=h1

h1=h2

h2=temp

endif

if h1<h3 then

temp=h1

h1=h3

h3=temp

endif

if h2<h3 then

Page 93: Bukualgo eBook Suwanto

93

temp=h2

h2=h3

h3=temp

endif

endif

output (h1,h2,h3)

8. Mencetak nama bulan berdasarkan nomor urutannya.

Jawab :

Algoritma dengan pseudocode if (nobulan=1) then write ('Januari')

else if (nobulan=2) then write

('Februari')

else if (nobulan=3) then write ('Maret')

else if (nobulan=4) then write ('April')

else if (nobulan=5) then write ('Mei')

else if (nobulan=6) then write

('Juni')

else if (nobulan=7) then write

('Juli')

else if (nobulan=8) then

write ('Agustus')

else if (nobulan=9) then

write ('September')

else if (nobulan=10) then

write ('Oktober')

else if (nobulan=11) then

write ('Nopember')

else if (nobulan=12) then

Page 94: Bukualgo eBook Suwanto

94

write ('Desember')

Untuk mempermudah pencarian kesalahan, sebaiknya

penulisan pseudocode tidak dibuat rata kiri.

4.5 Instruksi SWITCH Pemilihan proses menggunakan instruksi IF selalu

didasarkan pada dua pilihan yang bisa terjadi. Dengan

demikian untuk mentest lebih dari dua pilihan harus

digunakan sejumlah instruksi IF seperti terlihat pada

bentuk umum instruksi IF untuk pilihan jamak. Struktur

statemen yang demikian seringkali membuat bingung.

Pemilihan proses untuk sejumlah pilihan kondisi bisa

dilaksanakan dengan instruksi SWITCH. Pernyataan

SWITCH digunakan untuk menyederhanakan instruksi

IF-ELSE yang bertingkat-tingkat. Semua masalah yang

bisa diselesaikan menggunakan instruksi SWITCH pasti

juga bisa ditangani dengan menggunakan instruksi IF,

tetapi tidak berlaku sebaliknya

c.Bentuk umum pseudocode: switch <pilihan>

Page 95: Bukualgo eBook Suwanto

95

case <pilihan1> : <aksi1>

case <pilihan2> : <aksi2>

...

case <pilihann> : <aksin>

{otherwise aksi}

endcase

pilihan1, pilihan2, ..., pilihann mempunyai nilai

kebenaran. Tiap pilihan diperiksa nilai kebenarannya,

mulai dari pilihan pertama sampai ditemukan pilihan

yang bernilai benar. Jika pilihan ke-i bernilai benar maka

aksi ke-i dilaksanakan. Pilihan berikutnya yakni pilihan

ke-i+1 sampai dengan pilihan ke-n tidak

dipertimbangkan lagi. Aksi yang dipasangkan dengan ke-

i dapat berupa satu baris instruksi atau blok instruksi.

Apabila tidak ada satupun pilihan yang bernilai benar

maka aksi sesudah otherwise dikerjakan. Penulisan

otherwise bersifat optional.

Page 96: Bukualgo eBook Suwanto

96

Gambar 4.3 Flowchart Instruksi SWITCH

4.6 Contoh-Contoh Kasus SWITCH

1.Konversi nilai huruf menjadi nilai angka.

Jawab:

Algoritma dengan pseudocode input (na)

Page 97: Bukualgo eBook Suwanto

97

switch (na)

case 'A' : nh=4

case 'B' : nh=3

case 'C' : nh=2

case 'D' : nh=1

case 'E' : nh=0

otherwise write ('Masukkan

A/B/C/D/E')

endcase

2.Pemilihan mobil.

Jawab:

Algoritma dengan pseudocode input (no)

switch (no)

case 1 : write ('PEUGEOT')

case 2 : write ('BMW')

case 3 : write ('AUDI')

case 4 : write ('FIAT')

case 5 : write ('VW')

case 6 : write ('TIMOR')

otherwise write ('Masukkan 1 s/d

6')

endcase

3. Menampilkan nama bulan berdasar atas input bilangan

integer 1 s/d 12.

Jawab :

Page 98: Bukualgo eBook Suwanto

98

Algoritma dengan pseudocode input (nobulan)

switch (nobulan)

case 1 : write ('Bulan Januari')

case 2 : write ('Bulan Februari')

case 3 : write ('Bulan Maret')

case 4 : write ('Bulan April')

case 5 : write ('Bulan Mei')

case 6 : write ('Bulan Juni')

case 7 : write ('Bulan Juli')

case 8 : write ('Bulan Agustus')

case 9 : write ('Bulan September')

case 10 : write ('Bulan Oktober')

case 11 : write ('Bulan Nopember')

case 12 : write ('Bulan Desember')

otherwise write ('Nomor bulan salah')

end case

4.7 Latihan

1.Tuliskan algoritma untuk menentukan bilangan yang

dimasukkan antara 0 sampai 10 adalah bilangan prima

atau bukan

2.Tuliskan algoritma untuk menentukan tahun kabisat

3.Tuliskan algoritma untuk menentukan jumlah hari

dalam bulan, yang dimasukkan adalah kode bulan

1..12.

Page 99: Bukualgo eBook Suwanto

99

4.Tuliskan algoritma untuk menentukan wujud air .

Jika suhu <=0 maka benda padat.

Jika suhu>=100 maka uap/gas.

Jika suhu>0 dan suhu<100 maka cair.

5.Tuliskan algoritma untuk menentukan luas dan volume

bola ( L = 4.phi.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:

Page 100: Bukualgo eBook Suwanto

100

8.Tuliskan algoritma untuk menentukan koordinat titik

ada di kuadran I, II, III, atau IV.

9.Tuliskan algoritma untuk menyelesaikan persamaan

linier dari ax + by = c

dx + ey = f

Page 101: Bukualgo eBook Suwanto

101

9.Tuliskan algoritma untuk menampilkan zodiac

berdasarkan bulan dan tanggalnya.

10.Tuliskan algoritma dimana user diberi pilihan sebagai

berikut:

Menu Pilihan Bidang

A. Jajaran Genjang

B. Persegi Panjang

C. Bujur Sangkar

D. Lingkaran

E. Segitiga

F. Trapesium

Setiap pilihan bidang menghitung luas dan keliling

dari bidang yang dipilih. Ukuran-ukuran yang

berkaitan dimasukkan melalui keyboard.

12.Tuliskan algoritma untuk mengetahui apakah data

kedua bisa digunakan untuk membagi data pertama.

Apabila data pertama tidak bisa dibagi oleh data kedua

maka algoritma akan mengeluarkan pesan. Apabila

data pertama bisa dibagi oleh data kedua maka

algoritma akan menampilkan hasil dari pembagian

tersebut serta seandainya terdapat sisa pembagian

maka algoritma harus dapat menampilkan nilainya

Page 102: Bukualgo eBook Suwanto

102

Page 103: Bukualgo eBook Suwanto

103

Bab 5

Struktur Perulangan

Tujuan pembelajaran umum:

1.memahami algoritma perulangan dengan struktur

FOR

2.memahami algoritma perulangan dengan struktur

WHILE

3.memahami algoritma perulangan dengan struktur

DO-WHILE.

Andaikan kita diminta menjumlahkan 10 buah bilangan

yang dimasukkan melalui keyboard dan kita

menyelesaikan masalah di atas menggunakan struktur

sequence atau runtunan maka algoritmanya berupa

pseudocode sebagai berikut :

input(x1)

input(x2)

input(x3)

Page 104: Bukualgo eBook Suwanto

104

input(x4)

input(x5)

input(x6)

input(x7)

input(x8)

input(x9)

input(x10)

jumlah=x1+x2+x3+x4+x5+x6+x7+x8+x9+x10

output(jumlah)

Pseudocode di atas benar tetapi tidak efisien, bayangkan

saja seandainya data yang harus dijumlahkan relatif besar

misalnya 1000 buah maka berapa banyaknya baris

instruksi untuk membaca data dan panjangnya penulisan

instruksi untuk menjumlahkan datanya. Untuk masalah

ini solusinya kita menggunakan struktur iteration atau

perulangan.

jumlah=0

for i=1 to 1000 do

input(x)

jumlah=jumlah+x

endfor

output(jumlah)

Instruksi perulangan digunakan untuk menjalankan satu

atau beberapa instruksi sebanyak beberapa kali jika suatu

Page 105: Bukualgo eBook Suwanto

105

kondisi terpenuhi. Dengan instruksi perulangan

memungkinkan kita untuk menjalankan beberapa

instruksi hanya dengan menuliskan intruksi tersebut satu

kali saja. Proses perulangan biasanya digunakan, untuk :

1.Mengulang proses pamasukan data.

2.Mengulang proses perhitungan.

3.Mengulang proses penampilan hasil pengolahan data.

Struktur perulangan terdiri dari empat bagian :

1.Kondisi perulangan, yaitu ekspresi boolean yang harus

dipenuhi untuk melaksanakan pengulangan. Kondiisi

ini bisa dinyatakan secara eksplisit oleh pemrogram

atau dikelola secara implisit oleh komputer.

2.Badan perulangan, yaitu satu atau lebih instruksi yang

akan diulang.

3.Inisialisasi, yaitu aksi yang dilakukan sebelum

perulangan dilakukan pertama kali.

4.Terminasi, yaitu aksi yang mengakibatkan perulangan

dihentikan.

Di dalam algoritma terdapat beberapa macam struktur

perulangan. Beberapa struktur dapat dipakai untuk

menyelesaikan masalah yang sama tetapi ada struktur

perulangan yang hanya cocok dipakai untuk masalah

Page 106: Bukualgo eBook Suwanto

106

tertentu. Pemilihan struktur perulangan untuk

penyelesaian suatu masalah dapat mempengaruhi

kebenaran algoritma yang dibuat. Pemilihan struktur

perulangan yang tepat bergantung pada masalah yang

akan diselesaikan.

Macam-macam struktur perulangan :

1.Instruksi FOR

2.Instruksi WHILE-DO

5.1 Instruksi FOR Instruksi perulangan yang paling sering digunakan adalah

instruksi FOR. Instruksi ini digunakan apabila kita tahu

secara pasti banyaknya perulangan yang akan dilakukan.

Bentuk umum pseudocode FOR format naik:

for indeks=nilai_awal to nilai_akhir

do

<instruksi/blok instruksi>

endfor

Bentuk umum flowchart :

Page 107: Bukualgo eBook Suwanto

107

Gambar 5.1 Flowchart Instruksi FOR Format Naik

Cara kerjanya:

1.Indeks diassign dengan nilai awal.

2.Indeks dibandingkan dengan nilai akhir.

3.Jika indeks <= nilai akhir maka

a. Badan loop dikerjakan.

b. Secara otomatis nilai indeks ditambah 1.

c. Indeks dibandingkan dengan nilai akhir.

4.Jika indeks > nilai akhir maka akan dikerjakan statemen

pertama sesudah “endfor” (badan loop).

Page 108: Bukualgo eBook Suwanto

108

Bentuk umum pseudocode FOR format turun:

for indeks=nilai_awal downto

nilai_akhir do

<instruksi/blok instruksi>

endfor

Bentuk umum flowchart :

Gambar 5.2 Flowchart Instruksi FOR Format Turun

Cara kerjanya:

1.Indeks diassign dengan nilai awal.

2.Indeks dibandingkan dengan nilai akhir.

Page 109: Bukualgo eBook Suwanto

109

3.Jika indeks >= nilai akhir maka

a. Badan loop dikerjakan.

b. Secara otomatis nilai indeks dikurangi 1.

c. Indeks dibandingkan dengan nilai akhir.

4.Jika indeks < nilai akhir maka akan dikerjakan statemen

pertama sesudah “endfor” (badan loop).

Contoh :

1.Indeks perulangan menaik for i=1 to 3 do

output (i)

endfor

2.Indeks perulangan menurun for i=1 downto 3 do

output (i)

endfor

Pengembangan instruksi FOR selanjutnya adalah

instruksi FOR bertingkat, dimana urutan instruksi dimulai

dari perulangan yang paling dalam. Syarat-syarat yang

harus dipenuhi dalam penggunaan instruksi ini adalah:

1.Setiap perulangan tidak boleh menggunakan variabel

Page 110: Bukualgo eBook Suwanto

110

counter atau indeks yang sama.

2.Antara perulangan-perulangan tersebut tidak boleh

saling berpotongan (overlapping).

5.2 Contoh-Contoh Kasus FOR 1.Menuliskan angka 1 s/d 10 dengan masing-masing

output diberi keterangan yang berbeda pada saat 3 dan

8. Output yang dihasilkan misal :

angka = 1

angka = 2

angka = 3 ini angka favoritku

angka = 4

angka = 5

angka = 6

angka = 7

angka = 8 ini angka favorit temenku

angka = 9

angka = 10

Jawab :

Algoritma dengan pseudocode:

for angka=1 to 10 do

Page 111: Bukualgo eBook Suwanto

111

if angka=3 then

komentar ('ini angka favoritku')

output (angka,komentar)

else if angka=8 then

komentar ('ini angka favorit

temenku')

output (angka,komentar)

endif

else output (angka)

endif

endif

endfor

2.Buatlah program untuk menghitung banyaknya data

bernilai positif, negatif dan nol dari n buah data yang

dimasukkan melalui keyboard.

Jawab :

Algoritma dengan pseudocode

input (n)

cacahpos=0

cacahneg=0

cacahnol=0

for i=1 to n do

input (x)

if x>0 then cacahpos=cacahpos+1

else if x<0 then cacahneg=cacahneg+1

Page 112: Bukualgo eBook Suwanto

112

else cacahnol=cacahnol+1

endfor

output (cacahpos,cacahneg,cacahnol)

3.Buatlah program untuk menjumlahkan n buah data

kemudian dihitung rata-ratanya.

Jawab :

Algoritma dengan pseudocode:

input (n)

jumlah=0

for i=1 to n do

input (bil)

jumlah=jumlah+bil

endfor

rata=jumlah/n

output (rata)

4.Buatlah program untuk menjumlahkan n buah data

tetapi yang dijumlahkan hanya data ganjil.

Jawab :

Page 113: Bukualgo eBook Suwanto

113

Algoritma dengan pseudocode:

input (n) jganj=0

for i=1 to n do

input (bil)

if bil mod 2 = 1 then jganj=jganj+bil

endfor

output (jganj)

5.Buatlah program untuk menjumlahkan n buah data

tetapi hanya data bernilai positif saja yang

dijumlahkan.

Jawab :

Algoritma dengan pseudocode:

input (n) jumlah=0

for i=1 to n do

input (bil)

if bil>0 then jumlah=jumlah+bil

endfor

output (jumlah)

6.Buatlah program untuk menjumlahkan bilangan ganjil

Page 114: Bukualgo eBook Suwanto

114

bernilai negatif yang lebih kecil dari -99 dari n buah

data.

Jawab :

Algoritma dengan pseudocode:

input(n)

jganj=0

for i=1 to n do

input(bil)

if bil<-99 then

if bil%2!=0 then

jganj=jganj+bil

endif

endif

endfor

output (jganj)

7.Buatlah program untuk mencari data terbesar dan data

terkecil dari n buah data.

Jawab :

Cara Pertama:

Page 115: Bukualgo eBook Suwanto

115

Asumsikan nilai maksimum (max) sementara adalah

bilangan bulat -32768 sedangkan nilai minimum (min)

sementara adalah 32767. Bacalah data bilangan dari

piranti masukan. Setiap kali pemasukan data,

bandingkan data tersebut dengan nilai max dan min

untuk menentukan data terbesar dan data terkecil. Pada

akhir perulangan, max berisi data terbesar dan min

berisi data terkecil.

Cara Kedua :

Nilai maksimum sementara dan nilai minumum

sementara mula-mula diinisialisasikan nilainya sama

dengan nilai data pertama. Langkah ini diambil untuk

mengantisipasi apabila ternyata dari n buah data

tersebut nilainya tidak terdapat pada range -32767 s/d

32768 karena jika tidak dikendalikan dengan baik

maka di akhir pencarian tidak memberikan hasil yang

sesuai dengan kenyataan.

Algoritma dengan pseudocode:

Cara Pertama:

input (n)

max=-32767

min=32768

for i=1 to n do

Page 116: Bukualgo eBook Suwanto

116

input (bil)

if bil>max then max=bil

if bil<min then min=bil

endfor

output (max,min)

Cara Kedua:

input (n)

input (bil)

max=bil

min=bil

for i=2 to n do

input (bil)

if bil>max then max=bil

if bil<min then min=bil

endfor

output (max,min)

8.Buatlah program untuk mencari data terkecil pertama

dan data terkecil kedua dari n buah data yang

dimasukkan melalui keyboard.

Jawab :

Algoritma dengan pseudocode:

Page 117: Bukualgo eBook Suwanto

117

input(n)

input(a)

input(b)

if a>b then

min1=b

min2=a

endif

else:

min1=a

min2=b

endif

for i=2 to n do

input(bil)

if bil>min1 and bil<min2 then

min2=bil

endif

else if bil<min1 and bil<min2 then

temp=min1

min1=bil

min2=temp

endif

endfor

output (min1,min2)

Page 118: Bukualgo eBook Suwanto

118

9.Buatlah program untuk mencari data negatif terbesar

dan data positif terkecil dari n buah data yang

dimasukkan melalui keyboard.

Jawab :

Algoritma dengan pseudocode:

input (n)

maxneg=-32768

minpos=32767

for i=1 to n do

input (bil)

if bil>0 then

if bil<minpos then minpos=bil

endif

else if x<0 then

if x>maxneg then maxneg=bil

endif

endif

endfor

output (maxneg,minpos)

5.3 Instruksi WHILE - DO Instruksi perulangan ini dapat digunakan apabila kita

belum tahu secara pasti berapa kali banyaknya

perulangan yang akan dilakukan. Berakhirnya proses

perulangan ditentukan oleh sutu kondisi. Selama kondisi

Page 119: Bukualgo eBook Suwanto

119

terpenuhi maka perulangan terus dilakukan dan

sebaliknya bila kondisinya tidak terpenuhi maka

perulangan dihentikan.

Bentuk umum pseudocode:

while <kondisi> do

<instruksi/blok instruksi>

endwhile

Bentuk umum flowchart :

Gambar 5.3 Flowchart Instruksi WHILE - DO

Cara kerjanya:

1.Sebelum masuk ke “while-loop” kondisi yang

merupakan ekspresi boolean harus dudah mempunyai

Page 120: Bukualgo eBook Suwanto

120

nilai.

2.Jika kondisi bernilai true maka seluruh badan loop

dikerjakan.

3.Dicek kembali apakah kondisi bernilai true atau false.

Jika kondisi bernilai true maka maka tidak ada

perubahan, artinya kembali mengerjakan badan loop.

Jika kondisi bernilai false maka langsung mengerjakan

statemen pertama sesudah “endwhile”.

4.Looping berhenti setelah kondisi bernilai false,

sehingga harus ada statemen yang mengakibatkan

kondisi bernilai false. Tetapi jika kondisi tetap true

maka terjadi infinite true, artinya jika tidak ada

statemen yang mengakibatkan kondisi bernilai false

maka terjadi infinite loop.

5.4 Contoh-Contoh Kasus WHILE_DO

1.Menuliskan angka 1 s/d 10 dengan masing-masing

output diberi keterangan yang berbeda pada saat 3 dan

8. Output yang dihasilkan misal :

angka = 1

angka = 2

angka = 3 ini angka favoritku

angka = 4

Page 121: Bukualgo eBook Suwanto

121

angka = 5

angka = 6

angka = 7

angka = 8 ini angka favorit temenku

angka = 9

angka = 10

Jawab :

Algoritma dengan pseudocode:

angka=1

while angka<=10 do

if angka=3 then

komentar ('ini angka favoritku')

output (angka,komentar)

endif

else

if angka=8 then

komentar ('ini angka favorit

temenku')

output (angka,komentar)

endif

else output (angka)

endwhile

2. Buatlah algoritma untuk menghitung banyaknya data

Page 122: Bukualgo eBook Suwanto

122

bernilai positif, negatif dan nol dari n buah data yang

dimasukkan melalui keyboard.

Jawab :

Algoritma dengan pseudocode

input (n)

cacahpos=0

cacahneg=0

cacahnol=0

i=1

while i<=n do

input (x)

if x>0 then cacahpos=cacahpos+1

else if x<0 then

cacahneg=cacahneg+1

else cacahnol=cacahnol+1

endif

endwhile

output (cacahpos,cacahneg,cacahnol)

3.Buatlah program untuk menjumlahkan n buah data

kemudian dihitung rata-ratanya.

Jawab :

Page 123: Bukualgo eBook Suwanto

123

Algoritma dengan pseudocode

input (n)

jumlah=0

i=1

while i<=n do

input (bil)

jumlah=jumlah+bil

endwhile

rata=jumlah/n

output (rata)

4.Buatlah algoritma untuk menjumlahkan n buah data

tetapi yang dijumlahkan hanya data ganjil.

Jawab :

Algoritma dengan pseudocode

input (n) jganj=0

i=1

while i<=n do

input (bil)

if bil mod 2 = 1 then

jganj=jganj+bil

endwhile

output (jganj)

Page 124: Bukualgo eBook Suwanto

124

5. Buatlah program untuk menjumlahkan bilangan ganjil

bernilai negatif yang lebih kecil dari -99 dari n buah data.

Jawab :

Algoritma dengan pseudocode:

input(n)

jganj=0

i=1

while i<=n do

input(bil)

if bil<-99 then

if bil%2!=0 then

jganj=jganj+bil

endif

endif

i=i+1

endwhile

output (jganj)

6. Buatlah program untuk mencari data terbesar dan data

terkecil dari n buah data.

Jawab :

Page 125: Bukualgo eBook Suwanto

125

Algoritma dengan pseudocode:

input (n)

input (bil)

max=bil

min=bil

i=2

while i<=n do

input (bil)

if bil>max then max=bil

if bil<min then min=bil

endwhile

output (max,min)

7.Buatlah algoritma untuk mencari data negatif terbesar

dan data positif terkecil dari n buah data yang

dimasukkan melalui keyboard.

Jawab :

Algoritma dengan pseudocode:

input (n)

maxneg=-1999999999

minpos=1999999999

i=1

while i<=n do

input (bil)

Page 126: Bukualgo eBook Suwanto

126

if bil>0 then

if bil<minpos then minpos=bil

endif

else if x<0 then

if x>maxneg then maxneg=bil

endif

endif

endwhile

output (maxneg,minpos)

8.Buatlah program untuk mencari rata-rata dimana sejak

awal banyaknya data yang akan dimasukkan belum

ditentukan.

Jawab :

Banyaknya perulangan tidak diketahui secara pasti

tetapi kita tahu kapan perulangan akan berhenti yaitu

ketika sudah tidak ada lagi data yang akan

dimasukkan. Supaya perulangan terjadi walaupun

hanya sekali, perlu diasumsikan bahwa mula-mula

memang ada data yang akan dibaca, untuk selanjutnya

akan disediakan pesan interaktif apakah ada data lagi

yang akan dibaca. Perulangan dihentikan apabila

pesan interaktif tersebut dijawab dengan jawaban

Page 127: Bukualgo eBook Suwanto

127

bahwa tidak ada data lagi yang akan dibaca.

Algoritma dengan pseudocode: masih='ya'

jumlah=0

cacah=0 {banyaknya data mula-mula}

while masih='ya' do

input (bil)

jumlah=jumlah+bil

cacah=cacah+1

input(masih)

endwhile

rata=jumlah/cacah

output (rata)

9.Buatlah algoritma untuk mencari pembagi bersama

terbesar dari dua buah bilangan bulat positif.

Jawab :

Algoritma dengan pseudocode:

input (x,y)

sisa=x mod y

while sisa <> 0 do

x=y

y=sisa

sisa=x mod y

endwhile

Page 128: Bukualgo eBook Suwanto

128

output (y)

10.Buatlah algoritma untuk menghitung Indeks Prestasi

Jawab :

Langkah-langkah:

a. Membaca bobot sks bobot sks dan nilai huruf yang

diperoleh setiap mata kuliah.

b. Mengkonversikan nilai huruf ke nilai angka.

c. Menghitung point yang didapat pada setiap mata

kuliah. Besarnya point diperoleh dari perkalian nilai

angka dengan bobot sks.

d. Menjumlahkan point seluruh mata kuliah.

e. Menjumlahkan bobot sks seluruh mata kuliah.

f. Melakukan pembagian jumlah point dengan jumlah

sks untuk mendapatkan Indeks Prestasi seorang

mahasiswa.

Algoritma dengan pseudocode:

masih='y'

jpoint=0

jsks=0

while masih='y'

Page 129: Bukualgo eBook Suwanto

129

input (sks,nh)

if nh='A' then na=4

else if nh='B' then na=3

else if nh='C' then na=2

else if nh='D' then na=1

else na=0

point=sks*na

jpoint=jpoint+point

jsks=jsks+sks

input (masih)

endwhile

IP=jpoint/jsks

output (IP)

11.Buatlah program untuk mengetahui dari n buah data

yang dimasukkan dari keyboard, berapakah banyaknya

data yang merupakan bilangan prima, semua data yang

berupa bilangan prima dijumlahkan kemudian dihitung

rata-ratanya.

Jawab :

Ada beberapa cara untuk mengecek suatu bilangan

apakah berstatus prima atau bukan.

Cara pertama:

Membagi bilangan yang dicek mulai dari 2 hingga

Page 130: Bukualgo eBook Suwanto

130

bilangan yang akan dicek dikurangi 1 (2 s/d bilangan-

1)

input (bil)

if x=2 then status='prima'

else if x<=1 or x mod 2 = 0

then st='bukan prima'

else

pembagi=3

st='prima'

batascek=bil-1

while pembagi<=batascek and st='prima'

do

if x mod pembagi=0 then st='bukan

prima'

else pembagi=pembagi+1

endwhile

endif

endif

output (st)

Cara kedua:

Membagi bilangan yang dicek dengan bilangan-

bilangan mulai dari 2 hingga ((bilangan-1)/2). Pada

metode kedua ini semua pembagi bulat yang mungkin

sudah tercakup. Mengapa batas atas pembagi adalah

(bilangan-1)/2 ? Karena:

a. Pembagi-pembagi di atas bilangan/2 sampai dengan

bilangan akan membuahkan hasil yang real dalam

Page 131: Bukualgo eBook Suwanto

131

interval 1 sampai 2.

b. Pembagian dengan bilangan/2 tentu tidak dibutuhkan

lagi karena telah diwakili oleh pembagian dengan 2.

Oleh karena itu pembagi bulat yang bukan 1 dan 2

yang mungkin terletak di antara 2 dan bilangan adalah

di dalam interval 2 hingga ((bilangan-1)/2).

input (bil)

if x=2 then status='prima'

else if x<=1 or x mod 2 = 0

then st='bukan prima'

else

pembagi=3

st='prima'

batascek=round ((bil-1)/2)

while pembagi<=batascek and st='prima'

do

if x mod pembagi=0 then st='bukan

prima'

else pembagi=pembagi+1

endwhile

endif

endif

output (st)

Cara ketiga:

Membagi bilangan yang dicek dengan bilangan mulai

Page 132: Bukualgo eBook Suwanto

132

dari 2 hingga akar dari bilangan tersebut. Dasar

pemikirannya adalah bilangan-bilangan yang berada di

atas akar dari bilangan yang akan dicek itu selalu

merupakan kelipatan dari 2, 3, dan bilangan-bilangan

prima di bawah akar bilangan yang akan dicek itu.

Contoh : Cek bilangan 101 prima atau bukan.

Akar dari 101 dibulatkan menjadi 10. Dengan

membagi 101 dengan bilangan-bilangan mulai 2

hingga 10 sama halnya dengan membagi 101 dengan

bilangan-bilangan dari 2 hingga 100 karena hampir

semua bilangan di atas 10 merupakan kelipatan dari

bilangan-bilangan antara 2 hingga 10. Mengapa tidak

membagi dengan 11 atau bilangan-bilangan prima

yang lain? Karena kelipatan dari bilangan prima sudah

pasti bukan bilangan prima.

input (bil)

if x=2 then status='prima'

else if x<=1 or x mod 2 = 0

then st='bukan prima'

else

pembagi=3

st='prima'

batascek=round (sqrt(bil))

while pembagi<=batascek and st='prima'

do

Page 133: Bukualgo eBook Suwanto

133

if x mod pembagi=0 then st='bukan

prima'

else pembagi=pembagi+1

endwhile

endif

endif

output (st)

Cara keempat:

Membagi bilangan yang dicek dengan bilangan 2, 3, 5

sampai ((bilangan-1)/2). Cara ini merupakan

penyederhanaan dari cara kedua karena:

a. Pada cara kedua kita membagi bilangan yang akan

dicek dengan semua bilangan mulai dari 2 hingga

(bilangan-1)/2.

b. Pada cara keempat ini kita hanya membagi bilangan

yang akan dicek dengan 2 dan bilangan-bilangan

ganjil di atas 2 sampai ((bilangan-1)2).

Dasar pemikirannya adalah bilangan-bilangan genap di

atas 2 merupakan kelipatan dari 2.

input (bil)

if x=2 then status='prima'

else if x<=1 or x mod 2 = 0

then st='bukan prima'

else

pembagi=3

st='prima'

Page 134: Bukualgo eBook Suwanto

134

batascek=round ((bil-1)/2)

while pembagi<=batascek and st='prima'

do

if x mod pembagi=0 then st='bukan

prima'

else pembagi=pembagi+2

endwhile

endif

endif

output (st)

Cara kelima:

Menggabungkan cara ketiga dan cara keempat. Pada

cara ketiga kita melakukan pembagian mulai dari 2

hingga akar dari bilangan yang akan dicek, jadi

bilangan pembagi tersebut termasuk juga 4, 6, 8, 10

dan bilangan-bilangan genap selanjutnya, padahal

bilangan-bilangan tersebut adalah kelipatan 2. Dengan

membagi bilangan yang akan dicek dengan 2, 3, 5, 7

dan seterusnya hingga akar dari bilangan yang akan

dicek tentu akan diperoleh hasil yang sama, dengan

keuntungan penyingkatan waktu yang sangat drastis.

input (bil)

if x=2 then status='prima'

else if x<=1 or x mod 2 = 0

then st='bukan prima'

else

pembagi=3

st='prima'

Page 135: Bukualgo eBook Suwanto

135

batascek=round (sqrt(bil))

while pembagi<=batascek and st='prima'

do

if x mod pembagi=0 then st='bukan

prima'

else pembagi=pembagi+2

endwhile

endif

endif

output (st)

Algoritma dengan pseudocode:

jumlah=0

cacah=0

input (n)

for i=1 to n do

input (bil)

if x=2 then status='prima'

else

if x<=1 or x mod 2 = 0

then st='bukan prima'

endif

else

pembagi=3

st='prima'

batascek=round (sqrt(bil))

while pembagi<=batascek and st='prima'

do

if x mod pembagi=0 then st='bukan

prima'

else pembagi=pembagi+2

endwhile

Page 136: Bukualgo eBook Suwanto

136

endif

endif

if st='prima' then

jumlah=jumlah+bil

cacah=cacah+1

endif

endfor

rata=jumlah/cacah

output (rata)

5.5 Latihan

1.Buatlah algoritma untuk mengkonversikan bilangan

desimal ke biner.

2.Buatlah algoritma untuk menjumlahkan data yang

diinputkan tetapi yang dijumlahkan hanya data yang

merupakan bilangan yang habis dibagi oleh variabel

counter-nya saja.

3.Buatlah algoritma untuk menjumlahkan bilangan bulat

positif antara 2 sampai 100 tetapi yang dijumlahkan

hanya bilangan yang prima saja.

4.Buatlah algoritma untuk menjumlahkan deret 0+0-

2+8+22-52+... dimana banyaknya suku adalah n buah.

5.Buatlah algoritma untuk menjumlahkan deret 0+7-

Page 137: Bukualgo eBook Suwanto

137

26+63-... dimana banyaknya suku adalah n buah

6.Buatlah algoritma untuk menghitung penjumlahan deret

kuadrat terbesar tetapi masih lebih dari suatu nilai

tertentu. Model deretnya adalah 1+4+9+16+...

Contoh tampilan program setelah dijalankan:

Masukkan batas maksimum = 100

1 4 9 16 25 36

Hasil penjumlahan deret terbesar =

91

Banyaknya suku = 6

7.Diberikan pseudocode sebagai berikut :

sum1=0

for i=20 to 24 do

sum=sum1+(5*i-20)^2

sum1=(sum+20)mod 20

endfor

output(sum1)

Apa hasil akhir dari pseudocode di atas?

8.Diberikan pseudocode sebagai berikut :

a=0

Page 138: Bukualgo eBook Suwanto

138

b=1

while b<=8 do

input(c)

if c mod b = 0 then

a=a+c

endif

b=b+1

endwhile

output(a)

Apa hasil akhir dari pseudocode di atas?

9.Diberikan pseudocode sebagai berikut :

a=3

b=1

while b<=5 do

input(c)

if c mod b <> 0 then

a=a+c

endif

b=b+1

endwhile

output(a)

Page 139: Bukualgo eBook Suwanto

139

Apa hasil akhir dari pseudocode di atas?

10.Buatlah algoritma untuk menghitung banyaknya data

yang merupakan kelipatan 3 sekaligus kelipatan 5 dari

3000 s/d 7000.

11.Buatlah algoritma untuk mengecek dari 1000 s/d 4000

mana saja yang merupakan bilangan prima dan berapa

banyaknya.

12.Suatu perusahaan garmen mengadakan rekruitmen

karyawan. Terdapat 500 pelamar. Tahap pertama

adalah seleksi data fisik yaitu untuk jenis kelamin laki-

laki yang dibutuhkan mempunyai tinggi minimal 165

cm dengan berat badan maksimal 80 kg sedangkan

untuk jenis kelamin perempuan mempunyai tinggi

minimal 155 cm dengan berat badan maksimal 65 kg.

Buatlah algoritma untuk menghitung berapa

banyaknya calon karyawan yang lolos pada tahap

pertama.

13.Sebuah warung menjual 9 bahan pokok. Buatlah

algoritma untuk membuat nota penjualan yang memuat

informasi nomor nota, barang-barang yang dibeli

(nama barang, harga satuan, banyak barang yang

dibeli, diskon dan harga total) serta biaya yang harus

Page 140: Bukualgo eBook Suwanto

140

dibayar.

14.Bagaimana mengkonversikan bilangan sebagai

karakter yang panjangnya lebih dari satu karakter

menjadi bilangan sebagai interger? Buatlah

algoritmanya.

15.Algoritma mengubah kata yang ditulis dengan huruf

kecil menjadi kata yang ditulis dengan huruf kapital.

Page 141: Bukualgo eBook Suwanto

141

Bab 6

Subprogram

Tujuan pembelajaran umum:

1. memahami algoritma untuk membuat fungsi yang

tidak mengembalikan nilai 2. memahami algoritma untuk membuat fungsi yang mengembalikan nilai

3. membedakan variable local dan variable global

4. memahami algoritma untuk membuat fungsi

rekursi

Terdapat 4 buah data yang diwakili oleh a, b, c dan d.

Diberikan ketentuan :

a. Jika a > b maka nilai datanya ditukar.

b. Jika b > c maka nilai datanya ditukar.

c. Jika c > d maka nilai datanya ditukar.

Kita buat desain atau rancangan yang mewakili

pemecahan masalah berupa pseudocode.

Page 142: Bukualgo eBook Suwanto

142

input (a,b,c,d)

if a > b then

temp = a

a = b

b = temp

endif

if b > c then

temp = a

a = b

b = temp

endif

if c > d then

temp = a

a = b

b = temp

endif

output (a,b,c,d)

Pseudocode di atas tidak efektif karena ada proses yang

sama yaitu menukar nilai data tetapi dituliskan lebih dari

satu kali. Seharusnya proses yang sama tadi cukup

dituliskan satu kali sebagai subpseudocode dan dapat

dipanggil berkali-kali sesuai kebutuhan. Oleh karena itu

untuk menyelesaikan suatu permasalahan yang relatif

besar, algoritma perlu dipecah-pecah menjadi

Page 143: Bukualgo eBook Suwanto

143

subalgoritma-subalgoritma dan ketika ditranslasikan

menjadi program maka di dalamnya terdapat subprogram-

subprogram. Subprogram merupakan blok dari kode yang

dirancang khusus untuk melaksanakan tugas tertentu.

6.1 Subprogram

Pemrograman terstruktur adalah pemrograman yang

menitikberatkan pada pemecahan masalah yang kompleks

menjadi masalah yang sederhana yang disebut modul.

Program yang terdiri dari modul-modul atau subprogram-

subprogram disebut dengan program yang modular.

Alasan adanya sub program adalah:

1.Pemrograman modular.

2.Teknik top down design.

3.Mempersingkat atau memperpendek panjang program.

4.Menghemat kode program.

5.Mempermudah cek kesalahan.

Gambaran umum sub program :

Page 144: Bukualgo eBook Suwanto

144

Gambar 6.1 Gambaran Umum Subprogram

Bentuk umum pseudocode : function NamaFungsi [(daftar parameter)]

<blok instruksi>

NamaFungsi = Ungkapan

endfunction

Cara pemanggilan fungsi sebagai berikut:

1. Langsung dimanipulasi.

aNilai fungsi dicetak, misal: print y,"pangkat ",m,"= ",pangkat(y,m)

bNilai fungsi dijadikan kondisi dalam struktur pemilihan,

misal:

Program Utama

Sub program Sub program

Sub program Sub program

Page 145: Bukualgo eBook Suwanto

145

if hitung(x)>0 :

cNilai fungsi dijadikan kondisi dalam struktur

perulangan, misal: while hitung(x):

dNilai fungsi dimasukkan dalam suatu ekspresi, misal: a=10

b=hitung(x)+10

2. Ditampung ke dalam nama variabel lain, misal: y=hitung(x)

6.2 Contoh-Contoh Kasus Subprogram 1.Menghitung bilangan faktorial.

Jawab :

Mengapa 0! = 1 sedangkan 1! = 1 pula? Penelusurannya

adalah sebagai berikut: n! = (n-1)! * n

n!/n = (n-1)!

untuk n = 1 maka

1!/1 = (1-1)!

1! = 0!

karena 0! = 1 maka 1! = 1

Faktorial bilangan negatif tidak ada dan faktorial nol

Page 146: Bukualgo eBook Suwanto

146

sama dengan faktorial satu yaitu sama dengan 1.

Algoritma dengan pseudocode: function Faktorial(n) if n=0 or n=1 then hasil = 1

else

hasil = 1

for i = 2 to n do hasil=hasil * i

endfor

endif

Faktorial=hasil

endfunction

2. Perkalian dua buah bilangan bulat positif.

Jawab:

Algoritma dengan pseudocode: function Kali (m,n)

Hasil=0

for i=1 to n do

Hasil=Kali+m

endfor

Kali=Hasil

endfunction

Page 147: Bukualgo eBook Suwanto

147

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

Page 148: Bukualgo eBook Suwanto

148

endfunction

5. Buatlah program untuk menentukan status setiap

bilangan dari n buah data. Status suatu data dibedakan

dalam tiga macam yakni apakah data tersebut bernilai

positif, negatif atau nol.

Jawab :

Algoritma dengan pseudocode:

function Status (x)

if x>0 then St='positif'

else if n=0 then St='nol'

else St='negatif'

endif

endif

endfunction

6. Buatlah program untuk menghitung xn/n!.

Jawab :

Untuk menyelesaikan soal di atas perlu dibuat dua

subprogram. Subprogram pertama untuk menghitung

perpangkatan xn sedangkan subprogram kedua untuk

Page 149: Bukualgo eBook Suwanto

149

menghitung faktorial n!.

Algoritma dengan pseudocode:

function pangkat(y,m)

if m=0 then pangkat=1

else

pangkat=1

for i=1 to m do

pangkat=pangkat*y

endfor

endif

endfunction

function factorial(h)

if h=0 then facto=1

else

y=1

fakto=1

for i=1 to h do

fakto=y*fakto

y=y+1

endfor

endif

endfunction

input(x)

input(n)

Page 150: Bukualgo eBook Suwanto

150

g=pangkat(x,n)/factorial(n)

output (g)

7. Dalam Ilmu Statistika terdapat rumus kombinasi yaitu

n!/(x!*(n-x)!). Buatlah program untuk menghitung

kombinasi.

Jawab :

Algoritma dengan pseudocode:

function factorial(h)

if h==0 then fakto=1

else

y=1

fakto=1

for i=1 to h do

fakto=y*fakto

y=y+1

endfor

endif

factorial=fakto

endfunction

input(x)

input(n)

Page 151: Bukualgo eBook Suwanto

151

g=(factorial(n))/((factorial(x))*fac

torial(n-x))

output (g)

8.Buatlah program untuk menghitung perkalian dua buah

kombinasi (n!/(x!*(n-x)!))*(m!/(z!*(m-z)!)).

Jawab :

Algoritma dengan pseudocode:

function factorial(h)

if h==0 then fakto=1

else

y=1

fakto=1

for i=1 to h do

fakto=y*fakto

y=y+1

endfor

endif

factorial=fakto

endfunction

input(x)

input(n)

input(z)

input(m)

g=((factorial(n))/((factorial(x))*factorial(

Page 152: Bukualgo eBook Suwanto

152

n-

x)))*((factorial(m))/((factorial(z))*factori

al(m-z)))

output (g)

6.3 Rekursi Rekursi adalah proses yang bisa memanggil dirinya

sendiri. Bentuk rekursi merupakan alternatif dari bentuk

iterasi atau perulangan. Ada beberapa masalah yang lebih

cocok dipecahkan dengan bentuk rekursi. Tetapi secara

umum bentuk rekursi biasanya kurang efisien

dibandingkan bentuk iterasi karena rekursi memanggil

dirinya sendiri sehingga menyebabkan waktu pemrosesan

yang lebih besar dibandingkan bentuk iterasi biasa.

Proses rekursi akan menggunakan memory stack, semakin

lama proses rekursi dikerjakan maka memory stack akan

terus berkurang yang berakibat memory stack habis.

Dalam rekursi sebenarnya terkandung pengertian fungsi,

perbedaannya adalah:

a. Rekursi bisa memanggil dirinya sendiri.

b. Fungsi harus dipanggil lewat pemanggil fungsi (function call).

Page 153: Bukualgo eBook Suwanto

153

Rekursi mempunyai beberapa kelemehan yaitu :

1.Penggunaan rekursi seringkali harus mengorbankan

efisiensi dan kecepatan.

2.Masalah yang sering muncul di dalam rekursi adalah

eksekusi yang tidak pernah berhenti akibatnya stack

memori akan habis dan komputer hang.

Walaupun rekursi mempunyai kelemahan, mengapa kita

memerlukan rekursi? Karena ada beberapa masalah yang

akan lebih mudah diselesaikan dengan menggunakan

rekursi.

Semua instruksi yang disusun secara rekursi dapat pula

disusun secara non rekursi, demikian juga hampir semua

instruksi non rekursi dapat disusn secara rekursi.

Untuk menyelesaikan suatu kasus menggunakan cara

rekursi perlu diidentifikasikan terlebih dahulu hal-hal

sebagai berikut:

1.Kapankah langkah-langkah rekursi terjadi. Misalnya

dalam kasus perhitungan bilangan faktorial, langkah-

langkah rekursi dilakukan selama suatu bilangan lebih

besar daripada 1.

2.Bagaimana cara untuk menghentikan rekursi.

Suatu fungsi tidak hanya bisa memanggil fungsi lain,

Page 154: Bukualgo eBook Suwanto

154

melainkan juga bisa memanggil dirinya sendiri.

Pemanggilan kepada dirinya sendiri bisa berarti proses

berulang yang tidak bisa diketahui kapan berakhir

sehingga dalam rekursi harus ada syarat-syarat berikut:

a. Ada titik pemberhentian (stopping state) sebagai

pengendali rekursi.

b. Adanya langkah induksi yang menuju pada titik

pemberhentian.

6.4 Contoh-Contoh Kasus Rekursi 1. Menghitung bilangan faktorial.

Jawab :

Merupakan proses perhitungan deret bilangan dengan

rumus :

n=0, maka n! = 1

n>0, maka n! = n*(n-1)!

1, jika n = 0 (penghentian rekursi)

n!

n*(n-1)!, jika n > 0 (langkah induksi)

Gambaran Proses Rekursi:

Page 155: Bukualgo eBook Suwanto

155

Faktorial (4)

= Faktorial (4)

= 4 Faktorial (3)

= 3 Faktorial (2)

= 2 Faktorial (1)

= 1

Jadi 4! = 4*3*2*1 = 24

Hasil dari proses di tiap tingkat merupakan input

untuk proses di tingkat atasnya. Faktorial (n) bisa

dihitung dari Faktorial (n-1), Faktorial (n-1) bisa

dihitung dari Faktorial (n-2), dan seterusnya.

Ilustrasi penelusuran 4! :

Page 156: Bukualgo eBook Suwanto

156

Gambar 6.2 Ilustrasi Hitung Faktorial

Algoritma dengan pseudocode:

function Faktorial(n)

if n=0 then Fakto = 1

else Fakto = n * Faktorial(n-1)

endif

Faktorial=Fakto

endfunction

Keterangan:

a. Dari fungsi di atas bisa dilihat bahwa factorial(x)

bisa dihitung dari factorial(x-1), dimana

factorial(x-1) bisa dihitung dari

factorial(x-2), dan seterusnya.

Page 157: Bukualgo eBook Suwanto

157

b. Untuk menghitung factorial(x) maka fungsi

memanggil nilai factorial(x-1) yang telah

diperoleh, demikian juga untuk menghitung nilai

factorial(x-1) maka fungsi harus memanggil

nilai factorial(x-2), dan seterusnya.

c. Notasi factorial(x-1) yang digunakan untuk

memanggil nilai fungsi sebelumnya sering disebut

dengan pemanggil rekursi (recursion call). Rekursi

dijalankan dengan jumlah x yang semakin menurun.

factorial(x-1) artinya rekursi dengan jumlah x

yang semakin menurun.

2. Menghitung bilangan Fibonacci.

Jawab :

Bilangan Fibonacci dapat didefinisikan berdasar deret

integer tak berhingga dengan logika sebagai berikut:

n=1 atau n=2, maka Fibo(n) = 1

n>2, maka Fibo(n) = Fibo(n-1) + Fibo(n-2)

1 1 2 3 5 8 13 21 34 55…..

Dari deret di atas dapat dilihat bahwa bilangan ke-n (n>2)

dalam deret bisa dicari dari dua bilangan sebelumnya

yang terdekat dengan bilangan ke-n, yaitu bilangan ke-(n-

1) dan bilangan ke-(n-2). Oleh karena itu jika Fibo(n)

Page 158: Bukualgo eBook Suwanto

158

menunjukkan bilangan Fibonacci ke-n maka Fibo(n) bisa

dihitung berdasarkan hubungan rekurens berikut:

Fibo(n)=Fibo(n-1)+Fibo(n-2)

Karena Fibo(n) ditentukan oleh dua nilai yang berbeda

dengan argumen yang nilainya lebih kecil, maka untuk

mencari bilangan Fibonacci diperlukan dua nilai awal,

yaitu Fibo(1)=1 dan Fibo(2)=1.

Fibo(1)=1

Fibo(2)=1

Fibo(3)=Fibo(2)+Fibo(1)

Fibo(4)=Fibo(3)+Fibo(2)

dan seterusnya.

Implementasi pencarian Fibonacci (4) :

Fibo(4)

Page 159: Bukualgo eBook Suwanto

159

Fibo(3) Fibo(2)

Fibo(1) Fibo(0)

Fibo(2) Fibo(1)

Fibo(1) Fibo(0)

Gambar 6.3 Ilustrasi Bilangan Fibonacci

Algoritma dengan pseudocode: function Fibonacci(n)

if n=0 or n=2 then Fibo =1

else Fibo = Fibonacci(n-1) +

Fibonacci(n-2)

endif

Fibonacci=Fibo

endfunction

3.Perkalian dua buah bilangan bulat positif.

Jawab :

Misal :

4x3=(4x2)+4

Page 160: Bukualgo eBook Suwanto

160

=(4x1)+4+4

= 4+4+4

Secara umum dapat dituliskan dalam notasi sebagai

berikut :

mxn=(mx(n-1)+m

Gambar 6.4 Ilustrasi Hitung Perkalian

Algoritma dengan pseudocode:

function Kali (m,n) if n=1 then hasil=m

else hasil=m+Kali(m,n-1)

endif

Kali=hasil

Page 161: Bukualgo eBook Suwanto

161

endfunction

4. Perpangkatan xn.

Jawab :

Ditentukan bahwa pemangkatnya adalah nol dan

bilangan-bilangan positif. Ilustrasi penelusuran 43 adalah

sebagai berikut:

Page 162: Bukualgo eBook Suwanto

162

Gambar 6.5 Ilustrasi Hitung Perpangkatan

Algoritma dengan pseudocode:

function Pangkat(x,n)

if n=0 then hasil=1

else hasil=x*Pangkat(x,n-1)

endif

Pangkat=hasil

endfunction

Page 163: Bukualgo eBook Suwanto

163

5. Menghitung sigma 1+2+3+4+...+n.

Jawab :

Penelusuran Sigma (5) sebagai berikut:

Sigma (5) = Sigma (5-1) + 5

= Sigma (4) + 5

= Sigma (4-1) + 4 + 5

= Sigma (3) + 4 + 5

= Sigma (3-1) + 3 + 4 + 5

= Sigma (2) + 3 + 4 + 5

= Sigma (2-1) + 2 + 3 + 4 + 5

= Sigma (1) + 2 + 3 + 4 + 5

= 1 + 2 + 3 + 4 + 5

Algoritma dengan pseudocode:

Function Sigma (n)

if n=1 then hasil=1

else hasil=Sigma(n-1)+ n

endif

Sigma=hasil

endfunction

6.5 Latihan

Page 164: Bukualgo eBook Suwanto

164

1. Buatlah sebuah fungsi dengan metode rekursi

untuk menghitung nilai dari deret 125+25+5+1+...

dimana banyaknya suku adalah n buah suku.

2. Buatlah sebuah fungsi dengan metode rekursi

untuk menghitung nilai dari deret 6+11-

18+29+48-... dimana banyaknya suku adalah n

buah suku.

3. Buatlah sebuah fungsi dengan metode rekursi

untuk menghitung nilai dari deret -6+10+16-

26+44-... dimana banyaknya suku adalah n buah

suku.

4. Buatlah sebuah fungsi dengan metode rekursi

untuk menghitung nilai dari deret 100/24-

80/12+60/6-40/3+... dimana banyaknya suku

adalah n buah suku.

5. Buatlah sebuah fungsi dengan metode rekursi

untuk menghitung nilai dari deret 12/5-

15/20+18/80-21/320+... dimana banyaknya suku

adalah n buah suku.

6. Buatlah sebuah fungsi dengan metode rekursi

untuk menghitung nilai dari deret

100+125+150+175+... dimana banyaknya suku

adalah n buah suku.

Page 165: Bukualgo eBook Suwanto

165

7. Buatlah sebuah fungsi dengan metode rekursi

untuk menghitung nilai dari deret 2-6+18-54+...

dimana banyaknya suku adalah n buah suku.

8. Buatlah sebuah fungsi dengan metode rekursi

untuk menghitung nilai dari deret

4+12+36+108+... dimana banyaknya suku adalah

n buah suku.

Bab 7

Array

Page 166: Bukualgo eBook Suwanto

166

Tujuan pembelajaran umum:

1. memahami penggunaan array satu dimensi dalam

menyusun algoritma

2. memahami penggunaan array multidimensi

dalam menyusun algoritma

Perhatikan penggalan algoritma pertama berikut: for i=1 to 8 do

input (x)

endfor

for i=1 to 8 do

output (x)

endfor

Misalkan algoritma di atas dijalankan dengan runtunan

nilai x yang dibaca dari keyboard sebagai berikut: 10 20 30 40 50 60 70 80

maka keluaran dari algoritma tersebut adalah: 80

80

80

Page 167: Bukualgo eBook Suwanto

167

80

80

80

80

80

Mengapa 10, 20, 30, 40, 50, 60 dan 70 tidak tercetak?

Karena variabel x hanya dapat menampung satu buah

nilai dan nilai yang disimpan oleh x adalah nilai yang

terakhir kali dimasukkan (contoh disini adalah 80). Nilai

yang terakhir inilah yang dicetak ke piranti keluaran pada

setiap kali perulangan. Bandingkan dengan algoritma

berikut:

input (x1)

input (x2)

input (x3)

input (x4)

input (x5)

input (x6)

input (x7)

input (x8)

output (x1)

output (x2)

output (x3)

output (x4)

Page 168: Bukualgo eBook Suwanto

168

output (x5)

output (x6)

output (x7)

output (x8)

Algoritma kedua ini memerlukan 8 buah variabel (x1, x2,

x3, x4, x5, x6, x7, x8) untuk menyimpan nilai-nilai x.

Bagaimana kalau ada 1000 buah elemen x yang harus

disimpan? Apakah harus menggunakan 1000 buah

variabel? Jelas ini tidak praktis, selain itu akan ada 1000

buah perintah input dan output untuk membaca dan

menuliskan nilai-nilai x tersebut.

Variabel dengan tipe data tunggal hanya dapat digunakan

untuk menyimpan satu buah nilai saja. Untuk menyimpan

lebih dari satu nilai data sekaligus dalam sebuah variabel

dengan tipe data array. Sehingga pada kasus di atas

dengan menggunakan array akan menghemat penggunaan

nama-nama variabel yang banyak dan perintah input dan

output seluruh elemen array cukup ditulis satu kali di

struktur loop.

7.1 Array

Page 169: Bukualgo eBook Suwanto

169

Dalam beberapa literatur array sering diartikan larik.

Array merupakan koleksi data dengan setiap elemen data

menggunakan nama yang sama dan tiap elemen data

bertipe sama. Setiap elemen array dapat diakses melalui

indeks array.

Berdasarkan jumlah dimensi indeks dalam sebuah

variabel array dibedakan menjadi array berdimensi satu

dan array berdimensi banyak. Terdapat beberapa hal yang

perlu diperhatikan apabila akan memasukkan deretan data

dalam variabel array:

1.Mengetahui tipe data yang digunakan dalam variabel

array. Variabel array numerik hanya dapat menerima

data numeric dan variabel array string hanya dapat

menerima data karakter. String merupakan kumpulan

dari karakter, biasanya merupakan kumpulan dari

huruf dalam alphabet. String didefinisikan sebagai

kumpulan dari tipe data char yang diakhiri dengan null

character. Array merupakan kumpulan dari data yang

bertipe sama. String merupakan salah satu kasus

khusus dari array, string merupakan array dengan tipe

data char.

2.Banyaknya data harus lebih kecil atau sama dengan

besarnya ukuran array.

3.Instruksi perulangan digunakan untuk membaca deretan

Page 170: Bukualgo eBook Suwanto

170

data dalam suatu variabel indeks.

4.Banyaknya indeks yang digunakan menunjukkan

banyaknya ruang memori yang dialokasikan. Supaya

tidak terjadi pemborosan ruang memori maka

banyaknya indeks harus disesuaikan dengan

banyaknya data.

7.2 Contoh-Contoh Kasus Array

1.Konversi kata dalam huruf besar menjadi kata dalam

huruf kecil.

Jawab:

Algoritma dengan pseudocode:

input(besar)

n=len(besar)

for i=1 to n do

posisi=ord(besar[i])

kecil=chr(posisi+32)

output (kecil)

2.Konversi kata dalam huruf kecil menjadi kata dalam

Page 171: Bukualgo eBook Suwanto

171

huruf besar.

Jawab:

Algoritma dengan pseudocode:

input(kecil)

n=len(kecil)

for i=1 to n do

posisi=ord(kecil[i])

besar=chr(posisi-32)

output (besar)

3.Konversi sembarang penulisan kata

Jawab:

Algoritma dengan pseudocode:

input (kata)

n=len(kata)

for i=1 to n do

posisi=ord(kata[i])

if posisi>=65 and posisi<=90 then

kecil=chr(posisi+32)

output (kecil)

endif

else

Page 172: Bukualgo eBook Suwanto

172

besar=chr(posisi-32)

output (besar)

endif

endfor

4.Konversi karakter bilangan menjadi bilangan integer.

Jawab:

Algoritma dengan pseudocode:

input (bilkar)

n=len(bilkar)

for i=1 to n do

posisi=ord(bilkar[i])

bilint=posisi-48

output (bilint)

endfor

5.Jumlah dan rata-rata khusus untuk data-data positif dari

n buah data.

Jawab:

Algoritma dengan pseudocode: jumlah=0

cacah=0

Page 173: Bukualgo eBook Suwanto

173

for i=1 to n do

input (x)

if x>0 then

jumlah=jumlah+x

cacah=cacah+1

endif

endfor

rata=jumlah/cacah

output (rata)

6.Mencari data terbesar dan data terkecil beserta letaknya.

Jawab:

Algoritma dengan pseudocode: input (n)

max=A[1]

indexmax=1

min=A[1]

indexmin=1

for i=2 to n do

if A[i] > max then

max=A[i]

indexmax=i

endif

if A[i] < min then

min=A[i]

Page 174: Bukualgo eBook Suwanto

174

indexmin=i

endif

endfor

output (max,indexmax,min,indexmin)

7.Mencari data terkecil pertama dan terkecil kedua

beserta letaknya.

Jawab:

Algoritma dengan pseudocode: input (n)

if A[1] > A[2] then

min1=A[2]

imin1=2

min2=A[1]

imin2=1

else

min1=A[1]

imin1=1

min2=A[2]

imin2=2

endif

for i=3 to n do

if (A[i]>min1) and (A[i]<min2)

then

min2=A[i]

Page 175: Bukualgo eBook Suwanto

175

imin2=i+2

else

if (A[i]<min1) and (A[i]<min2)

then

temp=min1

min1=A[i]

imin1=i+3

min2=temp

imin2=i+2

endif

endif

endfor

output

(min1,indexmin1,min2,indexmin2)

8. Menghitung standar deviasi.

Jawab:

Algoritma dengan pseudocode:

input (n)

jumlah=0

JKR=0

for i=1 to n do

input (x[i])

jumlah=jumlah+x[i]

Page 176: Bukualgo eBook Suwanto

176

endfor

rata=jumlah/n

for i=1 to n do

KR=sqr(x[i]-rata)

JKR=JKR+KR

endfor

SD=sqrt(JKR/n)

output (SD)

7.3 Latihan

1. Buatlah algoritma untuk mencari bilangan prima

terbesar kedua dan bilangan prima terkecil kedua

disertai posisi atau letaknya dan berapa banyaknya

cacah untuk masing-masing bilangan prima

terbesar kedua dan bilangan prima terkecil kedua

dari n buah data.

2. Buatlah algoritma untuk menjumlahkan dua buah

matriks.

3. Buatlah algoritma untuk melakukan operasi

perkalian dua buah matriks.

4. Buatlah algoritma untuk menentukan matriks

transpose.

Page 177: Bukualgo eBook Suwanto

177

5. Buatlah algoritma untuk menghitung banyaknya

huruf kecil dan huruf besar dari sebuah kata yang

dimasukkan dari keyboard.

Bab 8

Sorting

Tujuan pembelajaran umum:

1. memahami algoritma selection sort

2. memahami algoritma buble sort

3. memahami algortima insertion sort

4. memahami algoritma merge sort

Pengurutan (sorting) diartikan sebagai proses penyusunan

kembali sekumpulan obyek ke dalam urutan tertentu.

Tujuan pengurutan untuk mendapatkan kemudahan dalam

pencarian anggota dari suatu himpunan disamping dapat

mempercepat mengetahui data terbesar dan data terkecil,

misalkan kita ingin mengetahui perolehan nilai tertinggi

dan nilai terendah dari hasil ujian. Contoh obyek

Page 178: Bukualgo eBook Suwanto

178

terurutkan seperti daftar isi, daftar pustaka dan lain-lain.

Proses yang terjadi pada pengurutan adalah sebagai

berikut:

1.Perbandingan data.

2.Pertukaran data.

Terdapat bermacam-macam metode pengurutan,

diantaranya adalah:

1.Selection sort.

2.Bubble sort.

3.Insertion sort.

4.Merge sort.

8.1 Metode Selection Sort 8.1.1 Pengurutan Naik (Ascending) Proses dari pengurutan dengan menggunakan metode

Selection Sort secara terurut naik adalah sebagai berikut:

1.Mencari data terkecil dari data pertama sampai dengan

data terakhir, kemudian ditukar posisinya dengan data

pertama.

2.Mencari data terkecil dari data kedua sampai dengan

data terakhir, kemudian ditukar posisinya dengan data

Page 179: Bukualgo eBook Suwanto

179

kedua.

3.Mencari data terkecil dari data ketiga sampai dengan

data terakhir, kemudian ditukar posisinya dengan data

ketiga.

4.dan seterusnya sampai semua data terurut naik. Apabila

terdapat n buah data yang akan diurutkan maka

membutuhkan (n-1) langkah pengurutan, dimana

data terakhir yaitu data ke-n tidak perlu diurutkan

karena hanya tinggal satu-satunya.

Contoh kasus:

Terdapat 8 buah data yang nilainya belum terurut:

44 55 12 42 94 18 6 67

Data-data di atas akan ditampilkan secara terurut naik

menggunakan metode Selection Sort. Proses

pengurutannya adalah sebagai berikut:

Proses 1

indexmin=1

Data ke-2 : A[indexmin] < A[2]

Data ke-3 : A[indexmin] > A[3]

indexmin=3

Data ke-4 : A[indexmin] < A[4]

Data ke-5 : A[indexmin] < A[5]

Page 180: Bukualgo eBook Suwanto

180

Data ke-6 : A[indexmin] < A[6]

Data ke-7 : A[indexmin] > A[7]

indexmin=7

Data ke-8 : A[indexmin] < A[8]

Karena A[1] <> A[indexmin] maka dilakukan pertukaran

nilai data ke-1 dan data ke-indexmin (data ke-7). Akhir

dari proses 1 adalah:

6 55 12 42 94 18 44 67

Kondisi data pada akhir proses pertama ini digunakan

sebagai masukan pada proses kedua.

Proses 2

indexmin=2

Data ke-3 : A[indexmin] > A[3]

indexmin=3

Data ke-4 : A[indexmin] < A[4]

Data ke-5 : A[indexmin] < A[5]

Data ke-6 : A[indexmin] < A[6]

Data ke-7 : A[indexmin] < A[7]

Data ke-8 : A[indexmin] > A[8]

Karena A[2] <> A[indexmin] maka dilakukan pertukaran

nilai data ke-2 dan data ke-indexmin (data ke-3). Akhir

Page 181: Bukualgo eBook Suwanto

181

dari proses 2 adalah:

6 12 55 42 94 18 44 67

Kondisi data pada akhir proses kedua ini digunakan

sebagai masukan pada proses ketiga.

Proses 3

indexmin=3

Data ke-4 : A[indexmin] > A[4]

indexmin=4

Data ke-5 : A[indexmin] < A[5]

Data ke-6 : A[indexmin] > A[6]

indexmin=6

Data ke-7 : A[indexmin] < A[7]

Data ke-8 : A[indexmin] < A[8]

Karena A[3] <> A[indexmin] maka dilakukan pertukaran

nilai data ke-3 dan data ke-indexmin (data ke-6). Akhir

dari proses 3 adalah:

6 12 18 42 94 55 44 67

Kondisi data pada akhir proses ketiga ini digunakan

sebagai masukan pada proses keempat.

Proses 4

indexmin=4

Page 182: Bukualgo eBook Suwanto

182

Data ke-5 : A[indexmin] < A[5]

Data ke-6 : A[indexmin] < A[6]

Data ke-7 : A[indexmin] < A[7]

Data ke-8 : A[indexmin] < A[8]

Karena A[4] = A[indexmin] maka tidak dilakukan

pertukaran nilai. Awal dan akhir dari proses 4 tidak

terjadi perubahan yaitu kondisi datanya tetap:

6 12 18 42 94 55 44 67

Kondisi data pada akhir proses keempat ini digunakan

sebagai masukan pada proses kelima.

Proses 5

indexmin=5

Data ke-6 : A[indexmin] > A[6]

indexmin=6

Data ke-7 : A[indexmin] > A[7]

indexmin=7

Data ke-8 : A[indexmin] < A[8]

Karena A[5] <> A[indexmin] maka dilakukan pertukaran

nilai data ke-5 dan data ke-indexmin (data ke-7). Akhir

dari proses 5 adalah:

6 12 18 42 44 55 94 67

Page 183: Bukualgo eBook Suwanto

183

Kondisi data pada akhir proses kelima ini digunakan

sebagai masukan pada proses keenam.

Proses 6

indexmin=6

Data ke-7 : A[indexmin] < A[7]

Data ke-8 : A[indexmin] < A[8]

Karena A[6] = A[indexmin] maka tidak dilakukan

pertukaran nilai. Awal dan akhir dari proses 6 tidak

terjadi perubahan yaitu kondisi datanya tetap:

6 12 18 42 44 55 94 67

Kondisi data pada akhir proses keenam ini digunakan

sebagai masukan pada proses ketujuh.

Proses 7

indexmin=7

Data ke-8 : A[indexmin] > A[8]

indexmin=8

Karena A[7] <> A[indexmin] maka dilakukan pertukaran

nilai data ke-7 dan data ke-indexmin (data ke-8). Akhir

dari proses 7 adalah:

6 12 18 42 44 55 67 94

Page 184: Bukualgo eBook Suwanto

184

Kondisi data pada akhir proses ketujuh ini merupakan

akhir dari pengurutan secara menaik.

Dengan asumsi sudah terdapat array A yang menyimpan

n buah elemen, algoritma Selection Sort disajikan dengan

metode pseudocode:

for i=1 to (n-1) do

indexmin=i

for j=i+1 to n do

if A[indexmin] > A[j] then

indexmin=j

endif

endfor

if A[i] <> A[indexmin] then

temp=A[i]

A[i]=A[indexmin]

A[indexmin]=temp

endif

endfor

8.1.2 Pengurutan Turun (Descending) Apabila akan mengurutkan menurun menggunakan

metode Selection Sort maka langkah-langkah sebagai

berikut:

Page 185: Bukualgo eBook Suwanto

185

1.Mencari data terbesar dari data pertama sampai dengan

data terakhir, kemudian ditukar posisinya dengan data

pertama.

2.Mencari data terbesar dari data kedua sampai dengan

data terakhir, kemudian ditukar posisinya dengan data

kedua.

3.Mencari data terbesar dari data ketiga sampai dengan

data terakhir, kemudian ditukar posisinya dengan data

ketiga.

4.dan seterusnya sampai semua data terurut turun.

Apabila terdapat n buah data yang akan diurutkan

maka membutuhkan (n-1) langkah pengurutan,

dimana data terakhir yaitu data ke-n tidak perlu

diurutkan karena hanya tinggal satu-satunya.

Contoh kasus:

Terdapat 8 buah data yang nilainya belum terurut:

44 55 12 42 94 18 6 67

Data-data di atas akan ditampilkan secara terurut turun

menggunakan metode Selection Sort. Proses

pengurutannya adalah sebagai berikut:

Proses 1

indexmax=1

Page 186: Bukualgo eBook Suwanto

186

Data ke-2 : A[indexmax] < A[2]

indexmax=2

Data ke-3 : A[indexmax] > A[3]

Data ke-4 : A[indexmax] > A[4]

Data ke-5 : A[indexmax] < A[5]

indexmax=5

Data ke-6 : A[indexmax] > A[6]

Data ke-7 : A[indexmax] > A[7]

Data ke-8 : A[indexmax] > A[8]

Karena A[1] <> A[indexmax] maka dilakukan pertukaran

nilai data ke-1 dan data ke-indexmax (data ke-5). Akhir

dari proses 1 adalah:

94 55 12 42 6 18 44 67

Kondisi data pada akhir proses pertama ini digunakan

sebagai masukan pada proses kedua.

Proses 2

indexmax=2

Data ke-3 : A[indexmax] > A[3]

Data ke-4 : A[indexmax] > A[4]

Data ke-5 : A[indexmax] > A[5]

Data ke-6 : A[indexmax] > A[6]

Data ke-7 : A[indexmax] > A[7]

Page 187: Bukualgo eBook Suwanto

187

Data ke-8 : A[indexmax] < A[8]

indexmax=8

Karena A[2] <> A[indexmax] maka dilakukan pertukaran

nilai data ke-2 dan data ke-indexmax (data ke-8). Akhir

dari proses 2 adalah:

94 67 12 42 6 18 44 55

Kondisi data pada akhir proses kedua ini digunakan

sebagai masukan pada proses ketiga.

Proses 3

indexmax=3

Data ke-4 : A[indexmax] < A[4]

indexmax=4

Data ke-5 : A[indexmax] > A[5]

Data ke-6 : A[indexmax] > A[6]

Data ke-7 : A[indexmax] > A[7]

Data ke-8 : A[indexmax] < A[8]

indexmax=8

Karena A[3] <> A[indexmax] maka dilakukan pertukaran

nilai data ke-3 dan data ke-indexmax (data ke-8). Akhir

dari proses 3 adalah:

94 67 55 42 6 18 44 12

Page 188: Bukualgo eBook Suwanto

188

Kondisi data pada akhir proses ketiga ini digunakan

sebagai masukan pada proses keempat.

Proses 4

indexmax=4

Data ke-5 : A[indexmax] > A[5]

Data ke-6 : A[indexmax] > A[6]

Data ke-7 : A[indexmax] < A[7]

indexmax=7

Data ke-8 : A[indexmax] > A[8]

Karena A[4] <> A[indexmax] maka dilakukan pertukaran

nilai data ke-4 dan data ke-indexmax (data ke-7). Akhir

dari proses 4 adalah:

94 67 55 44 6 18 42 12

Kondisi data pada akhir proses keempat ini digunakan

sebagai masukan pada proses kelima.

Proses 5

indexmax=5

Data ke-6 : A[indexmax] < A[6]

indexmax=6

Data ke-7 : A[indexmax] < A[7]

indexmax=7

Page 189: Bukualgo eBook Suwanto

189

Data ke-8 : A[indexmax] > A[8]

Karena A[5] <> A[indexmax] maka dilakukan pertukaran

nilai data ke-5 dan data ke-indexmax (data ke-7). Akhir

dari proses 4 adalah:

94 67 55 44 42 18 6 12

Kondisi data pada akhir proses kelima ini digunakan

sebagai masukan pada proses keenam.

Proses 6

indexmax=6

Data ke-7 : A[indexmax] > A[7]

Data ke-8 : A[indexmax] > A[8]

Karena A[6] = A[indexmax] maka tidak dilakukan

pertukaran nilai. Awal dan akhir dari proses 6 tidak

terjadi perubahan yaitu kondisi datanya tetap:

94 67 55 44 42 18 6 12

Kondisi data pada akhir proses keenam ini digunakan

sebagai masukan pada proses ketujuh.

Proses 7

indexmax=7

Page 190: Bukualgo eBook Suwanto

190

Data ke-8 : A[indexmax] < A[8]

indexmax=8

Karena A[7] <> A[indexmax] maka dilakukan pertukaran

nilai data ke-7 dan data ke-indexmin (data ke-8). Akhir

dari proses 7 adalah:

94 67 55 44 42 18 12 6

Kondisi data pada akhir proses ketujuh ini merupakan

akhir dari pengurutan secara menaik.

Algoritma Selection Sort apabila disajikan dengan

metode pseudocode berikut (diasumsikan sudah terdapat

array A yang menyimpan n buah elemen):

for i=1 to (n-1) do

indexmax=i

for j=i+1 to n do

if A[indexmax] < A[j] then

indexmax=j

endif

endfor

if A[i] <> A[indexmax] then

temp=A[i]

A[i]=A[indexmax]

A[indexmax]=temp

endif

Page 191: Bukualgo eBook Suwanto

191

endfor

8.2 Metode Bubble Sort Proses yang terjadi pada pengurutan dengan metode

Bubble Sort adalah selalu membandingkan dua data yang

berdekatan.

8.2.1 Pengurutan Naik (Ascending) Apabila data yang berada di sebelah kanannya bernilai

lebih kecil maka dipertukarkan sampai semua data terurut

sehingga memunculkan data terbesar di posisi paling

terakhir.

Contoh kasus:

Terdapat 6 buah data yang nilainya belum terurut:

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

Page 192: Bukualgo eBook Suwanto

192

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

Page 193: Bukualgo eBook Suwanto

193

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

Page 194: Bukualgo eBook Suwanto

194

menempatkan data terbesar kelima dan keenam pada

posisi ke-n-4 dan ke-n-5 (posisi ke-2 dan ke-1).

Penyajian pseudocode algoritma Bubble Sort (dengan

asumsi sudah terdapat array A yang menyimpan n buah

elemen):

for i=1 to (n-1) do

for j=1 to (n-i) do

if A[j] > A[j+1] then

temp=A[j]

A[j]=A[j+1]

A[j+1]=temp

endif

endfor

endfor

8.2.2 Pengurutan Turun (Descending) Kebalikan dari pengurutan yang menurun apabila data

yang berada di sebelah kanannya bernilai lebih besar

maka dipertukarkan sampai semua data terurut sehingga

memunculkan data terkecil di posisi paling terakhir.

Contoh kasus:

Terdapat 8 buah data yang nilainya belum terurut:

Page 195: Bukualgo eBook Suwanto

195

44 55 12 42 94 18 6 67

Data-data di atas akan ditampilkan secara terurut turun

menggunakan metode Bubble Sort. Proses pengurutannya

adalah sebagai berikut:

Proses 1

Data 1-2 : A[1] < A[2] → ditukar

55 44 12 42 94 18 6 67

Data 2-3 : A[2] > A[3]

Data 3-4 : A[3] < A[4] → ditukar

55 44 42 12 94 18 6 67

Data 4-5 : A[4] < A[5] → ditukar

55 44 42 94 12 18 6 67

Data 5-6 : A[5] < A[6] → ditukar

55 44 42 94 18 12 6 67

Data 6-7 : A[6] > A[7]

Data 7-8 : A[7] < A[8] → ditukar

55 44 42 94 18 12 67 6

Akhir dari proses pertama adalah menempatkan data

terkecil pertama pada posisi ke-n (posisi ke-8).

Proses 2

Data 1-2 : A[1] > A[2]

Page 196: Bukualgo eBook Suwanto

196

Data 2-3 : A[2] > A[3]

Data 3-4 : A[3] < A[4] → ditukar

55 44 94 42 18 12 67 6

Data 4-5 : A[4] > A[5]

Data 5-6 : A[5] > A[6]

Data 6-7 : A[6] < A[7] → ditukar

55 44 94 42 18 67 12 6

Akhir dari proses kedua adalah menempatkan data

terkecil kedua pada posisi ke-n-1 (posisi ke-7).

Proses 3

Data 1-2 : A[1] > A[2]

Data 2-3 : A[2] < A[3] → ditukar

55 94 44 42 18 67 12 6

Data 3-4 : A[3] > A[4]

Data 4-5 : A[4] > A[5]

Data 5-6 : A[5] < A[6] → ditukar

55 94 44 42 67 18 12 6

Akhir dari proses ketiga adalah menempatkan data

terkecil ketiga pada posisi ke-n-2 (posisi ke-6).

Proses 4

Page 197: Bukualgo eBook Suwanto

197

Data 1-2 : A[1] < A[2] → ditukar

94 55 44 42 67 18 12 6

Data 2-3 : A[2] > A[3]

Data 3-4 : A[3] > A[4]

Data 4-5 : A[4] < A[5] → ditukar

94 55 44 67 42 18 12 6

Akhir dari proses keempat adalah menempatkan data

terkecil keempat pada posisi ke-n-3 (posisi ke-5).

Proses 5

Data 1-2 : A[1] > A[2]

Data 2-3 : A[2] > A[3]

Data 3-4 : A[3] > A[4] → ditukar

94 55 67 44 42 18 12 6

Akhir dari proses kelima adalah menempatkan data

terkecil kelima pada posisi ke-n-4 (posisi ke-4).

Proses 6

Data 1-2 : A[1] > A[2]

Data 2-3 : A[2] < A[3] → ditukar

94 67 55 44 42 18 12 6

Page 198: Bukualgo eBook Suwanto

198

Akhir dari proses keenam adalah menempatkan data

terkecil keenam pada posisi ke-n-5 (posisi ke-3).

Proses 7

Data 1-2 : A[1] > A[2]

Akhir dari proses ketujuh adalah menempatkan data

terkecil ketujuh dan kedelapan pada posisi ke-n-6 dan ke-

n-7 (posisi ke-2 dan ke-1).

Penyajian pseudocode algoritma Bubble Sort

(diasumsikan sudah terdapat array A yang menyimpan n

buah elemen):

for i=1 to (n-1) do

for j=1 to (n-i) do

if A[j] < A[j+1] then

temp=A[j]

A[j]=A[j+1]

A[j+1]=temp

endif

endfor

endfor

8.3 Metode Insertion Sort Proses yang terjadi pada pengurutan dengan

Page 199: Bukualgo eBook Suwanto

199

menggunakan metode Insertion Sort adalah dimulai dari

data ke-2 kemudian disisipkan pada tempat yang sesuai.

Data pada posisi pertama diandaikan memang sudah pada

tempatnya.

8.3.1 Pengurutan Naik (Ascending) Mulai dari data ke-2 nilainya dibandingkan dengan data-

data sebelumnya kemudian mencari posisi yang tepat

untuk menyisipkan.

Contoh kasus:

Terdapat 6 buah data yang nilainya belum terurut:

8 5 15 12 7 2

Data-data di atas akan ditampilkan secara terurut naik

menggunakan metode Insertion Sort. Proses

pengurutannya adalah sebagai berikut:

Proses :

i=2

0=temp 1 2 3 4 5 6

5 8 5 15 12 7 2

Page 200: Bukualgo eBook Suwanto

200

j=2-1=1

A[1] > temp

A[2] ← A[1]

0=temp 1 2 3 4 5 6

5 8 8 15 12 7 2

j=1-1=0

A[0] = temp

A[1] ← temp

0=temp 1 2 3 4 5 6

5 5 8 15 12 7 2

i=3

0=temp 1 2 3 4 5 6

15 5 8 15 12 7 2

j=3-1=2

A[2] < temp

A[3] ← A[2]

Page 201: Bukualgo eBook Suwanto

201

i=4

0=temp 1 2 3 4 5 6

12 5 8 15 12 7 2

j=4-1=3

A[3] > temp

A[4] ← A[3]

0=temp 1 2 3 4 5 6

12 5 8 15 15 7 2

j=3-1=2

A[2] < temp

A[3] ← temp

0=temp 1 2 3 4 5 6

12 5 8 12 15 7 2

i=5

Page 202: Bukualgo eBook Suwanto

202

0=temp 1 2 3 4 5 6

7 5 8 12 15 7 2

j=5-1=4

A[4] > temp

A[5] ← A[4]

0=temp 1 2 3 4 5 6

7 5 8 12 15 15 2

j=4-1=3

A[3] > temp

A[4] ← A[3]

0=temp 1 2 3 4 5 6

7 5 8 12 12 15 2

j=3-1=2

A[2] > temp

A[3] ← A[2]

Page 203: Bukualgo eBook Suwanto

203

0=temp 1 2 3 4 5 6

7 5 8 8 12 15 2

j=2-1=1

A[1] < temp

A[2] ← temp

0=temp 1 2 3 4 5 6

7 5 7 8 12 15 2

i=6

j=6-1=5

A[5] > temp

A[6] ← A[5]

0=temp 1 2 3 4 5 6

2 5 7 8 12 15 15

j=5-1=4

A[5] > temp

A[5] ← A[4]

Page 204: Bukualgo eBook Suwanto

204

0=temp 1 2 3 4 5 6

2 5 7 8 12 12 15

j=4-1=3

A[3] > temp

A[4] ← A[3]

0=temp 1 2 3 4 5 6

2 5 7 8 8 12 15

j=3-1=2

A[2] > temp

A[3] ← A[2]

0=temp 1 2 3 4 5 6

2 5 7 7 8 12 15

j=2-1=1

A[1] > temp

A[2] ← A[1]

0=temp 1 2 3 4 5 6

2 5 5 7 8 12 15

j=1-1=0

Page 205: Bukualgo eBook Suwanto

205

A[0] = temp

A[1] ← temp

0=temp 1 2 3 4 5 6

2 2 5 7 8 12 15

Sebelumnya diasumsikan sudah terdapat array A yang

menyimpan n buah elemen, maka algoritma Insertion Sort

disajikan dengan pseudocode berikut:

for i=2 to n do

temp=A[i]

{ambil elemen A[i] agar nilainya tidak

dihilang karena tertimpa pergeseran}

A[0]=temp {sentinel}

j=i-1

{cari posisi yang tepat untuk A[i] di dalam

A[1..i-1] sambil menggeser}

while A[j]>temp do

A[j+1]=A[j] {pergeseran}

j=j-1

endwhile

A[j+1]=temp {menemukan tempat yang tepat}

endfor

8.3.2 Pengurutan Turun (Descending)

Page 206: Bukualgo eBook Suwanto

206

Proses akan dimulai dengan membandingkan data ke-2

dengan data-data sebelumnya kemudian mencari posisi

yang tepat untuk menyisipkan.

Contoh kasus:

Terdapat 6 buah data yang nilainya belum terurut:

8 5 15 12 7 2

Data-data di atas akan ditampilkan secara terurut turun

menggunakan metode Insertion Sort. Proses

pengurutannya adalah sebagai berikut:

Proses :

i=2

0=temp 1 2 3 4 5 6

5 8 5 15 12 7 2

j=2-1=1

A[1] > temp

A[2] ← temp

0=temp 1 2 3 4 5 6

5 8 5 15 12 7 2

Page 207: Bukualgo eBook Suwanto

207

i=3

0=temp 1 2 3 4 5 6

15 8 5 15 12 7 2

j=3-1=2

A[2] < temp

A[3] ← A[2]

0=temp 1 2 3 4 5 6

15 8 5 5 12 7 2

j=2-1=1

A[1] < temp

A[2] ← A[1]

0=temp 1 2 3 4 5 6

15 8 8 5 12 7 2

j=1-1=0

A[0] = temp

Page 208: Bukualgo eBook Suwanto

208

A[1] ← temp

0=temp 1 2 3 4 5 6

15 15 8 5 12 7 2

i=4

0=temp 1 2 3 4 5 6

12 15 8 5 12 7 2

j=4-1=3

A[3] < temp

A[4] ← A[3]

0=temp 1 2 3 4 5 6

12 15 8 5 5 7 2

j=3-1=2

A[2] < temp

A[3] ← A[2]

Page 209: Bukualgo eBook Suwanto

209

0=temp 1 2 3 4 5 6

12 15 8 8 5 7 2

j=2-1=1

A[2] > temp

A[2] ← temp

0=temp 1 2 3 4 5 6

12 15 12 8 5 7 2

i=5

j=5-1=4

A[4] < temp

A[5] ← A[4]

0=temp 1 2 3 4 5 6

7 15 12 8 5 5 2

j=4-1=3

A[3] > temp

A[4] ← temp

Page 210: Bukualgo eBook Suwanto

210

0=temp 1 2 3 4 5 6

7 15 12 8 7 5 2

i=6

j=6-1=5

A[5] > temp

A[6] ← temp

0=temp 1 2 3 4 5 6

2 15 12 8 7 5 2

Sebelumnya diasumsikan sudah terdapat array A yang

menyimpan n buah elemen, maka algoritma Insertion Sort

disajikan dengan pseudocode berikut:

for i=2 to n do

temp=A[i]

{ambil elemen A[i] agar nilainya tidak

dihilang karena tertimpa pergeseran}

A[0]=temp {sentinel}

j=i-1

{cari posisi yang tepat untuk A[i] di dalam

A[1..i-1] sambil menggeser}

while A[j]<temp do

A[j+1]=A[j] {pergeseran}

j=j-1

Page 211: Bukualgo eBook Suwanto

211

endwhile

A[j+1]=temp {menemukan tempat yang tepat}

endfor

Dari tiga metode pengurutan di atas, metode Selection

Sort mempunyai unjuk kerja yang lebih baik. Proses

pertukaran data pada setiap langkah hanya dilakukan satu

kali sehingga waktu pengurutan data dapat lebih cepat.

Metode Insertion Sort mempunyai kelemahan pada

jumlah pergeseran yang dilakukan untuk mencari posisi

yang tepat untuk meletakkan data. Pada setiap langkah

pengurutan, misalkan pada langkah ke-i maka proses

pergeseran yang dilakukan paling banyak adalah (i-1)

kali. Sehingga apabila akan mengurutkan data yang

tersimpan dalam array berukuran n, dimana nilai n adalah

besar maka banyaknya proses pergeseran akan meningkat

secara kuadratik. Oleh karena itu metode ini tidak efisien

digunakan seandainya datanya besar. Kelebihan dari

metode Bubble Sort adalah kesederhanannya sehingga

mudah untuk dipahami, tetapi pengurutan data

menggunakan metode Bubble Sort tidak efisien karena

banyaknya proses pertukaran data yang diperlukan pada

setiap langkah mencari data terkecil maupun data

terbesar. Untuk penggurutan array data berukuran besar

Page 212: Bukualgo eBook Suwanto

212

menggunakan metode ini akan membutuhkan waktu yang

relatif lebih lama.

8.4 Metode Merge Sort Metode Merge Sort adalah menggabungkan dua buah

array yang sudah terurut.

8.4.1 Pengurutan Naik (Ascending) 1.Dua buah array yang masing-masing terurut naik akan

digabungkan menjadi terurut naik.

Contoh kasus:

Array pertama : 5 8 12 15 20 25 29

Array kedua : 4 6 21 22

Proses penggabungan dua buah array di atas menjadi

sebuah array yang terurut naik adalah sebagai berikut:

1 2 3 4 5 6 7 a=1 s/d n

A = 5 8 12 15 20 25 29

1 2 3 4 b=1 s/d m

B = 4 6 21 22

Page 213: Bukualgo eBook Suwanto

213

C = c=1 s/d n+m

A[1] > B[1]

C[1] ← B[1]

C = 4

b=1+1=2

A[1] < B[2]

C[2] ← A[1]

C = 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]

Page 214: Bukualgo eBook Suwanto

214

C[5] ← A[3]

C = 4 5 6 8 12

a=3+1=4

A[4] < B[3]

C[6] ← A[4]

C = 4 5 6 8 12 15

a=4+1=5

A[5] < B[3]

C[7] ← A[5]

C = 4 5 6 8 12 15 20

a=5+1=6

A[6] > B[3]

C[8] ← B[3]

C = 4 5 6 8 12 15 20 21

b=3+1=4

A[6] > B[4]

C[9] ← B[4]

C = 4 5 6 8 12 15 20 21 22

b=4+1=5

Page 215: Bukualgo eBook Suwanto

215

Array kedua terdiri dari 4 elemen. Pada akhir proses ini

setelah indeks pada array kedua dinaikkan ternyata

indeksnya telah melampaui ukuran array kedua yang

sesungguhnya berarti semua elemen array kedua sudah

habis terlebih dahulu dan masuk ke dalam array

gabungan.

b>4 artinya b>m.

Elemen array pertama yang masih tersisa akan

dimasukkan ke dalam array gabungan satu persatu.

a=5+1=6

C[10] ← A[6]

C = 4 5 6 8 12 15 20 21 22 25

a=6+1=7

C[11] ← A[7]

C = 4 5 6 8 12 15 20 21 22 25 29

Algoritma dengan pseudocode untuk metode Merge Sort

(diasumsikan terdapat dua buah array yang masing-

masing menyimpan sekumpulan data dalam kondisi

terurut naik) :

Page 216: Bukualgo eBook Suwanto

216

a=1

b=1

c=1

while (a<=n) or (b<=m) do

if A[a]<B[b] then

C[c]=A[a]

a=a+1

else

C[c]=B[b]

b=b+1

endif

c=c+1

endwhile

if b>m then

for p=a to n do

C[c]=A[p]

c=c+1

endfor

endif

if a>n then

for p=b to m do

C[c]=B[p]

c=c+1

endfor

endif

Page 217: Bukualgo eBook Suwanto

217

2.Dua buah array yang masing-masing terurut turun akan

digabungkan menjadi terurut naik.

Contoh kasus:

Array pertama : 29 25 20 15 12 8 5

Array kedua : 22 21 6 4

Proses penggabungan dua buah array di atas menjadi

sebuah array yang terurut naik adalah sebagai berikut:

1 2 3 4 5 6 7 a=1 s/d n

A = 29 25 20 15 12 8 5

1 2 3 4 b=1 s/d m

B = 22 21 6 4

C = c=1 s/d n+m

A[7] > B[4]

C[1] ← B[4]

C = 4

b=4-1=3

Page 218: Bukualgo eBook Suwanto

218

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

Page 219: Bukualgo eBook Suwanto

219

A[3] < B[2]

C[7] ← A[3]

C = 4 5 6 8 12 15 20

a=3-1=2

A[2] > B[2]

C[8] ← B[2]

C = 4 5 6 8 12 15 20 21

b=2-1=1

A[2] > B[1]

C[9] ← B[1]

C = 4 5 6 8 12 15 20 21 22

b=1-1=0

Array kedua terdiri dari 4 elemen. Pada akhir proses ini

setelah indeks pada array kedua diturunkan ternyata

indeksnya menjadi sama dengan nol berarti semua

elemen array kedua sudah habis terlebih dahulu dan

masuk ke dalam array gabungan.

Elemen array pertama yang masih tersisa akan

dimasukkan ke dalam array gabungan satu persatu.

Page 220: Bukualgo eBook Suwanto

220

a=3-1=2

C[10] ← A[2]

C = 4 5 6 8 12 15 20 21 22 25

a=2-1=1

C[11] ← A[1]

C = 4 5 6 8 12 15 20 21 22 25 29

Dengan mengasumsikan terdapat dua buah array yang

masing-masing menyimpan sekumpulan data dalam

kondisi terurut turun, algoritma Merge Sort dapat

dituliskan dengan pseudocode berikut:

a=n

b=m

c=1

while (a>=1) or (b>=1) do

if A[a]<B[b] then

C[c]=A[a]

a=a-1

else

C[c]=B[b]

b=b-1

endif

Page 221: Bukualgo eBook Suwanto

221

c=c+1

endwhile

if b<1 then

for p=a downto 1 do

C[c]=A[p]

c=c+1

endfor

endif

if a<1 then

for p=b downto 1 do

C[c]=B[p]

c=c+1

endfor

endif

8.4.2 Pengurutan Turun (Descending) 1.Dua buah array yang masing-masing terurut naik akan

digabungkan menjadi terurut turun.

Contoh kasus:

Array pertama : 5 8 12 15 20 25 29

Array kedua : 4 6 21 22

Proses penggabungan dua buah array di atas menjadi

sebuah array yang terurut turun adalah sebagai berikut:

Page 222: Bukualgo eBook Suwanto

222

1 2 3 4 5 6 7 a=1 s/d n

A = 5 8 12 15 20 25 29

1 2 3 4 b=1 s/d m

B = 4 6 21 22

C = c=1 s/d n+m

A[7] > B[4]

C[1] ← A[7]

C = 29

a=7-1=6

A[6] > B[4]

C[2] ← A[6]

C = 29 25

a=6-1=5

A[5] < B[4]

C[3] ← B[4]

C = 29 25 22

b=4-1=3

Page 223: Bukualgo eBook Suwanto

223

A[5] < B[3]

C[4] ← B[3]

C = 29 25 22 21

b=3-1=2

A[5] > B[2]

C[5] ← A[5]

C = 29 25 22 21 20

a=5-1=4

A[4] > B[2]

C[6] ← A[4]

C = 29 25 22 21 20 15

a=4-1=3

A[3] > B[2]

C[7] ← A[3]

C = 29 25 22 21 20 15 12

a=3-1=2

A[2] > B[2]

C[8] ← A[2]

C = 29 25 22 21 20 15 12 8

Page 224: Bukualgo eBook Suwanto

224

a=2-1=1

A[1] < B[2]

C[9] ← B[2]

C = 29 25 22 21 20 15 12 8 6

b=2-1=1

A[1] > B[1]

C[10] ← A[1]

C = 29 25 22 21 20 15 12 8 6 5

a=1-1=0

Array pertama terdiri dari 7 elemen. Pada akhir proses ini

setelah indeks pada array pertama diturunkan ternyata

indeksnya menjadi sama dengan nol berarti semua

elemen array pertama sudah habis terlebih dahulu dan

masuk ke dalam array gabungan.

Elemen array kedua yang masih tersisa akan dimasukkan

ke dalam array gabungan.

b=2-1=1

C[11] ← B[1]

C = 29 25 22 21 20 15 12 8 6 5 4

Page 225: Bukualgo eBook Suwanto

225

Dengan mengasumsikan terdapat dua buah array yang

masing-masing menyimpan sekumpulan data dalam

kondisi terurut naik, algoritma Merge Sort dapat

dituliskan dengan pseudocode berikut:

a=n

b=m

c=1

while (a>=1) or (b>=1) do

if A[a]>B[b] then

C[c]=A[a]

a=a+1

else

C[c]=B[b]

b=b+1

endif

c=c+1

endwhile

if b<1 then

for p=a downto 1 do

C[k]=A[p]

c=c+1

endfor

endif

if a<1 then

for p=b downto 1 do

Page 226: Bukualgo eBook Suwanto

226

C[c]=B[p]

c=c+1

endfor

endif

2.Dua buah array yang masing-masing terurut turun akan

digabungkan menjadi terurut turun.

Contoh kasus:

Array pertama : 29 25 20 15 12 8 5

Array kedua : 22 21 6 4

Proses penggabungan dua buah array di atas menjadi

sebuah array yang terurut turun adalah sebagai berikut:

1 2 3 4 5 6 7 a=1 s/d n

A = 29 25 20 15 12 8 5

1 2 3 4 b=1 s/d m

B = 22 21 6 4

C = c=1 s/d n+m

A[1] > B[1]

Page 227: Bukualgo eBook Suwanto

227

C[1] ← A[1]

C = 29

a=1+1=2

A[2] > B[1]

C[2] ← A[2]

C = 29 25

a=2+1=3

A[3] < B[1]

C[3] ← B[1]

C = 29 25 22

b=1+1=2

A[3] < B[2]

C[4] ← B[2]

C = 29 25 22 21

b=2+1=3

A[3] > B[3]

C[5] ← A[3]

C = 29 25 22 21 20

a=3+1=4

Page 228: Bukualgo eBook Suwanto

228

A[4] > B[3]

C[6] ← A[4]

C = 29 25 22 21 20 15

a=4+1=5

A[5] > B[3]

C[7] ← A[5]

C = 29 25 22 21 20 15 12

a=5+1=6

A[6] > B[3]

C[8] ← A[6]

C = 29 25 22 21 20 15 12 8

a=6+1=7

A[7] < B[3]

C[9] ← B[3]

C = 29 25 22 21 20 15 12 8 6

b=3+1=4

A[7] > B[3]

C[9] ← A[7]

C = 29 25 22 21 20 15 12 8 6 5

a=7+1=8

Page 229: Bukualgo eBook Suwanto

229

Array pertama terdiri dari 7 elemen. Pada akhir proses ini

setelah indeks pada array pertama dinaikkan ternyata

indeksnya telah melampaui ukuran array pertama yang

sesungguhnya berarti semua elemen array pertama sudah

habis terlebih dahulu dan masuk ke dalam array

gabungan.

a>7 artinya a>n

Elemen array kedua yang masih tersisa akan dimasukkan

ke dalam array gabungan.

b=3+1=4

C[11] ← B[4]

C = 29 25 22 21 20 15 12 8 6 5 4

Dengan mengasumsikan terdapat dua buah array yang

masing-masing menyimpan sekumpulan data dalam

kondisi terurut turun, algoritma Merge Sort dapat

dituliskan dengan pseudocode berikut:

a=1

b=1

c=1

Page 230: Bukualgo eBook Suwanto

230

while (a<=n) or (b<=m) do

if A[a]>B[b] then

C[c]=A[a]

a=a+1

else

C[c]=B[b]

b=b+1

endif

c=c+1

endwhile

if b>m then

for p=a to n do

C[c]=A[p]

c=c+1

endfor

endif

if a>n then

for p=b to m do

C[c]=B[p]

c=c+1

endfor

endif

8.5 Latihan 1.Buatlah program untuk mengurutkan array yang terurut

Page 231: Bukualgo eBook Suwanto

231

naik menjadi terurut turun dan sebaliknya array yang

terurut turun menjadi terurut naik.

2.Buatlah program untuk mencari median dari n buah

data.

3.Buatlah program menggabungkan dua buah array.

Array pertama adalah satu yang telah terurut secara

menurun sedangkan array kedua adalah dua yang telah

terurut secara menaik menjadi array tiga yang terurut

secara menaik.

Misal:

satu : 55 43 37 23 19 13 7

dua : 3 9 13 22 39 41 47

tiga : 3 7 9 13 13 19 22 23 37 39 41

43 47 55

3.Diberikan sebuah matriks berukuran (n x m). Buatlah

program untuk mengurutkan elemen matriks tersebut.

Program yang dibuat harus dapat menawarkan kepada

pengguna apakah akan mengurutkan secara menaik

atau menurun.

Page 232: Bukualgo eBook Suwanto

232

Bab 9

Searching

Tujuan pembelajaran umum:

1. memahami algoritma dalam metode sequential

search

2. memahami algoritma dalam metode binary search

Dalam kehidupan sehari-hari kita sering melakukan

pencarian (searching) data dari sejumlah data yang ada

untuk menemukan informasi yang dibutuhkan. Dalam

bab ini akan dibahas metode pencarian data dalam suatu

array, baik pada array yang sudah terurut maupun belum

terurut. Metode pencarian yang akan digunakan adalah:

Page 233: Bukualgo eBook Suwanto

233

1.Sequential search

2.Binary search

9.1 Metode Sequential Search Metode Sequential Search atau disebut pencarian

beruntun dapat digunakan untuk melakukan pencarian

data baik pada array yang sudah terurut maupun yang

belum terurut. Proses yang terjadi pada metode pencarian

ini adalah sebagai berikut:

1.Membaca array data.

2.Menentukan data yang dicari.

3.Mulai dari data pertama sampai dengan data terakhir,

data yang dicari dibandingkan dengan masing-masing

data di dalam array.

a. Jika data yang dicari tidak ditemukan maka semua

data atau elemen array dibandingkan sampai selesai.

b. Jika data yang dicari ditemukan maka perbandingan

akan dihentikan.

9.1.1 Pencarian Pada Array Belum Terurut Contoh kasus:

Terdapat 6 buah data yang tersimpan dalam array.

Page 234: Bukualgo eBook Suwanto

234

8 7 5 6 10 4

a. Dilakukan pencarian apakah dalam array tersebut

terdapat data yang bernilai 5.

1 2 3 4 5 6 i = 1 s/d n

A = 8 7 5 6 10 4

x=5

ketemu ← false

i=1

A[1] <> x {ketemu ← false}

i=1+1=2

A[2] <> x {ketemu ← false}

i=2+1=3

A[3] = x {ketemu ← true}

Hasil dari pencarian data bernilai 5 ditemukan pada posisi

data ke-3.

b. Dilakukan pencarian apakah dalam array tersebut

Page 235: Bukualgo eBook Suwanto

235

terdapat data yang bernilai 11.

1 2 3 4 5 6 i = 1 s/d n

A = 8 7 5 6 10 4

x=11

ketemu ← false

i=1

A[1] <> x {ketemu ← false}

i=1+1=2

A[2] <> x {ketemu ← false}

i=2+1=3

A[3] <> x {ketemu ← false}

i=3+1=4

A[4] <> x {ketemu ← false}

i=4+1=5

A[5] <> x {ketemu ← false}

i=5+1=6

Page 236: Bukualgo eBook Suwanto

236

A[6] <> x {ketemu ← false}

i=6+1=7

i > 6 berarti i > n, semua data sudah diperbandingkan

dengan nilai data yang dicari dan hasil dari pencarian data

bernilai 11 tidak ditemukan.

Algoritma metode Sequential Search untuk data yang

belum terurut:

for i=1 to n do

input(A[i])

endfor

input(x)

ketemu=false {inisialisasi belum

ditemukan}

i=1

while (ketemu=false) and (i<=n) do

if A[i]=x then

ketemu=true {menghentikan proses

pencarian}

posisi=i

else i=i+1 {maju ke elemen

berikutnya}

Page 237: Bukualgo eBook Suwanto

237

endif

endwhile

if ketemu=false then write (“Tidak

ketemu”)

else

write (“Data ditemukan”)

output (posisi)

endif

9.1.2 Pencarian Pada Array Terurut 9.1.2.1 Pencarian Pada Array Terurut Naik

Contoh kasus:

Di dalam suatu array tersimpan 6 buah data yang terurut

naik.

2 7 11 15 17 18

Dilakukan pencarian apakah terdapat data bernilai 8 pada

array tersebut.

1 2 3 4 5 6 i = 1 s/d n

A = 2 7 11 15 17 18

Page 238: Bukualgo eBook Suwanto

238

x=8

ketemu ← false

i=1

A[1] <> x {ketemu ← false dan A[1] < x}

i=1+1=2

A[2] <> x {ketemu ← false dan A[2] < x }

i=2+1=3

A[3] <> x {ketemu ← false dan A[3] > x }

Pencarian hanya dilakukan dengan membandingkan nilai

data yang dicari dengan data ke-1 sampai dengan data ke-

3 pada array karena data ke-3 ternyata nilainya sudah

lebih besar daripada nilai data yang dicari, sehingga tidak

perlu dibandingkan dengan data berikutnya dalam array.

Kesimpulannya adalah data 11 tidak terdapat dalam array.

Sebelum dilakukan pencarian, pada algoritma di bawah

ini array diasumsikan sudah diurutkan menaik terlebih

dahulu .

input(x)

Page 239: Bukualgo eBook Suwanto

239

ketemu=false {inisialisasi belum

ditemukan}

i=1

while (ketemu=false)and(i<=n)and(A[i]<=x)

do

if A[i]=x then

ketemu=true {menghentikan proses

pencarian}

posisi=i

else i=i+1 {maju ke elemen berikutnya}

endif

endwhile

if ketemu=false then write (“Tidak

ketemu”)

else

write (“Data ditemukan”)

output (posisi)

endif

10.1.2.2 Pencarian Pada Array Terurut Turun

Contoh kasus:

Di dalam suatu array tersimpan 6 buah data yang terurut

turun.

18 17 15 11 7 2

Dilakukan pencarian apakah terdapat data bernilai 16

Page 240: Bukualgo eBook Suwanto

240

pada array tersebut.

1 2 3 4 5 6 i = 1 s/d n

A = 18 17 15 11 7 2

x=16

ketemu ← false

i=1

A[1] <> x {ketemu ← false dan A[1] > x}

i=1+1=2

A[2] <> x {ketemu ← false dan A[2] > x }

i=2+1=3

A[3] <> x {ketemu ← false dan A[3] < x }

Pencarian hanya dilakukan dengan membandingkan nilai

data yang dicari dengan data ke-1 sampai dengan data ke-

3 pada array karena data ke-3 ternyata nilainya sudah

lebih kecil daripada nilai data yang dicari, sehingga tidak

perlu dibandingkan dengan data berikutnya dalam array.

Kesimpulannya adalah data 16 tidak terdapat dalam array.

Page 241: Bukualgo eBook Suwanto

241

Sebelum dilakukan pencarian, pada algoritma di bawah

ini array diasumsikan sudah diurutkan menurun terlebih

dahulu.

input(x)

ketemu=false {inisialisasi belum

ditemukan}

i=1

while (ketemu=false) and (i<=n) and

(A[i]>=x) do

if A[i]=x then

ketemu=true {menghentikan proses

pencarian}

posisi=i

else i=i+1 {maju ke elemen berikutnya}

endif

endwhile

if ketemu=false then write (“Tidak

ketemu”)

else

write (“Data ditemukan”)

output (posisi)

endif

Page 242: Bukualgo eBook Suwanto

242

9.2 Metode Binary Search Metode Binary Search atau sering pula dinamakan

pencarian biner, hanya digunakan untuk pencarian data

pada array yang sudah terurut.

9.2.1 Pencarian Pada Array Terurut Naik Proses yang terjadi pada pencarian dengan metode ini

adalah sebagai berikut:

1.Membaca array data.

2.Apabila array belum terurut maka diurutkan dahulu.

3.Menentukan data yang akan dicari.

4.Menentukan elemen tengah dari array. Letak posisi

tengah dapat ditentukan dengan tengah=(n div

2)+1.

5.Jika nilai elemen tengah sama dengan data yang dicari

maka pencarian selesai.

6.Jika nilai elemen tengah tidak sama dengan data yang

dicari maka:

a. Jika nilai elemen tengah lebih besar daripada data

yang dicari maka pencarian dilakukan pada setengah

array pertama.

b. Jika nilai elemen tengah lebih kecil daripada data

yang dicari maka pencarian dilakukan pada setengah

Page 243: Bukualgo eBook Suwanto

243

array berikutnya.

Contoh menentukan elemen tengah:

1. Di dalam suatu array tersimpan 6 buah data yang

terurut naik.

1 2 3 4 5 6 i = 1 s/d n

A = 2 7 11 17 17 18

tengah=(n div 2)+1=(6 div 2)+1=4

elemen_tengah=A[tengah]=A[4]=17

Untuk array yang banyaknya data adalah genap maka

posisi tengahnya tidak tepat berada di tengah.

2. Di dalam suatu array tersimpan 7 buah data yang

terurut naik.

1 2 3 4 5 6 7 i = 1 s/d n

A = 5 7 8 11 12 14 15

tengah=(n div 2)+1=(7 div 2)+1=4

elemen_tengah=A[tengah]=A[4]=11

Untuk array yang banyaknya data adalah ganjil maka

Page 244: Bukualgo eBook Suwanto

244

posisi tengahnya dapat tepat berada di tengah.

Contoh kasus:

Di dalam suatu array tersimpan 6 buah data yang terurut

naik.

1 2 3 4 5 6 i = 1 s/d n

A = 2 7 11 17 17 18

Sebelum dilakukan pencarian, pada algoritma Binary

Search di bawah ini, array A diasumsikan sudah

diurutkan menaik terlebih dahulu.

input(x)

t=(n div 2)+1

et=A[t]

ketemu=false

if x=et then

ketemu=true

posisi=t

else

if x<et then

i=1

while

(ketemu=false)and(i<t)and(A[i]<=x) do

if A[i]=x then

Page 245: Bukualgo eBook Suwanto

245

ketemu=true

posisi=i

else i=i+1

endif

endwhile

else

i=t+1

while

(ketemu=false)and(i<=n)and(A[i]<=x) do

if A[i]=x then

ketemu=true

posisi=i

else i=i+1

endif

endwhile

endif

endif

if ketemu=false then write (“Data tidak

ketemu”)

else

write (“Data ditemukan”)

output (posisi)

endif

9.2.2 Pencarian Pada Array Terurut Turun Proses yang terjadi pada pencarian dengan metode ini

adalah sebagai berikut:

Page 246: Bukualgo eBook Suwanto

246

1. Membaca array data.

2. Apabila array belum terurut maka diurutkan dahulu.

3. Menentukan data yang akan dicari.

4. Menentukan elemen tengah dari array. Letak posisi

tengah dapat ditentukan dengan tengah=(n div

2)+1.

5. Jika nilai elemen tengah sama dengan data yang dicari

maka pencarian selesai.

6. Jika nilai elemen tengah tidak sama dengan data yang

dicari maka:

a. Jika nilai elemen tengah lebih besar daripada data

yang dicari maka pencarian dilakukan pada setengah

array kedua.

b. Jika nilai elemen tengah lebih kecil daripada data

yang dicari maka pencarian dilakukan pada setengah

array pertama.

Sebelum dilakukan pencarian, pada algoritma Binary

Search di bawah ini, array A diasumsikan sudah

diurutkan menurun terlebih dahulu.

input(x)

t=(n div 2)+1

et=A[t]

ketemu=false

Page 247: Bukualgo eBook Suwanto

247

if x=et then

ketemu=true

posisi=t

else

if x<et then

i=t+1

while (ketemu=false)and(i<n)and(A[i]>=x)

do

if A[i]=x then

ketemu=true

posisi=i

else i=i+1

endif

endwhile

else

i=1

while (ketemu=false)and(i<t)and(A[i]>=x)

do

if A[i]=x then

ketemu=true

posisi=i

else i=i+1

endif

endwhile

endif

endif

if ketemu=false then write (“Data tidak

ketemu”)

else

write (“Data ditemukan”)

output (posisi)

endif

Page 248: Bukualgo eBook Suwanto

248

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

Page 249: Bukualgo eBook Suwanto

249

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

Page 250: Bukualgo eBook Suwanto

250

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

Page 251: Bukualgo eBook Suwanto

251

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

Page 252: Bukualgo eBook Suwanto

252

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

Page 253: Bukualgo eBook Suwanto

253

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.

Page 254: Bukualgo eBook Suwanto

254