Professional Documents
Culture Documents
LOGIKA INFORMATIKA
TIFS 1604
3 SKS
Suwanto Raharjo,S.Si.,M.Kom
Teknik Informatika
Teknologi Industri
IST AKPRIND Yogyakarta
2
Kata Pengantar
3
contoh latihan diharapkan dapat membantu pembaca
untuk lebih memahami algoritma.
Pada kesempatan ini penulis menghaturkan
beribu-ribu terima kasih yang tak terkira kepada ALLAH
SWT yang telah memberikan Rahmat dan Hidayah-Nya
sehingga penulis mampu menyelesaikan buku ini. Penulis
juga mengucapkan banyak terima kasih kepada civitas
akademika IST AKPRIND Yogyakarta yang telah
berkenan menerbitkan buku ini, untuk istri tercinta Ema
Utami, S.Si, M.Kom atas ide-ide yang kreatifnya serta
untuk putra-putri tercinta Naufal Rasendriya Apta
Raharema dan Najwa Rashika Az-Zahra Raharema yang
telah memberikan semangat untuk selalu berkarya.
Akhir kata semoga buku ini dapat
memberikan manfaat dan menambah wawasan bagi
pembaca yang ingin mempelajari konsep logika
informatika. Saran dan kritik yang ditujukan untuk
membangun buku ini dengan lebih baik dapat ditujukan
ke alamat email wa2n@nrar.net.
Suwanto Raharjo,S.Si,M.Kom
4
5
Daftar Isi
Kata Pengantar
Daftar Gambar
Daftar Tabel
1 Logika Proposisional
1.1 Proposisi
1.2 Relasi Proposisional
1.3 Interpretasi
1.4 Sifat-Sifat Kalimat Logika
1.5 Kalimat Berkuantor
1.5.1 Ingkaran Kalimat Berkuantor
1.6 Pembuatan Kesimpulan Berdasarkan Implikasi
1.7 Latihan
2 Algoritma
2.1 Algoritma
2.2 Penyajian Algoritma
2.3 Tahap-Tahap Pemrograman
2.4 Struktur Algoritma
2.5 Latihan
6
3 Struktur Runtunan
3.1 Runtunan
3.2 Contoh-Contoh Kasus Runtunan
3.3 Latihan
4 Struktur Pemilihan
4.1 Instruksi IF
5.1.1 Instruksi IF Sederhana
5.1.1.1 Instruksi IF dengan Syarat Tunggal
5.1.1.2 Instruksi IF dengan Syarat Majemuk
5.1.2 Instruksi IF - ELSE
4.2 Contoh-Contoh Kasus IF dan IF – ELSE
4.3 Instruksi IF Bertingkat
4.4 Contoh-Contoh Kasus Instruksi IF Bertingkat
4.5 Instruksi SWITCH
4.6 Contoh-Contoh Kasus Instruksi SWITCH
4.7 Latihan
5 Struktur Perulangan
5.1 Instruksi FOR
5.2 Contoh-Contoh Kasus FOR
5.3 Instruksi WHILE – DO
5.4 Contoh-Contoh Kasus Instruksi WHILE - DO
5.5 Latihan
7
6 Subprogram
6.1 Subprogram
6.2 Contoh-Contoh Kasus Subprogram
6.3 Rekursi
6.4 Contoh-Contoh Kasus Rekursi
6.5 Latihan
7 Array
7.1 Array
7.2 Contoh-Contoh Kasus Array
7.3 Latihan
8 Sorting
8.1 Metode Selection Sort
8.1.1 Pengurutan Naik (Ascending)
8.1.2 Pengurutan Turun (Descending)
8.2 Metode Bubble Sort
8.2.1 Pengurutan Naik (Ascending)
8.2.2 Pengurutan Turun (Descending)
8.3 Metode Insertion Sort
8.3.1 Pengurutan Naik (Ascending)
8.3.2 Pengurutan Turun (Descending)
8.4 Metode Merge Sort
8
8.4.1 Pengurutan Naik (Ascending)
8.4.2 Pengurutan Turun (Descending)
8.5 Latihan
9 Searching
9.1 Metode Sequential Search
9.1.1 Pencarian Pada Array Belum Terurut
9.1.2 Pencarian Pada Array Terurut
10.1.2.1 Pencarian Pada Array Terurut Naik
10.1.2.2 Pencarian Pada Array Terurut Turun
9.2 Metode Binary Search
10.2.1 Pencarian Pada Array Terurut Naik
10.2.2 Pencarian Pada Array Terurut Turun
9.3 Latihan
Daftar Pustaka
Profil Penulis
9
Daftar Gambar
10
6.4 Ilustrasi Hitung Perkalian
6.5 Ilustrasi Hitung Perpangkatan
11
Daftar Tabel
12
Bab 1
Logika Proposisional
13
1.1 Proposisi
Proposisi atau pernyataan merupakan komponen
penyusun logika dasar yang dilambangkan dengan huruf
kecil (p, q, r, ...). Proposisi hanya dapat diiwakili oleh
kalimat deklaratif. Kalimat deklaratif adalah kalimat yang
mengandung nilai kebenaran yaitu dapat bernilai benar
atau salah tetapi tidak mungkin memiliki kedua nilai
tersebut.
Contoh:
p : 9 adalah bilangan ganjil.
q : 10 x 8 = 88
14
1.2 Relasi Proposisional
Untuk mengkombinasikan dua buah proposisi atau lebih
diperlukan connective atau penghubung.
15
~p : Tidak semua mahasiswa adalah pelajar
16
Proposisi pertama (p) disebut anteseden sedangkan
proposisi kedua (q) disebut konsekuen.
Contoh :
p : 2 adalah bilangan prima.
q:2>3
p•q : Jika 2 adalah bilangan prima maka 2 > 3.
1.3 Interpretasi
17
Interpretasi adalah pemberian nilai kebenaran (benar atau
salah) pada setiap simbol proposisi dari suatu kalimat
logika. Semantic Rules adalah suatu aturan yang
digunakan untuk menentukan truth value (nilai
kebenaran) dari suatu sentence. Untuk mempermudah
penyajiannya dibuatlah tabel kebenaran.
p not p
True False
False True
Tabel 1.1 Aturan NOT
p q p and q
18
True True True
True False False
False True False
False False False
Tabel 1.2 Aturan AND
p q p or q
True True True
True False True
False True True
False False False
Tabel 1.3 Aturan OR
a.Hukum Idempoten
pvp = p
p∧p = p
19
b.Hukum Komutatif
pvq = qvp
p∧q = q∧p
c.Hukum Assosiatif
pvq)v r = pv(qvr)
p∧q)∧r = p∧(q∧r)
d.Hukum Distributif
pv(q∧r) = (pvq) ∧ (pvr)
p∧(qvr) = (p∧q) v (p∧r)
e.Hukum Identitas
p v False = p
p ∧ True = p
p v True = True
p ∧ False = False
f.Hukum Komplemen
p v not p = True
p ∧ not p = False
not(not p)= p
g.Hukum De Morgan
Negasi dari konjungsi dan disjungsi:
20
~ (pvq) = ~p ∧ ~q
~ (p∧q) = ~p v ~q
p q if p then q
True True TRUE
True False False
False True True
False False True
Tabel 1.4 Aturan IF – THEN
21
5.Equivalence Rule (Aturan IF AND ONLY IF)
Jika penyusun proposisi mempunyai nilai yang sama
maka biimplikasi bernilai benar,
p q p if and only if q
True True True
True False False
False True False
False False True
Tabel 1.5 Aturan IF AND ONLY IF
p q r if p then q else r
True True True True
True True False True
True False True False
True False False False
False True True True
False True False False
False False True True
False False False False
22
Tabel 1.6 Aturan IF-THEN-ELSE
2.Satisfiable
Suatu sentence f disebut satisfiable, jika untuk suatu
interpretation I for f maka f true.
Contoh:
a. if (if p then q) then q
b. (if p then q) or (r and s)
c. (if p then q) or r
23
3.Kontradiksi
Suatu sentence f disebut kontradiksi, jika untuk setiap
interpretation I for f maka f false.
Contoh:
a. p and not p
b. ((p or q) and not r) if and only if
((if p then r) and (if q then r)
24
2.Existential Quantifier (for some ...)
Kuantor eksistensial mempunyai makna khusus atau
sebagian. Notasi yang digunakan adalah ∃ yang dibaca
terdapat, ada, atau beberapa. Penulisannya ∃y ∈S →
q(y), dibaca terdapat y dalam semesta S mempunyai
sifat q.
Contoh:
Beberapa mahasiswa yang menempuh mata kuliah
Logika dan Algoritma mendapat nilai A.
25
~((∃y) q(y)) = (∀y) (~q(y))
Contoh:
q : Ada pejabat yang korupsi.
~p : Semua pejabat tidak korupsi.
Contoh:
Jika seseorang itu adalah mahasiswa maka ia pasti
pandai
Naufal adalah seorang mahasiswa
Naufal pasti pandai
2. Modus Tollens
p→q
~q
~p
26
Contoh:
Jika seseorang itu adalah pejabat yang baik maka
ia pasti tidak korupsi
Bapak X korupsi
Bapak X bukan pejabat yang baik
3.Prinsip Syllogisme
p→q
q→r
p→r
Contoh:
Jika ia rajin maka ia pasti pandai
Jika ia pandai maka ia pasti sukses
Jika ia rajin maka ia pasti sukses
1.7Latihan
27
kemungkinan nilai kebenaran ?
3.Tentukan nilai kebenaran dari kalimat logika berikut
menggunakan tabel kebenaran:
28
5.Diketahui suatu kalimat logika sebagai berikut :
if(p and q) then (if r then s) if
and only if if p then (q or not r
or s)
a. Tentukan nilai kebenaran kalimat tersebut jika
p=true, q=false, r=true, s=true.
b. Tentukan suatu interpretasi sedemikian kalimat
tersebut bernilai false.
29
a. if ((if q then not p) or not q) then
(p if and only if q) else not r
b. if (if p then (if q then r)) then
(if(if p then q) else (if p then
r))
30
r))
d. (if ((p and q) or (p and r)) then
s) if and only if (not p or (not q
and not r) or s)
31
((if p then r) and (if q then r))
32
Bab 2
Algoritma
33
Masalah --------------> Algoritma --------------> Penyelesaian
Pemecahan Masalah Tahap Implementasi
(Fase Problem Solving) (Fase Implementasi)
2.1 Algoritma
Algoritma merupakan urutan atau deskripsi langkah-
langkah penyelesaian masalah yang tersusun secara logis,
ditulis dengan notasi yang mudah dimengerti sedemikian
hingga langkah-langkah tersebut dapat dilaksanakan oleh
pemroses. Algoritma mencerminkan cara berpikir
pemrogram dalam menyelesaikan masalah dalam hal ini
konsep logika menyelesaikan suatu masalah, sedangkan
program merupakan realisasi algoritma dalam bahasa
pemrograman, dengan kata lain program adalah
implementasi algoritma dalam bahasa pemrograman
34
tertentu. Dengan membuat algoritma akan
mempermudah pemrogram dalam mengkonversikan suatu
permasalahan ke dalam bahasa pemrograman karena
dalam algoritma tersebut telah tertuang langkah-langkah,
konsep-konsep maupun dasar dalam scripting program
yang akan dibuat. Algoritma yang ditulis merupakan
sketsa program atau desain pemecahan masalah yang
akan direalisasikan menjadi suatu program. Jika
algoritmanya benar dan dapat dipertanggungjawabkan
maka sudah pasti scripting program tersebut dalam
operasi logikanya juga benar.
35
diperhatikan:
1.Teks algoritma berisi deskripsi langkah-langkah
penyelesaian masalah. Deskripsi tersebut dapat ditulis
dalam notasi apapun asalkan mudah dimengerti dan
dipahami.
2.Tidak ada notasi yang baku dalam penulisan teks
algoritma seperti pada notasi bahasa pemrograman.
Notasi yang digunakan dalam menulis algoritma
disebut notasi algoritmik.
3.Tiap orang dapat membuat aturan penulisan dan notasi
algoritmik sendiri. Hal ini karena teks algoritma tidak
sama dengan teks program. Namun supaya notasi
algoritmik mudah ditranslasikan ke dalam notasi
bahasa pemrograman tertentu, maka sebaiknya notasi
algoritmik tersebut berkorespondensi dengan notasi
bahasa pemrograman secara umum.
4.Notasi algoritmik bukan notasi bahasa pemrograman,
karena itu pseudocode dalam notasi algoritmik tidak
dapat dijalankan oleh komputer. Agar dapat dijalankan
oleh komputer, pseudocode dalam notasi algoritmik
harus ditranslasikan atau diterjemahkan ke dalam
notasi bahasa pemrograman yang dipilih. Perlu diingat
bahwa orang yang menulis program sangat terikat
dalam aturan tata bahasanya dan spesifikasi mesin
36
yang menjalankannya.
5.Algoritma sebenarnya digunakan untuk membantu kita
dalam mengkonversikan suatu permasalahan ke dalam
bahasa pemrograman.
6.Algoritma merupakan hasil pemikiran konseptual,
supaya dapat dilaksanakan oleh komputer, algoritma
harus ditranslasi ke dalam notasi bahasa
pemrograman. Ada beberapa hal yang harus
diperhatikan ketika translasi tersebut yaitu:
a)Pendeklarasian variabel.
Apakah bahasa pemrograman yang akan digunakan
membutuhkan pendeklarasian variabel karena tidak
semua bahasa pemrograman membutuhkannya.
b)Pemilihan tipe data.
Apabila bahasa pemrograman yang akan digunakan
membutuhkan pendeklarasian variabel maka perlu
dipertimbangkan pada saat pemilihan tipe data.
c)Pemakaian instruksi-instruksi.
Beberapa instruksi mempunyai kegunaan yang
sama tetapi masing-masing memiliki kelebihan dan
kekurangan yang berbeda.
d)Aturan sintaks.
Pada saat menulis program kita terikat dengan
37
aturan sintaks dari bahasa pemrograman yang akan
digunakan.
e)Tampilan hasil.
Pada saat membuat algoritma kita tidak
memikirkan tampilan hasil yang akan disajikan.
Hal-hal teknis ini kita perhatikan ketika
mengkonversikannya menjadi program.
f)Cara pengopersian compiler atau interpreter.
Bahasa pemrograman yang digunakan termasuk
kelompok compiler atau interpreter.
38
dalam menyatakan sintaks, tipe data yang digunakan dan
lain-lain. Sedangkan algoritma yang disajikan dengan
gambar, misalnya dengan flowchart. Flowchart bukan
satu-satunya cara untuk menjelaskan atau menerangkan
algoritma. Cara yang lain diantaranya :
1.Structure chart
2.DFD (Data Flow Diagram)
3.Warnier diagram
4.IPO (Input Process Output)
5.HIPO (Hierarchical Input Process Output)
Flowchart (bagan alir) merupakan representasi secara
grafik dari suatu algoritma atau prosedur untuk
menyelesaikan suatu masalah. Dengan menggunakan
flowchart akan memudahkan kita untuk melakukan
pengecekan apakah ada bagian-bagian yang terlupakan
dalam analisis masalah. Di samping itu flowchart juga
berguna sebagai fasilitas untuk berkomunikasi antara
pemrogram yang bekerja dalam tim suatu proyek.
Flowchart ada dua macam :
1.Flowchart Sistem
Yaitu diagram alir yang menggambarkan suatu sistem
peralatan komputer yang digunakan dalam proses
pengolahan data dan hubungan antar peralatan
39
tersebut. Flowchart sistem digunakan untuk
menggambarkan urutan langkah untuk memecahkan
masalah tetapi hanya untuk menggambarkan prosedur
dalam sistem yang dibentuk.
Simbol yang digunakan :
Contoh :
40
2. Flowchart program
Yaitu bagan yang menggambarkan urutan logika dari
suatu prosedur pemecahan masalah.
Simbol yang digunakan adalah American National
Standard Inc.:
41
: (terminal symbol), menunjukkan awal dan
akhir dari program
: (preparation symbol), memberikan niai
awal pada suatu variabel atau counter
: (processing symbol), menunjukkan
pengolahan aritmatika dan pemindahan data
: (input/output symbol), menunjukkan proses
input atau output
: (decision symbol), untuk mewakili operasi
perbandingan logika
: (predefined process symbol), proses yang
ditulis sebagai sub program, yaitu
prosedur/ fungsi
: (connector symbol), penghubung pada
halaman yang sama
: (off page connector symbol), penghubung
pada halaman yang berbeda
: arah proses
Contoh kasus :
1.Menghitung rata-rata tiga buah data
42
- Baca bilangan a, b, dan c
- Jumlahkan ketiga bilangan tersebut
- Bagi jumlah tersebut dengan 3
- Tulis hasilnya
Start
Input (a,b,c)
Jml = a+b+c
Rerata = Jml/3
Output (Rerata)
End
43
2.Algoritma mencetak tiket parkir.
Penyelesaian menggunakan flowchart:
Start
Cetak Tiket
(memuat data-data tentang waktu masuk,
waktu keluar, jenis kendaraan dan biaya)
End
44
Gambar 2.2 Flowchart Cetak Tiket Parkir
2.3Tahap-Tahap Pemrograman
Sebelumnya perlu dipahami tiga
pengertian pokok yakni program, bahasa pemrograman
dan pemrograman. Program adalah kata, ekspresi,
pernyataan yang disusun dan dirangkai menjadi satu
kesatuan prosedur yang berupa urutan langkah untuk
menyelesaikan masalah yang diimplementasikan dengan
menggunakan bahasa pemrograman sehingga dapat
dieksekusi oleh komputer. Bahasa pemrograman adalah
prosedur atau tata cara penulisan program. Sedangkan
pemrograman adalah proses mengimplementasikan
urutan langkah untuk menyelesaikan suatu masalah
dengan menggunakan suatu bahasa pemrograman.
45
Pemrograman meliputi dua tahapan yaitu:
1.Fase Problem Solving
2.Fase Implementation
Pembuatan
Analisa Problem
Program
Test
Perancangan
Algoritma
Dokumentasi
Test
Dipakai
Fase I Fase II
Fase Problem Solving Fase Implementasi
46
adalah sebagai berikut:
1.Memahami atau menganalisis masalah
Hal-hal yang harus diketahui dalam analisis masalah
supaya kita mengetahui bagaimana permasalahan
tersebut:
Contoh kasus 1:
Menghitung biaya percakapan telepon di wartel.
a)Input yang tersedia adalah jam mulai bicara dan jam
selesai bicara.
b)Output yang diinginkan adalah biaya percakapan.
c)Data lain yang tersedia adalah besarnya pulsa yang
digunakan dan biaya per pulsa.
d)Operator yang tersedia adalah pengurangan (-),
penambahan (+) dan perkalian (*).
e)Syarat kendala yang harus dipenuhi adalah aturan
jarak dan aturan waktu.
47
Contoh kasus 2:
Menghitung luas dan keliling lingkaran.
a)Input yang tersedia adalah jari-jari lingkaran.
b)Output yang diinginkan adalah luas dan keliling
lingkaran.
c)Data lain yang tersedia adalah nilai phi (3.14).
d)Operator yang tersedia adalah perkalian (*).
e)Syarat kendala yang harus dipenuhi tidak ada.
Contoh kasus:
48
Algoritma menghitung lama percakapan di wartel.
A1 : Baca jam mulai (jm:mm:dm)
A2 : Baca jam selesai (js:ms:ds)
A3 : Hitung selisih (jm:mm:dm) dengan (js:ms:ds)
js-jm : ms-mm : ds-dm
A4 : Tulis hasil.
49
ms<mm dan ds<dm. Solusinya semua jam dihitung
total detiknya, total detik jam selesai bicara
dikurangkan total detik jam mulai bicara kemudian
dikonversikan kembali dalam format jam : menit :
detik.
50
Masalah baru akan muncul apabila :
jam mulai bicara = 23:58:30
jam selesai bicara = 01:04:12
51
jb = totdetbicara div 3600
sisa = totdetbicara mod 3600
mb = sisa div 60
db = sisa mod 60
A4 : Tulis hasil (jb:mb:db).
52
dikerjakan oleh pemroses yang akan
menjalankannya.
Contoh: Hitung akar 2 dengan presisi sempurna.
Instruksi di atas tidak efektif, agar efektif instruksi
tersebut diubah. Misal: Hitung akar 2 sampai lima
digit di belakang koma.
d)Harus terminate
Jalannya algoritma harus ada kriteria berhenti.
Pertanyaannya adalah apakah apabila jumlah
instruksinya berhingga maka pasti terminate?
e)Output yang dihasilkan tepat
Jika langkah-langkah algoritmanya logis dan
diikuti dengan seksama maka dihasilkan output
yang diinginkan.
3.Menulis program
Algoritma yang telah dibuat diterjemahkan dalam
bahasa komputer menjadi sebuah program. Perlu
diperhatikan bahwa pemilihan algoritma yang salah
akan menyebabkan program memiki unjuk kerja yang
kurang baik. Program yang baik memiliki standar
penilaian :
a. Standar teknik pemecahan masalah
53
a.Teknik Top-Down
Teknik pemecahan masalah yang paling
umum digunakan. Prinsipnya adalah suatu
masalah yang kompleks dibagi-bagi ke
dalam beberapa kelompok masalah yang
lebih kecil. Dari masalah yang kecil
tersebut dilakukan analisis. Jika
dimungkinkan maka masalah tersebut
akan dipilah lagi menjadi subbagian-
subbagian dan setelah itu mulai disusun
langkah-langkah untuk penyelesaiannya
secara lebih detail.
b.Teknik Bottom-Up
Prinsip teknik bottom up adalah
pemecahan masalah yang kompleks
dilakukan dengan menggabungkan
prosedur-prosedur yang ada menjadi satu
kesatuan program sebagai penyelesaian
masalah tersebut.
54
d.Ekspresi penggunaan memori
e.Kemudahan merawat dan mengembangkan
program
f.User friendly
g.Portability
h.Pemrograman modular
c. Standar perawatan program
a.Dokumentasi
b.Penulisan instruksi
d. Standar prosedur
4.Uji hasil
Pertama kali harus diuji apakah program dapat
dijalankan. Apabila program tidak dapat dijalankan
maka perlu diperbaiki penulisan sintaksnya tetapi bila
program dapat dijalankan maka harus diuji dengan
menggunakan data-data yang biasa yaitu data yang
diharapkan oleh sistem yang dibuat maupun data-data
yang ekstrem yaitu data yang tidak diharapkan oleh
sistem. Contoh data ekstrem misalnya program
menghendaki masukan jumlah data tetapi user
mengisikan dengan bilangan negatif. Program
sebaiknya diuji menggunakan data yang relatif
banyak.
55
Contoh kasus:
Menghitung luas persegi panjang.
a)Baca panjang dan lebar (P,L)
b)Hitung luas (Luas = P + L)
c)Cetak hasil
5.Membuat dokumentasi
Dokumentasi program ada dua macam yaitu
dokumentasi internal dan dokumentasi eksternal.
Dokumentasi internal adalah dokumentasi yang dibuat
di dalam program yakni setiap kita menuliskan baris
program sebaiknya kita beri komentar atau keterangan
supaya mempermudah kita untuk mengingat logika
yang terdapat dalam instruksi tersebut, hal ini sangat
56
bermanfaat ketika suatu saat program tersebut akan
dikembangkan. Dokumentasi eksternal adalah
dokumentasi program yang dilakukan dari luar
program yaitu membuat user guide atau tbuku
petunjuk aturan atau cara menjalankan program
tersebut.
6.Program dipakai
2.Struktur Pemilihan
Digunakan untuk program yang menggunakan
pemilihan atau penyeleksian kondisi.
57
3.Struktur Perulangan
Digunakan untuk program yang instruksinya akan
dieksekusi berulang-ulang.
2.5 Latihan
58
Bab 3
Struktur Runtunan
3.1 Runtunan
Suatu masalah yang diselesaikan menggunakan struktur
runtunan mempunyai logika bahwa setiap instruksi akan
dikerjakan satu persatu. Setiap instruksi dilaksanakan
tepat satu kali, tidak ada instruksi yang diulang maupun
tidak dilaksanakan. Urutan instruksi yang dilaksanakan
pemroses sama dengan urutan aksi sebagaimana yang
tertulis di dalam teks algoritmanya. Akhir dari instruksi
terakhir merupakan akhir algoritma. Bila runtunan
instruksi dalam algoritma berturut-turut dilambangkan
dengan A1, A2, A3, A4, dan A5, maka pelaksanaan
instruksi tersebut adalah :
59
Gambar 3.1 Flowchart Runtunan
Perhatikan runtunan instruksi yang dilambangkan dengan
A1, A2, A3, A4 dan A5. Mula-mula pemroses
melaksanakan instruksi A1. Instruksi A2 dilaksanakan
setelah instruksi A1 selesai. Selanjutnya instruksi A3
dilaksanakan setelah instruksi A2 selesai, dan seterusnya
sampai terakhir instruksi A5 dilaksanakan. Setelah
instruksi A5 selesai dilaksanakan, algoritma berhenti.
Urutan penulisan instruksi di dalam algoritma penting
sekali diperhatikan karena urutan instruksi yang berbeda
dalam struktur runtunan dapat menghasilkan keluaran
yang berbeda juga. Urutan langkah di dalam struktur
runtunan mencerminkan cara berpikir penyusun algoritma
60
tersebut dalam menuliskan langkah-langkah penyelesaian
masalah. Output dari aksi sebelumnya menjadi input bagi
aksi berikutnya. Sebagai contoh perhatikan dua algoritma
berikut :
Algoritma pertama
A = 10
2
A = A +2
B = A – 5
C = A + B + 3
C = C + 5
Output (A,B,C)
Algoritma kedua
A = 10
B = A – 5
A = A2+2
C = A + B + 3
C = C + 5
Output (A,B,C)
61
Algoritma pertama menghasilkan keluaran:
A = 102
B = 5
C = 115
62
Gambar 3.2 Flowchart Hitung Luas Persegi Panjang
63
Jawab :
a. Algoritma dengan struktur bahasa Indonesia
- Tentukan nilai phi sama dengan 3.14
- Masukkan jari-jari lingkaran
- Kalikan phi dengan kuadrat dari jari-jarinya dan
simpan hasilnya sebagai luas.
- Kalikan phi dengan dua kali jari-jarinya dan
simpan hasilnya sebagai keliling.
- Tulis hasilnya
Start
phi = 3.14
64
Input ( R )
Gambar 3.3 Flowchart Hitung Luas dan Keliling
Lingkaran
Jawab :
a. Algoritma dengan struktur bahasa Indonesia
65
- Tulis hasilnya (J, M, D)
66
Gambar 3.4 Flowchart Konversi Detik
67
output (Dtot)
Jawab :
Algoritma dengan pseudocode
input(alas,tinggi)
sisimiring= sqrt(alas*alas
+tinggi*tinggi)
keliling = alas + tinggi + sisimiring
output(sisimiring,keliling)
68
Sebelum Pertukaran
Bilangan pertama = 14
Bilangan kedua = 32
Setelah Pertukaran
Bilangan pertama = 32
Bilangan kedua = 32
input (A,B)
temp = A
A = B
B = temp
69
output (A,B)
14 14 32 temp=A
A temp B
32 14 32 A=B
A temp B
32 14 14 B=temp
A temp B
70
Ilustrasi setelah pertukaran
32 14 14
A temp B
Jawab :
71
alfabet ('A' .. 'Z', 'a' .. 'z'), angka bulat ('0' .. '9'),
operator aritmatika ('+', '-', '*', '/'), tanda baca ('.', ';', ',',
'?', '!', ':' dan lain-lain) serta karakter-karakter khusus
('@', '#', '$', ' ', '%', dan lain-lain). Untuk mengetahui
posisi atau urutan suatu karakter yang ada dalam tabel
ASCII digunakan fungsi ordinal. Fungsi ini mencari
angka urutan dalam tabel ASCII yang digunakan untuk
melambangkan karakter tersebut. Fungsi ini tidak
dapat berdiri sendiri instruksinya, berarti
penggunaannya antara lain ditampung nilainya dalam
suatu variabel atau dilibatkan dalam instruksi lain
misalnya assignment, langsung dicetak atau
dimasukkan dalam ekspresi aritmatika. Bentuk umum
fungsi ordinal yaitu :
variabel=ord(argumen)
72
sebelumnya (predecessor) dan nilai sesudahnya
(sucessor) dapat diketahui. Untuk mengetahui karakter
pada urutan tertentu dalam tabel ASCII digunakan
fungsi karakter dengan bentuk umum :
variabel=chr(argumen)
Misal :
huruf_kecil = a
posisi_hurufkecil = ord ('a') = 97
posisi_hurufbesar = 97 – 32 = 65
huruf_besar = chr (65) = A
Jawab :
73
Logikanya sama dengan contoh soal 9.
Misal :
huruf_besar = A
posisi_hurufbesar = ord ('A') = 65
posisi_hurufkecil = 65 + 32 = 97
huruf_kecil = chr (97) = a
Jawab :
74
Algoritma dengan pseudocode
input (bil_karakter)
posisi_bilkarakter=ord(bil_karakter)
bil_bulat=posisi_bilkarakter–48
output (bil_bulat)
Misal :
bil_karakter = 1
posisi_bilkarakter = ord ('1') = 49
bil_bulat = 49 – 48 = 1
bil_bulat = 1
3.3 Latihan
75
Bab 4
Struktur Pemilihan
76
dikerjakan jika kondisinya memenuhi syarat. Struktur
pemilihan adalah struktur algoritma yang melakukan
proses pengujian untuk mengambil suatu keputusan atau
tindakan apakah suatu baris instruksi atau blok instruksi
akan diproses atau tidak. Contoh : Jika suatu bilangan
tidak habis dibagi 2 maka bilangan tersebut adalah
bilangan ganjil. Disini keputusan untuk menyatakan suatu
bilangan adalah ganjil berdasarkan kondisi jika bilangan
tersebut tidak habis dibagi 2.
4.1 Instruksi IF
Secara umum flowchartnya, sebagai berikut:
77
Gambar 4.1 Flowchart Instruksi IF
78
atau
pernyataan_A
if <kondisi> then
<pernyataan1>
<pernyataan2>
...
<pernyataann>
endif
pernyataan_B
79
Contoh :
1.Untuk menyatakan apakah mahasiswa dapat mengikuti
tes laboran apabila nilai mata kuliah yang
bersangkutan adalah B atau A.
if (nilai = 'A') or (nilai = 'B')
then
write('Dapat mengikuti tes asisten')
endif
80
Perintah if digunakan untuk mewujudkan percabangan
bersyarat, di dalam bahasa Python pernyataan if
mempunyai bentuk dasar yaitu :
if kondisi:
pernyataan
81
Gambar 4.2 Flowchart Instruksi IF-ELSE
if kondisi :
pernyataan1
else : pernyataan2
82
Jawab :
if (x mod 2 = 0) then
write(“x adalah bilangan genap”)
else write(“x adalah bilangan
ganjil”)
endif
Jawab :
atau :
input (x)
if x<0 then x=x*-1
output (x)
83
4.3 Instruksi IF Bertingkat
Bentuk umum pseudocode:
Jawab :
84
Algoritma dengan pseudocode
Algoritma pertama:
input (huruf)
kode = ord (huruf)
if kode>=97 then kodebaru = kode –
32
else kodebaru = kode + 32
hurufbaru = chr (kodebaru)
output (hurufbaru)
Algoritma kedua:
input (huruf)
kode = ord (huruf)
if kode<=90 then kodebaru = kode +
32
else kodebaru = kode - 32
hurufbaru = chr (kodebaru)
output (hurufbaru)
Algoritma ketiga:
input (huruf)
kode = ord (huruf)
if kode>=65 and kode<=90 then
kodebaru = kode + 32
else kodebaru = kode - 32
hurufbaru = chr (kodebaru)
output (hurufbaru)
85
Algoritma keempat:
input (huruf)
kode = ord (huruf)
if kode>=97 and kode<=122 then
kodebaru = kode - 32
else kodebaru = kode + 32
hurufbaru = chr (kodebaru)
output (hurufbaru)
86
Jika nilai angka >= 90 maka nilai huruf = A
Jika nilai angka >= 80 maka nilai huruf = B
Jika nilai angka >= 70 maka nilai huruf = C
Jika nilai angka >= 60 maka nilai huruf = D
Jika nilai angka < 60 maka nilai huruf = E
Jawab :
Jawab :
87
input (nilaihuruf)
if nilaihuruf='A' then
nilaiangka=4
else if nilaihuruf='B' then
nilaiangka=3
else if nilaihuruf='C' then
nilaiangka=2
else if nilaihuruf='D' then
nilaiangka=1
else if nilaihuruf='E'
then
nilaiangka=0
endif
endif
endif
endif
endif
output (nilaiangka)
Jawab :
88
nh = 'B'
komentar='Good...Good...Good'
else
if na>=55 and na<= 69 then
nh = 'C'
komentar='Lumayan deh'
else
if na>=30 and na<= 54 then
nh = 'D'
komentar='Don't worry,
next time better'
else
if na<=29 then
nh = 'E'
komentar='Anda tidak lulus'
else
komentar='Nilai tidak dikenal'
endif
endif
endif
endif
endif
output (nh,komentar)
Jawab :
89
dari nilai-nilai koefisiennya. Berdasarkan nilai-nilai
koefisien tersebut disusun kemungkinan-kemungkinan
sebagai berikut:
Bila koefisien a = 0 maka ax2 + bx + c = 0 bukan
persamaan kuadrat.
Perhitungan determinan D = b2 –4ac.
Jika D negatif (D<0) maka ax2 + bx + c = 0
mempunyai akar imajiner. Dalam perhitungan,
komponen imajiner i akan diabaikan, tetapi akan
dicetak pada keluarannya sebagai status akar.
90
D=(b*b)-(4*a*c)
if D<0 then write ('Akar imajiner')
else if D=0 then
x=-b/2*a
output (x)
else
x1=(-b+sqrt(d))/2*a
x2=(-b-sqrt(d))/2*a
output (x1,x2)
endif
endif
endif
Jawab :
Tiga huruf yang dimasukkan bisa huruf besar semua,
huruf kecil semua atau kombinasi huruf besar dan
huruf kecil.
91
temp=h1
h1=h2
h2=temp
endif
if h1>h3 then
temp=h1
h1=h3
h3=temp
endif
if h2>h3 then
temp=h2
h2=h3
h3=temp
endif
endif
output (h1,h2,h3)
else if pilihan=2 then
if h1<h2 then
temp=h1
h1=h2
h2=temp
endif
if h1<h3 then
temp=h1
h1=h3
h3=temp
endif
if h2<h3 then
92
temp=h2
h2=h3
h3=temp
endif
endif
output (h1,h2,h3)
93
write ('Desember')
94
case <pilihan1> : <aksi1>
case <pilihan2> : <aksi2>
...
case <pilihann> : <aksin>
{otherwise aksi}
endcase
95
Gambar 4.3 Flowchart Instruksi SWITCH
Jawab:
Algoritma dengan pseudocode
input (na)
96
switch (na)
case 'A' : nh=4
case 'B' : nh=3
case 'C' : nh=2
case 'D' : nh=1
case 'E' : nh=0
otherwise write ('Masukkan
A/B/C/D/E')
endcase
2.Pemilihan mobil.
Jawab:
Jawab :
97
Algoritma dengan pseudocode
input (nobulan)
switch (nobulan)
case 1 : write ('Bulan Januari')
case 2 : write ('Bulan Februari')
case 3 : write ('Bulan Maret')
case 4 : write ('Bulan April')
case 5 : write ('Bulan Mei')
case 6 : write ('Bulan Juni')
case 7 : write ('Bulan Juli')
case 8 : write ('Bulan Agustus')
case 9 : write ('Bulan September')
case 10 : write ('Bulan Oktober')
case 11 : write ('Bulan Nopember')
case 12 : write ('Bulan Desember')
otherwise write ('Nomor bulan salah')
end case
4.7 Latihan
98
4.Tuliskan algoritma untuk menentukan wujud air .
Jika suhu <=0 maka benda padat.
Jika suhu>=100 maka uap/gas.
Jika suhu>0 dan suhu<100 maka cair.
5.Tuliskan algoritma untuk menentukan luas dan volume
bola ( L = 4.phi.R2, V = 4/3.phi.R3).
6.Tuliskan algoritma untuk menentukan jarak atau titik
tengah dari 2 titik yang diinputkan.
7.Tuliskan pseudocode dari flowchart sebagai berikut ini:
99
8.Tuliskan algoritma untuk menentukan koordinat titik
ada di kuadran I, II, III, atau IV.
9.Tuliskan algoritma untuk menyelesaikan persamaan
linier dari
ax + by = c
dx + ey = f
100
9.Tuliskan algoritma untuk menampilkan zodiac
berdasarkan bulan dan tanggalnya.
10.Tuliskan algoritma dimana user diberi pilihan sebagai
berikut:
Menu Pilihan Bidang
A. Jajaran Genjang
B. Persegi Panjang
C. Bujur Sangkar
D. Lingkaran
E. Segitiga
F. Trapesium
101
102
Bab 5
Struktur Perulangan
input(x1)
input(x2)
input(x3)
103
input(x4)
input(x5)
input(x6)
input(x7)
input(x8)
input(x9)
input(x10)
jumlah=x1+x2+x3+x4+x5+x6+x7+x8+x9+x10
output(jumlah)
jumlah=0
for i=1 to 1000 do
input(x)
jumlah=jumlah+x
endfor
output(jumlah)
104
kondisi terpenuhi. Dengan instruksi perulangan
memungkinkan kita untuk menjalankan beberapa
instruksi hanya dengan menuliskan intruksi tersebut satu
kali saja. Proses perulangan biasanya digunakan, untuk :
1.Mengulang proses pamasukan data.
2.Mengulang proses perhitungan.
3.Mengulang proses penampilan hasil pengolahan data.
105
tertentu. Pemilihan struktur perulangan untuk
penyelesaian suatu masalah dapat mempengaruhi
kebenaran algoritma yang dibuat. Pemilihan struktur
perulangan yang tepat bergantung pada masalah yang
akan diselesaikan.
106
Gambar 5.1 Flowchart Instruksi FOR Format Naik
Cara kerjanya:
1.Indeks diassign dengan nilai awal.
2.Indeks dibandingkan dengan nilai akhir.
3.Jika indeks <= nilai akhir maka
a. Badan loop dikerjakan.
b. Secara otomatis nilai indeks ditambah 1.
c. Indeks dibandingkan dengan nilai akhir.
4.Jika indeks > nilai akhir maka akan dikerjakan statemen
pertama sesudah “endfor” (badan loop).
107
Bentuk umum pseudocode FOR format turun:
for indeks=nilai_awal downto
nilai_akhir do
<instruksi/blok instruksi>
endfor
Cara kerjanya:
1.Indeks diassign dengan nilai awal.
2.Indeks dibandingkan dengan nilai akhir.
108
3.Jika indeks >= nilai akhir maka
a. Badan loop dikerjakan.
b. Secara otomatis nilai indeks dikurangi 1.
c. Indeks dibandingkan dengan nilai akhir.
4.Jika indeks < nilai akhir maka akan dikerjakan statemen
pertama sesudah “endfor” (badan loop).
Contoh :
1.Indeks perulangan menaik
for i=1 to 3 do
output (i)
endfor
109
counter atau indeks yang sama.
2.Antara perulangan-perulangan tersebut tidak boleh
saling berpotongan (overlapping).
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 :
for angka=1 to 10 do
110
if angka=3 then
komentar ('ini angka favoritku')
output (angka,komentar)
else if angka=8 then
komentar ('ini angka favorit
temenku')
output (angka,komentar)
endif
else output (angka)
endif
endif
endfor
Jawab :
111
else cacahnol=cacahnol+1
endfor
output (cacahpos,cacahneg,cacahnol)
Jawab :
input (n)
jumlah=0
for i=1 to n do
input (bil)
jumlah=jumlah+bil
endfor
rata=jumlah/n
output (rata)
Jawab :
112
Algoritma dengan pseudocode:
input (n)
jganj=0
for i=1 to n do
input (bil)
if bil mod 2 = 1 then jganj=jganj+bil
endfor
output (jganj)
Jawab :
input (n)
jumlah=0
for i=1 to n do
input (bil)
if bil>0 then jumlah=jumlah+bil
endfor
output (jumlah)
113
bernilai negatif yang lebih kecil dari -99 dari n buah
data.
Jawab :
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)
Jawab :
Cara Pertama:
114
Asumsikan nilai maksimum (max) sementara adalah
bilangan bulat -32768 sedangkan nilai minimum (min)
sementara adalah 32767. Bacalah data bilangan dari
piranti masukan. Setiap kali pemasukan data,
bandingkan data tersebut dengan nilai max dan min
untuk menentukan data terbesar dan data terkecil. Pada
akhir perulangan, max berisi data terbesar dan min
berisi data terkecil.
Cara Kedua :
Cara Pertama:
input (n)
max=-32767
min=32768
for i=1 to n do
115
input (bil)
if bil>max then max=bil
if bil<min then min=bil
endfor
output (max,min)
Cara Kedua:
input (n)
input (bil)
max=bil
min=bil
for i=2 to n do
input (bil)
if bil>max then max=bil
if bil<min then min=bil
endfor
output (max,min)
Jawab :
116
input(n)
input(a)
input(b)
if a>b then
min1=b
min2=a
endif
else:
min1=a
min2=b
endif
for i=2 to n do
input(bil)
if bil>min1 and bil<min2 then
min2=bil
endif
else if bil<min1 and bil<min2 then
temp=min1
min1=bil
min2=temp
endif
endfor
output (min1,min2)
117
9.Buatlah program untuk mencari data negatif terbesar
dan data positif terkecil dari n buah data yang
dimasukkan melalui keyboard.
Jawab :
118
terpenuhi maka perulangan terus dilakukan dan
sebaliknya bila kondisinya tidak terpenuhi maka
perulangan dihentikan.
while <kondisi> do
<instruksi/blok instruksi>
endwhile
Cara kerjanya:
1.Sebelum masuk ke “while-loop” kondisi yang
merupakan ekspresi boolean harus dudah mempunyai
119
nilai.
2.Jika kondisi bernilai true maka seluruh badan loop
dikerjakan.
3.Dicek kembali apakah kondisi bernilai true atau false.
Jika kondisi bernilai true maka maka tidak ada
perubahan, artinya kembali mengerjakan badan loop.
Jika kondisi bernilai false maka langsung mengerjakan
statemen pertama sesudah “endwhile”.
4.Looping berhenti setelah kondisi bernilai false,
sehingga harus ada statemen yang mengakibatkan
kondisi bernilai false. Tetapi jika kondisi tetap true
maka terjadi infinite true, artinya jika tidak ada
statemen yang mengakibatkan kondisi bernilai false
maka terjadi infinite loop.
angka = 1
angka = 2
angka = 3 ini angka favoritku
angka = 4
120
angka = 5
angka = 6
angka = 7
angka = 8 ini angka favorit temenku
angka = 9
angka = 10
Jawab :
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
121
bernilai positif, negatif dan nol dari n buah data yang
dimasukkan melalui keyboard.
Jawab :
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)
Jawab :
122
Algoritma dengan pseudocode
input (n)
jumlah=0
i=1
while i<=n do
input (bil)
jumlah=jumlah+bil
endwhile
rata=jumlah/n
output (rata)
Jawab :
input (n)
jganj=0
i=1
while i<=n do
input (bil)
if bil mod 2 = 1 then
jganj=jganj+bil
endwhile
output (jganj)
123
5. Buatlah program untuk menjumlahkan bilangan ganjil
bernilai negatif yang lebih kecil dari -99 dari n buah data.
Jawab :
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)
Jawab :
124
Algoritma dengan pseudocode:
input (n)
input (bil)
max=bil
min=bil
i=2
while i<=n do
input (bil)
if bil>max then max=bil
if bil<min then min=bil
endwhile
output (max,min)
Jawab :
input (n)
maxneg=-1999999999
minpos=1999999999
i=1
while i<=n do
input (bil)
125
if bil>0 then
if bil<minpos then minpos=bil
endif
else if x<0 then
if x>maxneg then maxneg=bil
endif
endif
endwhile
output (maxneg,minpos)
Jawab :
126
bahwa tidak ada data lagi yang akan dibaca.
Jawab :
input (x,y)
sisa=x mod y
while sisa <> 0 do
x=y
y=sisa
sisa=x mod y
endwhile
127
output (y)
Jawab :
Langkah-langkah:
masih='y'
jpoint=0
jsks=0
while masih='y'
128
input (sks,nh)
if nh='A' then na=4
else if nh='B' then na=3
else if nh='C' then na=2
else if nh='D' then na=1
else na=0
point=sks*na
jpoint=jpoint+point
jsks=jsks+sks
input (masih)
endwhile
IP=jpoint/jsks
output (IP)
Jawab :
Cara pertama:
129
bilangan yang akan dicek dikurangi 1 (2 s/d bilangan-
1)
input (bil)
if x=2 then status='prima'
else if x<=1 or x mod 2 = 0
then st='bukan prima'
else
pembagi=3
st='prima'
batascek=bil-1
while pembagi<=batascek and st='prima'
do
if x mod pembagi=0 then st='bukan
prima'
else pembagi=pembagi+1
endwhile
endif
endif
output (st)
Cara kedua:
130
interval 1 sampai 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:
131
dari 2 hingga akar dari bilangan tersebut. Dasar
pemikirannya adalah bilangan-bilangan yang berada di
atas akar dari bilangan yang akan dicek itu selalu
merupakan kelipatan dari 2, 3, dan bilangan-bilangan
prima di bawah akar bilangan yang akan dicek itu.
input (bil)
if x=2 then status='prima'
else if x<=1 or x mod 2 = 0
then st='bukan prima'
else
pembagi=3
st='prima'
batascek=round (sqrt(bil))
while pembagi<=batascek and st='prima'
do
132
if x mod pembagi=0 then st='bukan
prima'
else pembagi=pembagi+1
endwhile
endif
endif
output (st)
Cara keempat:
133
batascek=round ((bil-1)/2)
while pembagi<=batascek and st='prima'
do
if x mod pembagi=0 then st='bukan
prima'
else pembagi=pembagi+2
endwhile
endif
endif
output (st)
Cara kelima:
134
batascek=round (sqrt(bil))
while pembagi<=batascek and st='prima'
do
if x mod pembagi=0 then st='bukan
prima'
else pembagi=pembagi+2
endwhile
endif
endif
output (st)
135
endif
endif
if st='prima' then
jumlah=jumlah+bil
cacah=cacah+1
endif
endfor
rata=jumlah/cacah
output (rata)
5.5 Latihan
1.Buatlah algoritma untuk mengkonversikan bilangan
desimal ke biner.
136
26+63-... dimana banyaknya suku adalah n buah
sum1=0
for i=20 to 24 do
sum=sum1+(5*i-20)^2
sum1=(sum+20)mod 20
endfor
output(sum1)
a=0
137
b=1
while b<=8 do
input(c)
if c mod b = 0 then
a=a+c
endif
b=b+1
endwhile
output(a)
a=3
b=1
while b<=5 do
input(c)
if c mod b <> 0 then
a=a+c
endif
b=b+1
endwhile
output(a)
138
Apa hasil akhir dari pseudocode di atas?
139
dibayar.
140
Bab 6
Subprogram
141
input (a,b,c,d)
if a > b then
temp = a
a = b
b = temp
endif
if b > c then
temp = a
a = b
b = temp
endif
if c > d then
temp = a
a = b
b = temp
endif
output (a,b,c,d)
142
subalgoritma-subalgoritma dan ketika ditranslasikan
menjadi program maka di dalamnya terdapat subprogram-
subprogram. Subprogram merupakan blok dari kode yang
dirancang khusus untuk melaksanakan tugas tertentu.
6.1 Subprogram
Pemrograman terstruktur adalah pemrograman yang
menitikberatkan pada pemecahan masalah yang kompleks
menjadi masalah yang sederhana yang disebut modul.
Program yang terdiri dari modul-modul atau subprogram-
subprogram disebut dengan program yang modular.
Alasan adanya sub program adalah:
1.Pemrograman modular.
2.Teknik top down design.
3.Mempersingkat atau memperpendek panjang program.
4.Menghemat kode program.
5.Mempermudah cek kesalahan.
143
Program Utama
144
if hitung(x)>0 :
cNilai fungsi dijadikan kondisi dalam struktur
perulangan, misal:
while hitung(x):
dNilai fungsi dimasukkan dalam suatu ekspresi, misal:
a=10
b=hitung(x)+10
145
sama dengan faktorial satu yaitu sama dengan 1.
146
3. Perpangkatan xn. n bernilai nol atau bilangan-bilangan
bulat positif.
Jawab:
Jawab :
147
endfunction
Jawab :
148
menghitung faktorial n!.
function pangkat(y,m)
if m=0 then pangkat=1
else
pangkat=1
for i=1 to m do
pangkat=pangkat*y
endfor
endif
endfunction
function factorial(h)
if h=0 then facto=1
else
y=1
fakto=1
for i=1 to h do
fakto=y*fakto
y=y+1
endfor
endif
endfunction
input(x)
input(n)
149
g=pangkat(x,n)/factorial(n)
output (g)
Jawab :
function factorial(h)
if h==0 then fakto=1
else
y=1
fakto=1
for i=1 to h do
fakto=y*fakto
y=y+1
endfor
endif
factorial=fakto
endfunction
input(x)
input(n)
150
g=(factorial(n))/((factorial(x))*fac
torial(n-x))
output (g)
Jawab :
function factorial(h)
if h==0 then fakto=1
else
y=1
fakto=1
for i=1 to h do
fakto=y*fakto
y=y+1
endfor
endif
factorial=fakto
endfunction
input(x)
input(n)
input(z)
input(m)
g=((factorial(n))/((factorial(x))*factorial(
151
n-
x)))*((factorial(m))/((factorial(z))*factori
al(m-z)))
output (g)
6.3 Rekursi
Rekursi adalah proses yang bisa memanggil dirinya
sendiri. Bentuk rekursi merupakan alternatif dari bentuk
iterasi atau perulangan. Ada beberapa masalah yang lebih
cocok dipecahkan dengan bentuk rekursi. Tetapi secara
umum bentuk rekursi biasanya kurang efisien
dibandingkan bentuk iterasi karena rekursi memanggil
dirinya sendiri sehingga menyebabkan waktu pemrosesan
yang lebih besar dibandingkan bentuk iterasi biasa.
Proses rekursi akan menggunakan memory stack, semakin
lama proses rekursi dikerjakan maka memory stack akan
terus berkurang yang berakibat memory stack habis.
Dalam rekursi sebenarnya terkandung pengertian fungsi,
perbedaannya adalah:
a. Rekursi bisa memanggil dirinya sendiri.
b. Fungsi harus dipanggil lewat pemanggil fungsi
(function call).
152
Rekursi mempunyai beberapa kelemehan yaitu :
1.Penggunaan rekursi seringkali harus mengorbankan
efisiensi dan kecepatan.
2.Masalah yang sering muncul di dalam rekursi adalah
eksekusi yang tidak pernah berhenti akibatnya stack
memori akan habis dan komputer hang.
153
melainkan juga bisa memanggil dirinya sendiri.
Pemanggilan kepada dirinya sendiri bisa berarti proses
berulang yang tidak bisa diketahui kapan berakhir
sehingga dalam rekursi harus ada syarat-syarat berikut:
a. Ada titik pemberhentian (stopping state) sebagai
pengendali rekursi.
b. Adanya langkah induksi yang menuju pada titik
pemberhentian.
n!
n*(n-1)!, jika n > 0 (langkah induksi)
Gambaran Proses Rekursi:
154
Faktorial (4)
= Faktorial (4)
= 4 Faktorial (3)
= 3 Faktorial (2)
= 2 Faktorial (1)
= 1
Jadi 4! = 4*3*2*1 = 24
155
Gambar 6.2 Ilustrasi Hitung Faktorial
function Faktorial(n)
if n=0 then Fakto = 1
else Fakto = n * Faktorial(n-1)
endif
Faktorial=Fakto
endfunction
Keterangan:
a. Dari fungsi di atas bisa dilihat bahwa factorial(x)
bisa dihitung dari factorial(x-1), dimana
factorial(x-1) bisa dihitung dari
factorial(x-2), dan seterusnya.
156
b. Untuk menghitung factorial(x) maka fungsi
memanggil nilai factorial(x-1) yang telah
diperoleh, demikian juga untuk menghitung nilai
factorial(x-1) maka fungsi harus memanggil
nilai factorial(x-2), dan seterusnya.
c. Notasi factorial(x-1) yang digunakan untuk
memanggil nilai fungsi sebelumnya sering disebut
dengan pemanggil rekursi (recursion call). Rekursi
dijalankan dengan jumlah x yang semakin menurun.
factorial(x-1) artinya rekursi dengan jumlah x
yang semakin menurun.
1 1 2 3 5 8 13 21 34 55…..
157
menunjukkan bilangan Fibonacci ke-n maka Fibo(n) bisa
dihitung berdasarkan hubungan rekurens berikut:
Fibo(n)=Fibo(n-1)+Fibo(n-2)
Fibo(1)=1
Fibo(2)=1
Fibo(3)=Fibo(2)+Fibo(1)
Fibo(4)=Fibo(3)+Fibo(2)
dan seterusnya.
Fibo(4)
158
Fibo(3) Fibo(2)
Fibo(1) Fibo(0)
Fibo(2) Fibo(1)
Fibo(1) Fibo(0)
Jawab :
Misal :
4x3=(4x2)+4
159
=(4x1)+4+4
= 4+4+4
160
endfunction
4. Perpangkatan xn.
Jawab :
161
Gambar 6.5 Ilustrasi Hitung Perpangkatan
function Pangkat(x,n)
if n=0 then hasil=1
else hasil=x*Pangkat(x,n-1)
endif
Pangkat=hasil
endfunction
162
5. Menghitung sigma 1+2+3+4+...+n.
Jawab :
6.5 Latihan
163
1. Buatlah sebuah fungsi dengan metode rekursi
untuk menghitung nilai dari deret 125+25+5+1+...
dimana banyaknya suku adalah n buah suku.
164
7. Buatlah sebuah fungsi dengan metode rekursi
untuk menghitung nilai dari deret 2-6+18-54+...
dimana banyaknya suku adalah n buah suku.
Bab 7
Array
165
Tujuan pembelajaran umum:
1. memahami penggunaan array satu dimensi dalam
menyusun algoritma
2. memahami penggunaan array multidimensi
dalam menyusun algoritma
for i=1 to 8 do
output (x)
endfor
166
80
80
80
80
80
input (x1)
input (x2)
input (x3)
input (x4)
input (x5)
input (x6)
input (x7)
input (x8)
output (x1)
output (x2)
output (x3)
output (x4)
167
output (x5)
output (x6)
output (x7)
output (x8)
7.1 Array
168
Dalam beberapa literatur array sering diartikan larik.
Array merupakan koleksi data dengan setiap elemen data
menggunakan nama yang sama dan tiap elemen data
bertipe sama. Setiap elemen array dapat diakses melalui
indeks array.
Berdasarkan jumlah dimensi indeks dalam sebuah
variabel array dibedakan menjadi array berdimensi satu
dan array berdimensi banyak. Terdapat beberapa hal yang
perlu diperhatikan apabila akan memasukkan deretan data
dalam variabel array:
1.Mengetahui tipe data yang digunakan dalam variabel
array. Variabel array numerik hanya dapat menerima
data numeric dan variabel array string hanya dapat
menerima data karakter. String merupakan kumpulan
dari karakter, biasanya merupakan kumpulan dari
huruf dalam alphabet. String didefinisikan sebagai
kumpulan dari tipe data char yang diakhiri dengan null
character. Array merupakan kumpulan dari data yang
bertipe sama. String merupakan salah satu kasus
khusus dari array, string merupakan array dengan tipe
data char.
2.Banyaknya data harus lebih kecil atau sama dengan
besarnya ukuran array.
3.Instruksi perulangan digunakan untuk membaca deretan
169
data dalam suatu variabel indeks.
4.Banyaknya indeks yang digunakan menunjukkan
banyaknya ruang memori yang dialokasikan. Supaya
tidak terjadi pemborosan ruang memori maka
banyaknya indeks harus disesuaikan dengan
banyaknya data.
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)
170
huruf besar.
Jawab:
Algoritma dengan pseudocode:
input(kecil)
n=len(kecil)
for i=1 to n do
posisi=ord(kecil[i])
besar=chr(posisi-32)
output (besar)
Jawab:
Algoritma dengan pseudocode:
input (kata)
n=len(kata)
for i=1 to n do
posisi=ord(kata[i])
if posisi>=65 and posisi<=90 then
kecil=chr(posisi+32)
output (kecil)
endif
else
171
besar=chr(posisi-32)
output (besar)
endif
endfor
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
Jawab:
Algoritma dengan pseudocode:
jumlah=0
cacah=0
172
for i=1 to n do
input (x)
if x>0 then
jumlah=jumlah+x
cacah=cacah+1
endif
endfor
rata=jumlah/cacah
output (rata)
Jawab:
Algoritma dengan pseudocode:
input (n)
max=A[1]
indexmax=1
min=A[1]
indexmin=1
for i=2 to n do
if A[i] > max then
max=A[i]
indexmax=i
endif
if A[i] < min then
min=A[i]
173
indexmin=i
endif
endfor
output (max,indexmax,min,indexmin)
Jawab:
Algoritma dengan pseudocode:
input (n)
if A[1] > A[2] then
min1=A[2]
imin1=2
min2=A[1]
imin2=1
else
min1=A[1]
imin1=1
min2=A[2]
imin2=2
endif
for i=3 to n do
if (A[i]>min1) and (A[i]<min2)
then
min2=A[i]
174
imin2=i+2
else
if (A[i]<min1) and (A[i]<min2)
then
temp=min1
min1=A[i]
imin1=i+3
min2=temp
imin2=i+2
endif
endif
endfor
output
(min1,indexmin1,min2,indexmin2)
Jawab:
Algoritma dengan pseudocode:
input (n)
jumlah=0
JKR=0
for i=1 to n do
input (x[i])
jumlah=jumlah+x[i]
175
endfor
rata=jumlah/n
for i=1 to n do
KR=sqr(x[i]-rata)
JKR=JKR+KR
endfor
SD=sqrt(JKR/n)
output (SD)
7.3 Latihan
176
5. Buatlah algoritma untuk menghitung banyaknya
huruf kecil dan huruf besar dari sebuah kata yang
dimasukkan dari keyboard.
Bab 8
Sorting
177
terurutkan seperti daftar isi, daftar pustaka dan lain-lain.
Proses yang terjadi pada pengurutan adalah sebagai
berikut:
1.Perbandingan data.
2.Pertukaran data.
1.Selection sort.
2.Bubble sort.
3.Insertion sort.
4.Merge sort.
178
kedua.
3.Mencari data terkecil dari data ketiga sampai dengan
data terakhir, kemudian ditukar posisinya dengan data
ketiga.
4.dan seterusnya sampai semua data terurut naik. Apabila
terdapat n buah data yang akan diurutkan maka
membutuhkan (n-1) langkah pengurutan, dimana
data terakhir yaitu data ke-n tidak perlu diurutkan
karena hanya tinggal satu-satunya.
Contoh kasus:
Terdapat 8 buah data yang nilainya belum terurut:
44 55 12 42 94 18 6 67
Data-data di atas akan ditampilkan secara terurut naik
menggunakan metode Selection Sort. Proses
pengurutannya adalah sebagai berikut:
Proses 1
indexmin=1
Data ke-2 : A[indexmin] < A[2]
Data ke-3 : A[indexmin] > A[3]
indexmin=3
Data ke-4 : A[indexmin] < A[4]
Data ke-5 : A[indexmin] < A[5]
179
Data ke-6 : A[indexmin] < A[6]
Data ke-7 : A[indexmin] > A[7]
indexmin=7
Data ke-8 : A[indexmin] < A[8]
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]
180
dari proses 2 adalah:
6 12 55 42 94 18 44 67
Kondisi data pada akhir proses kedua ini digunakan
sebagai masukan pada proses ketiga.
Proses 3
indexmin=3
Data ke-4 : A[indexmin] > A[4]
indexmin=4
Data ke-5 : A[indexmin] < A[5]
Data ke-6 : A[indexmin] > A[6]
indexmin=6
Data ke-7 : A[indexmin] < A[7]
Data ke-8 : A[indexmin] < A[8]
Proses 4
indexmin=4
181
Data ke-5 : A[indexmin] < A[5]
Data ke-6 : A[indexmin] < A[6]
Data ke-7 : A[indexmin] < A[7]
Data ke-8 : A[indexmin] < A[8]
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]
182
Kondisi data pada akhir proses kelima ini digunakan
sebagai masukan pada proses keenam.
Proses 6
indexmin=6
Data ke-7 : A[indexmin] < A[7]
Data ke-8 : A[indexmin] < A[8]
Proses 7
indexmin=7
Data ke-8 : A[indexmin] > A[8]
indexmin=8
183
Kondisi data pada akhir proses ketujuh ini merupakan
akhir dari pengurutan secara menaik.
184
1.Mencari data terbesar dari data pertama sampai dengan
data terakhir, kemudian ditukar posisinya dengan data
pertama.
2.Mencari data terbesar dari data kedua sampai dengan
data terakhir, kemudian ditukar posisinya dengan data
kedua.
3.Mencari data terbesar dari data ketiga sampai dengan
data terakhir, kemudian ditukar posisinya dengan data
ketiga.
4.dan seterusnya sampai semua data terurut turun.
Apabila terdapat n buah data yang akan diurutkan
maka membutuhkan (n-1) langkah pengurutan,
dimana data terakhir yaitu data ke-n tidak perlu
diurutkan karena hanya tinggal satu-satunya.
Contoh kasus:
Terdapat 8 buah data yang nilainya belum terurut:
44 55 12 42 94 18 6 67
Data-data di atas akan ditampilkan secara terurut turun
menggunakan metode Selection Sort. Proses
pengurutannya adalah sebagai berikut:
Proses 1
indexmax=1
185
Data ke-2 : A[indexmax] < A[2]
indexmax=2
Data ke-3 : A[indexmax] > A[3]
Data ke-4 : A[indexmax] > A[4]
Data ke-5 : A[indexmax] < A[5]
indexmax=5
Data ke-6 : A[indexmax] > A[6]
Data ke-7 : A[indexmax] > A[7]
Data ke-8 : A[indexmax] > A[8]
Proses 2
indexmax=2
Data ke-3 : A[indexmax] > A[3]
Data ke-4 : A[indexmax] > A[4]
Data ke-5 : A[indexmax] > A[5]
Data ke-6 : A[indexmax] > A[6]
Data ke-7 : A[indexmax] > A[7]
186
Data ke-8 : A[indexmax] < A[8]
indexmax=8
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
187
Kondisi data pada akhir proses ketiga ini digunakan
sebagai masukan pada proses keempat.
Proses 4
indexmax=4
Data ke-5 : A[indexmax] > A[5]
Data ke-6 : A[indexmax] > A[6]
Data ke-7 : A[indexmax] < A[7]
indexmax=7
Data ke-8 : A[indexmax] > A[8]
Proses 5
indexmax=5
Data ke-6 : A[indexmax] < A[6]
indexmax=6
Data ke-7 : A[indexmax] < A[7]
indexmax=7
188
Data ke-8 : A[indexmax] > A[8]
Proses 6
indexmax=6
Data ke-7 : A[indexmax] > A[7]
Data ke-8 : A[indexmax] > A[8]
Proses 7
indexmax=7
189
Data ke-8 : A[indexmax] < A[8]
indexmax=8
190
endfor
Contoh kasus:
Terdapat 6 buah data yang nilainya belum terurut:
7 5 6 3 4 2
Data-data di atas akan ditampilkan secara terurut naik
menggunakan metode Bubble Sort. Proses pengurutannya
adalah sebagai berikut:
Proses 1
Data 1-2 : A[1] > A[2] → ditukar
5 7 6 3 4 2
191
Data 2-3 : A[2] > A[3] → ditukar
5 6 7 3 4 2
Data 3-4 : A[3] > A[4] → ditukar
5 6 3 7 4 2
Data 4-5 : A[4] > A[5] → ditukar
5 6 3 4 7 2
Data 5-6 : A[5] > A[6] → ditukar
5 6 3 4 2 7
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
192
Proses 3
Data 1-2 : A[1] > A[2] → ditukar
3 5 4 2 6 7
Data 2-3 : A[2] > A[3] → ditukar
3 4 5 2 6 7
Data 3-4 : A[3] > A[4] → ditukar
3 4 2 5 6 7
Proses 4
Data 1-2 : A[1] < A[2]
Data 2-3 : A[2] > A[3] → ditukar
3 2 4 5 6 7
Proses 5
Data 1-2 : A[1] > A[2]
Data 2-3 : A[2] > A[3] → ditukar
2 3 4 5 6 7
Akhir dari proses kelima atau terakhir adalah
193
menempatkan data terbesar kelima dan keenam pada
posisi ke-n-4 dan ke-n-5 (posisi ke-2 dan ke-1).
Contoh kasus:
Terdapat 8 buah data yang nilainya belum terurut:
194
44 55 12 42 94 18 6 67
Data-data di atas akan ditampilkan secara terurut turun
menggunakan metode Bubble Sort. Proses pengurutannya
adalah sebagai berikut:
Proses 1
Data 1-2 : A[1] < A[2] → ditukar
55 44 12 42 94 18 6 67
Data 2-3 : A[2] > A[3]
Data 3-4 : A[3] < A[4] → ditukar
55 44 42 12 94 18 6 67
Data 4-5 : A[4] < A[5] → ditukar
55 44 42 94 12 18 6 67
Data 5-6 : A[5] < A[6] → ditukar
55 44 42 94 18 12 6 67
Data 6-7 : A[6] > A[7]
Data 7-8 : A[7] < A[8] → ditukar
55 44 42 94 18 12 67 6
Proses 2
Data 1-2 : A[1] > A[2]
195
Data 2-3 : A[2] > A[3]
Data 3-4 : A[3] < A[4] → ditukar
55 44 94 42 18 12 67 6
Data 4-5 : A[4] > A[5]
Data 5-6 : A[5] > A[6]
Data 6-7 : A[6] < A[7] → ditukar
55 44 94 42 18 67 12 6
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
Proses 4
196
Data 1-2 : A[1] < A[2] → ditukar
94 55 44 42 67 18 12 6
Data 2-3 : A[2] > A[3]
Data 3-4 : A[3] > A[4]
Data 4-5 : A[4] < A[5] → ditukar
94 55 44 67 42 18 12 6
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
Proses 6
Data 1-2 : A[1] > A[2]
Data 2-3 : A[2] < A[3] → ditukar
94 67 55 44 42 18 12 6
197
Akhir dari proses keenam adalah menempatkan data
terkecil keenam pada posisi ke-n-5 (posisi ke-3).
Proses 7
Data 1-2 : A[1] > A[2]
198
menggunakan metode Insertion Sort adalah dimulai dari
data ke-2 kemudian disisipkan pada tempat yang sesuai.
Data pada posisi pertama diandaikan memang sudah pada
tempatnya.
Contoh kasus:
Terdapat 6 buah data yang nilainya belum terurut:
8 5 15 12 7 2
Proses :
i=2
0=temp 1 2 3 4 5 6
5 8 5 15 12 7 2
199
j=2-1=1
A[1] > temp
A[2] ← A[1]
0=temp 1 2 3 4 5 6
5 8 8 15 12 7 2
j=1-1=0
A[0] = temp
A[1] ← temp
0=temp 1 2 3 4 5 6
5 5 8 15 12 7 2
i=3
0=temp 1 2 3 4 5 6
15 5 8 15 12 7 2
j=3-1=2
A[2] < temp
A[3] ← A[2]
200
i=4
0=temp 1 2 3 4 5 6
12 5 8 15 12 7 2
j=4-1=3
A[3] > temp
A[4] ← A[3]
0=temp 1 2 3 4 5 6
12 5 8 15 15 7 2
j=3-1=2
A[2] < temp
A[3] ← temp
0=temp 1 2 3 4 5 6
12 5 8 12 15 7 2
i=5
201
0=temp 1 2 3 4 5 6
7 5 8 12 15 7 2
j=5-1=4
A[4] > temp
A[5] ← A[4]
0=temp 1 2 3 4 5 6
7 5 8 12 15 15 2
j=4-1=3
A[3] > temp
A[4] ← A[3]
0=temp 1 2 3 4 5 6
7 5 8 12 12 15 2
j=3-1=2
A[2] > temp
A[3] ← A[2]
202
0=temp 1 2 3 4 5 6
7 5 8 8 12 15 2
j=2-1=1
A[1] < temp
A[2] ← temp
0=temp 1 2 3 4 5 6
7 5 7 8 12 15 2
i=6
j=6-1=5
A[5] > temp
A[6] ← A[5]
0=temp 1 2 3 4 5 6
2 5 7 8 12 15 15
j=5-1=4
A[5] > temp
A[5] ← A[4]
203
0=temp 1 2 3 4 5 6
2 5 7 8 12 12 15
j=4-1=3
A[3] > temp
A[4] ← A[3]
0=temp 1 2 3 4 5 6
2 5 7 8 8 12 15
j=3-1=2
A[2] > temp
A[3] ← A[2]
0=temp 1 2 3 4 5 6
2 5 7 7 8 12 15
j=2-1=1
A[1] > temp
A[2] ← A[1]
0=temp 1 2 3 4 5 6
2 5 5 7 8 12 15
j=1-1=0
204
A[0] = temp
A[1] ← temp
0=temp 1 2 3 4 5 6
2 2 5 7 8 12 15
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
205
Proses akan dimulai dengan membandingkan data ke-2
dengan data-data sebelumnya kemudian mencari posisi
yang tepat untuk menyisipkan.
Contoh kasus:
Terdapat 6 buah data yang nilainya belum terurut:
8 5 15 12 7 2
Data-data di atas akan ditampilkan secara terurut turun
menggunakan metode Insertion Sort. Proses
pengurutannya adalah sebagai berikut:
Proses :
i=2
0=temp 1 2 3 4 5 6
5 8 5 15 12 7 2
j=2-1=1
A[1] > temp
A[2] ← temp
0=temp 1 2 3 4 5 6
5 8 5 15 12 7 2
206
i=3
0=temp 1 2 3 4 5 6
15 8 5 15 12 7 2
j=3-1=2
A[2] < temp
A[3] ← A[2]
0=temp 1 2 3 4 5 6
15 8 5 5 12 7 2
j=2-1=1
A[1] < temp
A[2] ← A[1]
0=temp 1 2 3 4 5 6
15 8 8 5 12 7 2
j=1-1=0
A[0] = temp
207
A[1] ← temp
0=temp 1 2 3 4 5 6
15 15 8 5 12 7 2
i=4
0=temp 1 2 3 4 5 6
12 15 8 5 12 7 2
j=4-1=3
A[3] < temp
A[4] ← A[3]
0=temp 1 2 3 4 5 6
12 15 8 5 5 7 2
j=3-1=2
A[2] < temp
A[3] ← A[2]
208
0=temp 1 2 3 4 5 6
12 15 8 8 5 7 2
j=2-1=1
A[2] > temp
A[2] ← temp
0=temp 1 2 3 4 5 6
12 15 12 8 5 7 2
i=5
j=5-1=4
A[4] < temp
A[5] ← A[4]
0=temp 1 2 3 4 5 6
7 15 12 8 5 5 2
j=4-1=3
A[3] > temp
A[4] ← temp
209
0=temp 1 2 3 4 5 6
7 15 12 8 7 5 2
i=6
j=6-1=5
A[5] > temp
A[6] ← temp
0=temp 1 2 3 4 5 6
2 15 12 8 7 5 2
for i=2 to n do
temp=A[i]
{ambil elemen A[i] agar nilainya tidak
dihilang karena tertimpa pergeseran}
A[0]=temp {sentinel}
j=i-1
{cari posisi yang tepat untuk A[i] di dalam
A[1..i-1] sambil menggeser}
while A[j]<temp do
A[j+1]=A[j] {pergeseran}
j=j-1
210
endwhile
A[j+1]=temp {menemukan tempat yang tepat}
endfor
211
menggunakan metode ini akan membutuhkan waktu yang
relatif lebih lama.
Contoh kasus:
Array pertama : 5 8 12 15 20 25 29
Array kedua : 4 6 21 22
Proses penggabungan dua buah array di atas menjadi
sebuah array yang terurut naik adalah sebagai berikut:
1 2 3 4 5 6 7 a=1 s/d n
A= 5 8 12 15 20 25 29
1 2 3 4 b=1 s/d m
B= 4 6 21 22
212
C= c=1 s/d n+m
213
C[5] ← A[3]
C = 4 5 6 8 12
a=3+1=4
214
Array kedua terdiri dari 4 elemen. Pada akhir proses ini
setelah indeks pada array kedua dinaikkan ternyata
indeksnya telah melampaui ukuran array kedua yang
sesungguhnya berarti semua elemen array kedua sudah
habis terlebih dahulu dan masuk ke dalam array
gabungan.
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
215
a=1
b=1
c=1
while (a<=n) or (b<=m) do
if A[a]<B[b] then
C[c]=A[a]
a=a+1
else
C[c]=B[b]
b=b+1
endif
c=c+1
endwhile
if b>m then
for p=a to n do
C[c]=A[p]
c=c+1
endfor
endif
if a>n then
for p=b to m do
C[c]=B[p]
c=c+1
endfor
endif
216
2.Dua buah array yang masing-masing terurut turun akan
digabungkan menjadi terurut naik.
Contoh kasus:
Array pertama : 29 25 20 15 12 8 5
Array kedua : 22 21 6 4
Proses penggabungan dua buah array di atas menjadi
sebuah array yang terurut naik adalah sebagai berikut:
1 2 3 4 5 6 7 a=1 s/d n
A= 29 25 20 15 12 8 5
1 2 3 4 b=1 s/d m
B= 22 21 6 4
217
A[7] < B[3]
C[2] ← A[7]
C=4 5
a=7-1=6
218
A[3] < B[2]
C[7] ← A[3]
C = 4 5 6 8 12 15 20
a=3-1=2
219
a=3-1=2
C[10] ← A[2]
C = 4 5 6 8 12 15 20 21 22 25
a=2-1=1
C[11] ← A[1]
C = 4 5 6 8 12 15 20 21 22 25 29
a=n
b=m
c=1
while (a>=1) or (b>=1) do
if A[a]<B[b] then
C[c]=A[a]
a=a-1
else
C[c]=B[b]
b=b-1
endif
220
c=c+1
endwhile
if b<1 then
for p=a downto 1 do
C[c]=A[p]
c=c+1
endfor
endif
if a<1 then
for p=b downto 1 do
C[c]=B[p]
c=c+1
endfor
endif
Contoh kasus:
Array pertama : 5 8 12 15 20 25 29
Array kedua : 4 6 21 22
Proses penggabungan dua buah array di atas menjadi
sebuah array yang terurut turun adalah sebagai berikut:
221
1 2 3 4 5 6 7 a=1 s/d n
A= 5 8 12 15 20 25 29
1 2 3 4 b=1 s/d m
B= 4 6 21 22
222
A[5] < B[3]
C[4] ← B[3]
C = 29 25 22 21
b=3-1=2
223
a=2-1=1
b=2-1=1
C[11] ← B[1]
C = 29 25 22 21 20 15 12 8 6 5 4
224
Dengan mengasumsikan terdapat dua buah array yang
masing-masing menyimpan sekumpulan data dalam
kondisi terurut naik, algoritma Merge Sort dapat
dituliskan dengan pseudocode berikut:
a=n
b=m
c=1
while (a>=1) or (b>=1) do
if A[a]>B[b] then
C[c]=A[a]
a=a+1
else
C[c]=B[b]
b=b+1
endif
c=c+1
endwhile
if b<1 then
for p=a downto 1 do
C[k]=A[p]
c=c+1
endfor
endif
if a<1 then
for p=b downto 1 do
225
C[c]=B[p]
c=c+1
endfor
endif
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
226
C[1] ← A[1]
C = 29
a=1+1=2
227
A[4] > B[3]
C[6] ← A[4]
C = 29 25 22 21 20 15
a=4+1=5
228
Array pertama terdiri dari 7 elemen. Pada akhir proses ini
setelah indeks pada array pertama dinaikkan ternyata
indeksnya telah melampaui ukuran array pertama yang
sesungguhnya berarti semua elemen array pertama sudah
habis terlebih dahulu dan masuk ke dalam array
gabungan.
b=3+1=4
C[11] ← B[4]
C = 29 25 22 21 20 15 12 8 6 5 4
a=1
b=1
c=1
229
while (a<=n) or (b<=m) do
if A[a]>B[b] then
C[c]=A[a]
a=a+1
else
C[c]=B[b]
b=b+1
endif
c=c+1
endwhile
if b>m then
for p=a to n do
C[c]=A[p]
c=c+1
endfor
endif
if a>n then
for p=b to m do
C[c]=B[p]
c=c+1
endfor
endif
8.5 Latihan
1.Buatlah program untuk mengurutkan array yang terurut
230
naik menjadi terurut turun dan sebaliknya array yang
terurut turun menjadi terurut naik.
2.Buatlah program untuk mencari median dari n buah
data.
3.Buatlah program menggabungkan dua buah array.
Array pertama adalah satu yang telah terurut secara
menurun sedangkan array kedua adalah dua yang telah
terurut secara menaik menjadi array tiga yang terurut
secara menaik.
Misal:
satu : 55 43 37 23 19 13 7
dua : 3 9 13 22 39 41 47
tiga : 3 7 9 13 13 19 22 23 37 39 41
43 47 55
231
Bab 9
Searching
232
1.Sequential search
2.Binary search
233
8 7 5 6 10 4
1 2 3 4 5 6 i = 1 s/d n
A= 8 7 5 6 10 4
x=5
ketemu ← false
i=1
234
terdapat data yang bernilai 11.
1 2 3 4 5 6 i = 1 s/d n
A= 8 7 5 6 10 4
x=11
ketemu ← false
i=1
235
A[6] <> x {ketemu ← false}
i=6+1=7
for i=1 to n do
input(A[i])
endfor
input(x)
ketemu=false {inisialisasi belum
ditemukan}
i=1
236
endif
endwhile
1 2 3 4 5 6 i = 1 s/d n
A= 2 7 11 15 17 18
237
x=8
ketemu ← false
i=1
input(x)
238
ketemu=false {inisialisasi belum
ditemukan}
i=1
while (ketemu=false)and(i<=n)and(A[i]<=x)
do
if A[i]=x then
ketemu=true {menghentikan proses
pencarian}
posisi=i
else i=i+1 {maju ke elemen berikutnya}
endif
endwhile
239
pada array tersebut.
1 2 3 4 5 6 i = 1 s/d n
A= 18 17 15 11 7 2
x=16
ketemu ← false
i=1
240
Sebelum dilakukan pencarian, pada algoritma di bawah
ini array diasumsikan sudah diurutkan menurun terlebih
dahulu.
input(x)
ketemu=false {inisialisasi belum
ditemukan}
i=1
241
9.2 Metode Binary Search
Metode Binary Search atau sering pula dinamakan
pencarian biner, hanya digunakan untuk pencarian data
pada array yang sudah terurut.
242
array berikutnya.
1 2 3 4 5 6 i = 1 s/d n
A= 2 7 11 17 17 18
1 2 3 4 5 6 7 i = 1 s/d n
A= 5 7 8 11 12 14 15
243
posisi tengahnya dapat tepat berada di tengah.
Contoh kasus:
Di dalam suatu array tersimpan 6 buah data yang terurut
naik.
1 2 3 4 5 6 i = 1 s/d n
A= 2 7 11 17 17 18
input(x)
t=(n div 2)+1
et=A[t]
ketemu=false
if x=et then
ketemu=true
posisi=t
else
if x<et then
i=1
while
(ketemu=false)and(i<t)and(A[i]<=x) do
if A[i]=x then
244
ketemu=true
posisi=i
else i=i+1
endif
endwhile
else
i=t+1
while
(ketemu=false)and(i<=n)and(A[i]<=x) do
if A[i]=x then
ketemu=true
posisi=i
else i=i+1
endif
endwhile
endif
endif
if ketemu=false then write (“Data tidak
ketemu”)
else
write (“Data ditemukan”)
output (posisi)
endif
245
1. Membaca array data.
2. Apabila array belum terurut maka diurutkan dahulu.
3. Menentukan data yang akan dicari.
4. Menentukan elemen tengah dari array. Letak posisi
tengah dapat ditentukan dengan tengah=(n div
2)+1.
5. Jika nilai elemen tengah sama dengan data yang dicari
maka pencarian selesai.
6. Jika nilai elemen tengah tidak sama dengan data yang
dicari maka:
a. Jika nilai elemen tengah lebih besar daripada data
yang dicari maka pencarian dilakukan pada setengah
array kedua.
b. Jika nilai elemen tengah lebih kecil daripada data
yang dicari maka pencarian dilakukan pada setengah
array pertama.
input(x)
t=(n div 2)+1
et=A[t]
ketemu=false
246
if x=et then
ketemu=true
posisi=t
else
if x<et then
i=t+1
while (ketemu=false)and(i<n)and(A[i]>=x)
do
if A[i]=x then
ketemu=true
posisi=i
else i=i+1
endif
endwhile
else
i=1
while (ketemu=false)and(i<t)and(A[i]>=x)
do
if A[i]=x then
ketemu=true
posisi=i
else i=i+1
endif
endwhile
endif
endif
if ketemu=false then write (“Data tidak
ketemu”)
else
write (“Data ditemukan”)
output (posisi)
endif
247
9.3 Latihan
1.Misalkan diketahui suatu array dengan nama larik
sebagai berikut:
46 44 42 36 34 25 22 21 20 15 12 8 6 5 4
248
Daftar Pustaka
249
Computer Programming; Addison-Wesley Publishing
Company, Inc., 1985
4.Mano, M.M and Kime, C.R; Logic and Computer
Design Fundamentals; Prentice Hall, Inc., 2000
5.Saara Baase; Computer Algorithms Introduction to
Design and Analysis; Addison-Wesley Publishing
Company, Inc., 1993
6.T.E Bailey; Program Design with Pseudocode; Brooks
Cole Publishing Company, 1983
7.Tim Alton and Mitch Chapman; Programming with
Python; Prima Tech., 1999
8.Thomas A. Reed; An Introduction Algorithm Design
and Structured Programming; Prentice Hall, Inc.,
1988
Profil Penulis
250
Ilmu Pengetahuan Alam Universitas Gadjah Mada dan
pada tahun 2002 menyelesaikan Program Pascasarjana
Magister Ilmu Komputer Universitas Gadjah Mada. Sejak
tahun 1998 aktif menjadi pembicara di seminar-seminar
nasional dan sebagai konsultan spesialisasi network
security dan open source programming. Mulai tahun 2000
menjadi dosen tidak tetap di STMIK AMIKOM
Yogyakarta, sedangkan sejak tahun 2003 menjadi dosen
tetap di Institut Sains dan Teknologi AKPRIND
Yogyakarta.
251
6.Visual Downloader untuk Microcontroller AT89C2051
7.RDBMS dengan PostgreSQL di GNU/Linux
8.Struktur Data: Konsep dan Implementasinya dalam
bahasa C & Free Pascal di GNU/Linux
Sinopsis
252
informatika pada umumnya dan bidang pemrograman
pada khususnya. Dengan Logika Informatika akan
membantu mahasiswa mengembangkan daya penalaran
atau kerangka berpikir yang sistematis dalam memahami
masalah dan membuat perencanaan atau konsep
pemecahan masalah yang lebih baik sehingga dapat
menghasilkan yang tepat pula.
Implementasi Logika dan Algoritma dapat
dituangkan ke dalam beberapa bahasa pemrograman.
Buku ini menjelaskan konsep logika dasar dan
perancangan algoritma yang baik. Pada buku ini
banyak diberikan contoh kasus disertai alternatif solusi
penyelesaiannya dengan harapan pembaca dapat
mengembangkan sesuai dengan kreatifitas masing-
masing. Demikian pula dengan contoh-contoh latihan
diharapkan dapat membantu pembaca untuk lebih
memahami algoritma. Buku ini sangat cocok dan
berguna bagi mahasiswa yang sedang menempuh mata
kuliah Logika Informatika, Logika dan Algoritma,
Algoritma dan Pemrograman, Pemograman Komputer I
serta semua kalangan yang terarik mempelajari bidang
pemrograman.
253
254