Professional Documents
Culture Documents
STANDAR KOMPETENSI:
KOMPETENSI DASAR:
Disusun Oleh:
SUCARMAN
sucarman@gmail.com
PELITA KARYA
Jln.Raya Borbok Desa Cicau Kecamatan Cikarang Pusat Kabupaten Bekasi
Tahun 2009
KATA PENGANTAR
Tulisan kali ini benar-benar diperuntukkan bagi pemula yang ingin belajar RPL di
Sekolah Menengah Kejuruan. Mengingat Kompetensi Dasar yang diharapkan oleh Pemerintah,
maka tulisan ini dicobakan dengan “bahasa apa adanya” dengan harapan dapat dengan mudah
diserap oleh siswa. Ini juga merupakan kelanjutan dari tulisan yang terdahulu yang sedikit
Guru/Pembimbingnya, sehingga Pondasi Siswa untuk mengenal dan belajar pemrograman dapat
Kritik dan saran senantiasa dinanti di sucarman@gmail.com, selain itu jika ada
kekurangan dan atau kesalahan yang fatal dalam tulisan ini, agar tidak sungkan-sungkan
menegur penulis. Perbaikan adalah sebuah kebahagian buat penulis dan keluarga.
Selamat berkarya
Penulis
2
STANDAR KOMPETENSI:
KOMPETENSI DASAR:
INDIKATOR:
BAHAN AJAR:
ALGORITMA
Ditemukan dan dipopulerkan oleh seorang Ilmuwan Muslim yang bernama Muhammad
ibnu Musa Al-Khwarizmi. Beliau adalah ilmuwan besar yang karya-karyanya banyak menjadi
dasar perkembangan ilmu modern, antara lain dalam bidang Matematika, Astronomi, Astrologi,
Geografi dan banyak cabang ilmu lainnya. Al-khwarizmi kemudian berubah menjadi Algorism,
kemudian berubah lagi menjadi Algorithm dalam Bahasa Inggris dan terjemahkan secara bebas
kedalam Bahasa Indonesia menjadi Algoritma.
Dari dua definisi tersebut diatas maka kata kuncinya adalah “Urutan” dan “logis”, sehingga
selain logis Algoritma juga mengharuskan agar langkah langkah tersebut berurutan secara
sistematis, agar hasil akhirnya sesuai dengan yang diharapkan.
1
Aunur R. Muryanto, Rekayasa Perangkat Lunak Jilid 1 untuk SMK, Jakarta 2008: Direktorat Pembinaan Sekolah
Kejuruan, Direktorat Jenderal Manajemen Pendidikan Dasar dan Menengah, Departemen Pendidikan Nasional,
ha.l101
3
Menurut Donald E.Knuth dalam bukunya yang berjudul The Art of Komputer
Programming, Algoritma harus mempunyai lima ciri penting;
1. Algoritma harus berhenti setelah mengerjakan sejumlah langkah terbatas. Program yang
tidak berhenti berarti mengandung algoritma yang salah.
2. Setiap langkah harus mempunyai langkah yang tepat dan tidak mempunyai tafsiran
ganda (Ambigu)
3. Algoritma memiliki masukan nol atau lebih sebelum algoritma itu sendiri bekerja (input)
4. Algoritma memiliki keluaran nol atau lebih sebagai output yang berhubungan dengan
input. Dan keluaran tersebut harus benar adanya, artinya harus sesuai dengan yang kita
harapkan.
5. Algoritma harus efektif, artinya setiap langkah harus sederhana sehingga dapat
dikerjakan dalam sejumlah waktu yang masuk akal.
1. Structured Indonesian (SI), yakni penulisan urutan langkah yang dilakukan oleh
programmer sesuai dengan bahasa sehari-hari (dalam hal ini Bahasa Indonesia). Sebagai
contoh, Algoritma untuk mencari luas segi tiga dalam Structured Indonesian adalah;
1. Mulai
2. Baca data Alas dan tinggi
3. Periksa apakah Alas dan tinggi mempunyai nilai lebih
besar dari 0 (nol).Jika ya, maka lanjutkan ke langkah
ke 4, jika tidak maka berhenti.
4. Luas adalah Alas kali Tinggi kali 0,5.
5. Tampilkan luas.
2. Pseudocode, adalah penulisan algoritma yang menyerupai kode program. Pseudo sendiri
berarti imitasi atau tiruan atau menyerupai, sedangkan code menunjuk pada kode program.
Pseudocode didasarkan kepada bahasa pemrograman yang sesungguhnya seperti BASIC,
PASCAL atau FORTRAN. Penulisan Pseudocode masih tetap bersifat umum, artinya boleh
ditulis dengan menyerupai bahasa pemrograman tersebut. Latar belakang programmer sangat
berpengaruh dalam menuliskan pseudocode. Programer yang familiar dengan Bahasa BASIC
4
akan lebih mudah dan senang menuliskan pseudocode dalam Bahasa BASIC, begitu juga yang
berpengalaman dengan Bahasa Pascal tentunya akan lebih memudahkan jika pseudocode-nya
mirip bahasa Pascal. Pendekatan yang terbaik disesuaikan kepada kemampuan siswa dan
Pemrograman apa yang akan dipelajari oleh Siswa itu sendiri.
Berikut ini contoh Pseudocode algoritma menghitung Luas Segitiga;
1. START
2. READ alas, tinggi
3. IF alas < 0 or tinggi < 0 GOTO 6
4. luas = alas * tinggi * 0,5
5. PRINT luas
6. END
Algoritma diatas sangat mirip dengan bahasa BASIC dan yang satu rumpun dengan
Bahasa BASIC ( Penulis menggunakan Liberty Basic, Gold License). Dengan adanya
pseudocode akan memudahkan proses penterjemahan kedalam bahasa pemrograman.
3. Flow Chart, adalah bagan alir yang menggambarkan urutan langkah/aliran program secara
logika. Flow Chart banyak dipakai untuk menggambarkan algoritma dengan bantuan symbol
symbol tertentu yang telah disepakati secara internasional. Dengan adanya symbol/lambang
lambang tersebut dan ditambah notasi penjelasannya, maka logika pemrograman dapat
dimengerti dengan mudah. Bagi yang sudah familiar dengan Microsoft Word, symbol-symbol
Flow Chart dapat di tampilkan dengan langkah Insert-Shapes-Flowchart yang akan
menampilkan lambang sebagai berikut;
5
Sebagai ilustrasi berikut ini contoh Flowchart Menghitung Luas Segitiga;
Mulai Start
Ya Ya
Selesai End
Dari ketiga cara penulisan Algoritma (SI, Psedocode dan Flowchart) kesemuanya itu
bersifat independent terhadap semua bahasa pemrograman, artinya Algoritma yang kita buat
dapat dipakai oleh setiap bahasa Pemrograman. Hanya mungkin saja dari cara penulisan pada
“program komputernya” (syntax) yang sedikit berbeda dan keyword (kata kunci) untuk
melakukan perintah.
Penulisan “Print” dalam Bahasa BASIC , jika dalam Bahasa PASCAL diekspresikan
dengan “Write” atau Writeln. Algoritma dapat diibaratkan Resep Masakan yang ditulis dalam
berbagai bahasa, dan orang akan bisa membuatnya selama orang tersebut memahami bahasa
yang dipakai untuk menulis resep masakan tersebut.
6
Contoh-contoh Algoritma dapat dikembangkan dengan memperhatikan lingkungan dan
kehidupan siswa itu sendiri.
Struktur Algoritma
Struktur dasar algoritma terbentuk dari tiga struktur dasar, yakni struktur berurutan,
struktur percabangan/pemilihan/keputusan dan struktur pengulangan. Dalam bahasa
pemrograman ketiga dasar pembentuk sebuah algoritma tersebut dikenal dengan sequencing,
branching dan looping. Pada dasarnya hampir semua algoritma merupakan gabungan dari
struktur tersebut.
meluncur dijalan yang lurus. Langkah demi langkah atau kilometer demi kilometer kita harus
melaluinya sehingga tahapan demi tahapan harus dilalui sesuai dengan urutannya. Dapat juga
kita analogikan dengan mencatat mata pelajaran, kata demi kata dan kalimat demi kalimat kita
Struktur berurutan bisa terdiri dari satu dan atau beberapa instruksi. Intruksi intruksi
tersebut akan dieksekusi oleh komputer sesuai dengan urutannya. Oleh sebab itu maka
pentingnya sistematika yang tepat dan benar agar algoritma tersebut menghasilkan “output”yang
kita harapkan. Menurut Goldshlager dan A. Lister, struktur berurutan mengikuti ketentuan
sebagai berikut;
7
Sebagai ilustrasi dapat dicontohkan dalam pelajaran Matematika/Geometri tentang theorem
phytagoras yang kita umpamakan akan mencari panjang sisimiring/hypotenusa, jika sisi
Mulai
Read AB,
AC
BC=SQR(AB^2+AC^2)
Print BC
Selesai
MULAI
READ USIA
YA USIA ≥ 17 TIDAK
PRINT PRINT
“PUNYA HAK “TIDAK PUNYA
PILIH” HAK PILIH”
SELESAI
9
Secara umum Algoritma tersebut sudah benar, namun pada kenyataannya ada
pengecualian bahwa walaupun usianya belum mencapai 17 tahun, asal saja sudah menikah maka
orang tersebut sudah punya hak pilih, sehingga Algoritmanya dapat diperbaiki menjadi;
MULAI
READ USIA,
STATUS
YA TIDAK
USIA ≥ 17?
PRINT
YA STATUS=ME
“PUNYA HAK
PILIH” NIKAH?
TIDAK
PRINT
“TIDAK PUNYA
HAK PILIH”
SELESAI
Dari algoritma yang kedua, dapat dilihat adanya pengujian kedua tentang status orang.
Jika orang tersebut sudah menikah (pernah menikah) maka walaupun usianya kurang dari 17
Dalam hal Algoritma yang kedua, jika ingin disederhanakan bentuknya maka dapat
dilakukan dengan melakukan pengujian sekaligus pada pencabangan pertama, yakni dengan
Operator Boolean “OR” seperti alur yang dicontohkan dibawah ini;
10
MULAI
READ USIA,
STATUS
YA USIA ≥ 17 OR TIDAK
STATUS=”MENIK
AH”
PRINT PRINT
“PUNYA HAK “TIDAK PUNYA
PILIH” HAK PILIH”
SELESAI
Untuk bahasa pemrograman yang lain , silahkan disesuaikan dengan ketentuan yang
berlaku pada bahasa pemrograman yang dikuasai oleh Siswa/Guru.
11
Dalam menterjemahkan sebuah algoritma pencabangan, kita bisa melakukan pendekatan
penyelesaian yang berbeda untuk kasus yang sama dan berbeda untuk kasus yang berlainan. Hal
ini tergantung sejauh mana kita mampu melakukan pendekatan yang paling efektif dan efisien.
Hal lain yang penting juga diperhatikan adalah bagaimana “orang lain” dapat dengan mudah
memahami jalan pemikiran kita (algoritmanya) dan mudah menggunakan aplikasi yang sudah
kita buat. Setiap bahasa pemrograman mempunyai beberapa ketentuan yang sedikit berbeda,
namun pada umumnya Statement untuk pencabangan sebagiannya adalah;
• IF test expression THEN expression(s)
[ulangi]
input "Silahkan pilih mode, (B)iasa atau (A)hli?"; mode$
if len(mode$) = 0 then print "Keliru Input! Coba lagi!" : goto
[ulangi]
mode$ = left$(mode$, 1)
if instr("BbAa", mode$) = 0 then print " Keliru Input! Coba lagi!" :
goto [ulangi]
if instr("Bb", mode$) > 0 then print "Mode Biasa" : goto [main]
print "Mode Ahli"
[main]
print "Menu Pilihan Utama"
end
Perhatikan Ekspresi/pernyataan ini:
if instr("Bb",mode$)> 0 then print "Mode Biasa " else print "Mode Ahli"
12
Beberapa bentuk penulisan yang diijinkan (dalam Liberty BASIC) adalah sebagai berikut;
if qtySubdirs = 0 then
print "None."
goto [noSubs]
end if
Keuntungan yang diperoleh dalam penggunaan Blok ini adalah kita dapat menuliskan
lebih banyak pernyataan/perintah yang bisa dilakukan sesuai dengan kondisi yang terjadi.
13
Algoritma Pengulangan (Looping)
Dari dua ilustrasi tersebut dapat kita simak, bahwa pengulangan akan terus terjadi sampai
dengan sebuah kondisi yang kita inginkan tercapai, dan pengulangan akan berakhir manakala
kondisi yang kita harapkan sudah tercapai.
Dalam pembuatan program komputer, kita kadang-kadang harus mengulang satu atau
beberapa perintah agar memperoleh hasil sesuai dengan yang kita inginkan. Salah satu kelebihan
komputer adalah mampu melakukan pengulangan sebanyak yang kita inginkan tanpa merasa
lelah dan bosan <walaupun sebenarnya terbatas juga>. Dalam contoh kedua, bisa saja anak
tersebut berhenti menimba air bukan karena embernya sudah penuh, melainkan kecapaian.
Tidak demikian halnya dengan computer, dia akan terus melakukan/mengeksekusi perintah
sampai dengan selesai.
14
Dalam pengulangan biasanya ada yang dikenal dengan inisialisasi dan terminasi.
Inisialisasi adalah memberikan nilai awal pada sebuah variabel (Counter SPBU di reset “0”),
sedangkan terminasi adalah nilai akhir sebagai tanda berakhirnya pengulangan .
Ada beberapa pernyataan yang dapat dilakukan untuk menyelesaikan pengulangan ini.
Pada pelaksanaannya pemakaian struktur pengulangan tergantung dari masalah yang harus
diselesaikan, dukungan bahasa pemrograman dan tehnik pendekatan dari programmer computer
itu sendiri. Seperti halnya juga dalam pencabangan, bentuk satu pengulangan dapat saja
menyelesaikan beberapa kasus yang berbeda. Namun ada juga bentuk pengulangan yang hanya
cocok untuk kasus tertentu saja. Pemilihan bentuk pengulangan yang tepat, dapat meningkatkan
kinerja dan efisiensi sebuah program computer.
Bentuk pengulangan seperti ini merupakan tehnik pengulangan yang paling tua dalam
bahasa pemrograman2. Hampir semua bahasa pemrograman mendukung tehnik pengulangan
FOR….NEXT ini, kalaupun ada perbedaan paling dalam cara penulisannya saja (syntax).
Bentuk umum dari FOR…NEXT adalah;
FOR variabel=inisialisasi TO terminasi STEP aturan
Jika STEP tidak didefinisikan maka nilai variabel akan bertambah satu, namun jika ingin
melakukan pencacahan (counter) dengan bilangan negative, maka
STEP harus disertakan. Berikut ini contoh potongan algoritma
For…Next dalam bentuk Flowchart;
Counter=
Dalam pelaksanaan/eksekusi pengulangan FOR…NEXT urutan
awal TO
akhir langkahnya adalah sebagai berikut;
1. Menetapkan nilai counter sama dengan nilai awal
(inisialisasi)
Badan
Loop 2. Melakukan pengujian apakah bilai awal lebih besar dari
nilai akhir, jika tidak maka mengerjakan perintah yang ada
pada badan loop. Jika ya maka keluar dari Program
Pernyataan
Berikutnya 3. Menaikkan/menurunkan nilai counter sesuai aturan yang
kita tetapkan.
4. Kembali ke urutan nomor 2.
2
Ibid, hal 114
15
Untuk membantu lebih memahami tehnik pengulangan dengan FOR…NEXT, berikut ini kita
contohkan ;
“Sebuah himpunan A mempunyai anggota bilangan bulat ganjil positif tidak lebih besar dari
19. Buatlah Algoritma dalam bentuk Flowchart.”
Penyelesaian:
Langkah pertama adalah menetapkan variabel A dengan type data integer dan sebagai nilai awal
kita inisialisasikan dengan A=1 sedangkan nilai terminasinya adalah 19. Karena A adalah
himpunan bilangan bulat ganjil positif, maka kita tahu bahwa STEP nya adalah = 2. Dua inilah
yang akan menjadi increment (penambahan) untuk nilai A berikutnya.
FLOWCHART:
Tanpa menggunakan For…Next Dengan menggunakan For…Next
START
A=1 START
A=1 to 19
Step 2
PRINT A
PRINT A
A= A+2
A≥19 ?
END
END
Cobalah perhatikan kedua bentuk algoritma tersebut, amati persamaan dan perbedaannya serta
silahkan menentukan mana yang paling efektif alurnya. Semua itu adalah sangat tergantung dari
16
cara kita melakukan pendekatan terhadap persoalan yang ingin kita hadapi, dan apa yang akan
dan mampu kita lakukan untuk menyelesaikannya dengan benar.
Untuk lebih memperjelas berikut contoh progam dari kedua algoritma tersebut diatas;
Tanpa memakai FOR…NEXT
A=1
[ulangi]
PRINT space$(2);A;
A=A+2
IF A<=19 goto [ulangi]
END
PRINT space$(2);A;
NEXT A
END
Kedua program tersebut mempunyai keluaran yang sama yakni mencetak anggota himpunan
A(1,3,5,…,….,19).
1 3 5 7 9 11 13 15 17 19
Penyelesaian:
Karena Logika merupakan bilangan Binner (0 dan 1) maka semua gerbang mempunyai
inisialisasi 0 dan terminasi 1. Bisa juga kita tetapkan inisialisasinya 1 dengan terminasi 0 dengan
syarat STEP-nya harus kita definisikan -1. Loop A ditetapkan sebagai outer loop (pengulangan
luar) dan Loop B menjadi inner loop (loop dalam). Semua perintah operasi Boolean (AND, OR
dan XOR harus ditempatkan di body loop dalam.
START START
A=1 to 0
A=0 to 1 STEP -1
B=0 to 1 B=1 to 0
STEP -1
C= A AND B C= A AND B
D= A OR B D= A OR B
E= C XOR D E= C XOR D
PRINT A,B,C,D,E PRINT A,B,C,D,E
END END
18
Sedangkan listing program dan hasil keluarannya adalah sebagai berikut;
'Tabel Kebenaran
PRINT "============================================================="
PRINT "A B C(A AND B) D(A OR B) E(C XOR D)"
PRINT "-------------------------------------------------------------"
'ketiga baris diatas untuk memudahkan membaca hasilnya
'badan programnya adalah:
FOR A=0 to 1
FOR B=0 to 1
C= A AND B
D= A OR B
E= C XOR D
PRINT A,B,C,D,E
NEXT ' untuk menutup loop B
NEXT 'untuk menutup loop A
PRINT "============================================================="
END
Hasil keluarannya:
=============================================================
A B C(A AND B) D(A OR B) E(C XOR D)
-------------------------------------------------------------
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
=============================================================
'Tabel Kebenaran
PRINT "============================================================="
PRINT "A B C(A AND B) D(A OR B) E(C XOR D)"
PRINT "-------------------------------------------------------------"
'ketiga baris diatas untuk memudahkan membaca hasilnya
'badan programnya adalah:
FOR A=1 to 0 step -1
FOR B=1 to 0 step -1
C= A AND B
D= A OR B
E= C XOR D
PRINT A,B,C,D,E
NEXT ' untuk menutup loop B
NEXT 'untuk menutup loop A
PRINT "============================================================="
END
19
Hasil Keluarannya:
=============================================================
A B C(A AND B) D(A OR B) E(C XOR D)
-------------------------------------------------------------
1 1 1 1 0
1 0 0 1 1
0 1 0 1 1
0 0 0 0 0
=============================================================
Nah dengan gambaran, contoh serta hasil keluaran program diatas, kita bisa faham
bagaimana pengulangan bersarang tersebut bekerja.
Untuk latihan silahkan dicoba memodifikasi program diatas dengan variasi berbeda,
misalnya For A=0 to 1 dipasangkan dengan For B=1 to 0 step -1 dan sebaliknya, sehingga
mendapat gambaran yang lebih jelas lagi tentang urutan kerja dari “Nested Loop”.
Dengan menambah loop lain didalamnya maka membuat “Tabel Kebenaran” untuk 3
dan 5 bahkan….10 gerbang logikapun sangat mudah, bukan?
20
berjalan hingga teman kita memasukkan angka yang mengakibatkan kondisi tidak lagi
terpenuhi, sehingga Loop berakhir.
Dalam algoritma disamping jelas terlihat bahwa
Start kondisi yang kita tentukan adalah Usia≤0, jadi selama
teman kita melakukan pengisian usianya = 0 maka loop
akan terus berjalan. Ketika Usia>0 maka loop akan
Read usia
berakhir dan akan melakukan perintah berikutnya berupa
Print Usia.
Sebagai inisialisasi variabel usia maka input dari
pengguna (dalam hal ini teman kita) merupakan
Usia≤0 ? Tidak
inisialisasi variabel agar loop bisa berjalan, sedangkan
pengujian usia ≤ 0 merupakan kondisi yang kita tetapkan
Ya agar program melakukan pengulangan, sampai akhirnya
Print “Keliru, teman kita mengisi umurnya dengan nilai yang lebih besar
coba lagi!” dari 0 (nol)
Dengan meperhatikan Algoritma, Program dan Keluarannya kita akan tahu lebih jelas tentang
jalannya sebuah looping dengan pernyataan WHILE…WEND.
21
Dalam beberapa bahasa pemrograman, TIDAK DIANJURKAN memaksa keluar dari
looping dengan pernyataan GOTO. Ini akan mengakibatkan jalannya program tidak dapat
diprediksi. Mungkin untuk program yang sederhana dan kecil hal tersebut masih bisa berjalan
normal, namun untuk sebuah program yang besar dan kompleks, hal ini SANGAT TIDAK
DIANJURKAN.
Contoh dibawah ini masih bisa berjalan, namun tidak dianjurkan
Pernyataan EXIT WHLIE merupakan salah satu cara yang benar apabila kita ingin keluar dari
looping dengan pernyataan WHILE…WEND
22
Berikut ini Algoritma pernyataan tersebut;
CONTOH A CONTOH B
START START
A=0 A=0
PRINT A PRINT A
A=A+1 A=A+1
YA A < 10 YA A > 10
TIDAK TIDAK
END END
Pada Contoh B tidak terjadi Looping, karena pada saat diuji kondisi apakah A lebih
besar dari 10, ternyata tidak sesuai karena A baru bernilai 1 (hasil dari eksekusi A= 0+1), hal ini
mengakibatkan jalannya program keluar dari Loop. Program B hanya menghasilkan tercetaknya
angka 0 pada layar monitor kita. Berikut ini contoh program dari algoritma tersebut (dalam
bahasa pemrograman Liberty BASIC), yang sengaja digabungkan antara contoh A dan contoh B
23
Agar lebih mudah membandingkan antara Algoritma, Program dan Outputnya;
Print "----------------------------"
Komputer akan dapat membantu kita dengan cepat dan benar apabila diberikan
input dan urutan langkah (Algoritma) yang benar pula. Garbage in, garbage out
24
DO….LOOP UNTIL
Pengulangan akan terjadi, sampai kondisi pengujian adalah benar. Jika kondisi sudah
tercapai, maka loop berakhir. Perhatikan Algoritma dibawah ini
CONTOH A CONTOH B
START START
A=0 A=0
PRINT A PRINT A
A=A+1 A=A+1
Ya YA
END END
Selintas sama dengan pernyataan DO….LOOP WHILE hanya perlu sekali lagi ditegaskan
bahwa dalam struktur DO….LOOP UNTIL; pengulangan akan berakhir ketika kondisi yang
disyaratkan terpenuhi. Adapun contoh programnya sama dengan contoh diatas, tinggal kata
“WHILE”-nya diganti dengan “UNTIL”.
Masih banyak statement/pernyataan pengulangan yang berlaku di setiap Bahasa
Pemrograman. Oleh sebab itu teruslah belajar dan berkreasi bukan hanya sekedar pemenuhan
terhadap Standar Kompetensi dan Kompetensi Dasar saja. Insya Allah akan kita bahas pada
tulisan berikutnya. Mudah-mudahan Tulisan ini bermanfaat bagi kita semua.
25