DASAR-DASAR ALGORITMA DAN PEMROGRAMAN
Dewasa ini, komputer digunakan di
hampir semua bidang kehidupan manusia, mulai dari pendidikan, bisnis, sampai
dengan permainan. Berbicara tentang komputer tidak lepas dari pemrograman
komputer. Hal ini karena komputer pada dasarnya adalah mesin yang tidak bisa
apa-apa. Kita harus memberikan serangkaian instruksi kepada komputer agar mesin
'pintar' ini dapat memecahkan suatu masalah. Langkah-langkah yang kita lakukan
dalam memberikar. instruksi kepada komputer untuk memecahkan masalah inilah
yang dinamakan pemrograman
komputer.
Pemrograman
Komputer
Dalam kehidupan sehari-hari, untuk berkomunikasi
dengan orang lain, kita harus menggunakan bahasa yang sama dengan orang
tersebut. Apabila kita menggunakan Bahasa Indonesia, lawan bicara kita juga
harus mengerti Bahasa Indonesia. Kalau lawan bicara kita tidak mengerti Bahasa
Indonesia, kita masih bisa berkomunikasi dengannya melalui seorang penerjemah.
Dalam pemrograman komputer, berlaku juga hal
seperti di atas. Kita harus menggunakan bahasa yang dimengerti oleh komputer
untuk memberikan suatu instruksi.
Pada
dasarnya, komputer adalah mesin digital, artinya komputer hanya mengenal
kondisi ada arus listrik (biasanya dilambangkan dengan 1) dan tidak ada
arus listrik (biasanya dilambangkan dengan 0). Dengan kata lain, kita harus
menggunakan sandi 0 dan 1 untuk melakukan pemrograman komputer. Bahasa pemrograman
yang menggunakan sandi 0 dan 1 ini disebut bahasa
mesin. Mungkin Anda sudah bisa membayangkan bagaimana sulitnya memprogram
dengan bahasa mesin. Namun Anda tidak perlu kuatir karena dewasa ini jarang
sekali orang yang memprogram dengan bahasa mesin.
Karena bahasa mesin
sangat susah, maka muncul ide untuk melambangkan untaian sandi 0 dan 1 dengan
singkatan kata yang lebih mudah dipahami manusia. Singkatan kata ini kemudian
sering disebut mnemonic code. Bahasa
pemrograman yang menggunakan singkatan kata ini disebut bahasa assembly.
Sebagai contoh, dalam
prosesor Intel, terdapat perintah 0011 1010 0000 1011. Perintah dalam bahasa
mesin ini sama artinya dengan perintah assembly CMP AL, OD, yang artinya
bandingkan nilai register AL dengan 0D. CMP di sini sebenarnya adalah singkatan
dari CoMPare. DapatAnda lihat di sini bahwa perintah CMP AL, 0D jauh lebih
mudah dipahami daripada 0011 1010 0000 1011. Tentu saja ini jika dilihat dari
sudut pandang manusia, bagi komputer, kombinasi 0 dan 1 tentu lebih mudah
dipahami. Perangkat lunak yang mengkonversikan perintah-perintah assembly ke
dalam bahasa mesin sering disebut juga assembler.
Pemrograman dengan bahasa assembly dirasakan banyak orang masih
terlalu sulit, termasuk saya sendiri. Sesusai dengan sifat manusia yang tidak
pernah puas, akhirnya dikembangkan suatu bahasa pemrograman yang lebih mudah
digunakan. Bahasa pemrograman ini menggunakan kata-kata yang mudah dikenali
oleh manusia. Bahasa pemrograman seperti ini disebut
bahasa generasi ketiga atau disingkat 3GL
(thirdgeneration language). Beberapa
orang menyebut bahasa ini dengan bahasa tingkat tinggi atau disingkat HLL
(high-level language). Ada banyak contoh
bahasa g
enerasi ketiga, antara lain:
Basic, Pascal, C, C++, COBOL, dsb.
Bahasa
generasi ketiga biasanya menggunakan kata-kata dalam bahasa Inggris karena
memang bahasa tersebut adalah bahasa internasional. Sebagai contoh, Anda dapat
menuliskan perintah berikut dalam bahasa Pascal:
writeln (‘Algoritma’);
atau perintah berikut dalam bahasa C:
printf (“Algoritma\n\r”);
atau perintah berikut dalam bahasa C++:
cout « “Algoritma” « endl;
Ketiga pernyataan di atas bertujuan sama,
yaitu menuliskan teks 'Algoritma' ke keluaran standar (standard output), biasanya ke layar komputer.
Ketiga perintah sederhana di atas sebenarnya
terdiri dari puluhan atau mungkin bahkan ratusan pernyataan assembly.
Perangkat lunak yang menerjemah kan program dalam bahasa manusiawi ke dalam
bahasa assembly atau mesin ada dua macam, yaitu interpreter dan kompiler.
Interpreter menerjemahkan program baris per
baris, artinya jika suatu baris akan dieksekusi, maka baris tersebut
diterjemahkan terlebih dulu ke bahasa mesin. Apabila baris berikutnya akan
dieksekusi, maka baris tersebut baru diterjemahkan ke dalam bahasa mesin.
Contoh bahasa pemrograman yang menggunakan interpreter adalah Basic.
Kompiler menerjemahkan semua perintah ke dalam bahasa mesin kemudian
menjalankan hasil penerjemahan. Hasil penerjemahan ini bisa disimpan dalam file
atau memori. Contoh bahasa pemrograman yang menggunakan kompiler adalah Pascal,
C, dan C++. Khusus untuk Pascal, ada beberapa kompiler tetapi memang jumlahnya
tidak banyak, misalnya Turbo Pascal (http://www.innrise.com),
GNU Pascal (http://didaktik.physik.uni-essen.de/-gnu-pascal/
home.html), Free Pascal (http://www.freepascal.sk), dsb.
Meskipun demikian, kompiler Pascal yang paling banyak digunakan adalah Turbo
Pascal. Jadi buku ini juga menggunakan Turbo Pascal sebagai acuannya.
Perkembangan bahasa pemrograman tidak sampai pada
bahasa generasi ketiga saja. Ada generasi lanjutan bahasa pemrograman, yaitu
bahasa generasi keempat atau disingkat 4GL (fourth-generation language). Bahasa ini banyak digunakan untuk mengembangkan aplikasi basis data (database). Salah satu contohnya adalah SQL (Structured Query Language). Pada
bahasa ini, perintah-perintah yang digunakan lebih manusiawi, misalnya
"SELECT Nama, Alamat FROM Karyawan", untuk mengambil data Nama dan
Alamat dari basis data Karyawan.
Dari penjelasan
singkat ini, saya berharap Anda dapat memahami di manakah sebenamya posisi
bahasa Pascal ditinjau dalam pemrograman komputer. Pada subbab berikutnya, saya
akan membahas di manakah posisi algoritma dalam pemrograman komputer.
Langkah-langkah
dalam Pemrograman Komputer
Dalam melakukan suatu kegiatan, tentu
saja kita memerlukan langkah-langkah yang harus dilalui. Orang tidur saja, menurut
para dokter, melewati beberapa tahapan atau fase. Dalam pemrograman komputer,
kita juga memerlukan beberapa langkah.
Urutan
langkah-langkah yang saya sajikan dalam buku ini tidak bersifat mutlak, artinya
Anda tidak harus melakukannya dari langkah pertama, kedua, ketiga, dst. Ada
beberapa langkah yang harus atau mungkin diulang sampai berkali-kali. Lebih
jauh lagi, buku lain mungkin menyajikan langkah-langkah yang kelihatannya berbeda
tetapi pada intinya sama. Berikut ini adalah beberapa langkah yang harus
dilakukan dalam pemrograman komputer:
1. Mendefinisikan masalah. Langkah pertama
ini sering dilupakan oleh banyak pemrogram. Begitu mereka mendapat perintah
untuk membuat suatu program, mereka langsung menulis programnya tanpa
mendefinisikan masalahnya terlebih dulu. Saya mengutip kata-kata dari Henry
Ledgard dalam salah satu bukunya tentang Hukum Murphy untuk pemrograman:
Semakin cepat Anda
menulis program akan semakin lama Anda menyelesaikannya.
Memang tidak ada
bukti ilmiah tentang kata-kata ini, tetapi dari pengalaman pribadi saya ketika
menjadi asisten riset di Universitas Gadjah Mada tahun 1995 dan 1996, kata-kata
ini ternyata banyak benarnya.
Sebelum
menginjak pada langkah kedua, saya ingatkan sekali lagi bahwa langkah pertama, mendefinisikan masalah, sangat vital tetapi sering dilupakan. Tentukan
masalahnya seperti apa, kemudian apa saja yang harus dipecahkan dengan
komputer, yang terakhir adalah apa masukannya dan bagaimana keluarannya.
2. Menentukan
solusi. Setelah masalah didefinisikan dengan jelas, masukan apa yang
diberikan sudah jelas, keluaran apa yang diinginkan sudah jelas, langkah
selanjutnya adalah mencari jalan bagaimana masalah tersebut diselesaikan.
Apabila permasalahan terlalu kompleks, biasanya kita harus membaginya ke dalam
beberapa modul kecil agar lebih mudah diselesaikan.
Sebagai
contoh, program untuk menghitung invers matriks, dapat dibagi menjadi beberapa
modul kecil. Modul pertama adalah meminta masukan dari pengguna berupa matriks
bujur sangkar. Modul kedua adalah mencari invers matriks yang dimasukkan
pengguna. Modul terakhir adalah menampilkan hasilnya kepada pengguna. Anda
akan belajar membagi permasalahan ke dalam beberapa modul kecil pada Bab 5, Subrutin.
3. Memilih
algoritma. Langkah ini merupakan salah satu langkah penting dalam pemrograman komputer. Mengapa? Karena
pemilihan algoritma yang salah akan menyebabkan program memiliki unjuk kerja
yang kurang baik. Algoritma inilah yang akan saya bahas sepanjang buku ini,
jadi saya tidak akan membahasnya panjang lebar di sini.
4.
Menulis program. Pada langkah ini, Anda mulai menuliskan program komputer untuk memecahkan
masalah yang diberikan. Sebagaimana saya jelaskan di awal bab ini, untuk
menulis program Anda dapat menggunakan salah satu bahasa generasi ketiga. Saya
tidak merekomendasikan bahasa mesin atau assembly karena terlalu sulit dan
memboroskan waktu. Ingat ada pepatah lama mengatakan waktu adalah uang. Memang
banyak orang yang senang menggunakan assembly dengan alasan kecepatan yang
tinggi, tetapi waktu yang diperlukan untuk menulis programnya juga sangat lama.
Dengan kata lain, harga yang dibayar untuk kecepatan yang tinggi tersebut cukup
mahal. Saya juga tidak merekomendasikan bahasa generasi keempat karena
penggunaannya lebih banyak dalam dunia basis data.
Ada beberapa hal yang harus
dipertimbangkan saat memilih bahasa pemrograman, antara lain masalah yang
dihadapi, bahasa pemrograman yang Anda kuasai, dsb. Dalam buku ini, Anda khusus
akan menulis program menggunakan bahasa Pascal.
5. Menguji program. Setelah program
selesai ditulis, Anda harus mengujinya. Pengujian pertama adalah: apakah
program berhasil dikompilasi dengan baik? Pengujian berikutnya: apakah program
dapat menampilkan keluaran yang diinginkan?
Lebih
jauh lagi, Anda juga harus menguji program dengan banyak kasus lain. Sering
terjadi, suatu program berjalan baik untuk kasus A, B, C; tetapi menghasilkan sesuatu yang tidak diinginkan untuk
kasus X, Y, dan Z.
Langkah keempat dan kelima ini bisa dilakukan
berulang-ulang sampai program diyakini benar-benar berjalan sesuai yang
diharapkan.
6. Menulis
dokumentasi. Hal ini biasanya dilakukan bersamaan dengan menulis program,
artinya pada setiap baris program atau setiap beberapa baris program, Anda
menambahkan komentar yang menjelaskan kegunaan dari suatu pernyataan.
Dokumentasi ini kelihatannya sepele dan banyak
dilupakan orang, padahal fungsinya penting sekali. Di masa mendatang, apabila
Anda perlu melakukan perubahan atau perbaikan terhadap suatu program, Anda
akan merasakan pentingnya dokumentasi yang baik. Meskipun demikian, sebagian
besar contoh program di buku ini tidak menyertakan dokumentasi. Hal ini karena
dokumentasi dari program tersebut tidak lain adalah buku ini sendiri.
Dokumentasi yang dijadikan satu dalam program, berupa
komentar-komentar pendek, biasanya sudah cukup. Namun akan lebih baik jika Anda
juga menuliskannya dalam dokumen tersendiri kemudian mencetaknya di atas kertas
jika perlu. Saya memang tidak begitu menyarankan dokumentasi di atas kertas,
tetapi hal yang terpenting adalah menambahkan komentar-komentar singkat di
dalam program Anda. Mungkin sekarang Anda berpikir tidak ada gunanya, tetapi
percayalah nantinya Anda akan merasakan pentingnya hal ini.
7.
Merawat program. Langkah ini dilakukan setelah program selesai dibuat dan sudah
digunakan oleh pengguna Anda. Hal yang paling sering terjadi di sini adalah
munculnya bug yang sebelumnva tidak terdeteksi. Atau mungkin juga pengguna
ingin tambahan suatu fasilitas baru. Apabila hal-hal seperti ini terjadi, Anda
harus melakukan revisi terhadap program Anda.
Apa Itu Algoritma?
Dari materi subbab sebelumnya, Anda sudah
mengetahui di manakah posisi algoritma dalam dunia pemrograman komputer atau
lebih umumnya lagi dalam dunia komputer. Sekarang saya akan membahas algoritma
itu sendiri. Ada beberapa definisi algoritma, tetapi di sini saya menggunakan
acuan Microsoft Bookshelf:
Algoritma adalah urutan langkah berhingga untuk memecahkan masalah logika
atau matematika.'
Dalam kehidupan sehari-hari, sebenarnya Anda juga
menggunakan algoritma untuk melakukan sesuatu. Sebagai contoh, Anda ingin
menulis surat, maka Anda perlu melakukan beberapa langkah berikut:
1. Mempersiapkan
kertas dan amplop.
2. Mempersiapkan
alat tulis, seperti pena atau pensil.
3. Mulai
menulis.
4. Memasukkan
kertas ke dalam amplop.
5. Pergi
ke kantor pos untuk mengeposkan surat tersebut.
Langkah-langkah dari nomor 1 sampai dengan nomor 5
di atas itulah yang disebut dengan algoritma. Jadi sebenamya Anda sendiri juga
sudah menggunakan algoritma baik sadar maupun tidak sadar.
Dalam banyak kasus, algoritma yang Anda lakukan tidak selalu berurutan
seperti di atas. Kadang-kadang Anda harus memilih dua atau beberapa pilihan.
Sebagai contoh, jika Anda ingin makan, Anda harus menentukan akan makan di
rumah makan atau memasak sendiri. Jika Anda memilih untuk makan di rumah
makan, Anda akan menjalankan algoritma yang berbeda dengan jika Anda memilih
memasak sendiri. Dalam dunia algoritma, hal semacam ini sering disebut percabangan.
Dalam kasus lain lagi, Anda mungkin harus melakukan langkah-langkah
tertentu beberapa kali. Sebagai contoh, saat Anda menulis surat, sebelum me
masukkan kertas ke dalam amplop, mungkin Anda harus mengecek apakah surat
tersebut sudah benar atau belum. Jika belum benar, berarti Anda harus mempersiapkan
kertas baru dan menulis lagi. Demikian seterusnya sampai surat Anda sesuai
dengan yang diharapkan. Dalam dunia pemrograman, hal semacam ini sering disebut
pengulangan.
Contoh Algoritma
Berikut ini adalah contoh algoritma untuk memecahkan
masalah matematika. Misalkan Anda ingin menghitung luas lingkaran dari masukan
berupa jari-jari lingkaran. Rumus luas lingkaran adalah:
L = π.R2
Berikut ini adalah contoh algoritma untuk menghitung
luas lingkaran:
1. Masukkan
R.
2. Pi ← 3,14.
3.
L← Pi*R*R.
4. Tulis L
Perhatikan terdapat
tanda ← pada baris kedua dan ketiga. Tanda itu berarti
nilai di sebelah kanan diberikan pada operan di sebelah kiri.
Sebagai contoh, untuk baris kedua, nilai 3.14 diberikan pada variabel Pi.
Berikutnya, nilai Pi * R * R diberikan pada variabel L.
Baris pertama dari algoritma di atas
meminta masukkan dari pengguna berupa jari-jari lingkaran yang disimpan pada
variabel R. Pada baris kedua nilai π disimpan pada variabel dengan nama
Pi. Baris ketiga menghitung luas lingkaran dengan rumus π R2 atau yang dituliskan Pi * R * R. Luas lingkaran ini disimpan pada variabel L.
Baris terakhir menuliskan luas lingkaran tersebut.
Untuk
memudahkan memahami algoritma, biasanya orang menggambarkan suatu diagram alir
(flow charf).
Percabangan
Contoh berikutnya adalah algoritma untuk menuliskan nilai absolut dari
nilai yang dimasukkan pengguna. Definisi dari nilai absolut adalah sebagai
berikut:
│x│= x, jika x >= 0
│x│= -x, jika x < 0
Berikut ini adalah algoritma untuk menuliskan
nilai absolut dari masukan pengguna:
1. Masukkan x.
2. Jika (x < 0) maka kerjakan baris
3, jika tidak kerjakan baris 4.
3. x ← -x.
4. Tulis x.
Baris pertama meminta masukkan suatu
bilangan dari pengguna yang disimpan pada variabel x.
Baris kedua mengecek nilai variabel x
lebih kecil dari 0 atau tidak. Jika ya, yang dikerjakan adalah baris ketiga,
tetapi jika tidak yang dikerjakan adalah baris keempat.
Baris ketiga membuat nilai x menjadi
positif karena baris ini hanya dikerjakan jika nilai x lebih kecil dari 0.
Baris terakhir menuliskan nilai x yang
selalu positif.
Pengulangan
Berikut ini adalah
algoritma untuk menghitung rata-rata data yang dimasukkan pengguna:
1. Masukkan N.
2. i← l.
3. j ←
0.
4. Selama (i <= N) kerjakan
baris 4 sampai dengan 7.
5. Masukkan dt.
6. I ← i+l.
7. j ←j+dt
8. Rata ← j / N.
9. Tulis Rata.
Baris pertama meminta
pengguna memasukkan N, yaitu jumlah data.
Pada baris kedua,
variabel i, yang berguna sebagai pencacah banyaknya data yang telah dimasukkan
pengguna, diberi nilai 1.
Pada baris ketiga,
variabel j, yang digunakan untuk menyimpan hasil penjumlahan data, diberi
nilai 0.
Baris keempat
memberikan perintah untuk mengulangi baris keempat sampai dengan baris ketujuh
selama i kurang dari sama dengan N. Dengan kata lain, setelah i lebih besar
dari N, baris kedelapan yang dijalankan.
Baris kelima meminta masukkan data yang ke-i.
Baris keenam menambah variabel i dengan 1.
Perhatikan arti dari perintah i ←
i + 1 adalah nilai I ditambah dengan 1 kemudian hasilnya disimpan pada variabel
i kembali.
Baris ketujuh menambah
variabel j dengan data yang dimasukkan pengguna. Sebagaimana dijelaskan di
atas, variabel j digunakan untuk menyimpan hasil penjumlahan semua data, jadi
untuk setiap masukan data, nilai variabel j harus ditambah dengan dt.
Baris
kedelapan menghitung rata-rata dengan cara membagi hasil penjumlahan dengan
banyaknya data.
Baris terakhir
menuliskan rata-rata tersebut.
Catatan Akhir
Sekedar catatan akhir, algoritma sebenarnya digunakan
untuk membantu Anda dalam mengkonversikan suatu permasalahan ke dalam bahasa
komputer. Oleh karena itu, banyak pemrogram yang sudah berpengalaman tidak
pernah menuliskan algoritma di atas kertas lagi. Artinya dia menuliskan
algoritma itu di dalam kepalanya dan dia langsung memprogram berdasarkan
algoritma di kepalanya itu. Pada bab-bab akhir dari buku ini, Anda akan jarang
menemukan penulisan algoritma secara eksplisit seperti di atas karena saya
menganggap Anda sudah bisa menuliskannya di dalam kepala.
Pada bab-bab berikutnya, saya tidak akan menggambar
diagram alir lagi. Apabila Anda kesulitan mempelajari algoritma yang
disajikan, Anda dapat menggambarnya sendiri di atas kertas.
Latihan
1. Tulislah algoritma untuk mencari luas
segitiga jika masukan dari pengguna adalah alas clan tingginya.
Petunjuk: Luas segitiga dapat dihitung dengan rumus:
L = 1/2.a.t
dengan a: alas segitiga dan t: tinggi
segitiga.
2. Tulislah algoritma untuk mencari sisi miring
dari suatu segitiga siku-siku jika diketahui panjang dua sisi yang membentuk
sudut siku-siku.
Petunjuk: Sisi miring segitiga siku-siku dapat dihitung dengan rumus Pythagoras:
3. Tulislah algoritma untuk meminta masukan dua
bilangan dari pengguna kemudian
menampilkan bilangan terbesar di antara kedua bilangan tersebut.
4. Tulislah
algoritma untuk meminta masukan tiga bilangan dari pengguna kemudian
menampilkan bilangan terkecil di antara ketiga bilangan tersebut.
5. Tulislah algoritma untuk menampilkan teks
"Turbo Pascal" sebanyak 100 kali.
6. Tulislah algoritma untuk mencari modus dari
sekumpulan data yang dimasukkan pengguna.
Petunjuk:
Modus adalah data yang paling sering muncul.