Anda di halaman 1dari 158

Logika Pemrograman

TIKK 105
Definisi Logika
• Logika identik dengan masuk akal dan penalaran. Penalaran
adalah salah satu bentuk pemikiran. Pemikiran adalah
pengetahuan tak langsung yang didasarkan pada pernyataan
langsung pemikiran mungkin benar dan mungkin juga tak
benar.

• Definisi logika sangat sederhana yaitu ilmu yang memberikan


prinsip-prinsip yang harus diikuti agar dapat berfikir valid
menurut aturan yang berlaku

• Pelajaran logika menimbulkan kesadaran untuk


menggunakan prinsip-prinsip untuk berfikir secara sistematis.
Definisi Algoritma
• Algoritma adalah urutan langkah-langkah logis
penyelesaian masalah yang disusun secara
sistematis.

• Kata logis disini berarti benar sesuai dengan logika


manusia.

• Untuk menjadi sebuah algoritma, urutan langkah


yang ditempuh untuk menyelesaikan masalah harus
memberikan hasil yang benar.
PENGERTIAN ALGORITMA

• Metode yang tepat yang terdiri dari satu atau lebih


langkah berurutan yang harus diikuti untuk
mendapatkan pemecahan suatu masalah
• Metode khusus yang tepat dan terdiri dari
serangkaian langkah yang terstruktur dan dituliskan
secara sistematis yang dikerjakan untuk
menyelesaikan suatu masalah dengan bantuan
komputer
• Sekumpulan perintah yang mencerminkan alur logika
terhadap suatu persoalan yang akan diselesaikan
dengan menggunakan komputer
Hubungan antara algoritma,
masalah dan solusi

Masalah Algoritma Solusi

I P O
Contoh
• Isi bejana A dan bejana B akan saling ditukar

Bejana A Bejana B
Pemecahannya
Bejana B
Bejana A

Bejana B Bejana C
Bejana A
Bejana B Bejana C
Bejana A

Bejana B Bejana C
Bejana A

Bejana B Bejana C
Bejana A

Bejana B
Bejana A
Asal-usul kata algoritma
• Abu Ja’far Muhammad Ibnu Musa Al Khuwarizmi adalah
seorang penulis buku Arab yang berjudul Kitab Al Jabar Wal
Muqabala (Buku Pemugaran dan Pengurangan). Kata Al
Khuwarizmi dibaca orang Barat menjadi algorism.
• Kata algorism berarti proses menghitung dengan angka Arab.
Seseorang dikatakan algorist jika orang tersebut
menggunakan angka Arab.
• Kata algorism lambat laun menjadi algorithm disebabkan kata
algorism sering dikelirukan dengan kata arithmetic sehingga
akhiran –sm berubah menjadi –thm. Kata algorithm diserap
ke dalam bahasa Indonesia menjadi algoritma.
Domain algoritma

• Masalah : motivasi untuk membuat algoritma.


• Algoritma : prosedur untuk menyelesaikan masalah.
Seringkali satu masalah dapat diselesaikan dengan
lebih dari satu cara (banyak kemungkinan).
• Program: representasi formal dari suatu algoritma
dengan menggunakan bahasa pemrograman yang
bisa dimengerti oleh komputer.
• Proses : aktivitas menjalankan langkah-langkah
dalam algoritma.
Hal yang harus dipenuhi dalam
membuat algoritma
• Input : data yang harus diberikan pada
komputer
• Output: informasi yang akan diperoleh dari
komputer
• Logika: Merencanakan proses program.
Terdiri dari sejumlah instruksi yang mengubah
input menjadi output yang diinginkan.
Contoh Lain
• Ada 2 buah gelas. Satu berisi teh dan satunya
lagi berisi kopi. Bagaimana caranya menukar
isi masing-masing gelas?

teh kopi
Contoh Lain (Continue)
Algoritma
– Siapkan gelas cadangan X
X

– Tuangkan gelas yang berisi X teh


teh ke gelas cadangan

– Tuangkan gelas yang berisi teh


kopi
kopi ke gelas yang awalnya
dipakai teh

kopi X
– Tuangkan isi gelas
Latihan 1

Buatlah suatu algoritma untuk proses


pembuatan kopi yang rasa manisnya tepat
Latihan 2

Buatlah suatu algoritma untuk proses


aktivitas yang anda kerjakan dari pagi
hingga malam hari
Contoh Lainnya
• Algoritma untuk menentukan apakah suatu
bilangan merupakan bilangan ganjil atau
bilangan genap.
• Algoritmanya :
a. Masukkan bilangan yang akan ditentukan
b. Bagi bilangan dengan bilangan 2
c. Hitung sisa hasil bagi pada langkah b.
d. Bila sisa hasil bagi sama dengan 0 maka
bilangan itu adalah bilangan genap tetapi bila
sisa hasil bagi sama dengan 1 maka bilangan itu
adalah bilangan ganjil.
Latihan 3
• Buat algoritma mengurutkan 3 bilangan
acak!
Logika pemrograman
Proses pemrograman
1. Mendefinisikan masalah
 Menentukan Input, proses dan output
2. Menyiapkan algoritma
3. Coding
 Menentukan bahasa pemrogram yang dipakai
 Mengubah algoritma menjadi coding
4. Debugging & testing
5. Dokumentasi
 Definisi masalah
 Algoritma
 Source program
 Hasil test
Peranan algoritma
• Peran algoritma : fundamental (tidak ada
algoritma tidak ada program)
• Algoritma + struktur data = program
– Struktur data :teknik/cara penyusunan/
penyimpanan data dalam komputer
– “ memori seminim mungkin dan kecepatan
eksekusi semaksimal mungkin”
Karakteristik program yang baik

1. Integrity / keutuhan
2. Clarity / kejernihan (mudah & jelas)
3. Simplicity / kesederhanaan
4. Efficiency (memori)
5. Modularity
6. Generality
Syarat algoritma
• Menghasilkan solusi dalam waktu singkat
• Sederhana, jelas, tepat dan tidak menimbulkan
arti ganda
• Menggunakan bahasa standart
• Mudah diimplementasikan ke dalam bahasa
pemrograman
• Efektif
• Tiap operasi terdefinisi dengan jelas
• Menggunakan logika perhitungan/metode yang
tepat
• Semua proses harus berakhir
Notasi Algoritma
• Algoritma independen terhadap bahasa
pemrograman & jenis komputer
Struktur dasar algoritma
1. Sequence / urutan
Yaitu suatu proses akan dilakukan/diselesaikan
terlebih dahulu sebelum mengerjakan proses lain
(pengerjaanya dilakukan secara berurutan)
2. Selection / Pemilihan
Yaitu suatu proses pengkondisian yang digunakan
untuk menentukan urutan proses yang harus
dilakukan berdasarkan kriteria tertentu
3. Iterasi / looping / pengulangan
Yaitu suatu proses yang dapat dilakukan lebih dari
satu kali secara otomatis maupun berdasarkan
kriteria tertentu
Penyajian Algoritma
Penyajian algoritma

• Terdapat 2 bentuk penyajian :


1. Menggunakan bahasa natural
– Naratif
– Pseudocode
2. Menggunakan simbol/gambar
– Flowchart
– Postsaript, Nassischneidermann Diagram
• Tiap penyajian terdiri dari :
1. Bagian deklarasi
Yaitu bagian yang mendekalarasikan variabel-
variabel yang dibutuhkan dalam algoritma beserta
tipe datanya (bil. Bulat, bil. Pecahan, karakter,
text, pilihan/boolean)
2. Bagian deskripsi
Yaitu bagian yang menyatakan algoritma
pemecahan masalah
Naratif

• Yaitu cara penyajian algoritma dengan


menuliskan dalam bentuk kalimat-kalimat
suatu bahasa natural tertentu
• Merupakan cara termudah namun sering
membingungkan sehingga jarang
digunakan
Naratif

• Contoh : Seorang peserta test dengan nomor test tertentu harus mengerjakan
empat macam test. Hasil test tersebut adalah nilai_1, nilai_2, Nilai_3 dan
Nilai_4. Apabila rata-rata dari kempat nilai test tersebut lebih besar atau sama
dengan 60 maka peserta test itu lulus bila tidak gagal. Buat algoritma untuk
mencari hasil test dan predikat kelulusan dari seorang peserta test.

• Pemecahan 1 :
Deklarasi : no peserta = text, nilai_1, nilai_2, nilai_3 dan Nilai_4 = bil. Bulat,
rata-rata = bil. Pecahan, predikat = text.
 
Deskripsi : Inputkan nomor test peserta, lalu inputkan nilai_1, nilai_2, nilai_3
dan Nilai_4. Hitung rata-rata nilai peserta dan tentukan predikatnya dengan
membandingkan rata-rata nilai dengan 60, bila nialai rata-rata lebih besar atau
sama dengan 60 berarti lulus bila tidak gagal.
• Pemecahan 2 :
Deklarasi :
no peserta = text,
nilai_1, nilai_2, nilai_3 dan Nilai_4 = bil. Bulat,
rata-rata = bil. Pecahan,
predikat = text
Deskripsi :
1. Inputkan nomor peserta
2. Inputkan nilai_1, nilai_2, nilai_3 dan Nilai_4
3. Hitung rata-rata nilai peserta
4. Bandingkan nilai rata-rata dengan 60. Bila nilai rata-rata >= 60
lakukan langkah 5, bila tidak lakukan langkah 6
5. Nomor peserta tersebut berpredikat lulus
6. Nomor peserta tersebut berpredikat gagal
Contoh Penulisan Pseudocode
1. Untuk proses pembacaan data 4. Untuk proses inisialisasi nilai awal
READ student_name Initialize total accumulators to zero
GET system-date Set student_cont to 0
READ member_1, member_2 Store cust_num in last_cust_num
BACA record mahasiswa 5. Untuk proses perbandingan / seleksi
BACA nilai_mahasiswa
IF student is parttime THEN
2. Untuk proses penyajian informasi ADD 1 to part_time_count
PRINT ‘STMIK Widya Dharma’ ELSE
WRITE student_record ADD 1 to full_time_count
DISPLAY ‘Invalid’ ENDIF
CETAK ‘STMIK Widya Dharma’ 6. Untuk proses pengulangan
CETAK record_mahasiswa
DO WHILE student_count < 50
3. Untuk proses aritmatika READ student record
PRINT student_name
ADD number to total ADD 1 to student_total
total = total + number ENDDO
PRINT total by student_count
a=a*b
x=y+z
Contoh Penulisan Pseudocode
Contoh Lain untuk Perbandingan / Seleksi
a) Simple IF (Without ELSE)
IF nilai a = nilai b THEN
CETAK ‘Nilai A = Nilai B’
ENDIF

b) Simple IF (With ELSE)


IF nilai a = nilai b THEN
CETAK ‘Nilai A = Nilai B’
ELSE
CETAK ‘Nilai A ≠ Nilai B’
ENDIF
c) Combined IF
IF (nilai a = nilai b) AND (nilai a >= 1) THEN
CETAK ‘Nilai A = Nilai B’
ENDIF

IF (usia_siswa >= 6) AND (jns_kelamin = ‘Pria’) OR (nilai_tes >= 60) THEN


total_siswa  total_siswa + 1
ENDIF
Contoh Penulisan Pseudocode
Contoh Lain untuk Perbandingan / Seleksi

d) Linier Nested IF e) Non-Linier Nested IF

IF nilai >= 80 THEN IF nilai >= 50 THEN


CETAK ‘Grade = A’ IF nilai >= 60 THEN
ELSE IF nilai >= 70 THEN IF nilai >= 70 THEN
CETAK ‘Grade = B’
IF nilai >= 80 THEN
ELSE IF nilai >= 60 THEN
CETAK ‘Grade = C’
CETAK ‘Grade = A’
ELSE IF nilai >= 50 THEN ELSE
CETAK ‘Grade = D’ CETAK ‘Grade = B’
ELSE ENDIF
CETAK ‘Grade = E’ ELSE
ENDIF CETAK ‘Grade = C’
ENDIF ENDIF
ENDIF
ELSE
ENDIF
CETAK ‘Grade = D’
ENDIF
ELSE
CETAK ‘Grade = E’
ENDIF
Flowchart

• Merupakan suatu bagan yang menggambarkan urutan


instruksi dan hubungan antar proses dengan
menggunakan simbol-simbol tertentu
• Merupakan diagram alir yang menggambarkan suatu
tahapan penyelesaian masalah secara sederhana,
terurai, rapi dan jelas dengan menggunakan simbol-
simbol standart
• Merupakan cara klasik untuk menyajikan keseluruhan
urutan proses/logika dari suatu persoalan (cocok untuk
persoalan sederhana)
Flowchart
• Dibedakan menjadi :
1. System flowchart
Menggambarkan suatu sistem secara global (urutan
prosedur/proses dari suatu persoalan)
2. Program flowchart / Aplication Flowchart /
Logic Flowchart
Menggambarkan logika suatu modul
program/hubungan antar perintah/instruksi
 
Simbol dasar Flowchart

     
   
Penghubung dalam
Operasi input-output satu halaman
Proses

     
   
 
  Penghubung antar Menunjukkan arah  

halaman atau proses/langkah


berikutnya
Simbol-simbol untuk program
flowchart

      
     
   
Simbol persiapan Simbol awal dan Simbol keputusan
akhir
Simbol-simbol untuk system flowchart

     
     
 
 
Simbol dokumen Simbol Media penyimpan
(single /multi Simbol kegiatan manual offline (arsip-manual)
dokumen)
     
     
   
Proses pengurutan Simbol Pita mangnetik Simbol harddisk
data (manual)
     
     
   
Simbol diskette Simbol manual input Simbol display

     
   

Simbol karto plong Simbol drum magnetik Simbol pita kertas


  berlubang
Struktur Dasar

• Sequence / urutan
Proses A

Proses B

• Pemilihan
If condition is true
True
Do task A
Kondisi else
Do task B
False end-if

Task A Task B
If Condition 1 id true
Do task A
True False Else
Kondisi If Condition 2 is true
Dos Task B
T Else
Kondisi False If Condition 3 is true
Task A
Do Task c
Task B false Else
True Kondisi :
:
Task B Task B End-if
end-if
end-if

Case of Condition
Condition-1 : Do Task-A
Kondisi Condition-1 : Do Task-A
Condition-1 : Do Task-A
:
Task A Task B Task C Task N :
End-case
Iterasi/Looping/pengulangan

Proses A
Kondisi

True Proses B
kondisi
False Proses A

True
Proses B

For ….to…do
atau
for … downto ….do

Proses A
Contoh
Mulai

Nilai_1 0, nilai_2 0, Nilai_3 0,


Nilai_4 0, Rerata  0,
predikat ’ ‘ ,

Nomor test,
Nilai_1, Nilai_2,
Nilai_3, Nilai_4

Rerata  (Nilai_1 + nilai_2 +


nilai_3+Nilai_4 ) 4

T
Predikat  “lulus”
Rerata
< 60
Y

Predikat  “gagal”

Selesai
Nassischneidermann Diagram

• Yaitu penyajian Algoritma dengan


menggunakan simbol-simbol tertentu
• Flowchart terstruktur yang tidak
menggunakan anak panah sebagai
penunjuk proses
• Strukturnya lebih baik daripada flowchart
karen atidak ada GOTO dan JUMP
Struktur Data

1. Urutan / Sequence 3. Pengulangan / iterasi/looping

Operation A While Condition

Operation B
Operation
Operation C
2. Pilihan/ selection
Case Of
Condition
Yes No
Value A Value B Value C Value D
Operation A Operation B
Operasi A Operasi B Operasi C Operasi D

Condition
Yes No

Operation A No.Operation
Contoh : Mencari total & Rata-rata
Total 0 , Counter  0, bil  0

Read bil

While bil not = 99

Total  total + bil

Counter  Counter + 1

Read bil

If Counter > 0
Yes No

Average  total / counter Average  0

Print Total, Average


Pseudocode
• Syarat penulisan
1. Masing-masing operasi dijelaskan dengan
singkat dan tepat dalam statement bahasa
inggris
2. Sekelompok Statement dapat dibentuk dalam
modul-modul atau prosedur-prosedure yang
diberi nama
Struktur Algoritma

1. Sequence/urutan operasi dihasilkan dengan penulisan


instruksi yang berurutan
2. Selection/pilihan dilakukan dengan menggunakan statement :
(tunggal, nested if, case of)
If kondisi then If kondisi then Case of variabel
Statement A Statement A
Statement B : Statemen A
: Else If kondisi then Statemen A
Endif Statement A
: :
Else If kondisi then
If kondisi then Statement A End case
Statement A :
Statement B Else
: Statement A
Else :
Statement A Endif
Statement B Endif
: Endif
Endif
Struktur dasar algoritma

3. Iterasi/Looping/pengulangan dihasilkan dengan mengikuti


statement :
While kondisi Repeat
Statement A Statement A
Statement B Statement B
: :
End while Until Kondisi

For batas_awal to batas_ akhir do For Batas_akhir downto batas_awal do


Statement A Statement A
Statement B Statement B
: :
End for End for
Contoh :
1. Pilihan sederhana => Untuk menghitung jumlah orang dewasa dan
anak-anak
If Employe_age >= 18 then Adult_counter  adult_counter + 1
Else Junior_counter  junior_counter +1

2. Pilihan ganda => untuk menghitung jumlah pegawai


Case of Employe_skill_code
“E” : Engineer_counter  Engineer_counter + 1
“A” : Accountant_counter Accountant_counter + 1
“ P” : Programmer_counter  Programmer_counter +1
End case
3. Pengulangan => menampilkan “STIKI” sebanyak lima
Counter  5
While Counter > 0 then
Write(“STIKI”)
Counter  counter - 1
End while
Bahasa Algoritma

Disajikan dalam bentuk urutan proses sbb :


• Pada bagian dituliskan nama algoritma dan
definisi tipe variabel yang digunakan
• Tiap langkah dijelaskan (tujuan/kegunaan),
penulisannya dalam tanda [ ….]
• Diakhiri dengan kata exit dan tanda dipojok
kanan, yang berfungsi sebagai physical end (bila
tidak ada simbol tersebut berarti logical end);
atau return untuk sub algoritma
Contoh
Algoritma Testing
Digunakan untuk menentukan nilai rata-rata dari empat data nilai
seorang peserta test dan menentukan predikatnya. Bila nilai rata-rata
>= 60 maka berhasil jika tidak gagal. Variabel yang diguankan : notest
bertipe text, nilai1, nilai2, nilai3, nilai4 bertipe integer, rata bertipe real.
1. [inputkan nomor test dan keempat nilai]
Read(notest, nilia1, nilai2, nilai3,nilai4)
2. [Hitung rata-rata nilai]
rata  (nilai1 + nilai2 + nilai3 +nilai4) 4
3. [proses pembandingan untuk menentukan apakah siswa tersebut lulus
atau gagal dan menampilkan hasilnya]
If rata >= 60 then write(‘LULUS’)
Else write(‘GAGAL’)
endif
4. [selesai]
Exit
ITERATION / LOOPING / PENGULANGAN
Iterasi/Looping/Pengulangan
• Yaitu suatu proses yang dilakukan lebih dari
satu kali
• Looping dapat dibedakan menjadi :
1. Condition Looping
Yaitu suatu bentuk pengulangan yang ditandai
dengan adalah suatu pengkondisian /
pengecekan syarat atau batasan
pengulangan
2. Loop Controlled Input
Yaitu suatu bentuk pengulangan dimana
banyaknya pengulangan dipengaruhi dengan
inputan dari input device
3. Counted Loop
Yaitu suatu bentuk pengulangan yang sudah
diketahui dengan pasti batasan/jumlah
pengulangannya
4. Nested loop
Yaitu suatu bentuk pengulangan bersarang
(didalam loop terdapat loop lain yang
merupakah bagian dari loop diluarnya)
Conditional loop
• Bottom tested loop

Repeat
Statement A
Statement B
Proses yang diulang :
Until Kondisi

kondisi
salah
benar

Proses B
Conditional Loop

 Top Tested Loop

While kondisi do
Statement_1
False
kondisi Statement_2
:
True Statement_n
endwhile
Proses yang diulang Proses B
Loop Controlled input

• untuk mengolah sejumlah record dengan proses yang sama


( jumlah record harus diketahui => berapa kali proses diulang).
• digunakan pengontrolan melalui data yang dikirim lewat input
device
• Dibedakan menjadi :
1. Counted controlled input
2. Sentinel Controlled Input
Counted controlled input
• Jumlah record yang akan diolah diinputkan lebih
dahulu melalui input device sebelum melakukan
proses pengolahan record.
• Contoh :
Buat Algoritma untuk menentukan Nilai akhir dari sejumlah mahasiswa
yang mengikuti mata kuliah A. Nilai akhir dihitung berdasarkan
pembobotan sbb : nilai test kecil (tk) 20%, middle test (mt) 30% dan test
akhir (ta) 50%.Jumlah mahasiswa diinputkan melalui keyboard ke dalam
variabel jumlah. Untuk tiap mahasiswa yang diinputkan adalah data
tentang nama, nilai tk, mt dan ta.
Deklarasi :
Jumlah_data, dummy, tk,mt,ta : integer
Nama : text
Deskripsi
Read (jumlah_data)
Dummy  0
Repeat
read(nama, tk, mt,ta)
na  0.20*tk + 0.30 *mt +0.50*ta
write (‘Nama =‘, nama)
write(‘nilai test =‘, tk)
write(‘nilai middle test =‘, tk)
write(nilai final test =‘, ta)
write(nilai Akhi =‘, ta)
dummy  dummy +1
Until dummy >= jumlah_data
Sentinel Controlled Input
• Salah satu field record digunakan sebagai
key, proses akan berhenti jika isi key field
adalah suatu nilai tertentu.
• Harus diperhatikan bahwa record dengan isi
key field ini tidak boleh diproses
Deklarasi :
tk,mt,ta : integer
Nama : text
Deskripsi
While nama <> ‘*****’
read(nama, tk, mt,ta)
na  0.20*tk + 0.30 *mt +0.50*ta
write (‘Nama =‘, nama)
write(‘nilai test =‘, tk)
write(‘nilai middle test =‘, tk)
write(nilai final test =‘, ta)
write(nilai Akhir =‘, ta)
EndWhile
Counted loop
• digunakan suatu variabel yang disebut variabel pengontrol
loop, dimana nilai dari variabel ini digunakan untuk
mengontrol berapa kalli proses harus diulang.
• Nilai variabeeel pengontrol loop akan berubah secara
otomatis ke urutan berikutnya
• Loop akan berhenti jika nilai variabel pengontrol loop telah
melampaui nilai yang terakhir.
• Nilai dari variabel pengontrol loop dapat dalam order naik
( A = 1, 2, ..., 10) maupun order turun (A = 10, 9,... 1)
bahkan pada bahasa pemrograman tertentu
diperbolehkan adanya nilai negatif (A= -8, -7,...-1) atau
juga adanya step (A = 1, 3, .... 15)
Deklarasi :
Jumlah_data, dummy, tk,mt,ta : integer
Nama : text
Deskripsi
jumlah_data  5
for dummy  1 to jumlah_data do
read(nama, tk, mt,ta)
na  0.20*tk + 0.30 *mt +0.50*ta
write (‘Nama =‘, nama)
write(‘nilai test =‘, tk)
write(‘nilai middle test =‘, tk)
write(nilai final test =‘, ta)
write(nilai Akhi =‘, ta)
endfor
Nested Loop

• Yaitu suatu loop yang didalamnya terdapat


satu atau lebih loop -loop lain yang lebih kecil.
• Pada nested loop harus diperhatikan bahwa
loop yang lebih kecil harus benar-benar
didalam loop induknya dan akhir dari loop
yang lebih kecil tidak boleh melampaui loop
induknya.
Deklarasi :
mata_kuliah, nama : text
tk,mt,ta,na : real

Deskripsi
input(mata_kuliah)
While matakuliah <> ‘habis’
output(‘nama mata kuliah =‘, mata_kuliah)
input(nama, tk,mt,ta)
While nama <> ‘*****’
na  0.20*tk + 0.30 *mt +0.50*ta
output (‘Nama =‘, nama)
output(nilai Akhir =‘, ta)
input(nama, tk,mt,ta)
endwhile
input(mata_kuliah)
endwhile
Pemetaan

Conditional Loop Bottom tested loop


(Repeat … until …)
Top tested loop
(While …do… endwhile)

Loop Controlled input Counted controlled input


Looping Sentinel controlled input

Counted loop

Nested loop
Latihan
1. Tampilkan bilangan genap yang berada diantara 0
sampai 100.
2. Buatlah flowchart yang berfungsi untuk
memberikan keterangan atas suatu angka yang
diinputkan, apakah angka tersebut merupakan
bilangan ganjil atau genap. Proses diatas akan
tetap dilakukan (diulang terus) sampai angka yang
diinputkan adalah 0
3. Perkalian sebenarnya merupakan proses
penjumlahan yang dilakukan secara berulang-
ulang sampai batas pengalinya.
4. Proses Pembagian sebenarnya merupakan proses
pengurangan yang dilakukan secara berulang
sampai bilangan yang dibagi lebih kecil dari
pembaginya. Sisa dari pengurangan tersebut
merupakan sisa dari proses pembagian,
sedangkan banyaknya pengurangan merupakan
hasil baginya.
ALGORITMA & SUB
ALGORITMA
Algoritma & sub Algoritma
• Menurut Al-Khuwarizmi
Untuk mencapai tujuan besar, maka tujuan
tersebut harus dibagi-bagi menjadi tujuan kecil
sampai tujuan kecil itu merupakan tujuan yang
dapat dicapai berdasarkan kondisi dan potensi
yang dimiliki saat itu.
Pemrograman Modular
Memecah program besar menjadi beberapa sub
program (routine) yang lebih kecil
• Keuntungan
– menjadi sederhana
– Menghindari penulisan yang sama berulangkali
– Dapat mengurangi panjang program/algoritma
Sub Algoritma
• Komponen algoritma yang terpisah dari
algoritma utamanya atau berdiri sendiri tapi
diproses dibawah kendali algoritma utama
• Dibedakan menjadi :
1. Procedure
2. Function
Gambaran umum
Algoritma utama Sub Algoritma A
: :
: Return
Panggil Sub Algoritma A
:
Panggil Sub Algoritma B Sub algoritma B
: :
exit return
Procedure
• Sub algoritma yang diaktifkan dengan perintah
Call dan diikuti dengan nama procedure dan
parameternya;
• mempunyai satu output atau lebih; atau sama
sekali tidak
Procedure
Format Penulisan :
– Procedure nama_procedure;
– Procedure nama_procedure[parameter1, parameter2 ,……]

• Parameter dapat berfungsi sebagai varibel input


(parameter nilai) maupun output (parameter variabel) bagi
suatu procedure {keduanya disebut parameter formal}
• Procedure boleh tidak mempunyai parameter output
maupun input.
• Contoh :
– Procedure ReSet
– Procedure Tambah(a,b,c  bil. Bulat)
– Procedure mencetak header
Procedure

• Format pemanggilan
– Call nama_procedure
– Call nama_procedure[argumen1, argumen2 ,……]

• Argumen disebut juga dengan parameter


aktual
• Argumen dapat berupa : nilai, konstanta,
ekspresi, variabel maupun sub algoritma
Procedure
• Jumlah dan tipe argumen harus sesuai dengan jumlah
dan tipe parameter formal

• Contoh :
Procedure Bagi(dibagi, pembagi  bil. Bulat; hasil,sisa  bil.
real)

Call Bagi(para_1,para_2,para_3,Para_4)
Procedure

• Pada waktu pemanggilan argumen yang berfungsi


sebagai output harus berupa variabel

• Contoh :
– Procedure Bagi[dibagi, pembagi,hasil,sisa]
– Call bagi(10,5,hasilnya,sisanya)
Contoh sub algoritma : Contoh pemanggilan :

Deklarasi
Procedure Tukar[X,Y  bil. bulat]
A,B  bil. bulat
Deklarasi Deskripsi
Sementara bil bulat Read (A,B)
Dekripsi : Call Tukar [A,B]
Sementara  X Write(A, ‘ ‘,B)
XY
Y  Sementara
Return
Function
• Sub algoritma yang diproses langsung dalam
suatu ekspresi dan selalu menghasilkan satu nilai
output
• Pada awal penulisan sub algoritma function harus
dituliskan nama dan parameternya
Formatnya :
Function nama(daftar parameter)

Contoh :
Function RataRata(Nilai_1, Nilai_2, Nilai_3, Nilai_4 bil.
bulat)
Function

• Parameter adalah variabel yang mengatur proses


sub algoritma tersebut.
• Hanya mempunyai satu output, nilai output ini
dikeluarkan ke algoritma utama melalui nama
function tersebut. Jadi dalam function harus ada
proses yang memasukkan nilai ke dalam variabel
yang bernama sama dengan nama function.
Function

• Parameter berfungsi sebagai input dan boleh


lebih dari satu. Function harus diakhiri dengan
RETURN yang mengembalikan kontrol
algoritma ke algoritma utama.
• Function digunakan dalam suatu ekspresi
dengan cara menuliskan nama dan
argumennya dalam ekspresi itu. Dimana
argumen dapat berupa :
Bilangan konstan
variabel yang nilainya telah didefinisikan
ekspresi
Function
• Jumlah dan tipe argumen harus sama dengan
parameter yang bersesuaian karena pada
waktu function diproses terjadi korespondensi
antara argumen dan parameter yang
bersesuaian atau dengan kata lain argumen
dimasukkan ke parameter yang bersesuaian.
• Jadi argumen adalah nilai tertentu yang
diisikan ke parameter ketika sub algoritma itu
dipanggil.
Contoh
Buatlah function untuk menghitung nilai =
A[1]*X1 + A[2]*X2 + A[3]*X3 +...+ A[n]*Xn +
konstan. Dimana function ini bertipe real. A
adalah array bertipe integer, untuk menyimpan
koefisien. n adalah integer untuk menyatakan
pangkat. Konstan dan X adalah integer. I
bertipe Integer.
Variabel Lokal & Variabel Global
• Variabel yang didefinisikan dalam procedure/function bersifat
lokal terhadap procedure/function tersebut dan dinamakan
variabel lokal.
• Variabel lokal tidak mempunyai pengaruh diluar
procedure/function dan akan lenyap setelah
procedure/function itu dieksekusi.
• Jadi variabel lokal tidak dikenal diluar procedure/function yang
mendefinisikannya, hanya nama procedure/function yang
dikenal sub algoritma.
• Variabel yang didefinisikan pada algoritma utama akan
dikenal dan disebut variabel global.
Contoh
Buat procedure untuk mereset nilai-nilai yang dimasukkan.
semua variabel bertipe integer.

Prosedure Reset [m,n,x]


Algoritma Utama
m0 Deklarasi
n0 a,b,c,x,y,z : integer
x0 Deskripsi
a0 Read (a,b,c,x,y,z)
Call Reset (b,c,y)
return
Write(a,b,c,x,y,z)
Exit
Bila algoritma tersebut dieksekusi, dimana nilai
inputnya sbb :

a = 10 b = 20 c = 30
x = 40 y = 50 z = 60

Maka Hasilnya :
a=0 b=0 c=0
x = 40 y=0 z = 60
Keterangan :
• a adalah variabel global yang dikenal di algoritma utama
maupun di sub algoritma karena disub Algoritma reset
nilai a (diisi 0) maka nilai a pada algoritma utama juga
akan berubah menjadi 0.
• Ada 2 variabel x, pada sub algoritma yang merupakan
variabel lokal dan pada algoritma utama yang merupakan
variabel global.
• Nilai variabel lokal x tidak akan dikenal oleh algoritma
utama sehingga nilai x pada algoritma utama tetap 40
walaupun pada sub algoritma nilai x diberi nilai 0.
• Perhatikan bahwa parameter x pada algoritma utama
dipanggil dengan argumen y sehingga nilai variabel y
yang direset.
• Variabel lokal dapat diubah menjadi variabel global
dengan menggunakan perintah public
HUBUNGAN BERULANG &
REKURSIF
Rekursif
• Rekursif adalah procedure atau function yang
mengandung atau mendefinisikan dirinya sendiri
• Setiap suatu procedure/function dipanggil maka nilai
argumennya akan berubah dan proses berhenti jika
telah mencapai kondisi tertentu
• Prinsip yang digunakan adalah LIFO (Last In Last
Out)
Rekursif dibedakan menjadi :

• REKURSIF LANGSUNG
Yaitu bila procedure/function tersebut memanggil dirinya
sendiri

• REKURSIF TIDAK LANGSUNG


Yaitu bila Procedure /function X memanggil procedure/
function lain dimana dalam procedure/function tersebut
terdapat proses untuk memanggil Procedure /function X
Contoh rekursif langsung

Procedure tampil
Write (‘Halo’)
I ← I +1
If I < 5 then call tampil
Endif
return
Contoh rekursif langsung

Function faktorial (n)


Hasil ← 1 Function faktorial(n)
If (n=0) then hasil ← 1 If (n=0) then faktorial (n) ← 1
Else Else
For j ← 1 to n do faktorial(n) ← n * faktorial (n-1)
Hasil ← hasil * j endif
Endfor
Return
Endif
faktorial ← hasil
Return
Mekanisme
Function faktorial(n)
If (n=0) then faktorial (n) ← 1
Else faktorial(n) ← n * faktorial (n-1)
Return

Misal n = 4

Faktorial(0) 1
Faktorial(1) 1 * faktorial(1-1) 1*1
Faktorial(2) 2 * faktorial(2-1) 2 * (1 * 1)
Faktorial(3) 3 * faktorial(3-1) 3 * (2 * (1 * 1))
Faktorial (4) 4 * faktorial(4-1) 4 * (3 * (2 * (1 * 1)))
Contoh rekursif tak langsung

Procedure contoh1
Writeln (‘Stiki Malang’)
Call contoh2
Return
 
Procedure contoh2
Write (‘Jl. Tidar 100’)
For I ← 1 to 3 do Call contoh1
Write(‘OK’)
Return
Function pangkat (x, y)
Hasil ← 1
If y = 0 then pangkat(x,y) ←1
Else
Hasil ← x * pangkat(x, y-1)
Endif
Return
 
ARRAY
Satu dimensi & multi dimensi
Definisi
• Merupakan tipe terstruktur yang mempunyai satu
nama dan satu tipe data, serta elemen dalam
jumlah yang tetap sehingga untuk membedakan
antar data yang satu dengan yang lain digunakan
indek
• Posisi tiap-tiap elemen dinyatakan sebagai nomor
indek yang dapat diakses melalui nama
variabelnya diikuti nomor indek yang diapit dalam
tanda kurung siku ( [ ] )
definisi
• Satu identifier bisa menyimpan lebih dari satu nilai /
elemen
• Memiliki karakteristik spt yg distrukturkan dan tipe
tiap elemennya sama
• Bentuk umum :

Nama_variabel = Array [ tipe_indek ] of tipe_data

Keterangan :
Tipe indek adalah batasan indek array
• Parameter tipe index :
– menentukan banyaknya elemen array
– Boleh bertipe apa saja kecuali tipe berkas (file)
– Bila bertipe ordinal (–32768 sampai dengan 65535)
struktur array tidak boleh melebihi 65520
– sub jangkauan / sub range harus ditulis batas bawah dan
batas atasnya dengan dipisahkan tanda titik-titik ( .. )
Pengaksesan array
• Dapat dilakukan dengan cara :
1. langsung pada index yang dibutuhkan
Contoh :
Write (Data[3])
read (Data[10])
2. menggunakan iterasi untuk pembacaan seluruh array
Contoh :
For I  1 to 10 do
Write (Data[i])
Endfor
Pemberian nilai Pada Array
• Dapat dilakukan dengan cara :
1. Memberikan nilai secara langsung pada indek yang
diinginkan
Contoh :
L[1]  “Mira”
Data[5] 1000
2. Menggunakan iterasi/looping untuk memberi nilai mulai
index pertama sampai terakhir
Contoh :
For I  1 to 10 do
Data[I]  0
Endfor
Contoh
Deklarasi :
Grade : ‘A’..’E’
Nilai :char
Frek : array[grade] of integer
Cek : grade
Deskripsi :
For cek = ‘A’ to ‘E’ do
Frek[cek]  0
Endfor
For I  1 to 10 do
Repeat
Write(‘masukkan nilai siswa ke’,I,’=’)
Read(nilai)
Nilai  upcase(nilai)
Until nilai in[‘A’..’E’]
Frek[nilai]  frek[nilai]+1
Endfor
Array Multi Dimensi
• Bentuk umum :
Tmatrix = Array [tipe_index_1,tipe_index_2,…..] of tipe data;

• Dimensi Tidak dibatasi, namun strukturnya tidak


boleh lebih dari 65520 byte
• Banyaknya tipe_index menentukan banyaknya
dimensi
Contoh array 2 dimensi
Deklarasi
A,B,C : array [1..2,1..2] of integer
I, J : integer
Deskripsi
For I  1 to 2 do
For J  1 to 2 do
Read(A[I,J])
Read(B[I,J])
C[I,J]  A[I,J] + B[I,J]
Endfor
Endfor
 
For I  1 to 2 do
For J  1 to 2 do
Write(C[I,J])
Endfor
Endfor
Tipe Data String (Array Khusus)

• Alasan :
– Elemen 1 dengan index 0 digunakan oleh Pascal sebagai
penenda panjang array yang bersangkutan
– Dapat dikenai operasi khusus ( + untuk penggabungan)
– Panjang max adalah 255 karakter
• Bentuk umum :
Type
Pengenal = string<[panjang]>;
Keterangan :
Panjang adalah bilangan bulat (1 – 255 karakter)
Bila variabel ini tidak ada maka panjanganya adalah 255
karakter
• Karakter string dapat dimanipulasi seperti array
• Procedure/ Function standart yang dapat digunakan (pada Pascal) :

Procedure/function Kegunaan Contoh


Length (…..) Untuk mengetahui panjang string Hasil := length(data);
Concat (…,…) Untuk menggabungkan 2 string Hasil :=
concat(‘STIKI’,’MALANG’);
Copy(…,….,…) Mengambil beberapa karakter Kota :=’MALANG’;
mulai pada posisi tertentu Hasil := Copy(kota,2,3)
sejumlah yang ditentukan
Insert(…,….,…) Menyisipkan string Kota := ‘ MALANG’;
Insert(‘STIKI - ’,kota,1);
Delete Menghapus string Delete(kota,7,2)
Pencarian data
definisi
• Searching/Pencarian adalah suatu proses
menemukan nilai dari sekumpulan nilai yang
bertipe sama
• Setiap aktifitas pengolahan data (insert,
update, delete, laporan) selalu/hampir selalu
diawali dengan searching
• Hasil dari pencarian dapat beruapa
– informasi keberhasilan proses pencarian
– index tempat data berada
– perubahan status (ketemu  false, atau ketemu
 true)
• Pencarian data dibedakan menjadi dua yaitu :
1. Internal search
• Pencarian data yang dilakukan pada struktur internal (dalam
memori utama)
• Berupa array
• Ukuran relatif kecil
2. External search
• Pencarian yang dilakukan pada sekumpulan data yang
tersimpan dalam memori sekunder (disk/tape)
• Berupa file / arsip
• Ukran relatif besar
External search
• Langkah pencarian
1. Membagi sekumpulan data dalam file menjadi
beberapa blok data yang berukuran tidak lebih
besar dari memori yang tersedia
2. Tiap bolk data disalin ke memori dan elemennya
dicek satu persatu
Internal search
• Dibedakan menjadi :
1. Sequential Search

2. Binary search
Sequential Search
• Proses membandingkan nilai setiap elemen array
satu per satu secara berurutan dari elemen pertama
sampai data yang dicari ditemukan atau sampai
pada elemen terakhir
• Bila data yang dicari kembar maka data pada posisi
pertama yang akan diacu dan diproses
• Kelemahan :
– Lambat, waktu pencarian sebanding dengan jumlah
element array
– Tidak Praktis, makin banyak data makin lama proses
pencariannya
Deklarasi:
X, K, N : integer
L : array [1..100] of integer
 
Deskripsi
K1
While (K < N) and L[K]  X do
K  K+1
Endwhile
If L[K] = X then
Write(‘data ketemu pada indek ke’, K)
Else Write (‘data tidak ketemu)
Endif
Binary Search
• Syarat : Array harus urut
• Keuntungan :
– Proses pencari lebih cepat dibandingkan dengan
sequential seacrh karena jumlah pengecekan
sebanyak 2Log (N) kali sedangkan sequential search
sebanyak n kali.
– Untuk array yang berukuran 256 element
Sequential search Binary search
Pembandingan elemen Pembandingan dilakukan
dilakukan sebanyak 256 kali sebanyak 2Log (256) = 8 kali
Langkah pencarian
1. Bagi dua elemen array pada elemen tengah, yaitu elemen dengan
indek K= (I+J) div 2
Elemen K atau L[K], membagi array menjadi dua bagian yaitu :
 bagian kiri L[I,J]
 bagian kanan L[k+1..J]
2. Cek apakah L[K] = cari
 Jika L[K] = cari, pencarian data dihentikan karena sudah ketemu
 Jika L[K]  cari maka harus ditentukan apakah pencarian akan
dilakukan di bagian kiri atau kanan
 Bila L[K] < cari, maka pencarian dilakukan di bagian kiri ( j = k-
1)
 Bila L[K] > cari, maka pencarian dilakukan di bagian kanan (I =
k+1)
3. Ulangi langkah a dan b sanpai cari ditemukan atau I > J (akhir dari
array)
Deklarasi:
I,J,K, Cari : integer
Ketemu : boolean
L : array[1..100] of integer
Deskripsi:
I1
JN
Ketemu  false
While (Not Ketemu) and (I <= J) do
K  (I+J) div 2
If L[K] = cari then ketemu  true
Else
If L[K] > cari then I  K+1 {Bagian kanan}
Else J  K-1 {Bagian kiri}
Endif
Endif
Endwhile
  If ketemu then write (‘data ketemu pada posisi’,K)
Else write(‘data tidak ketemu’)
Endif
Contoh Ilustrasi
• Misal array yang berukuran 8 elemen

Index 1 2 3 4 5 6 7 8

Data 5 8 12 18 25 37 39 50

Misal data yang dicari adalah 18 (cari = 18)


Langkah 1
I=1
J=8
Indek elemen tengah : K = (1+8) div 2 = 4 (diarsir)

Index 1 2 3 4 5 6 7 8

Data 5 8 12 18 25 37 39 50

kiri kanan
Langkah 2
L[4] = cari =18 ? ya… (cari ditemukan, pencarian dihentikan)
 
• Misal data yang dicari adalah 37 (cari = 37)
Langkah 1
• I=1
• J=8
• Indek elemen tengah : K = (1+8) div 2 = 4 (diarsir)

Index 1 2 3 4 5 6 7 8

Data 5 8 12 18 25 37 39 50

kiri kanan
• Langkah 2
• L[4] = cari = 37 ? tidak
• Tentukan arah pencarian dengan melakukan pengecekan
• Data[4] > 37 ? tidak…. Cari ke bagian kanan
• I = K+1 = 4+1 =5
• J = 8 (tetap)
• Indek tengah : K = (5+8) div 2 = 6

Index 1 2 3 4 5 6 7 8

Data 5 8 12 18 25 37 39 50

kiri
kanan

Cek apakah L[6] = cari = 37 ?


Ya…. Pencarian dihentikan/ketemu
• Misal data yang dicari adalah 8 (cari = 8)
• Langkah 1
• I=1
• J=8
• Indek elemen tengah : K = (1+8) div 2 = 4 (diarsir)

Index 1 2 3 4 5 6 7 8

Data 5 8 12 18 25 37 39 50

kiri kanan
Langkah 2
L[4] = cari = 8 ? tidak
Tentukan arah pencarian dengan melakukan pengecekan
Data[4] > 8 ? ya…. Cari ke bagian kiri
I = 1 (tetap)
J = K-1 = 4-1=3
Indek tengah : K = (1+3) div 2 = 2

Index 1 2 3 4 5 6 7 8

Data 5 8 12 18 25 37 39 50

kiri
kanan

Cek apakah L[2] = cari = 8 ?


Ya…. Pencarian dihentikan/ketemu
PENGURUTAN
• Yaitu proses pengaturan sekumpulan objek
menurut urutan atau susunan tertentu
• Acuan pengurutan dibedakan menjadi :
1. Ascending / menaik
Syarat : L[1]  L[2]  L[3]  …  L[N]
2. Descending / menurun
Syarat : L[1]  L[2]  L[3]  …  L[N]
• Pengurutan dibedakan menjadi
– Pengurutan Internal / Pengurutan Array
• Yaitu pengurutan terhadap sekumpulan data yang disimpan
dalam memori utama komputer
• Umumnya struktur yang digunakan adalah Array
• Prosesnya lebih cepat & hasil pengurutan bersifat sementara
– Pengurutan eksternal / Pengurutan File
• Yaitu pengurutan terhadap sekumpulan data yang
disimpan dalam memori sekunder (biasanya bervolume
besar)
• Struktur yang digunakan adalah File
• Prosesnya lebih lama tapi hasilnya bersifat tetap
Beberapa teknik pengurutan data yang sering
digunakan

• Bubble Sort • Heap sort


• Selection Sort • Merge sort
• Insertion Sort • Radix sort
• Shell sort • Tree sort
• Quick sort • Binary sort
Bubble sort
• Diinspirasi oleh gelembung sabun yang ada dipermukaan
air, dimana benda yang berat akan terbenam dan yang
ringan akan terapung
• Bila pengurutan dengan acuan ascending : elemen yang
bernilai besar akan “dibenamkan” melalui proses
pembandingan antar elemen yang bersebelahan dan
proses pertukaran
– Proses pertukaran dilakukan sebanyak N-1 langkah, dimana N
adalah ukuran array
– Pada akhir setiap langkah ke I, array L[1..N] akan terdiri atas dua
bagian yaitu :
• Yang sudah terurut
• Yang belum terurut
– Setelah langkah terakhir diperoleh array L[1..N] yang terurut
ascending
• Contoh : diurutkan secara ascending, N = 6
Lokasi 1 2 3 4 5 6

Data 25 27 10 8 76 21

Langkah 5
Lokasi 1 2 3 4 5 6

Awal 25* 27* 10 8 76 21

1 25 27* 10* 8 76 21
2 25 10 27* 8* 76 21
3 25 10 8 27* 76* 21
4 25 10 8 27 76* 21*
5 25 10 8 27 21 76
Langkah 4
Lokasi 1 2 3 4 5 6

Awal 25* 10* 8 27 21 76

1 10 25* 8* 27 21 76
2 10 8 25* 27* 21 76
3 10 8 25 27* 21* 76
4 10 8 25 21 27 76

Langkah 3
Lokasi 1 2 3 4 5 6

Awal 10* 8* 25 21 27 76

1 8 10* 25* 21 27 76
2 8 10 25* 21* 27 76
3 8 10 21 25 27 76
Langkah 2
Lokasi 1 2 3 4 5 6

Awal 8* 10* 21 25 27 76

1 8 10* 21* 25 27 76
2 8 10 21 25 27 76

Langkah 1
Lokasi 1 2 3 4 5 6

Awal 8* 10* 21 25 27 76
1 8 10 21 25 27 76
Algoritma:
Deklarasi
I : bilangan bulat {untuk langkah}
J : bilangan bulat {indek}
Temp : bilangan bulat {untuk penampung sementara}
L : Array [1 ..N]
N : bilangan bulat {jumlah elemen array}
Deskripsi
For I  (N-1) downto 1 do
For J  1 to I do
If L[J] > L [J+1] then
Temp  L[J]
L[J]  L[J+1]
L[J+1]  temp
Endif
Endfor
Endfor
Selection sort
• Yaitu memilih nilai yang maksimum/minimum dari suatu array
yang akan diurutkan dan menempatkannya pada posisi awal
atau akhir array; selanjutnya elemen tersebut diisolasi dan
tidak disertakan pada proses berikutnya. Hal ini dilakukan
secara terus menerus sampai sebanyak N-1
• Dibedakan menjadi :
– Algoritma pengurutan maksimum
Yaitu memilih elemen maksimum sebagai basis pengurutan
– Algoritma pengurutan minimum
Yaitu memilih elemen minimum sebagai basis pengurutan
Contoh : Diurutkan secara ascending dengan algoritma
pengurutan minimum
Lokasi 1 2 3 4 5 6

Data 25 27 10 8 76 21

Langkah/ Lokasi 1 2 3 4 5 6

1 8 27 10 25* 76 21
2 8 10 27* 25 76 21
3 8 10 21 25 76 27*
4 8 10 21 25* 76 27
5 8 10 21 25 27 76*
Algoritma :
Deklarasi :
I : bilangan bulat {untuk langkah}
J : bilangan bulat {indek}
Temp : bilangan bulat {untuk penampung sementara}
L : Array [1 ..N]
N : bilangan bulat {jumlah elemen array}
K : Bilangan bulat {menampung indek nilai terkecil}
X : Bilangan bulat {menampung nilai terkecil}
 
 
Deskripsi :
For I  1 to (N-1) do
KI
X  L[I]
For J  ( I+1) to N do
If L[J] < X then
KJ
X  L [J]
Endif
Endfor
Temp  L[I]
L[I]  X
L[K]  temp
Endfor
Insertion sort / Sinking Sort / Sifting Sort

• Yaitu metode pengurutan dengan cara menyisipkan


elemen array pada posisi yang tepat
• Pada prinsipnya seperti permainan kartu : ambil
kartu pertama & pegang, ambil kartu kedua dan
letakkan pada posisi yang tepat / berurut, ambil kartu
ketiga letakkan pada posisi yang berurut (biasa
diawal, ditengah atau diakhir) dst
Contoh :
Lokasi 1 2 3 4 5 6

Data 25 27 10 8 76 21

Langkah/ 1 2 3 4 5 6
Lokasi
1 25          

2 25 27        

3 10 25 27      

4 8 10 25 27    

5 8 10 25 27 76  

6 8 10 21 25 27 76
Deklarasi
I : Bilangan bulat {untuk langkah}
J : Bilangan bulat {untuk penelusuran array}
ketemu : boolean {untuk menyatakan posisi penyisipan ditemukan}
x : Bilangan bulat {tempat sementara agar L[K] tidak ditimpa
selama pergeseran }

Deskripsi
For I  2 to N do
X  L[I]
JI–1
Ketemu  False
While (J  1) and (not ketemu) do
If X < L[J] then
L[J+1]  L[J]
J  J-1
Else ketemu  true
Endif
Endwhile
L[J+1]  X
Endfor
Shell sort
• Pada prinsipnya sama dengan bubble sort yaitu
membandingkan elemen array dan melakukan
proses penukaran; bedanya kalau bubble sort
elemen yang dibandingkan adalah elemen yang
bersebelahan sedangkan pada shell sort elemen
yang dibandingkan mempunyai jarak tertentu
• Langkah pembandingan pertama berjarak N div
2, langkah kedua berjarak : jarak langkah
perbandingan pertama div 2 demikian seterusnya
sampai jarak perbandingan sama dengan satu.
Bila jarak sama dengan satu maka prosesnya
sama dengan Bubble sort
Urutkan secara ascending
Lokasi 1 2 3 4 5 6

Data 25 27 10 8 76 21

Loncat = 6 div 2 = 3

Lokasi 1 2 3 4 5 6

Data 25* 27 10 8* 76 21

  8 27* 10 25 76* 21
  8 27 10* 25 76 21*
Loncat = 3 div 2 = 1
Lokasi 1 2 3 4 5 6

  8* 27* 10 25 76 21
1 8 27* 10* 25 76 21
2 8 10 27* 25* 76 21
3 8 10 25 27* 76* 21
4 8 10 25 27 76* 21*
5 8 10 25 27 21 76

  8* 10* 25 27 21 76
1 8 10* 25* 27 21 76
2 8 10 25* 27* 21 76
3 8 10 25 27* 21* 76
4 8 10 25 21 27* 76*
  8* 10* 25 21 27 76
1 8 10* 25* 21 27 76
2 8 10 25* 21* 27 76
3 8 10 21 25 27 76

  8* 10* 21 25 27 76
1 8 10* 21* 25 27 76
2 8 10 21 25 27 76

  8* 10* 21 25 27 76
1 8 10 21 25 27 76
Algoritma :
Procedure swap(P,Q : bilangan pecahan)
Deklarasi
Temp : bilangan pecahan
Deskripsi
Temp  P
PQ
Q  temp
Return

Algoritma utama:
Deklarasi
Loncat : bilangan bulat
N : Bilangan Bulat
Kondisi : Boolean
J : bilangan bulat
I : bilangan bulat
L : array [1 .. N]
Deskripsi
Loncat  N
While loncat > 1 do
Loncat  loncat div 2
Repeat
Kondisi  true
For J  1 to (N- loncat) do
I  J + Loncat
If L [J] > L [I] then
Swap (L[J], L[I])
Kondisi  false
Endif
Endfor
Until kondisi
Endwhile
Quick sort
• Langkah :
a. Elemen 1 pindahkan pada penampung yang berfungsi sebagai
patokan
b. Dari kanan ke kiri secara berurutan cari nilai yang lebih kecil
dari patokan dan pindahkan nilainya pada posisi patokan
c. Dari kiri ke kanan secara berurutan cari nilai yang lebih besar
dari patokan dan pindahkan pada posisi data terakhir yang
dipindah
d. Lakukan langkah b dan c sampai posisi patokan ditemukan,
yaitu
– Bila posisi yang ditinggalkan dan yang ditempati saling
bersebelahan
– Bila dari kanan ke kiri tidak ada lagi data yang lebih kecil dari
patokan
– Bila dari kiri ke kanan tidak ada lagi data yang lebih besar dari
patokan
Urutkan secara ascending
Lokasi 1 2 3 4 5 6

Data 25 27 10 8 76 21

Patokan = 25
Lokasi 1 2 3 4 5 6
Kn * 27 10 8 76 21
Kr 21 27 10 8 76 *
Kn 21 * 10 8 76 27
Kr 21 8 10 * 76 27
  21 8 10 25 76 27
Patokan = 21
Lokasi 1 2 3 4 5 6
  * 8 10 25 76 27
kn 10 8 *      
kr 10 8 21      

Patokan = 10

Lokasi 1 2 3 4 5 6

  * 8 21 25 76 27

kn 8 10        
Patokan = 76
Lokasi 1 2 3 4 5 6

  8 10 21 25 * 27

kn         27 76

Hasil

Lokasi 1 2 3 4 5 6

hasil 8 10 21 25 27 76

Algoritma :
Procedure swap(P,Q : bilangan pecahan)
Deklarasi
Temp : bilangan pecahan
Deskripsi
Temp  P
PQ
Q  temp
Return
Procedure bagi ( I, J , M : bilangan bulat)
Deklarasi
Saklar : bilangan bulat
Deskripsi
Saklar  -1
While I < J do
If A[I] > A[J] then
Swap( A[I} , A[J])
Saklar  - saklar
Endif
If saklar  -saklar then J  J-1
Else I  I +1
Endif
MI
Endwhile
Return
Procedure quicksort (L,R : bilangan bulat)
deklarasi
K, mid : bilangan bulat;
Deskripsi
Write (‘L = ‘, L:2, ‘, R = ‘, R:2, ‘ : ‘);
For K  L to R do
Write (A[K] : 4)
If L >= R then
If A[L] > A[R] then
swap (A[L], A[R])
endif
else
bagi(L,R,Mid)
call Quicksort(L,Mid-1)
Call quicksort(Mid+1, R)
Endif
Endfor
Return
Algoritma utama
Deklarasi
A : Array [1..N]
I, N : bilangan bulat
Deskripsi
Write(‘Jumlah komponen = ‘)
Readln(N)
For I  1 to N do
Read(A[I])
endfor
Call Quicksort(1,N)
For I  1 to N do
write(A[I]:4)
endfor
Radix Sort
a. Susun bilangan secara vertikal
b. Lakukan penambahan 0 didepan bilangan yang digitnya
kurang (samakan digitnya)
c. lakukan pengurutan secara vertikal mulai dari digit pertama
dari kiri dan lakukan pengelompokan
d. Dalam tiap-tiap kelompok, lakukaan pengurutan secara
vertikal untuk digit ke dua dari kiri, Bila dalam
pengelompokan hanya terdiri dari satu data maka posisinya
tetap (tidak perlu diurutkan)
e. Lakukan langkah d sampai dengan digit terakhir. Hasil
pengurutan adalah hasil pengelompokan digit terakhir
Lokasi 1 2 3 4 5 6

Data 25 17 10 8 36 21

Data awal Digit 1 dari kiri Digit 2 dari kiri

25 08 08

17 17 10

10 10 17

08 25 21

36 21 25

21 36 36
Binary Sort
a. Ubah bilangan desimal ke dalam biner
b. Susun secara vertikal
c. Lakukan penambahan 0 didepan bilangan yang digitnya
kurang (samakan digitnya)
d. lakukan pengurutan secara vertikal mulai dari digit
pertama dari kiri dan lakukan pengelompokan
e. Dalam tiap-tiap kelompok, lakukaan pengurutan secara
vertikal untuk digit ke dua dari kiri, Bila dalam
pengelompokan hanya terdiri dari satu data maka
posisinya tetap (tidak perlu diurutkan)
f. Lakukan langkah e sampai dengan digit terakhir. Hasil
pengurutan adalah hasil pengelompokan digit terakhir
Contoh : Urutkan secara ascending
data : 8,5,4,2,10,7

Ubah ke dalam bilangan binary dan lakukan pengurutan dari


digit 1 dari kiri
8 = 0 1 0 1
5 = 0 1 0 0
4 = 0 0 1 0
2 = 0 1 1 1
10 = 1 0 0 0
7 = 1 0 1 0
Tanpa mengubah urutan digit 1 dari kiri, lakukan pengurutan
digit 2 dari kiri

0 0 1 0
0 1 1 1
0 1 0 1
0 1 0 0
1 0 0 0
1 0 1 0
Tanpa mengubah urutan digit 1 dan 2 dari kiri, lakukan
pengurutan digit 3 dari kiri

0 0 1 0
0 1 0 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 0
Tanpa mengubah urutan digit 1,2 dan 3 dari kiri, lakukan
pengurutan digit 4 dari kiri
0 0 1 0 = 2

0 1 0 0 = 4

0 1 0 1 = 5

0 1 1 1 = 7

1 0 0 0 = 8

1 0 1 0 = 10

Hasil Pengurutan secara ascending = 2, 4, 5, 7, 8, 10


Tree sort
a. Ambil data pertama dan tempatkan sebagai root
b. Ambil data ke dua dan bandingkan dengan root, bila
nilai data kedua lebih kecil dari root maka tempatkan
sebagai anak kiri root, bila lebih besar tempatkan
sebagai anak kanan root
c. Ambil data berikutnya, bandingkan dengan root bila
lebih kecil dari root bandingkan dengan anak kiri , bila
lebih kecil maka akan menjadi anak kiri dari anak kiri
root. begitu juga untuk anak kanannya
d. Lakukan langkah c sampai data terakhir
e. Urutan pembacaannya (bila ascending ) adalah anak kiri
yang paling kiri, root, anak kanan paling kiri, anak kanan
Contoh : Urutkan secara ascending data : 8,6,4,5, 2,10,7

6 10

4 7

2 5

Hasil : 2, 4, 5, 7, 8, 10
Anak kiri yang paling kiri – root – anak kanan yang paling kiri –
root – anak kanan – root - dst

Anda mungkin juga menyukai